ch04-时序逻辑电路建模_第1页
ch04-时序逻辑电路建模_第2页
ch04-时序逻辑电路建模_第3页
ch04-时序逻辑电路建模_第4页
ch04-时序逻辑电路建模_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

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

文档简介

1、工程学院工程学院 信息技术教研室信息技术教研室Verilog HDL与与FPGA数字系统设计数字系统设计4.1 锁存器锁存器4.2 时序电路建模基础时序电路建模基础4.3 触发器触发器4.4 寄存器和移位寄存器寄存器和移位寄存器4.5 同步计数器同步计数器4.6 Verilog HDL函数与任务的使用函数与任务的使用4.7 m序列码产生电路设计序列码产生电路设计锁存器和触发器锁存器和触发器的的基本特性基本特性 锁存器锁存器和触发器和触发器是构成时序逻辑电路的基本逻辑是构成时序逻辑电路的基本逻辑单元单元,它,它们具有存储数据的功能们具有存储数据的功能。每个每个锁存器或触发器都能存储锁存器或触发器

2、都能存储1 1位二值信息,所以又称为存位二值信息,所以又称为存储单元或记忆单元储单元或记忆单元。若输入信号不发生变化若输入信号不发生变化,锁存器和触发器锁存器和触发器必然必然处于其中一种处于其中一种状态,且一旦状态被确定,就能自行保持不变,即长期存储状态,且一旦状态被确定,就能自行保持不变,即长期存储1位二进制数位二进制数。电路在输入信号的作用下,会从一种稳定状态转换成为另一电路在输入信号的作用下,会从一种稳定状态转换成为另一种稳定状态种稳定状态。3锁存器锁存器与触发器的区别与触发器的区别锁存器锁存器 没有没有时钟输入端,时钟输入端,对对脉冲电平敏感的脉冲电平敏感的存储电路,在特定存储电路,在

3、特定输入脉冲电平作用下改变状态。输入脉冲电平作用下改变状态。触发器触发器每每一个触发器有一个时一个触发器有一个时钟输入钟输入端端。对对脉冲边沿敏感脉冲边沿敏感的存储的存储电路,在时钟脉冲的上升沿或下降电路,在时钟脉冲的上升沿或下降沿的变化瞬间改变状态。沿的变化瞬间改变状态。 E E CP CP 44.1 锁存器锁存器4.1.1 基本基本SR锁存器锁存器4.1.2 门控门控D锁存器锁存器4.1.3门控门控D锁存器的锁存器的Verilog HDL建模建模5 R S G1 G2 Q Q 0 1 0 1 1. 用用与非与非门门构成的基本构成的基本SR锁存器锁存器、 S Q Q R R S 国标国标逻辑

4、符号逻辑符号方框外侧输入端的方框外侧输入端的小圆圈小圆圈和信号名称上面的和信号名称上面的小横线小横线均表示输均表示输入信号是入信号是低电平有效低电平有效的,同时为了区别,这种锁存器有时也的,同时为了区别,这种锁存器有时也称为基本称为基本 S R 锁存器。锁存器。4.1.1 基本基本SR锁存器锁存器64.1.1 基本基本SR锁存器锁存器1. 用用与与非门非门构成的基本构成的基本SR锁存器锁存器 R S G1 G2 Q Q 0 1 0 1 现态现态:R、S信号作用前信号作用前 Q端的状态,端的状态, 现态现态用用Q n表示。表示。次态次态:R、S 信号信号作用后作用后 Q 端的状态端的状态, 次次

5、态态用用Q n+1表示。表示。7 R S G1 G2 Q Q 0 1 0 1 、a.电路图电路图b.b.功能表功能表 RSQ110010100101不变不变1 11不变不变Q约束条件约束条件: S +R = 14.1.1 基本基本SR锁存器锁存器8 R S 例例 当当S、R的波形如下图虚线上边所示,试画出的波形如下图虚线上边所示,试画出Q和和 Q对应的波对应的波形(假设原始状态形(假设原始状态Q0 )。)。 S Q Q R R S 图图4.1.1(b) Q Q 不不变变 置置 1 不不变变 清清 0 不不变变 置置 1 不不变变 清清 0 不不变变 状状态态不不确确定定 t1 t2 t3 t4

6、 t5 t6 t7 t8 R S 置置 1 94.1.2 门控门控D 锁存器锁存器1. 电路结构电路结构 国标逻辑符号国标逻辑符号使能信号控制门电路使能信号控制门电路简单简单S R锁存器锁存器 1D C1 Q Q E D 10工作原理工作原理o 当当E = 0时,时,S =R = 1,无论,无论D取什么值,取什么值,Q 保持不变。保持不变。o 当当E = 1时,时, n D=1时,时,S =0, R = 1,Q 被置被置1;n D=0时,时, S =1, R = 0,Q 被置被置0。o 在在E=1期间,期间,D 值将被传输到输出端值将被传输到输出端Q,而当,而当E由由1跳变为跳变为0时,锁存器

7、将保持跳变之前瞬间时,锁存器将保持跳变之前瞬间D的值。因此,的值。因此,D锁存器常锁存器常被称为被称为透明锁存器透明锁存器(Transparent Latch)。)。11特性表和特性方程特性表和特性方程 1nQEQED12波形图波形图 E D t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 1D C1 Q Q E D 初始状态初始状态为为Q =1 E D Q Q 置 1 不变 置 1 不变 置 0 不变 不变 置 0 不变 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 134.1.3 门控门控D 锁存器的锁存器的Verilog HDL建模建模1. 试试对图对图4.

8、1.3所示的所示的D锁存器进行建模。锁存器进行建模。 1D C1 Q Q E D 图图4.1.3 D锁存器锁存器14/版本1: Structural description of a D latch module Dlatch_Structural (E, D, Q, Q_); input E, D; output Q, Q_; wire R_, S_;nand N1(S_, D,E);nand N2(R_,D,E);SRlatch_1 N3(S_,R_,Q,Q_);endmodule/Structural description of a SR-latch module SRlatch_1

9、(S_,R_, Q, Q_); input S_,R_; output Q, Q_; nand N1(Q, S_,Q_);nand N2(Q_,R_,Q);endmodule15 第一个版本根据图第一个版本根据图4.1.3使用基本的逻辑门元件,采用结构使用基本的逻辑门元件,采用结构描述风格,编写了两个模块,这两个模块可以放在一个文件描述风格,编写了两个模块,这两个模块可以放在一个文件中,文件名为中,文件名为Dlatch_Structural.v。 在在一个文件中可以写多个模块,其中有一个是主模块(或者一个文件中可以写多个模块,其中有一个是主模块(或者称为顶层模块)称为顶层模块)。 文件名文件名

10、必须使用顶层模块名。本例中必须使用顶层模块名。本例中Dlatch_Structural是是主模块,它调用主模块,它调用SRlatch_1模块。模块。版本版本1的特点:的特点:16/版本2: Behavioral description of a D latch module Dlatch_bh (E, D, Q, Q_); input E, D; output Q,Q_; reg Q; assign Q_ = Q; always (E or D) if (E) Q = D; /当使能有效时,输出跟随输入变化 else Q = Q; /保持不变endmodule1718 第二个版本采用功能描述风

11、格的代码,不涉及到实现电路的第二个版本采用功能描述风格的代码,不涉及到实现电路的具体结构,靠具体结构,靠“算法算法”实现电路操作。对于不太喜欢低层次硬实现电路操作。对于不太喜欢低层次硬件逻辑图的人来说,功能描述风格的件逻辑图的人来说,功能描述风格的Verilog HDL是一种最是一种最佳选择。其中佳选择。其中“=”为非阻塞赋值符,将在下一节介绍。为非阻塞赋值符,将在下一节介绍。 注意注意: always内部不能使用内部不能使用assign。 在在写可综合的代码时,建议明确地定义写可综合的代码时,建议明确地定义ifelse中所有中所有可能的条件分支,否则,就会在电路的输出部分增加一可能的条件分支

12、,否则,就会在电路的输出部分增加一个电平敏感型锁存器。个电平敏感型锁存器。 版本版本2的特点:的特点:19Verilog行为级描述用关键词行为级描述用关键词initial或或always,但,但initial是面向仿真,不能用于是面向仿真,不能用于逻辑综合。逻辑综合。always是无是无限循环语句,其用法为:限循环语句,其用法为: 4.2 时序电路建模基础时序电路建模基础always( (事件控制表达式(或敏感事件表事件控制表达式(或敏感事件表) ))begin 块块内局部变量的定义;内局部变量的定义; 过程过程赋值语句;赋值语句;end204.2.1 阻塞型赋值阻塞型赋值语句语句与与非阻塞非

13、阻塞型赋值语句型赋值语句赋值时先计算等号右边部分的值,这时赋值语句不赋值时先计算等号右边部分的值,这时赋值语句不允许任何别的允许任何别的VerilogVerilog语句的干扰,直到现行的赋值完语句的干扰,直到现行的赋值完成时刻,把等号右边的赋值给等号左边的时刻,它才成时刻,把等号右边的赋值给等号左边的时刻,它才允许别的赋值语句的执行。允许别的赋值语句的执行。在赋值操作时刻开始计算非阻塞赋值符的等号右边在赋值操作时刻开始计算非阻塞赋值符的等号右边的表达式,赋值操作结束时刻才更新等号左边的表达的表达式,赋值操作结束时刻才更新等号左边的表达式。式。 在在always语句内部的过程赋值语句有两种类型:

14、语句内部的过程赋值语句有两种类型:阻塞型赋值语句(阻塞型赋值语句(Blocking Assignment Statement)非阻塞型赋值语句(非阻塞型赋值语句(Non-Blocking Assignment Statement)214.2.1 阻塞型赋值语句与非阻塞型赋值语句阻塞型赋值语句与非阻塞型赋值语句 使用的运算符如下:使用的运算符如下:赋值算符赋值算符( () ) :阻塞型过程赋值算符阻塞型过程赋值算符 前一条语句没有完成赋值过程之前,后面的语句不前一条语句没有完成赋值过程之前,后面的语句不可能被执行。可能被执行。赋值算符赋值算符( ( ) ) :非阻塞型过程赋值算符非阻塞型过程赋值

15、算符 一条非阻塞型赋值语句的执行,并不会影响块中其一条非阻塞型赋值语句的执行,并不会影响块中其它语句的执行它语句的执行22过程赋值语句有阻塞型和非阻塞型过程赋值语句有阻塞型和非阻塞型: :非阻塞型用非阻塞型用“=”表示,语句块内部的语句表示,语句块内部的语句并行并行执行。执行。 begin B=A; C=B+1; end阻塞型用阻塞型用“”表示,多条语句表示,多条语句顺序顺序执行。执行。 begin B=A; C=B+1; endC=A+1C=B+123阻塞型过程赋值与非阻塞型过程赋值阻塞型过程赋值与非阻塞型过程赋值/Blocking (=) initialbegin #5 a = b; #1

16、0 c = d;end/Nonblocking (=)initialbegin #5 a = b; #10 c = d;end2425注意注意: 在在可综合的电路设计中,一个语句块的内部不允许可综合的电路设计中,一个语句块的内部不允许同时出现阻塞型赋值语句和非阻塞型赋值语句同时出现阻塞型赋值语句和非阻塞型赋值语句。 在在时序电路的设计中,建议采用非阻塞型赋值语句。时序电路的设计中,建议采用非阻塞型赋值语句。264.2.2 事件控制语句事件控制语句o 用用always语句描述硬件电路的逻辑功能时,在语句描述硬件电路的逻辑功能时,在always语句语句中中符号之后紧跟着符号之后紧跟着“事件控制表达

17、式事件控制表达式”。o 逻辑电路逻辑电路中的敏感事件通常有两种类型:中的敏感事件通常有两种类型:电平敏感事件电平敏感事件和和边沿触发事件边沿触发事件。o 在组合逻辑电路和锁存器中,输入信号电平的变化通常会在组合逻辑电路和锁存器中,输入信号电平的变化通常会导致输出信号变化,在导致输出信号变化,在Verilog HDL中,将这种输入信号中,将这种输入信号的电平变化称为的电平变化称为电平敏感事件电平敏感事件。o 在同步时序逻辑电路中,触发器状态的变化仅仅发生在时在同步时序逻辑电路中,触发器状态的变化仅仅发生在时钟脉冲的上升沿或下降沿,钟脉冲的上升沿或下降沿,Verilog HDL中用关键词中用关键词

18、posedge(上升沿)(上升沿)和和 negedge(下降沿)(下降沿)进行说明,这就进行说明,这就是是边沿触发事件边沿触发事件。27敏感事件分为电平敏感事件和边沿触发事件敏感事件分为电平敏感事件和边沿触发事件: :边沿敏感事件(如触发器)边沿敏感事件(如触发器) : :always(posedge CP or negedge CR)CP的上升沿或的上升沿或CR的下降沿来到,后面的过程语句就会执的下降沿来到,后面的过程语句就会执行。行。电平敏感事件(如锁存器)电平敏感事件(如锁存器): : always(sel or a or b(sel or a or b) selsel、a a、b b中

19、任意一个电平发生变化,后面的过程赋值语中任意一个电平发生变化,后面的过程赋值语句将执行一次。句将执行一次。28边沿触发事件边沿触发事件o 在在always后面后面的边沿的边沿触发事件中,有一个事件必须是时钟事触发事件中,有一个事件必须是时钟事件,还可以有多个异步触发事件,多个触发事件之间用件,还可以有多个异步触发事件,多个触发事件之间用关键关键词词 or 进行进行连接连接,例如,例如,语句,语句always (posedge CP or negedge Rd_ or negedge Sd_)o 在在Verilog 2001标准中,可以使用逗号来代替标准中,可以使用逗号来代替or。例如,。例如,

20、always (posedge CP, negedge Rd_, negedge Sd_)o posedge CP 是时钟事件,是时钟事件, negedge Rd_和和negedge Sd_是异是异步触发事件。如果没有时钟事件,只有异步事件,就会出现语法步触发事件。如果没有时钟事件,只有异步事件,就会出现语法错误。错误。294.3 D触发器触发器4.3.1 D触发器的逻辑功能触发器的逻辑功能4.3.2 有有清零输入和预置输入的清零输入和预置输入的D触发器触发器4.3.3 有使能端的有使能端的D触发器触发器4.3.4 D触发器及其应用电路的触发器及其应用电路的Verilog HDL建模建模304

21、.3.1 D触发器触发器的逻辑功能的逻辑功能 C1 1D Q Q (b)下降沿触发 下降沿触发 CP D C1 1D Q Q (a)上升沿触发 上升沿触发 CP D 1. D触发器的逻辑符号触发器的逻辑符号n 把把CP 有效有效沿到来之前沿到来之前电路的状态称为电路的状态称为现态现态,用,用Qn表示。表示。n 把把CP 有效沿有效沿到来之后到来之后,电路所进入的新状态称为,电路所进入的新状态称为次态次态,用用Qn+1表示。表示。312. 特性表特性表 DQn Qn+10000101011113. 特性方程特性方程Qn+1 = D 0 1 4. 状态图状态图D=1D=0D=0D=14.3.1 D

22、触发器触发器的逻辑功能的逻辑功能32334.3.1 D触发器触发器的逻辑功能的逻辑功能由以上分析可以看出,当由以上分析可以看出,当D=0时,时,D触发器的下一状态将被置触发器的下一状态将被置0(Qn+1=0);当);当D=1时,下一状态将被置时,下一状态将被置1 (Qn+1=1).在脉冲的在脉冲的两个触发沿之间,触发器状态保持不变,即存储两个触发沿之间,触发器状态保持不变,即存储1位二进制数。位二进制数。凡事符合以上凡事符合以上 逻辑关系的触发器,无论它的触发方式如何,逻辑关系的触发器,无论它的触发方式如何,均称为均称为D触发器。触发器。 直接置 1 线 G1 CP Y1 G2 G3 G5 G

23、4 Y4 D G6 Q Q S R (a) C1 1D Q Q CP D (b) 直接置 0 线 RD SD RD SD 4.3.2 有清零输入和预置输入的有清零输入和预置输入的D 触发器触发器 由于直接置由于直接置1和清零时跟和清零时跟CP信号无关,所以称置信号无关,所以称置1、清零操作是清零操作是异步置异步置1和异和异步清零步清零。 34 直接置 1 线 G1 CP Y1 G2 G3 G5 G4 Y4 D G6 Q Q S R 直接置 0 线 RD SD 4.3.2 有清零输入和预置输入的有清零输入和预置输入的D 触发器触发器 直接置直接置1和直接清零的和直接清零的过程如下过程如下:35有

24、有同步清零同步清零端的端的 D 触发器触发器 o 所谓所谓同步清零同步清零是指在清零输入信号有效,并且是指在清零输入信号有效,并且CP的的有效边沿到来时,才能将触发器清零。有效边沿到来时,才能将触发器清零。 图图4.3.4 有同步清零输入端的有同步清零输入端的D触发器触发器(a) 实现同步清零的方案之一实现同步清零的方案之一 (b) 实现同步清零的方案之二实现同步清零的方案之二364.3.3 有有使能端的使能端的D 触发器触发器o 功能:功能:n En=0,Q 保持不变。保持不变。n En=1,在,在CP作用下,作用下, Q = D。1nnQCE QCE D Q Q 1D C1 CP D En

25、 图 4.3.5 用门控制时钟的电路 Q Q 1D C1 CP D CE 0 1 Q Q 1D C1 CP D CE 逻辑符号逻辑符号374.3.4 D触发器及其应用电路的触发器及其应用电路的Verilog HDL建模建模例例1.试对图试对图4.3.3所示的带有异步清零和异步置位的边所示的带有异步清零和异步置位的边沿沿D触发器进行建模触发器进行建模。图图4.3.3 有有异步输入端的异步输入端的D触发器触发器 直接置 1 线 G1 CP Y1 G2 G3 G5 G4 Y4 D G6 Q Q S R (a) C1 1D Q Q CP D (b) 直接置 0 线 RD SD RD SD 38/版本版

26、本1:module Set_Rst_DFF (Q,Q_,D,CP,Rd_,Sd_); output Q,Q_; input D,CP,Rd_,Sd_; wire Y1,Y2,Y3,Y4,Y5,Y6; assign #5 Y1 = (Sd_ & Y2 & Y4); assign #5 Y2 = (Rd_ & CP & Y1); assign #5 Y3 = (CP & Y2 & Y4); assign #5 Y4 = (Rd_ & Y3 & D); assign #5 Y5 = (Sd_ & Y2 & Y6); assign #5 Y6 = (Rd_ & Y3 & Y5); assign Q =

27、 Y5; assign Q_= Y6;endmodule 版本版本1根据根据该图使用连续赋值语句来建模,在该图使用连续赋值语句来建模,在assign语句中的语句中的#5表示给每个表示给每个与非门与非门加加5个单位时间的传输延迟。个单位时间的传输延迟。39/版本版本2module Set_Rst_DFF_bh (Q,Q_,D,CP,Rd_,Sd_); output reg Q; output Q_; input D,CP,Rd_,Sd_;assign Q_= Q;always (posedge CP or negedge Sd_ or negedge Rd_) if (Sd_) /等同于: if

28、 (Sd_ 0) Q = 1b1; else if (Rd_) Q = 1b0; else Q = D;endmodule40 采用采用功能描述风格,使用功能描述风格,使用always和和if-else对对输出变量输出变量赋值。赋值。 negedge Sd_是一个异步事件,它与是一个异步事件,它与if(Sd_)必须)必须匹配,匹配,negedge Rd_是另一个异步事件,它与是另一个异步事件,它与if(Rd_)必须)必须匹配,匹配,这是语法规定。这是语法规定。 当当Sd_为为0时,将输出时,将输出Q置置1; 当当Sd_=1且且Rd_=0时,将输出时,将输出Q置置0; 当当Sd_和和Rd_均不为

29、均不为0,且时钟,且时钟CP的上升沿到来时,将输入的上升沿到来时,将输入D传给输出传给输出Q。 注意注意,如果置,如果置1事件、置事件、置0事件和时钟事件同时发生,则置事件和时钟事件同时发生,则置1事事件的优先级别最高、置件的优先级别最高、置0事件的次之,时钟事件的事件的次之,时钟事件的优先级最低优先级最低。版本版本2的特点:的特点:4142例例2 具有具有同步清零功能的上升沿同步清零功能的上升沿D触发器。触发器。 module Sync_rst_DFF (Q,D,CP,Rd_); output reg Q; input D, CP, Rd_; always (posedge CP) if (

30、 !Rd_) Q =0; else Q = D;endmodule C1 1D Q Q CP D RD 0 1 GND 43 Q Q 1D C1 CP 图 4.3.7 2 分频电路 RD D R 例例4 试用试用功能描述风格对图功能描述风格对图4.3.7所示电路进行建模,所示电路进行建模,并给出仿真结果并给出仿真结果。解解:(:(1)设计块:使用)设计块:使用always和和if-else语句语句对输出变量赋值,其代码如下。对输出变量赋值,其代码如下。timescale 1 ns/ 1 nsmodule _2Divider (Q,CP,Rd_); output reg Q; input CP,

31、Rd_; wire D; assign D = Q;always (posedge CP or negedge Rd_) if(Rd_) Q = 1b0; else Q = D;endmodule44(2)激励块:给输入变量赋值。)激励块:给输入变量赋值。timescale 1 ns/ 1 nsmodule test_2Divider();reg CP, Rd_; wire Q;/调用设计块调用设计块_2Divider U1 ( .CP(CP), .Q(Q),.Rd_(Rd_) );initial begin /产生复位信号产生复位信号Rd_ Rd_ = 1b0; Rd_ = #2000 1b

32、1;#8000 $stop;end always begin /产生时钟信号产生时钟信号CP CP = 1b0; CP = #500 1b1; #500;end endmodule45 由由图可知,时钟图可知,时钟CP的周期为的周期为1000ns,在,在2000ns之前,清零信号之前,清零信号Rd_有有效,输出效,输出Q被清零。在此之后,被清零。在此之后,Rd_=1,在,在2500ns时,时,CP上升沿到来,上升沿到来,Q=1;到下一个;到下一个CP上升沿(上升沿(3500ns)时,)时,Q=0,再到下一个,再到下一个CP上升沿上升沿(4500ns)时,)时,Q=1,如此重复,直到,如此重复,

33、直到8000ns时,系统任务时,系统任务$stop被执行,仿真停止。被执行,仿真停止。 总之总之,在不考虑清零信号,在不考虑清零信号Rd_的作用时,每当的作用时,每当CP上升沿到来时,触发器上升沿到来时,触发器状态状态Q翻转一次。输出信号翻转一次。输出信号Q的频率正好是的频率正好是CP频率的二分之一,故称该电路频率的二分之一,故称该电路为为2分频电路。所谓分频电路,是指可将输入的高频信号变为低频信号输出分频电路。所谓分频电路,是指可将输入的高频信号变为低频信号输出的电路。的电路。(3)仿真仿真波形(用波形(用ModelSim)46例例5 试试对图对图4.3.9所示电路进行建模,并给出仿真结果。

34、所示电路进行建模,并给出仿真结果。解解:(1)采用结构描述风格的代码如下。编写了两个采用结构描述风格的代码如下。编写了两个模块,这两个模块可以放在一个文件中,文件名为模块,这两个模块可以放在一个文件中,文件名为Ripplecounter.v。 FF0 R CLR_ FF1 R FF2 R FF3 R CP Q0 Q3 C C C C D Q0 D D D Q1 Q2 Q3 Q1 Q2 图4.3.9 4位步二进制计数器逻辑图47第一第一个主模块个主模块Ripplecounter作为设计的顶层,它实例引用分频作为设计的顶层,它实例引用分频器子模块器子模块_2Divider1共共4次,第二个分频器子

35、模块次,第二个分频器子模块_2Divider1作作为设计的底层。为设计的底层。/*= 设计块:设计块:Ripplecounter.v =*/module Ripplecounter (Q,CP,CLR_); output 3:0Q; input CP, CLR_; /实例引用分频器模块实例引用分频器模块 _2Divider1 FF0 (Q0,CP,CLR_); /注意注意, 引用时端口的排列顺序引用时端口的排列顺序 _2Divider1 FF1 (Q1,Q0,CLR_); _2Divider1 FF2 (Q2,Q1,CLR_); _2Divider1 FF3 (Q3,Q2,CLR_);endm

36、odule 48/分频器子分频器子模块模块module _2Divider1 (Q,CP,Rd_); output reg Q; input CP,Rd_; always (posedge CP or negedge Rd_) if(!Rd_) Q = 1b0; else Q = Q;endmodule 49/*= 激励块:激励块:test_Ripplecounter.v =*/module test_Ripplecounter();reg CLR_, CP;wire 3:0Q;Ripplecounter i1 (.CLR_(CLR_),.CP(CP),.Q(Q);initial begin

37、/ CLR_ CLR_ = 1b0; CLR_ = #20 1b1;#400 $stop;end always begin / CPCP = 1b0;CP = #10 1b1;#10;end endmodule(2)激励块:给输入变量(激励块:给输入变量(CLR_和和CP)赋值。)赋值。50(3)仿真波形如图仿真波形如图4.3.10所示。所示。由图可知由图可知, 时钟时钟CP的周期为的周期为20ns。 开始开始时,清零信号时,清零信号CLR_有效(有效(020ns),输出),输出Q被清零被清零。 20ns之后,之后,CLR_一直为高电平一直为高电平, 在在30ns时,时,CP上升沿到来,上升沿

38、到来, Q=0001;到;到下一个下一个CP上升沿上升沿(50ns)时,)时,Q=0010, 再再到下一个到下一个CP上升沿(上升沿(70ns)时,)时,Q=0011,如此重,如此重复复,到,到310ns时,时,Q=1111, 到到330ns时,时,Q=0000,直到系统任务,直到系统任务$stop被执行,被执行,仿真停止仿真停止。51 电路电路首先在首先在CLR_的作用下,输出被清零。此后当的作用下,输出被清零。此后当CLR_=1时,时,每当每当CP上升沿到来时,电路状态上升沿到来时,电路状态Q就在原来二进制值的基础上增就在原来二进制值的基础上增加加1,即符合二进制递增计数的规律,直到计数值

39、为,即符合二进制递增计数的规律,直到计数值为1111时,再时,再来一个来一个CP上升沿,计数值回到上升沿,计数值回到0000,重新开始计数。故称该电,重新开始计数。故称该电路为路为4位二进制递增计数器位二进制递增计数器。 可见可见,计数器实际上是对时钟脉冲进行计数,每到来一个时,计数器实际上是对时钟脉冲进行计数,每到来一个时钟脉冲触发沿,计数器改变一次状态钟脉冲触发沿,计数器改变一次状态。524.4 寄存器和移位寄存器寄存器和移位寄存器4.4.1 寄存器寄存器及及Verilog HDL建模建模4.4.2 移位寄存器移位寄存器及及Verilog HDL建模建模4.4.3 移位寄存器移位寄存器的应

40、用电路的应用电路534.4.1 寄存器寄存器及及Verilog HDL建模建模 Q0 Q0 1D C1 PD0 CE Q1 Q1 1D C1 CE Q2 Q2 1D C1 CE Q3 Q3 1D C1 CP Load CE PD1 PD2 PD3 图图 4.4.1 4 位位寄寄存存器器 o 图中,图中,PD3PD0是是4位数据输入端,位数据输入端,n当当Load = 1时,在时,在CP脉冲上升沿到来时,脉冲上升沿到来时,Q3 = PD3,Q2 = PD2,Q1 = PD1,Q0 = PD0,即输入数据,即输入数据PD3PD0同时存入同时存入相应的触发器相应的触发器;n当当Load = 0时,即

41、使时,即使CP上升沿到来,输出端的状态将保持不上升沿到来,输出端的状态将保持不变。可见变。可见,电路具有存储输入的二进制数据的功能。,电路具有存储输入的二进制数据的功能。54module Reg4bit (Q,PD,CP,CLR_,Load); output reg 3:0Q; input wire 3:0PD; input CP,CLR_,Load; always (posedge CP or posedge CLR_) if (!CLR_) Q = 4b0; else if (Load) Q = PD;endmodule 例例4.4.1 试对图试对图4.4.1所示的寄存器进行建模。所示的寄

42、存器进行建模。5556module li4_41t; wire3:0 Q; reg3:0 PD; reg CP,CLR_,Load; li4_41 U1(Q,CP,PD,CLR_,Load); initial begin CLR_=1b0; CLR_=#20 1b1; #400 $stop; end initial begin PD=4b0000; #50 PD=4b0001; #50 PD=4b0010; #50 PD=4b0011; #50 PD=4b0100; #50 PD=4b0101; #50 PD=4b1001; #50 PD=4b1101; #50 $stop; endiniti

43、al begin Load=1b0; #100 Load=1b1; #100 Load=1b0; #100 Load=1b1; #100 $stop; end always begin CP=1b0; CP=#20 1b1; #20; endendmodule57module Register /Verilog 2001, 2005 syntax #(parameter N = 8) /定义参数定义参数 N = 8 (output reg N-1:0Q, /数据输出端口及变量的数据类型声明数据输出端口及变量的数据类型声明 input wire N-1:0PD,/并行数据输入并行数据输入 inp

44、ut CP,CLR_,Load /输入端口声明输入端口声明); always (posedge CP or posedge CLR_) if (CLR_) Q = 0; else if (Load) Q C1 1D 1D 1D Q1 Q2 Q3 Q3 Q0 Q1 Q0 DSO FF0 FF1 FF2 FF3 C1 C1 C1 R R R S PE 图4.4.5 环形计数器66如果将图如果将图4.4.34.4.3电路中电路中的的 与与D DININ相连,则构成相连,则构成扭环形计数器扭环形计数器,亦称为亦称为约翰逊计数器(约翰逊计数器(Johnson counterJohnson counter

45、),),电路的状态将电路的状态将增加一倍。增加一倍。 1D Q0 DIN CP C1 1D 1D 1D Q1 Q2 Q3 Q3 Q0 Q1 Q0 DSO FF0 FF1 FF2 FF3 C1 C1 C1 R R R S PE 图4.4.6 扭环形计数器673Qmodule ShiftReg (Q,Din,CP,CLR_); input Din; /Serial Data inputs input CP, CLR_; /Clock and Reset output reg 3:0 Q; /Register output always (posedge CP or negedge CLR_) if

46、 (CLR_) Q = 4b0000; else begin /Shift right Q0 = Din; Q3:1 C1 1D 1D 1D Q1 Q2 Q3 Q3 Q0 Q1 Q0 DSO DPO FF0 FF1 FF2 FF3 C1 C1 C1 6869例例4.4.4一个一个4位的双向移位寄存器框图如图位的双向移位寄存器框图如图4.4.6所示。该寄所示。该寄存器有两个控制输入端(存器有两个控制输入端(S1、S0)、两个串行数据输入端)、两个串行数据输入端(Dsl、Dsr)、)、4个并行数据输入端和个并行数据输入端和4个并行输出端,要求实个并行输出端,要求实现现5种功能:异步置零、同步置数、

47、左移、右移和保持原状态不种功能:异步置零、同步置数、左移、右移和保持原状态不变,其功能如表变,其功能如表4.4.2所示。试用功能描述风格对其建模。所示。试用功能描述风格对其建模。图4.4.6 双向移位寄存器框图70module UniversalShift (S1,S0,Din,Dsl,Dsr,Q,CP,CLR_); input S1, S0; /Select inputs input Dsl, Dsr; /Serial Data inputs input CP, CLR_; /Clock and Reset input 3:0 Din; /Parallel Data input output

48、 reg 3:0 Q; /Register outputalways (posedge CP or negedge CLR_) if (CLR_) Q = 4b0000; else case (S1,S0) 2b00: Q = Q; /No change 2b01: Q = Dsr,Q3:1; /Shift right 2b10: Q = Q2:0,Dsl; /Shift left 2b11: Q C1 1D 1D Q1 Q2 FF0 FF1 FF2 C1 C1 R R R CLR Out Delay0 Delay1 Delay2 72module Debounce (Out,Btn_In,C

49、LK,CLR_); input 3:0 Btn_In; /Button inputs input CLK, CLR_; /Clock and Reset output 3:0 Out; /Register output reg 3:0 Delay0; reg 3:0 Delay1; reg 3:0 Delay2; always (posedge CLK or negedge CLR_)begin if (CLR_) begin Delay0 = 4b0000; Delay1 = 4b0000; Delay2 = 4b0000;end else begin /Shift right Delay0

50、 = Btn_In; Delay1 = Delay0; Delay2 C1 1D 1D Q1 Q2 FF0 FF1 FF2 C1 C1 R R R CLR Out Delay0 Delay1 Delay2 75(1)设计块:单脉冲产生电路的代码如下:)设计块:单脉冲产生电路的代码如下:module ClockPulse (Out, Btn_In,CLK,CLR_); input Btn_In; /Button inputs input CLK, CLR_; /Clock and Reset output reg Out; /Register output reg Delay0; reg Del

51、ay1; reg Delay2; always (posedge CLK or negedge CLR_)begin if (CLR_) Delay0, Delay1, Delay2 = 3b000; else begin /Shift right Delay0 = Btn_In; Delay1 = Delay0; Delay2 = Delay1; endendassign Out = Delay0 & Delay1 & Delay2;endmodule 76(2)激励块:给)激励块:给输入(输入(CLR_、Btn_In和和CLK)赋值,产生激励信号。)赋值,产生激励信号。module Tes

52、t_ClockPulse ; reg Btn_In; /Button inputs reg CLK, CLR_; /Clock and Reset wire Out; /single clock pulse output ClockPulse U0(Out, Btn_In,CLK,CLR_); initial begin / CLR_ CLR_ = 1b0; CLR_ = #20 1b1; #350 $stop; /总仿真时间为总仿真时间为370 end always begin / CLK CLK = 1b0; CLK = #10 1b1; #10; end 77initial begin

53、/ Btn_In Btn_In = 1b0; Btn_In = #30 1b1; Btn_In = #5 1b0; Btn_In = #5 1b1; Btn_In = #20 1b0; #100; Btn_In = 1b1; Btn_In = #5 1b0; Btn_In = #5 1b1; Btn_In = #80 1b0; end endmodule78(3) 仿真波形仿真波形79(2) 计数器的分类计数器的分类按脉冲输入方式,分为同步和异步计数器按脉冲输入方式,分为同步和异步计数器按进位体制,分为二进制、十进制和任意进制计数器按进位体制,分为二进制、十进制和任意进制计数器按逻辑功能,分为

54、加法、减法和可逆计数器按逻辑功能,分为加法、减法和可逆计数器概概 述述(1) 计数器的逻辑功能计数器的逻辑功能 计数器的基本功能是对输入时钟脉冲进行计数。它也可计数器的基本功能是对输入时钟脉冲进行计数。它也可用于分频、定时、产生节拍脉冲和脉冲序列及进行数字用于分频、定时、产生节拍脉冲和脉冲序列及进行数字运算等。运算等。4.5 同步同步计数器计数器80同步计数器同步计数器异步计数器异步计数器加计数器加计数器减计数器减计数器可逆计数器可逆计数器二进制计数器二进制计数器非二进制计数器非二进制计数器 十进制计数器十进制计数器 任意进制计数器任意进制计数器加计数器加计数器减计数器减计数器可逆计数器可逆计

55、数器二进制计数器二进制计数器非二进制计数器非二进制计数器 十进制计数器十进制计数器 任意进制计数器任意进制计数器概概 述述计数器运行时,依次遍历规定的各状态后完成一次循环,它所计数器运行时,依次遍历规定的各状态后完成一次循环,它所经过的状态总数称为计数器的经过的状态总数称为计数器的“模模”(Modulo),通常用,通常用M表示。表示。814.5.1 同步计数器的设计同步计数器的设计例例4.5.1 用用D触发器和逻辑门设计一个同步六进制计数器。触发器和逻辑门设计一个同步六进制计数器。要求有要求有一个控制信号一个控制信号U, 当当U=1时,计数次序为时,计数次序为0,1,2,3,4,5,0,1,2

56、,; 当当U=0时,计数次序为时,计数次序为5,4,3,2,1,0,5,4,3,。 另外另外,当递增计数到最大值,当递增计数到最大值5时,要求输出一个高电平时,要求输出一个高电平CO=1;当递减计数到最小值;当递减计数到最小值0时,也要求输出一个高电平时,也要求输出一个高电平BO=1。解:解:(1) 分析设计要求,画出总体框图。分析设计要求,画出总体框图。根据要求,计数器共有根据要求,计数器共有6个状态,我们要用个状态,我们要用D触发器来表示触发器来表示或区分出这或区分出这6个状态,需要多少个个状态,需要多少个D触发器才够呢?由于触发器才够呢?由于3个个D触发器能够存储触发器能够存储3位二进制

57、数,而位二进制数,而3位位2进制数能表示进制数能表示23=8个个状态,即状态,即000,001,010,011,100,101,110,111,所以只需要,所以只需要3个触个触发器就能表示发器就能表示6个状态个状态。824.5.1 同步计数器的设计同步计数器的设计总体电路框图如下:总体电路框图如下: D2:0 CP CO 组合电路 3 Q2:0 CLR Q2:0 NS2:0 3 U U 触发器 BO BO CO 左半部分是左半部分是3个个D触发器,用于记录计数器的当前状态。右触发器,用于记录计数器的当前状态。右半部分是组合逻辑,生成下一个状态信号并产生输出信号。半部分是组合逻辑,生成下一个状态

58、信号并产生输出信号。由于下一个状态信号与触发器的由于下一个状态信号与触发器的D端相连接,因此,该信号端相连接,因此,该信号也被称为触发器的也被称为触发器的激励信号激励信号。834.5.1 同步计数器的设计同步计数器的设计(2) 画画出状态转换图出状态转换图 000 101 100 011 010 001 U=1 U=0 U=1 U=0 U=0 U=1 U=0 U=1 U=1 U=0 U=0 U=1 (3)列出转换表列出转换表84(4)确定下一个状态的逻辑表达式确定下一个状态的逻辑表达式020 1 0QQQQNS0 1 1 0 1 20 1 20 1 2 1 QQQUQQQUQQQUQQQUNS

59、0 1 20 1 20 1 20 1 22QQQUQQQUQQQUQQQUNS 1 1 1 1 NS2 Q1 U Q2 Q0 1 1 1 1 NS1 Q1 U Q2 Q0 1 1 1 1 1 1 NS0 Q1 U Q2 Q0 0 1 20 1 2QQQUBOQQQUCO同理,得到同理,得到85 C P R C 1 1D FF0 Q0 R C 1 1 D FF2 R C 1 1D FF1 Q 0 +VDD Q2 U Q1 Q0 U 1 0k Q1 Q2 Q1 Q2 CO Q2 Q1 Q0 U U B O Q2 Q 1 Q0 U C LR (5) 画画出逻辑图出逻辑图864.5.2 同步同步计数器

60、的计数器的Verilog HDL建模建模例例4.5.2 试用试用Verilog HDL对图对图4.5.4所示电路建模所示电路建模(1)设计块:)设计块:module Counter6 (CP,CLR_,U,Q,CO,BO); input CP, CLR_, U; output reg 2:0 Q; /Data output output CO,BO; assign CO = U & (Q = 3d5); assign BO = U & (Q = 3d0) & (CLR_= 1b1);always (posedge CP or negedge CLR_) if (CLR_) Q = 3b000;

温馨提示

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

评论

0/150

提交评论