第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

1 / 63
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功