求verilogHDL语言大神,解释一下程序意思,最好能每行注释一下,感激不尽。

求verilogHDL语言大神,解释一下程序意思,最好能每行注释一下,感激不尽。,第1张

module HDLC(RXD,RXCLK,RXSET,TXCLK,TXD,TXDS) //module 头,verilog 95风格

input RXD//输入信号

input RXCLK//输入时钟

input RXSET//输入的复位信号

output[7:0]TXD//输出的数据,8bit

reg [7:0]TXD//输出寄存器

output[2:0]TXDS//输出信号

reg [2:0]TXDS//输出寄存

output TXCLK//输出的时钟

regTXCLK //输出时钟寄存

reg RXD_D1//输入的数据寄存器。单比特

reg RXD_D2

reg RXD_D3

reg RXD_D4

reg RXD_D5

reg RXD_D6

reg RXD_D7

reg RXD_D8//输入的数据寄存器。单比特

//在接收rxclk下,每个时候域接收rxd数据,寄存一级

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D1<=1'b0

else RXD_D1<=RXD

//在接收rxclk下,每个时候域接收rxd数据,寄存二级,即打两拍

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D2<=1'b0

else RXD_D2<=RXD_D1

//寄存三级,即打三拍

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D3<=1'b0

else RXD_D3<=RXD_D2

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D4<=1'b0

else RXD_D4<=RXD_D3

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D5<=1'b0

else RXD_D5<=RXD_D4

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D6<=1'b0

else RXD_D6<=RXD_D5

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D7<=1'b0

else RXD_D7<=RXD_D6

//寄存8级,即打8拍,

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

RXD_D8<=1'b0

else RXD_D8<=RXD_D7

///////////////////////////////////////////////////////////////////

////////////////////search for 01111110 indacation/////////////////

///////////////////////////////////////////////////////////////////

reg [2:0]l_cs,l_ns//定义2个3bit的状态信号,当前态l_cs,下一个状态l_ns

//3bit的原因在于需要选择的数据为0~7,只需3bit

parameter s_hunt=3'd0,s0=3'd1,s1=3'd2,s2=3'd3,s3=3'd4,s4=3'd5,s5=3'd6,s6=3'd7

//定义初始态s_hunt=0’

//否则选择将下一个状态l_ns赋给当前态l_cs

always @(posedge RXCLK or negedge RXSET)

if(!RXSET)

l_cs<=s_hunt

else l_cs<=l_ns

//下面的状态机用于寻找序列"0111111"

//如果找到当前的要寻找的输入数,则跳入到下一个状态,否则跳到s0态,开始新一轮的寻找,

//通过这种方法寻找到所需要的序列“01111110”

always @(l_cs or RXD)

case(l_cs)

s_hunt:begin

if(RXD==1'b0)

l_ns=s0

else l_ns=s_idle

end

s0:begin

if(RXD==1'b1)

l_ns=s1

else l_ns=s0

end

s1:begin

if(RXD==1'b1)

l_ns=s2

else l_ns=s0

end

s2:begin

if(RXD==1'b1)

l_ns=s3

else l_ns=s0

end

s3:begin

if(RXD==1'b1)

l_ns=s4

else l_ns=s0

end

s4:begin

if(RXD==1'b1)

l_ns=s5

else l_ns=s0

end

s5:begin

if(RXD==1'b1)

l_ns=s6

else l_ns=s0

end

s6:l_ns=s_idle

endcase

//定义了寄存器SE_ind,

//该部分逻辑为组合逻辑,当找到所需要找的序列“01111110”时,输出SE_ind为1,否则为0;

//该信号相当于一个指示信号。是否找到所需的序列

reg SE_ind

always @(l_cs or RXD)

if(l_cs==s6 &&RXD==1'b0)

SE_ind=1'b1

else SE_ind=1'b0

module gen_divd(reset,clkin,clkout)

input reset,clkin

output clkout

parameter divdWIDTH=1 //参数定义

parameter divdFACTOR=1

reg clkout

reg [divdWIDTH:0] cnt //2位计数器,最大记到3

always @ (posedge reset or posedge clkin)

if(reset) // 高电平复位

begin

cnt<=0//计数器清零

clkout<=0//输出时钟清零

end

else

begin

cnt<=cnt+1'b1//计数开始,来一个上升沿记一次数

if(cnt==(divdFACTOR-1)) //当cnt等于1

begin

cnt<=0//计数器清零

clkout<=~clkout //输出时钟翻转一次,就是简单的2分频

//假设开始clkout时低电平,当cnt计数到1(clkin刚好一个周期)时,clkout就翻转,变成高电平,clkout一个周期,相当于clkin的2个周期,实现2分频

end

end

endmodule

module count24(Rd,EN,CLK,Qh,Ql,C)

input Rd,EN,CLK

output [3:0]Qh,Ql----------------------------------输出,Qh代表十位,Qi代表个位

output C--------------------------------------------进位标志,当Qh与QI总和达到24时,C置1

reg [3:0]Qh,Ql

reg C-------------------------------------------------声明QhQIC为寄存器变量,说明应用于时序逻辑

initial

begin

Qh=4'd0Ql=4'd0C=0

end ------------------------------从initial到end表示初始化赋值,这段语句不会被综合,用于仿真

always @ (posedge CLK)

begin

if(EN==1)------------------------使能,当EN为高电平时才执行下面的程序

begin

if(Rd==0)

begin

Qh=4'd0Ql=4'd0C=0--------------当Rd为0时,QhQIC设置为0,说明Rd是复位信号

end

else if(Qh<4'd2&&Ql<4'd9)

Ql=Ql+1----------------------------------当Qh小于2,QI小于9时,时钟上升沿到来时QI加1

else if(Qh<4'd2&&Ql==4'd9)

begin

Qh=Qh+1Ql=4'd0------------当Qh小于2,且QI已等于9,Qh十位进位加1,QI恢复0

end

else if(Qh==4'd2&&Ql<4'd3)

Ql=Ql+1---------------------------当Qh等于2,QI小于3,QI加1

else -------------------------------------若前面条件不满足,将QhQIC均设置为0

begin

Qh=4'd0Ql=4'd0C=0

end

if(Qh==4'd2&&Ql==4'd3) ----------------若为23,C进1

C=1

end

end

endmodule


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11299246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存