EDA技术与应用:第四章 数字系统与Verilog HDL 描述

上传人:s9****2 文档编号:570016220 上传时间:2024-08-01 格式:PPT 页数:66 大小:587KB
返回 下载 相关 举报
EDA技术与应用:第四章 数字系统与Verilog HDL 描述_第1页
第1页 / 共66页
EDA技术与应用:第四章 数字系统与Verilog HDL 描述_第2页
第2页 / 共66页
EDA技术与应用:第四章 数字系统与Verilog HDL 描述_第3页
第3页 / 共66页
EDA技术与应用:第四章 数字系统与Verilog HDL 描述_第4页
第4页 / 共66页
EDA技术与应用:第四章 数字系统与Verilog HDL 描述_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《EDA技术与应用:第四章 数字系统与Verilog HDL 描述》由会员分享,可在线阅读,更多相关《EDA技术与应用:第四章 数字系统与Verilog HDL 描述(66页珍藏版)》请在金锄头文库上搜索。

1、第四章 数字系统与Verilog HDL 描述 4.1 Verilog HDL的一般结构 硬件描述语言(硬件描述语言(HDL)用来描述电子系统。)用来描述电子系统。 由若干相互联结,相互作用的基本电路组成的,具有特由若干相互联结,相互作用的基本电路组成的,具有特定功能的电路整体,称为电子系统。定功能的电路整体,称为电子系统。 电子系统一般被称为实体。当一个电子系统不是十分复电子系统一般被称为实体。当一个电子系统不是十分复杂时,系统常被称为电路。在这里两个名称可以互用。杂时,系统常被称为电路。在这里两个名称可以互用。 显然一个Verilog模块代表一个系统,明显地它能表示系统的接口和主体。mod

2、ule模块名(?)inputoutput系统的主体描述endmodule括号内的“?”代表接口。这些接口(或称端口)的细节 用 input、 output描述。描述包含了端口方向和它类型的一些信息。1.Verilong HDL模块的结构 1)模块任何模块都以关键词任何模块都以关键词module开头,紧跟模块名以开头,紧跟模块名以endmodule结束。在结束。在module和和endmodule之间共有三个部之间共有三个部分:分:接口接口、主体主体和和可选附加组件可选附加组件。接口:由端口和参数声明组成;接口:由端口和参数声明组成;主体:模块内部的描述;主体:模块内部的描述;可选组件:在模块任

3、何地方用可选组件:在模块任何地方用include定义。定义。modulemodule-name(端口列表);input,output,inout,/端口声明reg,wire,parameter,/参数声明Continuousassignment/连续赋值Moduleinstantiation/低级模块例化Initialstatement/初始语句Alwaysstatement/always语句function,task,./任务和函数Gateinstantiation/门级描述UDPinstantiation/原语方式描述endmodule一个模块的基本语法如下:一个模块的基本语法如下:例例4

4、. 4. 用用VerilogHDL语言描述的一个上升沿语言描述的一个上升沿D触发器的模块。触发器的模块。例例1 1 用用Verilog HDL语言描述一个上升沿语言描述一个上升沿D D触发器。触发器。 module dff (q,clk,data); output q; input clk,data; reg q; always (posedge clk) q = data; endmodule 端口类端口类型说明型说明数据类型说明数据类型说明功能描述功能描述(行为描述)(行为描述)句尾句尾分号分号模块模块名名由由“always-begin”和和“end”构成功能描述块,它实现设构成功能描述块

5、,它实现设计要求,它一直监视输入信号计要求,它一直监视输入信号clk的变化,在的变化,在clk发生上升沿跳发生上升沿跳变时,将变时,将data的值赋给输出信号的值赋给输出信号q。2)模块的命名Verilog中的每一标识符,包含模块名,必须遵循如下规则:中的每一标识符,包含模块名,必须遵循如下规则:1)它必须用字母,数字、美元符)它必须用字母,数字、美元符$下划线构成;下划线构成;2)必须以字母或下划线开始;)必须以字母或下划线开始;3)标识符内不能有空格;)标识符内不能有空格;4)区分大小写)区分大小写5)保留的关键字不能使用。)保留的关键字不能使用。3)VerilogHDL的书写格式Init

6、ialbegincounter=4b00;#10WEIS=8b011;end其与下面的指令是一样的:其与下面的指令是一样的:Initialbegincounter=4b00;#10WEIS=8b011;end4) Verilog中组注释中组注释Verilog支持两种类型的注释:每行注释和块注释。支持两种类型的注释:每行注释和块注释。1)每行注释以)每行注释以/开始,结束于本行。开始,结束于本行。2)块注释以)块注释以/*开始,以开始,以*/结束。结束。5)系统描述)系统描述/Design(设计设计):/Filename(文件名文件名):/Purpose(目的目的):/Note(注意注意):/L

7、imitations(局限局限):/Errors(错误错误):/Includefiles(包含文件包含文件):/Author(作者作者):/Simulator(仿真仿真):/版本版本3.VerilongHDL模块的描述方式模块的描述方式 在模块中,可用下述方式描述一个设计:在模块中,可用下述方式描述一个设计:1)使用原语和低级模块例化(结构方式);)使用原语和低级模块例化(结构方式);2)指定输出信号与输入信号的传输(数据流方式);)指定输出信号与输入信号的传输(数据流方式);3)以电路所期望的行为来定义电路中算法(行为方式);)以电路所期望的行为来定义电路中算法(行为方式);4)上述描述方式

8、的混合。上述描述方式的混合。(1)结构化描述形式)结构化描述形式 Verilog中的结构方式代表门级或高一级的物理电路实现。中的结构方式代表门级或高一级的物理电路实现。它代表了由信号相连元件的原理图。设计隐藏在元件中。结它代表了由信号相连元件的原理图。设计隐藏在元件中。结构定义中的元件可以是原语或例化的模块。构定义中的元件可以是原语或例化的模块。 在结构建模中,描述语句主要是实例化语句,包括对在结构建模中,描述语句主要是实例化语句,包括对Verilog HDL 内置门(如与门(内置门(如与门(and)异或门()异或门(xor)等的)等的例化以及对其它器件的调用,这里的元件包括门、触发器、例化以

9、及对其它器件的调用,这里的元件包括门、触发器、以及其它一些小模块等简单的元件,也可以是以及其它一些小模块等简单的元件,也可以是FPGA厂家提厂家提供的一些宏单元以及设计者已经有的设计。供的一些宏单元以及设计者已经有的设计。 在在Verilog HDL中可使用如下方式描述结构中可使用如下方式描述结构: 1) 内置门原语内置门原语(在门级在门级); 2) 开关级原语开关级原语(在晶体管级在晶体管级); 3) 用户定义的原语用户定义的原语(在门级在门级); 4) 模块实例模块实例 (创建层次结构创建层次结构)。 一个模块能够在另外一个模块中被引用,这样就建立一个模块能够在另外一个模块中被引用,这样就

10、建立了描述的层次。模块实例化语句形式如下:了描述的层次。模块实例化语句形式如下: 元件名元件名 (端口列表);(端口列表); 其中:其中:元件名是已经设计好的基本数字逻辑电路模块元件名是已经设计好的基本数字逻辑电路模块的名称,它们相当于已设计好的基本数字逻辑电路模块,的名称,它们相当于已设计好的基本数字逻辑电路模块,其端口列表用于描述基本数字逻辑电路的输入输出端口与其端口列表用于描述基本数字逻辑电路的输入输出端口与例化元件接线端口的连接关系。例化元件接线端口的连接关系。端口列表的表示方法有两种:名称关联法和位置关联端口列表的表示方法有两种:名称关联法和位置关联法,两者的表示方法不同,但其编程的

11、效果相同,注法,两者的表示方法不同,但其编程的效果相同,注意关联方式不能够混合使用。意关联方式不能够混合使用。端口关联形式如下:端口关联形式如下:port_expr / /通过位置。通过位置。.PortName (port_expr) / /通过名称。通过名称。 基本数字逻辑电路的端口应该和基本数字逻辑电路的端口应该和“端口列表端口列表”中的中的所列出的端口名称一一对应,各个端口名之间用逗号所列出的端口名称一一对应,各个端口名之间用逗号隔开。隔开。例例4.1.1:.module and1 (C,A,B););input A,B;output C;. and1 A1 (T3, A, B ); /

12、实例化时采用位置关联,实例化时采用位置关联,T3对应输对应输出端口出端口C,A对应对应A,B对应对应B。and1 A2(.C(T3),),.A(A),),.B(B););/实例化时实例化时采用名字关联,采用名字关联,.C是是and 器件的端口,其与信号器件的端口,其与信号T3相连相连. endmoduleport_expr 可以是以下的任何类型:可以是以下的任何类型:(1) 标识符(标识符(reg 或或net )如)如 .C(T3),),T3为为wire型标识符。型标识符。(2) 位选择位选择 ,如,如 .C(D0),),C端口接到端口接到D信号的第信号的第0bit 位。位。(3) 部分选择部

13、分选择 ,如,如 .Bus (Din5:4)。)。(4) 上述类型的合并,如上述类型的合并,如 .Addr( A1,A21:0 )。)。(5) 表达式(只适用于输入端口),如表达式(只适用于输入端口),如 .A (wire Zire = 0 )。)。建议:建议:在例化的端口映射中请采用名字关联,这样,当被调用在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。的模块管脚改变时不易出错。在实例化中,有些管脚可能没用到,可在映射中采用空白处理。在实例化中,有些管脚可能没用到,可在映射中采用空白处理。 Verilog HDL结构描述的小结:结构描述的小结:1)模块的调用)模块的

14、调用模块的调用利用结构描述,基本方式如下:模块的调用利用结构描述,基本方式如下:基本方式:基本方式: 模块名模块名 调用名(端口名表项)调用名(端口名表项)模块的调用有以下的几种方式:模块的调用有以下的几种方式: 方式一:方式一:位置对应调用方式;位置对应调用方式; 方式二:方式二:端口名对应调用方式;端口名对应调用方式; 方式三:方式三:存在不连接端口的调用方式(未连存在不连接端口的调用方式(未连PORT允许用(,)号空出其位置)。允许用(,)号空出其位置)。ninput: 符号内部总是符号内部总是net,外部可连,外部可连net和和reg数据类型。数据类型。n output: 其内部可为其

15、内部可为net或或reg,而外部必须连各种,而外部必须连各种net数数据类型。据类型。ninouts: 它的内外都用它的内外都用net且只能连各种且只能连各种net数据类型。端数据类型。端口使用规则示意图如图所示。口使用规则示意图如图所示。 2)端口()端口(PORT)连接的规则)连接的规则(1)给电路图中的每个输入输出引脚赋以端口名;)给电路图中的每个输入输出引脚赋以端口名;(2)给电路图中每条内部连线信号取上各自的连线名;)给电路图中每条内部连线信号取上各自的连线名;(3)给电路图中的每个逻辑单元取一个单元名)给电路图中的每个逻辑单元取一个单元名(即即“调用名调用名”);(4)给所要描述的

16、这个电路模块确定一个模块名;)给所要描述的这个电路模块确定一个模块名;(5)用)用module定义相应模块名的结构描述定义相应模块名的结构描述,并将逻辑并将逻辑图中所有的输入输出端口名列入端口名表项中,再完图中所有的输入输出端口名列入端口名表项中,再完成对各端口的输入输出类型说明;成对各端口的输入输出类型说明;(6)依照电路图中的连接关系,确定各单元之间端口)依照电路图中的连接关系,确定各单元之间端口信号的连接,完成对电路图内部的结构描述。最后用信号的连接,完成对电路图内部的结构描述。最后用endmodule结束模块描述全过程。结束模块描述全过程。3)结构描述小结)结构描述小结(2)数据流描述

17、方式)数据流描述方式n 一个电路可以由赋值语句来描述,它将输入转化成所一个电路可以由赋值语句来描述,它将输入转化成所要输出值。此种定义方式称为数据流。要输出值。此种定义方式称为数据流。n在这种方式中,电路不以元件间的信号连接来描述,在这种方式中,电路不以元件间的信号连接来描述,而是用表达式来将输入转化或想要的输出。而是用表达式来将输入转化或想要的输出。n 表达式可以基于广泛的操作符,例如:逻辑、算术、表达式可以基于广泛的操作符,例如:逻辑、算术、条件、连接等操作符。条件、连接等操作符。n所有这些操作符被用到数据流方式中赋值,因此,所有这些操作符被用到数据流方式中赋值,因此,数据流方式比逻辑方程

18、更通用。数据流方式比逻辑方程更通用。n在连续赋值语句中,某个值被指派给线网变量。在连续赋值语句中,某个值被指派给线网变量。n连续赋值语句的语法为连续赋值语句的语法为: assign delay LHS_net = RHS_ expression;(3)行为描述方式)行为描述方式 三种描述方式中,行为方式是最高级的,也是最灵活三种描述方式中,行为方式是最高级的,也是最灵活的。的。 行为方式描述以电路的行为来描述电路。行为方式描述以电路的行为来描述电路。 设计的行为功能使用下述过程语句结构描述:设计的行为功能使用下述过程语句结构描述: 1) initial语句:此语句只执行一次。语句:此语句只执行

19、一次。 2) always语句:此语句总是循环执行语句:此语句总是循环执行, 或者说此语句或者说此语句重复执行。重复执行。 只有寄存器类型数据能够在这两种语句中被赋值。寄只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和化语句和always语句在语句在0时刻并发执行。时刻并发执行。modulemux2_1(out1,a,b,sel);outputout1;inputa,b;inputsel;assign out1= sel ? b : a;endmodule数数据据流流描描述述abselou

20、t1modulemux2_1(out1,a,b,sel);outputout1;inputa,b;inputsel;assign out1=(sel & b) | (sel & a);endmodule数数据据流流描描述述例:例: 用用Verilog HDL语言描述语言描述2 2选选1 1的的数据选择器。数据选择器。modulemux2_1(out1,a,b,sel);outputout1;inputa,b;inputsel;always (sel or a or b) begin if (sel) out1 = b; else out1 = a; endendmodulemodulemux2

21、_1(out1,a,b,sel);outputout1;inputa,b;inputsel;always (sel or a or b)begin case (sel) 1b0 : out1 = a; 1b1 : out1 = b; endcaseendendmodule行为描述行为描述module mux2_1(out1,a,b,sel); output out1; input a,b,sel; not (sel_, sel); and (a1, a, sel_); and (b1, b, sel_); or (out1, a1, b1);endmodule结结构构描描述述End(4)混合设

22、计描述方式)混合设计描述方式 在模块中,结构的和行为的结构可以自由混合。在模块中,结构的和行为的结构可以自由混合。n也就是说,模块描述中可以包含实例化的门、模块实也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及例化语句、连续赋值语句以及always语句和语句和initial语句语句的混合。它们之间可以相互包含。的混合。它们之间可以相互包含。n来自来自always语句和语句和initial语句的值能够驱动门或开关,语句的值能够驱动门或开关,而来自于门或连续赋值语句的值能够反过来用于触发而来自于门或连续赋值语句的值能够反过来用于触发always语句和语句和initial语句

23、。语句。 例:例: 下面是混合设计方式的下面是混合设计方式的1位全加器实例。位全加器实例。4.2 数字电路的Verilog 模型与实例例例1 1:交通灯监视电路。设每一组信号灯由红、黄、绿三交通灯监视电路。设每一组信号灯由红、黄、绿三盏灯组成,在正常工作情况下,任何时候必有一盏灯点盏灯组成,在正常工作情况下,任何时候必有一盏灯点亮,而且只允许一盏灯点亮,而当出现其他状态时,电亮,而且只允许一盏灯点亮,而当出现其他状态时,电路发生故障,这时要求发出故障信号。路发生故障,这时要求发出故障信号。n已知交通控制灯监视电路的顶层电路如图已知交通控制灯监视电路的顶层电路如图1-1所示。所示。n要求用要求用

24、VerilogHDL语言进行程序设计,建立一个交通语言进行程序设计,建立一个交通控制灯监视电路的文件名为控制灯监视电路的文件名为vexa1.v,并完成编译和仿真并完成编译和仿真。modulevjb1(Z,R,Y,G);outputZ;inputR,Y,G;wireM1,M2,M3,M4;wireNR,NY,NG;notu1(NR,R);notu2(NY,Y);notu3(NG,G);andu4(M1,R,Y);andu5(M2,Y,G);andu6(M3,R,G);andu7(M4,NR,NY,NG);oru8(Z,M1,M2,M3,M4);endmodule仿真波形如图仿真波形如图1-2所示

25、。所示。 由仿真波形可以看出由仿真波形可以看出Y、R、G中只允许一个变量为中只允许一个变量为1,而,而当出现其他状态时,电路发生故障,这时要求发出故障信号当出现其他状态时,电路发生故障,这时要求发出故障信号Z=1。例例2:已知一个已知一个4位二进制数位二进制数/8421/8421BCD码的码变换器码的码变换器顶层电路和真值表如图顶层电路和真值表如图2-1、表、表2-1所示。所示。n要求用要求用VerilogHDL语言进行程序设计,建立一语言进行程序设计,建立一个个4位二进制数位二进制数/8421/8421BCD码的文件名为码的文件名为vexa2.v,并完并完成编译和仿真成编译和仿真。modul

26、e vjb3(DXX,BX);output4:0DXX;input3:0BX;reg4:0DXX;always (BX)begincase(BX)4b0000:DXX=5b00000;4b0001:DXX=5b00001;4b0010:DXX=5b00010;4b0011:DXX=5b00011;4b0100:DXX=5b00100;4b0101:DXX=5b00101;4b0110:DXX=5b00110;4b0111:DXX=5b00111;4b1000:DXX=5b01000;4b1001:DXX=5b01001;4b1010:DXX=5b10000;4b1011:DXX=5b10001

27、;4b1100:DXX=5b10010;4b1101:DXX=5b10011;4b1110:DXX=5b10100;4b1111:DXX=5b10101;default:DXX=4b11111;endcaseendendmodule仿真波形如图2-2所示。由仿真波形可以看出将已知一个由仿真波形可以看出将已知一个4位二进制数位二进制数BX变换为变换为84218421BCD码的码的DXX码。码。例例3 3:由由3/8线译码器线译码器74138和门组成的函数发生器,和门组成的函数发生器,其设计的顶层电路如图其设计的顶层电路如图3-1所示。所示。n要求在要求在软件软件系统系统平台上用平台上用Veril

28、ogHDL语言进行语言进行程序设计,建立一个函数发生器的文件名为程序设计,建立一个函数发生器的文件名为vexa3.v,并完成编译和仿真并完成编译和仿真。modulemodule ls138 ( Y,A,G1,G2 );ls138 ( Y,A,G1,G2 );outputoutput7:07:0 Y;Y;inputinput2:02:0A;A;inputinput G1,G2;G1,G2;regreg7:0 Y;7:0 Y;wirewire G;G;assignassign G = G1 & G2;G = G1 & G2;alwaysalways ( ( A or G1 or G2A or G1

29、 or G2) )beginbegin if if (G)(G) case case (A)(A)3d0:Y=8b11111110;3d0:Y=8b11111110;3d1:Y=8b11111101;3d1:Y=8b11111101;3d2:Y=8b11111011;3d2:Y=8b11111011;3d3:Y=8b11110111;3d3:Y=8b11110111;3d4:Y=8b11101111;3d4:Y=8b11101111;3d5:Y=8b11011111;3d5:Y=8b11011111;3d6:Y=8b10111111;3d6:Y=8b10111111;3d7:Y=8b01111

30、1113d7:Y=8b01111111; ; endcaseendcase else else Y=8b11111111;Y=8b11111111; endendendmoduleendmodulemodulemodule vjb2(D8,D7,vjb2(D8,D7, D6,K8,K7,K6 ); D6,K8,K7,K6 );outputoutput D8,D7,D6;D8,D7,D6;inputinput K8,K7,K6;K8,K7,K6;wirewire7:0 Y;7:0 Y;wirewire2:0 A;2:0 A;wire wire VCC,GND;VCC,GND;assignassi

31、gn A2=K8;A2=K8;assignassign A1=K7;A1=K7;assignassign A0=K6;A0=K6;assignassign VCC=1;VCC=1;assignassign GND=0;GND=0;/module ls138(Y,A,G1,G2);/module ls138(Y,A,G1,G2);ls138ls138 u1 u1(.Y(Y),.A(A),.G1(VCC),(.Y(Y),.A(A),.G1(VCC), .G2(GND); .G2(GND);nandnand u2(D8,Y6,Y5,Y4,Y3);u2(D8,Y6,Y5,Y4,Y3);nandnand

32、 u3(D7,Y7,Y3,Y1);u3(D7,Y7,Y3,Y1);nandnand u4(D6,Y5,Y3,Y2);u4(D6,Y5,Y3,Y2);endmoduleendmodule仿真波形波形如图3-2所示。例例4:4:四选一数据选择器四选一数据选择器74153具有数据选择功能具有数据选择功能,设设四个数据为四个数据为D3=CPA、D2=CPB、D2=1、D0=0,地,地址和使能信号分别为址和使能信号分别为A1、A0及及G,数据输出端为,数据输出端为Y。n要求在要求在软件软件系统平台上用系统平台上用VerilogHDL语言进行程语言进行程序设计,建立一个四选一数据选择器的文件名为序设计,建

33、立一个四选一数据选择器的文件名为vexa3.v,并完成编译和仿真并完成编译和仿真。modulemodulevjb7( CPB,Y,CPA,A1,A0,G);vjb7( CPB,Y,CPA,A1,A0,G);outputoutput CPB;CPB;outputoutputY;Y;inputinput A1,A0;A1,A0;inputinput G;G;inputinput CPA;CPA;regreg Y;Y;wirewire1:01:0 A;A;assignassign A1=A1;A1=A1;assignassign A0=A0;A0=A0;regreg D3,D2,D1,D0;D3,D

34、2,D1,D0;regreg CPB;CPB;regreg2:0 i;2:0 i;always ( posedge CPA )( posedge CPA )begin if (i=3)(i=3) begin i=0; CPB = 1;i=0; CPB = 1; end else begin i=i+1; CPB = 0;i=i+1; CPB = 0; end endalways( A )( A )beginassign D3=CPA;D3=CPA;assign D2=CPB;D2=CPB;assign D1=1;D1=1;assign D0=0;D0=0;if (!G)if (!G) case

35、 (A1,A0) case (A1,A0) 2b11: Y =D3; 2b11: Y =D3; 2b10: Y =D2; 2b10: Y =D2; 2b01: Y =D1; 2b01: Y =D1; 2b00: Y =D0; 2b00: Y =D0; endcase endcase else else Y=1b0; Y=1b0; end endendmoduleendmodule仿真波形如图仿真波形如图4-1所示。所示。 由仿真波形可以看出在使能信号由仿真波形可以看出在使能信号G=0有效时,地址码有效时,地址码A1A0分别在分别在A1A0=00、A1A0=01、A1A0=10、A1A0=11时

36、时段上,选择了相应地址码对应输入通道上的数据,段上,选择了相应地址码对应输入通道上的数据,在在Y端输端输出。数据输出端出。数据输出端Y为一复合信号,实现数据选择的逻辑功能。为一复合信号,实现数据选择的逻辑功能。例例6:6:已知时序电路的状态图如图已知时序电路的状态图如图6-1所示,设计满足上述状所示,设计满足上述状态图的时序电路。态图的时序电路。设计要求:试用设计要求:试用VerilogHDL语言进行程序设计,要求以状语言进行程序设计,要求以状态机语句方式,建立文件名为态机语句方式,建立文件名为vjb4vjb4.v,并完成编译和仿真并完成编译和仿真。/* ZTJ */* ZTJ */modul

37、emodulevjb4(QOUT,CO,CLR,CLK );vjb4(QOUT,CO,CLR,CLK );Output Output 2:0QOUT;2:0QOUT;outputoutput CO;CO;inputinput CLR,CLK;CLR,CLK;regreg2:0 QOUT;2:0 QOUT;wirewire CO;CO;regreg2:0 STATE,NEXT_STATE;2:0 STATE,NEXT_STATE;parameterparameter STATE0=3b000,STATE1=3b001,STATE0=3b000,STATE1=3b001, STATE2=3b010

38、,STATE3=3b011,STATE2=3b010,STATE3=3b011, STATE4=3b100,STATE5=3b101,STATE4=3b100,STATE5=3b101, STATE6=3b110,STATE7=3b111; STATE6=3b110,STATE7=3b111;alwaysalways ( ( posedgeposedge CLKCLK or or posedge posedge CLR CLR ) )case (STATE)case (STATE) STATE0:begin NEXT_STATE = STATE1; end STATE0:begin NEXT_

39、STATE = STATE1; end STATE1:begin NEXT_STATE = STATE2; end STATE1:begin NEXT_STATE = STATE2; end STATE2:begin NEXT_STATE = STATE3; end STATE2:begin NEXT_STATE = STATE3; end STATE3:begin NEXT_STATE = STATE4; end STATE3:begin NEXT_STATE = STATE4; end STATE4:begin NEXT_STATE = STATE5; end STATE4:begin N

40、EXT_STATE = STATE5; end STATE5:begin NEXT_STATE = STATE0; end STATE5:begin NEXT_STATE = STATE0; end STATE6:begin NEXT_STATE = STATE7; end STATE6:begin NEXT_STATE = STATE7; end STATE7:begin NEXT_STATE = STATE0; end STATE7:begin NEXT_STATE = STATE0; end endcase endcaseendend begin if ( CLR )STATE = ST

41、ATE0; else STATE = NEXT_STATE; endalways(STATE) beginalwaysalways(STATE)(STATE)beginbegin case case (STATE)(STATE) STATE0:STATE0:QOUT=3b000;QOUT=3b000; STATE1:STATE1:QOUT=3b001QOUT=3b001; ; STATE2:STATE2:QOUT=3b010QOUT=3b010; ; STATE3:STATE3:QOUT=3b011QOUT=3b011; ; STATE4:STATE4:QOUT=3b100;QOUT=3b10

42、0; STATE5:STATE5:QOUT=3b101QOUT=3b101; ; STATE6:STATE6:QOUT=3b110QOUT=3b110; ; STATE7:STATE7:QOUT=3b111QOUT=3b111; ; endcaseendcaseendassign CO=(QOUT=3b101)?1:0;endmodule仿真波形如图仿真波形如图6-2所示。所示。 由仿真波形可以看出:时序电路的由仿真波形可以看出:时序电路的CLR变量为高电平时变量为高电平时电路复位、电路复位、CLR低电平时复位无效,低电平时复位无效,QOUT在在CLK的上跳的上跳沿作用下状态翻转,沿作用下状态

43、翻转,QOUT状态翻转满足上述状态图的翻状态翻转满足上述状态图的翻转逻辑功能,并就一个循环结束时输出进位信号转逻辑功能,并就一个循环结束时输出进位信号CO。例例7:7:已知由中规模可预置二进制加法计数器和门已知由中规模可预置二进制加法计数器和门电路组成的一位电路组成的一位8421BCD码十进制计数器的顶层码十进制计数器的顶层电路如图电路如图7-1所示。所示。n设计要求:试用设计要求:试用VerilogHDL语言进行程序设计,语言进行程序设计,要求以建立要求以建立IC40161模块,具有复位、置数、加模块,具有复位、置数、加1计数和保持功能;并以例化语句方式建立文件名计数和保持功能;并以例化语句

44、方式建立文件名为为veda3veda3.v,并完成编译和仿真并完成编译和仿真。/*ttl74ls161*/modulels161(Q,RCO,D,ET,EP,LOAD,CLR,CLK);output3:0Q;outputRCO;input3:0D;inputLOAD,ET,EP,CLR,CLK;reg3:0Q;wireEN;assignEN=ET&EP;always(posedgeCLKornegedgeCLR)beginif(!CLR)Q=4b0000;elseif(!LOAD)Q=D;elseif(EN)beginif(Q=15)Q=0;elseQ=Q+1;endendassign RCO

45、 =( Q = 4b1111 )& EN) ? 1:0;endmodule/*veda3*/moduleveda3(Q,CO,RRCO,CLK);outputQ;outputCO;outputRRCO;inputCLK;assignD=4b0000;assignVCC=1;assignGND=0;/modulels161(Q,RCO,D,ET,EP,LOAD,CLR,CLK);ls161u1(.Q(Q),.RCO(RCOL),.D(D),.ET(VCC),.EP(VCC),.LOAD(LOADL),.CLR(VCC),.CLK(CLK);nandu2(LOADL,Q3,Q0);notu3(CO

46、,LOADL);notu4(RRCO,RCOL);endmodule仿真波形如图所示。仿真波形如图所示。由仿真波形可以看出:时序电路由仿真波形可以看出:时序电路Q3:0在在CLK的上跳沿的上跳沿作用下状态翻转,实现十进制的计数规律,并就一个循环结作用下状态翻转,实现十进制的计数规律,并就一个循环结束时输出进位信号束时输出进位信号CO。例例8:设计一个七位串行输入、并行输出的移位寄存器。设计设计一个七位串行输入、并行输出的移位寄存器。设计要求:要求:建立模块建立模块ttl74ls194寄存器,具有置数、左移、右移寄存器,具有置数、左移、右移及寄存(保持)功能;及寄存(保持)功能;并以例化语句方式

47、建立文件名为并以例化语句方式建立文件名为veda7.v,并完成编译并完成编译和仿真和仿真。/*ttl74ls194*/modulels194(Q,D,S1,S0,DSR,DSL,CLR,CLK);output3:0Q;input3:0D;inputS1,S0,DSR,DSL,CLR,CLK;reg3:0Q;/wireEN;/assignEN=ET&EP;always(posedgeCLKornegedgeCLR)beginif(!CLR)Q=4b0000;elsecase(S1,S0)2b00: beginQ=Q;end2b01:beginQ=Q1;Q0=DSR;end2b10:beginQ1

48、;Q3=DSL;end2b11:beginQ=D;enddefault:beginQ=4bx;endendcaseendendmodule/*vjb10顶层文件顶层文件*/moduleveda7(DOUT,CLK,CLR,DSRIN,ST);output7:0DOUT;inputCLK,CLR,DSRIN;inputST;assignDDINH=4b1111;assignDDINL3:1=3b110;assignDDINL0=DSRIN;assignVCC=1;assignDDOUT7=DOUT7;/ls194(Q,D,S1,S0,DSR,DSL,CLR,CLK);ls194u1(.Q(DOU

49、T3:0),.D(DDINL),.S1(SS1),.S0(VCC),.DSR(DSRIN),.DSL(VCC),.CLR(CLR),.CLK(CLK);Ls194u2(.Q(DOUT7:4),.D(DDINH),.S1(SS1),.S0(VCC),.DSR(DOUT3),.DSL(VCC),.CLR(CLR),.CLK(CLK);nandu3(SS1,DDOUT7,ST);endmodule仿真波形如图所示仿真波形如图所示由仿真波形可以看出:由仿真波形可以看出:在启动信号在启动信号ST=0作用下,移位寄存器在作用下,移位寄存器在CLK的上跳沿作用下的上跳沿作用下并行置数并行置数11111101

50、到输出端,其中最低位为右移数据到输出端,其中最低位为右移数据DSRIN=1;ST置为置为1,寄存器输出数据,寄存器输出数据DOUT在在CLK的上跳沿作用下实现的上跳沿作用下实现数据右移,在数据右移,在7个个CLK周期内完成周期内完成一个循环,即一个循环,即右移右移7位数据,位数据,并行输出,实现七位串行输入、并行输出的移位寄存器功能。并行输出,实现七位串行输入、并行输出的移位寄存器功能。行为描述方式:行为描述方式: 一般使用下述语句描述,可以对组合、时序逻辑电路建模。一般使用下述语句描述,可以对组合、时序逻辑电路建模。 1 1)initialinitial 语句语句 2 2)alwaysalw

51、ays 语句语句小结:小结: 数据流描述方式:数据流描述方式:数据流描述方式:数据流描述方式: 一般使用一般使用assignassign语句描述,主要用于对组合逻辑语句描述,主要用于对组合逻辑电路建模。电路建模。 结构描述方式:结构描述方式:结构描述方式:结构描述方式: 一般使用一般使用PrimitivePrimitive(内部元件)、自定义的下层模(内部元件)、自定义的下层模块对电路描述。主要用于层次化设计中。块对电路描述。主要用于层次化设计中。 HDL产生的最初动因就是为了能够模拟硬件系统,从而可以分产生的最初动因就是为了能够模拟硬件系统,从而可以分析系统的性能,验证其功能是否正确。析系统

52、的性能,验证其功能是否正确。 要测试一个设计块是否正确,就要用要测试一个设计块是否正确,就要用Verilog再写一个测试模再写一个测试模块。这个测试模块应包括以下三个方面的内容:块。这个测试模块应包括以下三个方面的内容: 测试模块中要调用到设计块,只有这样才能对它进行测试;测试模块中要调用到设计块,只有这样才能对它进行测试; 测试模块中应包含测试的激励信号源;测试模块中应包含测试的激励信号源; 测试模块能够实施对输出信号的检测,并报告检测结果;测试模块能够实施对输出信号的检测,并报告检测结果;Stimulus and controlResponseGenerationand Verificat

53、ion Design Block DUT: Device Under Test 写出测试模块的过程又称为搭建测试平台写出测试模块的过程又称为搭建测试平台module mux2_1(out1,a,b,sel); output out1; input a,b,sel; not (sel_, sel); and (a1, a, sel_); and (b1, b, sel_); or (out1, a1, b1);endmodulemodule test_mux; reg a,b,s; wire out; mux2_1 u1(out, a, b, s); initial begin a=0; b=1

54、; s=0;#10 a=1; b=1; s=0;#10 a=1; b=0; s=0;#10 a=1; b=0; s=1;#10 a=1; b=1; s=1;#10 a=0; b=1; s=1;#10 $finish; end initial$monitor($time, “a=%b b=%b s=%b out=%b”, a,b,s,out);endmodule0 a=0 b=1 s=0 out=010 a=1 b=1 s=0 out=120 a=1 b=0 s=0 out=130 a=1 b=0 s=1 out=040 a=1 b=1 s=1 out=150 a=0 b=1 s=1 out=1 end

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号