第11讲 时序逻辑电路设计_第1页
第11讲 时序逻辑电路设计_第2页
第11讲 时序逻辑电路设计_第3页
第11讲 时序逻辑电路设计_第4页
第11讲 时序逻辑电路设计_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第11讲讲 时序逻辑电路设计时序逻辑电路设计 主要主要 内容内容 触发器是逻辑电路中广泛采用的一种存储信息的功能触发器是逻辑电路中广泛采用的一种存储信息的功能 部件。触发器的种类很多,有部件。触发器的种类很多,有R-S触发器、触发器、J-K触发器触发器 、D触发器、触发器、T触发器等,其中触发器等,其中D触发器是最基本的也触发器是最基本的也 是应用最普遍的。是应用最普遍的。本讲将给出不同类型本讲将给出不同类型D触发器的建触发器的建 模程序。模程序。 因为触发器是因为触发器是边沿敏感边沿敏感的存储器件,所以在的存储器件,所以在Verilog HDL建模中一般是在建模中一般是在always语句的

2、敏感列表中对时钟语句的敏感列表中对时钟 信号使用信号使用posedge或或negedge。 (1)上升沿触发器 D触发器是一种时钟控制触发器,只有在时钟上升沿时才把输触发器是一种时钟控制触发器,只有在时钟上升沿时才把输 入送到输出,程序如下:入送到输出,程序如下: 下图所示的下图所示的D触发器有一个触发器有一个异步复位端异步复位端reset,当复当复 位信号位信号reset变为变为0时就执行复位而不管当前时钟信时就执行复位而不管当前时钟信 号如何,即号如何,即复位行为与时钟不是同步的复位行为与时钟不是同步的,所以称为所以称为 异步复位。异步复位。 下图所示的下图所示的D触发器有一个异步置位端触

3、发器有一个异步置位端preset,当,当 预置信号预置信号preset变为变为0时就把输出时就把输出q置为置为1。 (4) 带异步复位端和异步置位端的上升沿触发器带异步复位端和异步置位端的上升沿触发器 下图所示的下图所示的D触发器既有异步复位端触发器既有异步复位端reset也有异步置也有异步置 位端位端preset,所以此触发器既能异步复位也能异步置,所以此触发器既能异步复位也能异步置 位。位。 此触发器的建模程序如下:此触发器的建模程序如下: module dff_async (reset, preset, data, q, clk); input clk; input reset, pre

4、set, data; output q; reg q; always (posedge clk or negedge reset or posedge preset) if (reset) q = 1b0; /复位复位 else if (preset) q = 1b1; /置位置位 else q = data; /数据输出数据输出 endmodule 下图的下图的D触发器有一个同步复位端,其中触发器有一个同步复位端,其中data和和q分别是数分别是数 据输入输出端,据输入输出端,clk是时钟输入端,是时钟输入端,reset是同步复位端。和是同步复位端。和 异步复位不同的是,同步复位行为是在时钟

5、信号的控制下异步复位不同的是,同步复位行为是在时钟信号的控制下 进行的,即便某个时刻复位信号已经生效,但是必须等到进行的,即便某个时刻复位信号已经生效,但是必须等到 下一个时钟上升沿时才能执行复位,即复位行为与时钟同下一个时钟上升沿时才能执行复位,即复位行为与时钟同 步。步。 此触发器的建模程序如下:此触发器的建模程序如下: module dff_sync_rst (data, clk, reset, q); input data, clk, reset; output q; reg q; always (posedge clk) /注意比较此处与异步复位的不同注意比较此处与异步复位的不同 i

6、f (reset) q = 1b0; /复位复位 else q = data; /数据输出数据输出 endmodule (6) 带同步置位端的上升沿触发器带同步置位端的上升沿触发器 下图所示的下图所示的D触发器有一个同步置位端触发器有一个同步置位端preset。当。当 置位端置位端preset为为0时,将在下一个时钟上升沿把输出时,将在下一个时钟上升沿把输出 置为置为1。 (7)带异步复位端和输出使能端的上升沿触发器)带异步复位端和输出使能端的上升沿触发器 下图所示的下图所示的D触发器有一个异步复位端触发器有一个异步复位端reset和一个和一个 输出使能端输出使能端en。输出使能端的作用是只有

7、当它有效。输出使能端的作用是只有当它有效 时才能输出数据。时才能输出数据。 思考:思考: 如何依据如何依据JK触发器的工作原理触发器的工作原理 , 或或 JK触发器的真值表,触发器的真值表, 编写编写JK触发器的触发器的verilog程序?程序? jkrsset clkq *LH*0 *HL*1 00HH不变 01HH0 10HH1 11HH取反 【例例7.29】 带异步清带异步清0/异步置异步置1的的JK触发器触发器 module jkff_rs(clk,j,k,q,rs,set); input clk,j,k,set,rs; output reg q; always (posedge cl

8、k, negedge rs, negedge set) begin if(!rs) q=1b0; else if(!set) q=1b1; else case(j,k) 2b00:q=q; 2b01:q=1b0; 2b10:q=1b1; 2b11:q=q; default:q=1bx; endcase end endmodule 2 锁存器锁存器 和触发器一样,锁存器也是一种具有存储功能的电和触发器一样,锁存器也是一种具有存储功能的电 路,二者不同之处在于,路,二者不同之处在于,锁存器是电平敏感的存储锁存器是电平敏感的存储 器件器件,所以在,所以在always的敏感列表中不会使用的敏感列表中不

9、会使用 posedge和和negedge。 本讲将给出多个不同类型的锁存器的实例。本讲将给出多个不同类型的锁存器的实例。 (1) 带使能端的锁存器带使能端的锁存器 下图所示,该锁存器有一个数据输入端下图所示,该锁存器有一个数据输入端data、一个、一个 数据输出端数据输出端y和一个使能输入端和一个使能输入端enable。使能端的。使能端的 作用是控制输入,只有当使能端有效时才能把数据作用是控制输入,只有当使能端有效时才能把数据 输入到锁存器。输入到锁存器。 此锁存器的建模程序如下:此锁存器的建模程序如下: module d_latch (enable, data, y); input enab

10、le, data; output y; reg y; always (enable or data) /电平敏感电平敏感 if (enable) y = data; /受使能端控制的锁存行为受使能端控制的锁存行为 else q=bz; endmodule (2)可异步选通数据的锁存器 下图所示的锁存器除了数据输入端下图所示的锁存器除了数据输入端data、数据输出、数据输出 端端q和输入使能端和输入使能端enable之外,还有一个异步数据之外,还有一个异步数据 选通端选通端gate。gate端用于选通输入数据,当端用于选通输入数据,当enable 为为1时将把输入数据和时将把输入数据和gate做

11、与操作之后输出,所做与操作之后输出,所 以若以若gate为为1,输出的就是输入数据,否则输出就,输出的就是输入数据,否则输出就 是是0。 此锁存器的建模程序如下:此锁存器的建模程序如下: module d_latch_e(enable, gate, data, q); input enable, gate, data; output q; reg q; always (enable or data or gate) if (enable) q = (data /只有当选通信号只有当选通信号gate也为也为1时才能把数据时才能把数据data输出至输出至q else q=bz; endmodule

12、 下图所示的锁存器也有一个选通端下图所示的锁存器也有一个选通端gate,但是此,但是此 gate的作用不是用于选通数据而是用于选通使能端的作用不是用于选通数据而是用于选通使能端 enable。只有当。只有当enable和和gate同时为同时为1时才把输入端时才把输入端 的数据传送倒输出端。的数据传送倒输出端。 此锁存器的建模程序如下:此锁存器的建模程序如下: module d_latch_en(enable, gate, d, q); input enable, gate, d; output q; reg q; always (enable or d or gate) if (enable

13、/只有选通信号只有选通信号gate和使能信号和使能信号enable /都为都为1时才输出数据时才输出数据 else q=bz; endmodule (4) 带异步复位端的锁存器 下图所示,下图所示,data和和q分别是锁存器的数据输入输出分别是锁存器的数据输入输出 端,端,enable和和reset分别是使能端和异步复位端。当分别是使能端和异步复位端。当 复位信号复位信号reset为为0时,输入端时,输入端q被置被置0。 其程序如下:其程序如下: module d_latch_rst (reset, enable, data, q); input reset, enable, data; ou

14、tput q; reg q; always (reset or enable or data) if (reset) q = 1b0; /复位复位 else if (enable) q = data; /使能信号为使能信号为1时输出数据时输出数据 else q=bz; endmodule 问题:问题:8位数据锁存器的专用芯片名称是?位数据锁存器的专用芯片名称是? 思考:如何用思考:如何用VerilogHDL语言实现语言实现74LS373? 提示:先看看提示:先看看74LS373的芯片资料(百度)的芯片资料(百度) 输入控制信号有:三态允许控制端 OE(高电平有效 ) ,锁存允许端 LE (低电

15、平有效) 真值表如下: 【例例7.32】 8位数据锁存器(位数据锁存器(74LS373) module ttl373(le,oe,q,d); input le,oe; input7:0 d; output reg7:0 q; always * /或写为或写为always (le,oe,d) begin if(oe /或写为或写为if(!oe) else q=8bz; end endmodule 3寄存器 3寄存器: 寄存器: 74LS175的功能如表8.7.1所示。 思考:如何用思考:如何用VerilogHDL语言实现语言实现74LS175? 74LS175: 74LS175 4 移位寄存器移

16、位寄存器 移位寄存器是寄存器的一种,除了可以存储数据之移位寄存器是寄存器的一种,除了可以存储数据之 外,还可以把内部的数据进行移位。外,还可以把内部的数据进行移位。 移位移位是指该寄存器内的数据可以在是指该寄存器内的数据可以在移位脉冲移位脉冲(时钟(时钟 信号)的作用下依次左移或右移。信号)的作用下依次左移或右移。 因此,移位寄存器不但可以用来因此,移位寄存器不但可以用来存储数据存储数据,还可以,还可以 用来实现数据的用来实现数据的串行串行-并行转换并行转换、数值运算数值运算以及数以及数 据处理等。据处理等。 例:例:8位移位寄存器,串入并出位移位寄存器,串入并出 module shifter

17、_latch(din,clk,reset,en,dout); input din,clk,reset,en;output7:0 dout; reg7:0 dout_temp; reg7:0 dout; always (posedge clk) begin if (reset) dout=8b0; /同步清同步清0,高电平有效,高电平有效 else begin dout = dout 1; /输出信号左移一位输出信号左移一位 dout0 = din; /输入信号补充到输出信号的最低位输入信号补充到输出信号的最低位 end end endmodule 例:例:8位带锁存的移位寄存器,串入并出位带锁

18、存的移位寄存器,串入并出 module shifter_latch(din,clk,reset,en,dout); input din,clk,reset,en;output7:0 dout; reg7:0 dout_temp; reg7:0 dout; always (posedge clk) begin if (reset) dout=8b0; /同步清同步清0,高电平有效,高电平有效 else if(en) dout=dout_temp; /输出输出8位信号位信号 else begin dout_temp = dout_temp 1; /输出信号左移一位输出信号左移一位 dout_tem

19、p0 = din; /输入信号补充到输出信号的最低位输入信号补充到输出信号的最低位 end end endmodule FIFO(First In First Out)是一种可以实现数是一种可以实现数 据据先入先出先入先出的存储器件。的存储器件。FIFO就像一个单向管道就像一个单向管道 ,数据只能按固定的方向从管道一头进来,再按相,数据只能按固定的方向从管道一头进来,再按相 同的顺序从管道另一头出去,最先进来的数据必定同的顺序从管道另一头出去,最先进来的数据必定 是最先出去。是最先出去。FIFO被普遍用作数据缓冲器。被普遍用作数据缓冲器。 FIFO的的基本单元是寄存器基本单元是寄存器,作为存储

20、器件,作为存储器件,FIFO 的的存储能力存储能力是由其内部定义的存储是由其内部定义的存储寄存器的数量寄存器的数量决决 定的。定的。 5.存储器(存储器(FIFO) FIFO的工作原理的工作原理 下面以长度为下面以长度为8的的FIFO为例来说明其工作原理。为例来说明其工作原理。 上图,上图,A、B、C、D表示被处理的数据,表示被处理的数据,1、2、 38表示表示FIFO的的8个存储单元,每个寄存器单元个存储单元,每个寄存器单元 可以存储一个数据,所以寄存器单元越多,可以存储一个数据,所以寄存器单元越多,FIFO 的存储能力越强。的存储能力越强。 每个寄存器单元的每个寄存器单元的位宽位宽与与FI

21、FO的输入和输出端的的输入和输出端的 位宽是一致的,如果要处理的数据位宽是一致的,如果要处理的数据A、B、C、D 是是16位的数据,那么输入输出端及每个寄存器单位的数据,那么输入输出端及每个寄存器单 元的位宽就都是元的位宽就都是16位,这个位,这个FIFO可以命名为可以命名为 816FIFO。它在每一个时钟上升沿到来时,数。它在每一个时钟上升沿到来时,数 据向右移动一个存储单元。这样据向右移动一个存储单元。这样在时钟的控制下在时钟的控制下 ,数据从左至右通过存储单元。,数据从左至右通过存储单元。 FIFO的工作原理的工作原理 1616FIFO的结构示意图如下:的结构示意图如下: 1616FIF

22、O read有效表示可以把数据从有效表示可以把数据从FIFO输出,输出,write有效表示可以有效表示可以 把数据输入把数据输入FIFO; fifo_empy、fifo_half和和fifo_full是是3个指示该个指示该FIFO存储单元使存储单元使 用情况的信号,分别表示用情况的信号,分别表示FIFO空、半满和全满。空、半满和全满。 此此FIFO的建模程序:的建模程序: 6.计数器计数器 在数字系统中在数字系统中使用最多的时序电路使用最多的时序电路是计数器。是计数器。 计数器用途计数器用途:对时钟脉冲计数对时钟脉冲计数、分频分频、定时定时、产产 生节拍脉冲和脉冲序列生节拍脉冲和脉冲序列以及以

23、及进行数字运算进行数字运算等。等。 计数器的分类计数器的分类 按数制分:按数制分: 二进制计数器二进制计数器 十进制计数器十进制计数器 N 进制进制( (任意进制任意进制) )计数器计数器 按计数按计数 方式分:方式分: 加法计数器加法计数器 减法计数器减法计数器 可逆计数可逆计数 (Up-Down Counter) 按时钟按时钟 控制分:控制分: 同步计数器同步计数器 (Synchronous ) 异步计数器异步计数器 (Asynchronous ) 按开关按开关 元件分:元件分: TTL 计数器计数器 CMOS 计数器计数器 本讲将给出本讲将给出3个结构比较简单的个结构比较简单的8位二进制

24、加法计位二进制加法计 数器,主要目的在于使读者了解计数器中的复位数器,主要目的在于使读者了解计数器中的复位 信号信号reset、设定输出信号、设定输出信号load、使能端、使能端en的行为的行为 描述方式。在这些程序基础上,可以得到功能更描述方式。在这些程序基础上,可以得到功能更 完善的计数器模型。完善的计数器模型。 (1)带计数使能端和异步复位端的)带计数使能端和异步复位端的8位计数器位计数器 下图所示是一个带有计数使能端和异步复位端的下图所示是一个带有计数使能端和异步复位端的8 位计数器,其中位计数器,其中out是是8位计数输出端,位计数输出端,reset是异步是异步 复位端,复位端,en

25、是计数使能端,是计数使能端,en为为1时,时,out将在每个将在每个 时钟的上升沿加时钟的上升沿加1。 此计数器的建模程序如下:此计数器的建模程序如下: module count_en (en, clock, reset, out); parameter Width = 8; input clock, reset, en; output Width-1:0 out; reg Width-1:0 out; always (posedge clock or negedge reset) if(!reset) out = 8b0; / 复位复位 elseif(en) out = out + 1; /

26、 en为为1时在每个时钟时在每个时钟 /上升沿使计数器加上升沿使计数器加1 endmodule (2)可设定计数输出并带异步复位端的)可设定计数输出并带异步复位端的8位计数器位计数器 其中其中data7:0是是8位数据输入端,位数据输入端,out7:0是是8位计数输出端,位计数输出端,clk 和和reset分别是时钟信号和复位端,分别是时钟信号和复位端, 输入端输入端load的作用是:当的作用是:当load有效时,停止计数,有效时,停止计数,data7:0的数的数 据将被直接赋给据将被直接赋给out7:0,即把计数值设定为某个固定值,即把计数值设定为某个固定值(这个(这个 值从值从data端输

27、入)。端输入)。 此计数器的建模程序如下:此计数器的建模程序如下: module count_load (out, data, load, clk, reset); parameter Width = 8; input load, clk, reset; input Width-1:0 data; output Width-1:0 out; reg Width-1:0 out; always (posedge clk or negedge reset) if(!reset) out = 8b0; /复位复位 elseif(load) out = data; /设定计数输出设定计数输出 else

28、 out = out + 1; /计数加计数加1 endmodule (3)可设定计数输出并带使能端、进位端和复位)可设定计数输出并带使能端、进位端和复位 端的端的8位计数器位计数器 cout端是计数进位输出端,当端是计数进位输出端,当8位计数器计数到最大值位计数器计数到最大值 11111111时,使时,使cout等于等于1表示计数器已满。表示计数器已满。 cout的值可以有不同用途,例如可以在的值可以有不同用途,例如可以在cout变为变为1时产生一个时产生一个 reset信号使计数器清零等。信号使计数器清零等。 此计数器的建模程序如下:此计数器的建模程序如下: module count_lo

29、ad (out, cout, data, load, clk, en, reset); parameter Width = 8; input load, clk, en, reset; input Width-1:0 data; output cout; /计数进位输出端计数进位输出端 output Width-1:0 out; reg Width-1:0 out; always (posedge clk or negedge reset) begin if(!reset) out = 8b0; /复位复位 elseif(load) out = data; /设定输出设定输出 elseif(e

30、n) out = out + 1; /计数加计数加1 end assign cout = /当计数输出端当计数输出端out的的8个位都是个位都是1时,时, /给计数进位输出端赋值为给计数进位输出端赋值为1 endmodule 设计一个模设计一个模200的二进制加法计数器的二进制加法计数器 module count200(clock,out); input clock; output 7:0 out; reg 7:0 out; always (posedge clock) begin if(count=200) out = 0; else out = out +1; end 偶数分频器偶数分频器

31、 要求要求:(:(1)由由50Mhz时钟分频得到时钟分频得到25Mhz的时钟的时钟 (2)由由50Mhz时钟分频得到时钟分频得到12.5Mhz的时钟的时钟 (3)由由50Mhz时钟分频得到时钟分频得到5Mhz的时钟的时钟 (4)由由50Mhz时钟分频得到时钟分频得到1hz的时钟的时钟 (5)由由50Mhz时钟分频得到时钟分频得到4hz的时钟的时钟 (1)由由50Mhz时钟分频得到时钟分频得到25Mhz的时钟的时钟 module seg_cycle(clk50mhz, clk25mhz); input clk50mhz; output clk25mhz; /2分频分频 reg clk25mhz;

32、 always (posedge clk50mhz) clk25mhz= clk25mhz; end (3)由由50Mhz时钟分频得到时钟分频得到12.5Mhz的时钟的时钟 module seg_cycle(clk50mhz, clk12mhz); input clk50mhz; output clk12mhz; /N(4)分频分频 reg clk12mhz; reg 1:0 count; always (posedge clk50mhz) begin if(count=d1) / 计数到计数到N/2-1(2)时候翻转时候翻转 begin count= 0; clk12mhz= clk12mh

33、z; end else count = count +1; end (3)由由50Mhz时钟分频得到时钟分频得到5Mhz的时钟的时钟 module seg_cycle(clk50mhz, clk5mhz); input clk50mhz; output clk5mhz; /N(10)分频分频 reg clk5mhz; reg 2:0 count; /模模5计数器计数器 always (posedge clk50mhz) begin if(count=d4) / 计数到计数到N/2-1(4)时候翻转时候翻转 begin count= 0; clk5mhz= clk5mhz; end else c

34、ount = count +1; end (4)由由50Mhz时钟分频得到时钟分频得到1hz的时钟的时钟 module seg_cycle(clk50mhz, clk1hz); input clk50mhz; output clk1hz; /N(50106)分频分频 reg clk1hz; reg 25:0 count; / /模模N/2计数器计数器 always (posedge clk50mhz) begin if(count=d25000000-1) / 计数到计数到N/2-1(25106-1)时候翻转时候翻转 begin count= 0; clk1hz= clk1hz; end else count = count +1; end (5)由由50Mhz时钟分频得到时钟分频得到4hz的时钟的时钟 module seg_cycle(clk50mhz, clk4hz); input clk50mhz; output clk4hz; /N(12.5106)分频分频 reg clk4hz; reg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论