D触发器的逻辑功能D触发器的逻辑符号 把CP有效沿到来之前电路的状态称为现态,用QnQnQn表示。 把CP有效沿到来之后,电路所进入的新状态称为次态,用Qn1Q{n1}Qn1表示。特性表 D QnQnQn Qn1Q{n1}Qn1 0hr0hr0hr0hr1hr0hr1hr0hr1hr1hr1hr1特性方程 Qn1DQ{n1}DQn1D状态图 有清零输入和预置输入的D触发器 由于直接置1和清零时跟CP信号无关,所以称置1、清零操作是异步置1和异步清零。 直接置1和直接清零的过程如下: (1)当SD0bar{S}{D}0SD0,RD1bar{R}{D}1RD1时,使得Y11Y{1}1Y11,SY1CPRDCPbar{S}overline{Y{1}cdotCPcdotbar{R}{D}}overline{CP}SY1CPRDCP,RSCPY41quadbar{R}overline{bar{S}cdotCPcdotY{4}}1RSCPY41,于是Q1Q1Q1,Q0bar{Q}0Q0,即将输出Q直接置1。 (2)当SD1bar{S}{mathrm{D}}1SD1,RD0bar{R}{mathrm{D}}0RD0时,使得S1bar{S}1S1,于是Q0Q0Q0,Q1bar{Q}1Q1,即将输出Q直接清零。 有同步清零端的D触发器 所谓同步清零是指在清零输入信号有效,并且CP的有效边沿(如上升沿)到来时,才能将触发器清零。 (a)实现同步清零的方案之一 (b)实现同步清零的方案之二 有使能端的D触发器 功能:En0,Q保持不变。En1,在CP作用下,QD。 Qn1CEQnCEDQ{n1}overline{CE}cdotQ{n}CEcdotDQn1CEQnCED 逻辑符号 D3触发器及其应用电路的VerilogHDL建模 例1。试对图所示的带有异步清零和异步置位的边沿D触发器进行建模。 有异步输入端的D触发器版本1:moduleSetRstDFF(Q,Q,D,CP,Rd,Sd);outputQ,Q;inputD,CP,Rd,Sd;wireY1,Y2,Y3,Y4,Y5,Y6;assign5Y1(SdY2Y4);assign5Y2(RdCPY1);assign5Y3(CPY2Y4);assign5Y4(RdY3D);assign5Y5(SdY2Y6);assign5Y6(RdY3Y5);assignQY5;assignQY6;endmodule复制代码 版本1:根据该图使用连续赋值语句来建模,在assign语句中的5表示给每个与非门加5个单位时间的传输延迟。版本2moduleSetRstDFFbh(Q,Q,D,CP,Rd,Sd);outputregQ;outputQ;inputD,CP,Rd,Sd;assignQQ;always(posedgeCPornegedgeSdornegedgeRd)if(Sd)等同于:if(Sd0)Q1b1;elseif(Rd)Q1b0;elseQD;endmodule复制代码 版本2的特点: 采用功能描述风格,使用always和ifelse对输出变量赋值。 negedgeSd是一个异步事件,它与if(Sd)必须匹配,negedgeRd是另一个异步事件,它与if(Rd)必须匹配,这是语法规定。当Sd为0时,将输出Q置1;当Sd1且Rd0时,将输出Q置0;当Sd和Rd均不为0,且时钟CP的上升沿到来时,将输入D传给输出Q。 注意,如果置1事件、置0事件和时钟事件同时发生,则置1事件的优先级别最高、置0事件的次之,时钟事件的优先级最低。 例2具有同步清零功能的上升沿D触发器。 moduleSyncrstDFF(Q,D,CP,Rd);outputregQ;inputD,CP,Rd;always(posedgeCP)if(!Rd)alsoas(Rd)Q0;elseQD;endmodule复制代码 例4试用功能描述风格对图所示电路进行建模(2分频电路),并给出仿真结果。 解:(1)设计块:使用always和ifelse语句对输出变量赋值,其代码如下。 timescale1ns1nsmodule2Divider(Q,CP,Rd);outputregQ;inputCP,Rd;wireD;assignDQ;always(posedgeCPornegedgeRd)if(Rd)Q1b0;elseQD;endmodule复制代码 (2)激励块:给输入变量赋值。timescale1ns1nsmoduletest2Divider();regCP,Rd;wireQ;调用(例化)设计块2DividerU1(。CP(CP),。Q(Q),。Rd(Rd));initialbegin产生复位信号RdRd1b0;Rd20001b1;8000endalwaysbegin产生时钟信号CPCP1b0;CP5001b1;500;endendmodule复制代码 (3)仿真波形(用ModelSim) 由图可知,时钟CP的周期为1000ns,在2000ns之前,清零信号Rd有效,输出Q被清零。在此之后,Rd1,在2500ns时,CP上升沿到来,Q1;到下一个CP上升沿(3500ns)时,Q0,再到下一个CP上升沿(4500ns)时,Q1,,如此重复,直到8000ns时,系统任务stop被执行,仿真停止。 总之,在不考虑清零信号Rd的作用时,每当CP上升沿到来时,触发器状态Q翻转一次。输出信号Q的频率正好是CP频率的二分之一,故称该电路为2分频电路。所谓分频电路,是指可将输入的高频信号变为低频信号输出的电路。 例5试对图所示电路进行建模,并给出仿真结果。 4位异步二进制计数器逻辑图 解:(1)设计块:采用结构描述风格的代码如下。编写了两个模块,这两个模块可以放在一个文件中,文件名为Ripplecounter。v。 第一个主模块Ripplecounter作为设计的顶层,它实例引用分频器子模块2Divider1共4次,第二个分频器子模块2Divider1作为设计的底层。timescale1ns1ns设计块:Ripplecounter。vmoduleRipplecounter(Q,CP,CLR);output〔3:0〕Q;inputCP,CLR;实例引用分频器模块2Divider12Divider1FF0(Q〔0〕,CP,CLR);注意,引用时端口的排列顺序位置关联2Divider1FF1(Q〔1〕,Q〔0〕,CLR);2Divider1FF2(Q〔2〕,Q〔1〕,CLR);2Divider1FF3(Q〔3〕,Q〔2〕,CLR);endmodule复制代码 设计的底层模块2Divider1分频器子模块module2Divider1(Q,CP,Rd);outputregQ;inputCP,Rd;always(posedgeCPornegedgeRd)if(!Rd)Q1b0;elseQQ;endmodule复制代码 (2)激励块:给输入变量(CLR和CP)赋值。激励块:testRipplecounter。vmoduletestRipplecounter();regCLR,CP;wire〔3:0〕Q;Ripplecounteri1(。CLR(CLR),。CP(CP),。Q(Q));initialbeginCLRCLR1b0;CLR201b1;400endalwaysbeginCPCP1b0;CP101b1;10;endendmodule复制代码 (3)仿真波形:如下图所示。 由图可知,时钟CP的周期为20ns。开始时,清零信号CLR有效(020ns),输出Q被清零。20ns之后,CLR一直为高电平,在30ns时,CP上升沿到来,Q0001;到下一个CP上升沿(50ns)时,Q0010,再到下一个CP上升沿(70ns)时,Q0011,,如此重复,到310ns时,Q1111,到330ns时,Q0000,,直到系统任务stop被执行,仿真停止。 电路首先在CLR的作用下,输出被清零。此后当CLR1时,每当CP上升沿到来时,电路状态Q就在原来二进制值的基础上增加1,即符合二进制递增计数的规律,直到计数值为1111时,再来一个CP上升沿,计数值回到0000,重新开始计数。故称该电路为4位二进制递增计数器(Ripplecounter:纹波计数器)。 可见,计数器实际上是对时钟脉冲进行计数,每到来一个时钟脉冲触发沿,计数器改变一次状态。 参考文献:VerilogHDL与FPGA数字系统设计,罗杰,机械工业出版社,2015年04月VerilogHDL与CPLDFPGA项目开发教程(第2版),聂章龙,机械工业出版社,2015年12月VerilogHDL数字设计与综合(第2版),SamirPalnitkar著,夏宇闻等译,电子工业出版社,2015年08月VerilogHDL入门(第3版),J。BHASKER著夏宇闻甘伟译,北京航空航天大学出版社,2019年03月