您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第11讲-时序逻辑电路设计
第11讲时序逻辑电路设计主要内容◆触发器◆锁存器◆寄存器和移位寄存器◆存储器◆计数器◆分频器1.触发器触发器是逻辑电路中广泛采用的一种存储信息的功能部件。触发器的种类很多,有R-S触发器、J-K触发器、D触发器、T触发器等,其中D触发器是最基本的也是应用最普遍的。本讲将给出不同类型D触发器的建模程序。因为触发器是边沿敏感的存储器件,所以在VerilogHDL建模中一般是在always语句的敏感列表中对时钟信号使用posedge或negedge。(1)上升沿触发器D触发器是一种时钟控制触发器,只有在时钟上升沿时才把输入送到输出,程序如下:moduledff(data,clk,q);inputdata,clk;outputq;regq;always@(posedgeclk)//边沿敏感q=data;//时钟上升沿时将数据输出endmodule(2)带异步复位端的上升沿触发器下图所示的D触发器有一个异步复位端reset,当复位信号reset变为0时就执行复位而不管当前时钟信号如何,即复位行为与时钟不是同步的,所以称为异步复位。此触发器的建模程序如下:moduledff_async_rst(data,clk,reset,q);inputdata,clk,reset;outputq;regq;always@(posedgeclkornegedgereset)if(~reset)q=1'b0;//复位elseq=data;//数据输出endmodule(3)带异步置位端的上升沿触发器下图所示的D触发器有一个异步置位端preset,当预置信号preset变为0时就把输出q置为1。此触发器的建模程序如下:moduledff_async_pre(data,clk,preset,q);inputdata,clk,preset;outputq;regq;always@(posedgeclkornegedgepreset)if(~preset)q=1'b1;//预置信号将给输出赋一个固定的值elseq=data;//数据输出endmodule(4)带异步复位端和异步置位端的上升沿触发器下图所示的D触发器既有异步复位端reset也有异步置位端preset,所以此触发器既能异步复位也能异步置位。此触发器的建模程序如下:moduledff_async(reset,preset,data,q,clk);inputclk;inputreset,preset,data;outputq;regq;always@(posedgeclkornegedgeresetorposedgepreset)if(~reset)q=1'b0;//复位elseif(preset)q=1'b1;//置位elseq=data;//数据输出endmodule(5)带同步复位端的上升沿触发器下图的D触发器有一个同步复位端,其中data和q分别是数据输入输出端,clk是时钟输入端,reset是同步复位端。和异步复位不同的是,同步复位行为是在时钟信号的控制下进行的,即便某个时刻复位信号已经生效,但是必须等到下一个时钟上升沿时才能执行复位,即复位行为与时钟同步。此触发器的建模程序如下:moduledff_sync_rst(data,clk,reset,q);inputdata,clk,reset;outputq;regq;always@(posedgeclk)//注意比较此处与异步复位的不同if(~reset)q=1'b0;//复位elseq=data;//数据输出endmodule(6)带同步置位端的上升沿触发器下图所示的D触发器有一个同步置位端preset。当置位端preset为0时,将在下一个时钟上升沿把输出置为1。此触发器的建模程序如下:moduledff_sync_pre(data,clk,preset,q);inputdata,clk,preset;outputq;regq;always@(posedgeclk)//时钟同步if(~preset)q=1'b1;//置位elseq=data;//数据输出endmodule(7)带异步复位端和输出使能端的上升沿触发器下图所示的D触发器有一个异步复位端reset和一个输出使能端en。输出使能端的作用是只有当它有效时才能输出数据。此触发器的建模程序如下:moduledff_ck_en(data,clk,reset,en,q);inputdata,clk,reset,en;outputq;regq;always@(posedgeclkornegedgereset)if(~reset)q=1'b0;//复位elseif(en)q=data;//使能端控制的数据输出endmodule思考:如何依据JK触发器的工作原理,或JK触发器的真值表,编写JK触发器的verilog程序?jkrssetclkq**LH*0**HL*100HH不变01HH010HH111HH取反【例7.29】带异步清0/异步置1的JK触发器modulejkff_rs(clk,j,k,q,rs,set);inputclk,j,k,set,rs;outputregq;always@(posedgeclk,negedgers,negedgeset)beginif(!rs)q=1'b0;elseif(!set)q=1'b1;elsecase({j,k})2'b00:q=q;2'b01:q=1'b0;2'b10:q=1'b1;2'b11:q=~q;default:q=1'bx;endcaseendendmodule2锁存器和触发器一样,锁存器也是一种具有存储功能的电路,二者不同之处在于,锁存器是电平敏感的存储器件,所以在always的敏感列表中不会使用posedge和negedge。本讲将给出多个不同类型的锁存器的实例。(1)带使能端的锁存器下图所示,该锁存器有一个数据输入端data、一个数据输出端y和一个使能输入端enable。使能端的作用是控制输入,只有当使能端有效时才能把数据输入到锁存器。此锁存器的建模程序如下:moduled_latch(enable,data,y);inputenable,data;outputy;regy;always@(enableordata)//电平敏感if(enable)y=data;//受使能端控制的锁存行为elseq='bz;endmodule(2)可异步选通数据的锁存器下图所示的锁存器除了数据输入端data、数据输出端q和输入使能端enable之外,还有一个异步数据选通端gate。gate端用于选通输入数据,当enable为1时将把输入数据和gate做与操作之后输出,所以若gate为1,输出的就是输入数据,否则输出就是0。此锁存器的建模程序如下:moduled_latch_e(enable,gate,data,q);inputenable,gate,data;outputq;regq;always@(enableordataorgate)if(enable)q=(data&gate);//只有当选通信号gate也为1时才能把数据data输出至qelseq='bz;endmodule(3)可选通使能端的锁存器下图所示的锁存器也有一个选通端gate,但是此gate的作用不是用于选通数据而是用于选通使能端enable。只有当enable和gate同时为1时才把输入端的数据传送倒输出端。此锁存器的建模程序如下:moduled_latch_en(enable,gate,d,q);inputenable,gate,d;outputq;regq;always@(enableordorgate)if(enable&gate)q=d;//只有选通信号gate和使能信号enable//都为1时才输出数据elseq='bz;endmodule(4)带异步复位端的锁存器下图所示,data和q分别是锁存器的数据输入输出端,enable和reset分别是使能端和异步复位端。当复位信号reset为0时,输入端q被置0。其程序如下:moduled_latch_rst(reset,enable,data,q);inputreset,enable,data;outputq;regq;always@(resetorenableordata)if(~reset)q=1'b0;//复位elseif(enable)q=data;//使能信号为1时输出数据elseq='bz;endmodule问题:8位数据锁存器的专用芯片名称是?思考:如何用VerilogHDL语言实现74LS373?提示:先看看74LS373的芯片资料(百度)输入控制信号有:三态允许控制端OE(高电平有效),锁存允许端LE(低电平有效)真值表如下:【例7.32】8位数据锁存器(74LS373)modulettl373(le,oe,q,d);inputle,oe;input[7:0]d;outputreg[7:0]q;always@*//或写为always@(le,oe,d)beginif(~oe&le)q=d;//或写为if((!oe)&&(le))elseif(~oe&~le)q=q;elseq=8'bz;endendmodule3寄存器寄存器是计算机和其他数字系统中用来存储代码或数据的逻辑部件。它的主要组成部分是触发器。一个触发器能存储1位二进制代码,所以要存储n位二进制代码的寄存器就需要用n个触发器组成。一个4位的集成寄存器74LS175的逻辑电路图和引脚图分别如图8.7.1(a)、(b)所示。在往寄存器中寄存数据或代码之前,必须先将寄存器清零,否则有可能出错。其中,1D~4D是数据输入端,在CP脉冲上升沿作用下,1D~4D端的数据被并行地存入寄存器。输出数据可以并行从1Q~4Q端引出,也可以并行从1Q~4Q端引出反码输出。3寄存器:RD是异步清零控制端寄存器:74LS175的功能如表8.7.1所示。思考:如何用VerilogHDL语言实现74LS175?74LS175:modulereg74LS175(d,cp,reset,q);inputcp,rd;input[3:0]d;output[3:0]q;regq;always@(posedgecpornegedgerd)if(~rd)q=4'b0;//复位elseq=d;//数据输出endmodule4移位寄存器移位寄存器是寄存器的一种,除了可以存储数据之外,还可以把内部的数据进行移位。移位是指该寄存器内的数据可以在移位脉冲(时钟信号)的作用下依次左移或右移。因此,移位寄存器不但可以用来存储数据,还可以用来实现数据的串行-并行转换、数值运算以及数据处理等。例:8位移位寄存器,串入并出moduleshifter_latch(din,clk,reset,en,dout);inputdin,clk,reset,en;output[7:0]dout;reg[7:0]dout_temp;reg[7:0]dout;always@(posedgeclk)beginif(reset)dout=8'b0;//同步清0,高电平有效elsebegindout=dout1;//输出信号左移一位dout[0]=din;//输入信号补充到输出信号的最低位endendendmodule例:8位带锁存的移位寄存器,串入并出moduleshifter_latch(din,clk,reset,en,dout);inputdin,clk,reset,en;output[7:0]dout;reg[7:0]dout_temp;reg[7:0]dout;always@(posedgeclk)beginif(reset)dout=8'b0;//同步清0,高电平有效elseif(en)dout=dout_temp;//输出8位信号elsebegindout_temp=dout_temp1;//输出信号左移一位d
本文标题:第11讲-时序逻辑电路设计
链接地址:https://www.777doc.com/doc-1879817 .html