第九章硬件描述语言Verilog_HDL_第1页
第九章硬件描述语言Verilog_HDL_第2页
第九章硬件描述语言Verilog_HDL_第3页
第九章硬件描述语言Verilog_HDL_第4页
第九章硬件描述语言Verilog_HDL_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

1、1n9.1 硬件描述语言概述硬件描述语言概述n9.2 Verilog HDL简介简介n 9.2.1 基本程序结构基本程序结构n 9.2.2 词法构成词法构成n 补充:常用语句补充:常用语句n 9.2.3 模块的描述方式模块的描述方式n9.3 用用Verilog HDL描述逻辑电路的实例描述逻辑电路的实例n 组合逻辑电路的组合逻辑电路的Verilog HDL描述描述n 时序逻辑电路的时序逻辑电路的Verilog HDL描述描述第九章第九章 硬件描述语言简介硬件描述语言简介29.1 硬件描述语言概述硬件描述语言概述可编程逻辑器件、电子设计自动化(可编程逻辑器件、电子设计自动化(EDA)与)与硬件描

2、述语言硬件描述语言l可编程逻辑器件是一种功能可变的集成器件可编程逻辑器件是一种功能可变的集成器件l可通过编程的方法设计其完成不同的逻辑功能可通过编程的方法设计其完成不同的逻辑功能l设计需借助软件工具,即采用电子设计自动化的方式设计需借助软件工具,即采用电子设计自动化的方式l设计形式有原理图和硬件描述语言两种设计形式有原理图和硬件描述语言两种l硬件描述语言是用来描述数字电路系统的一种语言硬件描述语言是用来描述数字电路系统的一种语言39.1 硬件描述语言概述硬件描述语言概述l硬件描述语言硬件描述语言HDL(Hardware Description Language )是一种高级程序语言,用来描述数

3、字电)是一种高级程序语言,用来描述数字电路和数字逻辑系统。数字逻辑电路设计者可利用这种路和数字逻辑系统。数字逻辑电路设计者可利用这种语言来编写设计文件描述自己的设计思想,在语言来编写设计文件描述自己的设计思想,在EDA工工具中建立电路模型。通过对电路结构或功能行为的描具中建立电路模型。通过对电路结构或功能行为的描述,可以在不同的抽象层次对电路进行逐层描述,然述,可以在不同的抽象层次对电路进行逐层描述,然后利用后利用EDA工具进行仿真验证,再自动综合到门级电工具进行仿真验证,再自动综合到门级电路,最后用路,最后用ASIC或或FPGA实现其功能。实现其功能。49.1 硬件描述语言概述硬件描述语言概

4、述目前常用的硬件描述语言有两种目前常用的硬件描述语言有两种VHDLVerilog HDLVery High Speed Integrated Circuit Hardware Description Language超高速集成电路硬件描述语言超高速集成电路硬件描述语言Verilog Hardware Description LanguageVerilog硬件描述语言硬件描述语言n 分别在分别在1987年和年和1995年被采纳为年被采纳为IEEE国际标准,广泛用于国际标准,广泛用于 数字集成电路的设计和验证领域数字集成电路的设计和验证领域。n 从使用者数量来看,目前两种语言平分秋色。从使用者数量

5、来看,目前两种语言平分秋色。n 两种语言相似的地方很多,学会一种可自学另一种。两种语言相似的地方很多,学会一种可自学另一种。5 Verilog HDL国国际际标准标准名称名称时间时间备注备注VerilogIEEE1364-19951995年年12月月基于基于Verilog HDL的优越性,的优越性,IEEE制定了制定了Verilog HDL的的IEEE标准,即标准,即Verilog HDL 1364-1995Verilog-A1996年年Verilog-A是由是由OVI提出的一种硬件描述语提出的一种硬件描述语言。是模拟电路行业的标准建模语言,来言。是模拟电路行业的标准建模语言,来源于源于IEE

6、E1364 Verilog规范规范1999年年模拟和数字都适用的模拟和数字都适用的Verilog标准公开发表标准公开发表VerilogIEEE1364-20012001年年IEEE制定了制定了Verilog IEEE1364-2001标准,标准,并公开发表;其中并公开发表;其中HDL部分相对于部分相对于1995标标准有较大增强,准有较大增强,PLI部分变化不大部分变化不大SystemVerilog IEEE1800-20052005年年此标准是继此标准是继VHDL和和Verilog HDL之后,之后,仿真工具支持的语言,它建立在仿真工具支持的语言,它建立在Verilog HDL语言的基础上,是

7、语言的基础上,是 IEEE 1364 Verilog-2001 标准的扩展增强,兼容标准的扩展增强,兼容Verilog-2001,并将成为下一代硬件设计,并将成为下一代硬件设计和验证的语言和验证的语言9.2 Verilog HDL简介简介6Verilog HDL在在数字集成电路设计流程中数字集成电路设计流程中的的作用作用9.2 Verilog HDL简介简介7章节目录章节目录n9.1 硬件描述语言概述硬件描述语言概述n9.2 Verilog HDL简介简介n 9.2.1 基本程序结构基本程序结构n 9.2.2 词法构成词法构成n 补充:常用语句补充:常用语句n 9.2.3 模块的描述方式模块的

8、描述方式n9.3 用用Verilog HDL描述逻辑电路的实例描述逻辑电路的实例n 组合逻辑电路的组合逻辑电路的Verilog HDL描述描述n 时序逻辑电路的时序逻辑电路的Verilog HDL描述描述9.2.1 Verilog HDL的基本程序结构的基本程序结构nVerilog HDL程序设计由程序设计由模块模块(module)构成的,以模块集构成的,以模块集合的形式来描述数字电路系统。合的形式来描述数字电路系统。n模块模块(module)是是Verilog HDL语言中描述电路的语言中描述电路的基本单元基本单元。模块对应硬件上的逻辑实体,描述这个实体的功能或结构,模块对应硬件上的逻辑实体

9、,描述这个实体的功能或结构,以及它与其他模块的接口。以及它与其他模块的接口。n所描述的可以是简单的逻辑门,也可以是功能复杂的系统。所描述的可以是简单的逻辑门,也可以是功能复杂的系统。n模块在概念上可等同一个器件,就如我们调用通用器件(与模块在概念上可等同一个器件,就如我们调用通用器件(与门、三态门等)或通用宏单元(译码器、计数器、门、三态门等)或通用宏单元(译码器、计数器、ALU、CPU)等,因此,)等,因此,一个模块可在另一个模块中调用一个模块可在另一个模块中调用。n一个电路设计可由多个模块组合而成,因此一个模块的设计一个电路设计可由多个模块组合而成,因此一个模块的设计只是一个系统设计中的某

10、个层次设计,只是一个系统设计中的某个层次设计,模块设计可采用多种模块设计可采用多种建模(描述)方式建模(描述)方式。89 一、模块端口的定义一、模块端口的定义n模块端口定义用来声明电路设计模块模块端口定义用来声明电路设计模块 的输入的输入/输出端口,端口定义格式如下:输出端口,端口定义格式如下: module 模块名模块名 (端口(端口1,端口,端口2,端口,端口3,););n在端口定义的括号中,是设计电路模块与外界联系的全部输入在端口定义的括号中,是设计电路模块与外界联系的全部输入/输出端口信号或引脚,是设计实体对外的一个通信界面,是外输出端口信号或引脚,是设计实体对外的一个通信界面,是外界

11、可以看到的部分(不包含电源和接地端),多个端口之间用界可以看到的部分(不包含电源和接地端),多个端口之间用“,”分隔。分隔。 例如例如1位全加器位全加器adder模块的端口定义为模块的端口定义为nmodule adder1 (A, B, CI ,S, CO);nmodule BCD_adder (A, B, CIN ,SUM, COUT);9模块模块(module) 的基本语法结构的基本语法结构module ();endmodule 二、模块内容二、模块内容 模块内容包括模块内容包括I/O声明、信号类型声明和功能描述。声明、信号类型声明和功能描述。 (1)模块的)模块的I/O声明声明 模块的模

12、块的I/O声明用来声明模块端口定义中各端口数据流声明用来声明模块端口定义中各端口数据流动方向,包括输入动方向,包括输入(input)、输出、输出(output)和双向和双向(inout)。I/O声明格式如下:声明格式如下: input msb:lsb 端口端口1,端口,端口2,端口,端口3,; /声明输入端口声明输入端口 output msb:lsb 端口端口1,端口,端口2,端口,端口3,;/声明输出端口声明输出端口n例如,例如,1位全加器的位全加器的I/O声明为声明为 input A, B, CI; output S, CO; 10input 3:0 A,B;output 3:0 SUM;

13、input CIN;output COUT; (2)信号类型声明)信号类型声明n信号类型声明是声明设计电路的功能描述中所用的信号类型声明是声明设计电路的功能描述中所用的信号的数据类型和函数。信号的数据类型主要有连信号的数据类型和函数。信号的数据类型主要有连线(线(wire)、寄存器()、寄存器(reg)、整型()、整型(integer)、)、实型(实型(real)、和时间()、和时间(time)等。)等。 信号声明格式如下:信号声明格式如下: wire msb:lsb 端口端口1,端口,端口2,端口,端口3,; reg msb:lsb 端口端口1,端口,端口2,端口,端口3,; (3)功能描述

14、)功能描述n功能描述是功能描述是Verilog HDL程序设计中最主要的部分,程序设计中最主要的部分,用来描述设计模块的内部结构和模块端口间的逻辑用来描述设计模块的内部结构和模块端口间的逻辑关系,在电路上相当于器件的内部电路结构。功能关系,在电路上相当于器件的内部电路结构。功能描述可以用描述可以用assign语句、元件例化(语句、元件例化(instantiate)语句、语句、always块语句、块语句、initial块语句等方法来实现,块语句等方法来实现,通常将设计模块描述的方法称为建模。通常将设计模块描述的方法称为建模。11 用用assign语句建模语句建模n 用用assign语句建模的方法

15、很简单,只需要在语句建模的方法很简单,只需要在“assign”后面再加一个表达式。后面再加一个表达式。assign语句一般适合对组合逻语句一般适合对组合逻辑进行赋值,称为连续赋值方式。辑进行赋值,称为连续赋值方式。n例例1 一位全加器的设计一位全加器的设计n1位全加器的逻辑符号:位全加器的逻辑符号:S是全加器的和输出端,是全加器的和输出端,CO是进位输出端,是进位输出端,A和和B是两个加数输入端,是两个加数输入端,CI是低位进位输入端。是低位进位输入端。12n全加器的全加器的Verilog HDL源程序如下:源程序如下: module adder1 (A, B, CI ,S, CO); inp

16、ut A, B, CI; output S, CO; wire S, CO, A, B, CI; assign CO, S = A+B+CI; endmodule n“assign CO, S = A+B+CI;”语句实现语句实现1位位全加器的进位输出全加器的进位输出CO与和输出与和输出S的建模。的建模。n在语句表达式中,用拼接运算符在语句表达式中,用拼接运算符“”将将CO、S这两个这两个1位操作数拼接为一个位操作数拼接为一个2位操作数。位操作数。13 用元件例化(用元件例化(instantiate)语句建模)语句建模n元件例化语句建模是利用元件例化语句建模是利用Verilog HDL提供的元

17、件库提供的元件库实现的。例如,用与门例化元件定义一个三输入端与实现的。例如,用与门例化元件定义一个三输入端与门可以写为门可以写为nand myand3(y,a,b,c); and是是Verilog HDL元件库元件库中与门元件名,中与门元件名,myand3是例化出的三输入端与门名,是例化出的三输入端与门名,y是与门输出端,是与门输出端,a、b、c是输入端。是输入端。 用用always块语句建模块语句建模nalways块语句可以产生各种逻辑,常用于时序逻辑块语句可以产生各种逻辑,常用于时序逻辑的功能描述。一个程序设计模块中,可以包含一个或的功能描述。一个程序设计模块中,可以包含一个或多个多个al

18、ways语句。程序运行中,在某种条件满足时,语句。程序运行中,在某种条件满足时,就重复执行一遍就重复执行一遍always结构中的语句。结构中的语句。14 例例2 8位二进制加法计数器的设计位二进制加法计数器的设计n8位二进制加法计数器的逻辑符号如图位二进制加法计数器的逻辑符号如图nOUT是是8位二进制计数器的输出端(位二进制计数器的输出端(8位向量);位向量);nCOUT是进位输出端(是进位输出端(1位);位);nD是并行数据输入端(是并行数据输入端(8位向量);位向量);nLOAD是计数器的预置控制输入端,是计数器的预置控制输入端,n当当LOAD=1时,时,OUT=D;nCLK是时钟控制输入

19、端,上升沿为有效边沿;是时钟控制输入端,上升沿为有效边沿;nCLR是同步复位输入端,当是同步复位输入端,当CLK的上升沿到来时的上升沿到来时且且CLR=1,则计数器被复位,则计数器被复位,OUT=00000000。(逻辑符号图是由计算机对计数器电路的(逻辑符号图是由计算机对计数器电路的Verilog HDL源代码源代码编译后产生的元件符号,图中的输入编译后产生的元件符号,图中的输入/输出标识符自动被改为大输出标识符自动被改为大写,而源程序中的标识符都是小写。)写,而源程序中的标识符都是小写。)15 8位二进制加法计数器的位二进制加法计数器的Verilog HDL 源程序如下:源程序如下: mo

20、dule cnt8 (d,load,cin,clk, clr,cout, out); input 7:0 d; input load, cin, clk, clr output 7:0 out; output cout; reg 7:0 out; always (posedge clk) begin if (load) out=d; else if(clr) out=b00000000; else out=out+1; end assign cout = &out; endmodulen用用always块语句实现块语句实现8位二进制加法计数器的建模。位二进制加法计数器的建模。(pose

21、dge clk)是时间控制敏感函数,表示是时间控制敏感函数,表示clk上升沿到来上升沿到来的敏感时刻。每当的敏感时刻。每当clk的上升沿到来时,的上升沿到来时,always块语句中的块语句中的全部语句就执行一遍。全部语句就执行一遍。“assign cout = &out;”语句产生语句产生进位输出进位输出cout,在语句中,在语句中“&out”是与的归约运算式,只有是与的归约运算式,只有out中数字全为中数字全为1时,结果才为时,结果才为1。16 用用initial块语句建模块语句建模nInitial块语句与块语句与always语句类似,不过在程序中它只执行语句类似,不过在程序

22、中它只执行1次就结束了。次就结束了。nInitial块语句的使用格式块语句的使用格式 : Initial Begin 语句语句1; 语句语句2; : endn例例3 用用Initial过程语句对测试变量赋值过程语句对测试变量赋值 initial begin for(addr=0; addr 大于大于= 大于等于大于等于 右移右移4 结果结果A=8b00001101而而A4 结果结果A=8b00010000。条件条件操作操作符符 ?: 操作数操作数=条件?表达式条件?表达式1:表:表达式达式2;当条件为真(值为当条件为真(值为1)时,操)时,操作数作数=表达式表达式1;为假(值为为假(值为0)时

23、,操作数)时,操作数=表达式表达式2。 三元操作符,即条件操作符有三个操作数。三元操作符,即条件操作符有三个操作数。例如例如 a?b:c若条件操作数若条件操作数a是逻辑是逻辑1,则算子返回表达式,则算子返回表达式1操操作数作数b;若若a是逻辑是逻辑0,则算子返回表达式,则算子返回表达式2操作数操作数c。 并接并接操作操作符符 , 将两个或两个以上用逗号分隔的表达式按位连将两个或两个以上用逗号分隔的表达式按位连接在一起。还可以用常数来指定重复的次数。接在一起。还可以用常数来指定重复的次数。例如例如 a,2a,b 等价于等价于a,a,b,a,b。 将将1位全加器的进位位全加器的进位co和和s并接,

24、表达式为并接,表达式为co,s=a+b+ci; 23n同其他高级语言类似,各类操作符号之间有优先级之分,如下表:同其他高级语言类似,各类操作符号之间有优先级之分,如下表:优先级序号优先级序号操作符操作符操作符名称操作符名称! 、 逻辑非、按位取反逻辑非、按位取反*、/、%乘、除、求余乘、除、求余+、-加、减加、减左移、右移左移、右移、 、=小于、小于等于、大于、大于等于小于、小于等于、大于、大于等于=、!=、=、!=等于、不等于、全等、不全等等于、不等于、全等、不全等&、& 归约与、归约与非归约与、归约与非 、归约异或、归约同或归约异或、归约同或|、 |归约或、归约或非归约或、

25、归约或非&逻辑与逻辑与|逻辑或逻辑或?: 条件操作符条件操作符列表顶部是最高优先级,底部是最低优先级。列在同一行中的操作符具有相同的优先级。所有列表顶部是最高优先级,底部是最低优先级。列在同一行中的操作符具有相同的优先级。所有操作符(?:除外)在表达式中都是从左向右结合的。圆括号()用于改变优先级或使得表达操作符(?:除外)在表达式中都是从左向右结合的。圆括号()用于改变优先级或使得表达式中运算顺序更加清晰,提高源文件的可读性。式中运算顺序更加清晰,提高源文件的可读性。24 (3)数值常量)数值常量n Verilog HDL中的数值常量有整型和实型两大类,分为十进制、十六进制、中的数值

26、常量有整型和实型两大类,分为十进制、十六进制、八进制或二进制。若在前面加上一个正八进制或二进制。若在前面加上一个正“+”或负或负“”号就表示有符号数,否号就表示有符号数,否则所代表的就是无符号数。在数值常量的任意位置可以随意插入下划线则所代表的就是无符号数。在数值常量的任意位置可以随意插入下划线“_”以提高可读性。以提高可读性。n常量定义格式为:常量定义格式为:parameter 常量名常量名1=表达式,常量名表达式,常量名2=表达式,表达式,常量名,常量名n=表达式;表达式;parameter是常量定义关键字,常量名是用户定义的标识符,表达式为常量赋是常量定义关键字,常量名是用户定义的标识符

27、,表达式为常量赋值。值。例如例如 parameter Vcc=5, fbus=8b11010001;nVerilog HDL中的整型数值常量就是整数,有两种书写格式:中的整型数值常量就是整数,有两种书写格式:n第一种是无位宽的十进制表示法,如第一种是无位宽的十进制表示法,如-132。n第二种是定义位宽和进制的表示法,这种表示方法通常是无符号数。第二种是定义位宽和进制的表示法,这种表示方法通常是无符号数。n常数书写格式是:常数书写格式是: sizebase value 其中其中size是位宽,定义了数值常量的位数(长度);是位宽,定义了数值常量的位数(长度);base 代表这个数据的进代表这个数

28、据的进制,取值范围和相应的进制如下表;制,取值范围和相应的进制如下表;value是一个数值常量的值,书写格式与是一个数值常量的值,书写格式与进制进制base相对应。相对应。 例如例如 16h6a8c,表示一个表示一个4位十六进制数。位十六进制数。 8hf5 等于等于8b11110101; 8b1111xxxx 等价等价8hfx; 8b1101zzzz 等价等价8hdz。25P448 表表9.2.2 Verilog HDL中的进制中的进制base进制代码取值进制代码取值对应的进制对应的进制b或或B二进制二进制o或或O八进制八进制d或或D十进制十进制h或或H十六进制十六进制 Verilog HDL

29、中的实型数值常量就是浮点数,可以用十进制与科学计中的实型数值常量就是浮点数,可以用十进制与科学计数法两种形式书写。如果采用十进制格式,小数点两边必须都有数字。数法两种形式书写。如果采用十进制格式,小数点两边必须都有数字。 Verilog HDL的编程最终是与硬件相对应的。由于硬件电路中信号的编程最终是与硬件相对应的。由于硬件电路中信号的逻辑状态具有特殊性,即不仅有的逻辑状态具有特殊性,即不仅有0(低电平)和(低电平)和1(高电平),还有可(高电平),还有可能是能是X(未知状态)和(未知状态)和Z(高阻态),因此(高阻态),因此Verilog HDL数值集合有四个数值集合有四个基本值:基本值:0

30、:逻辑:逻辑0或假状态;或假状态;1:逻辑:逻辑1或真状态;或真状态;X:逻辑不确定;:逻辑不确定;Z:高阻态。:高阻态。26(4)字符串)字符串n字符串是双引号字符串是双引号“”“”括起来的字符序列,必须包含在同括起来的字符序列,必须包含在同 一行中,不一行中,不能多行书写。在表达式或赋值语句中作为操作数的字符串被看作能多行书写。在表达式或赋值语句中作为操作数的字符串被看作ASCII值序列,即一个字符串中的每一个字符对应一个值序列,即一个字符串中的每一个字符对应一个8位位ASCII值。值。(5)标识符)标识符n标识符是模块、寄存器、端口、连线、示例和标识符是模块、寄存器、端口、连线、示例和b

31、egin-end块等元素的块等元素的名称,是赋给对象的唯一的名称。标识符可以是字母、数字、名称,是赋给对象的唯一的名称。标识符可以是字母、数字、$符和符和下划线下划线“_”字符的任意组合序列。字符的任意组合序列。n定义标识符规则:定义标识符规则:n首字符不能是数字,必须以字母或下划线首字符不能是数字,必须以字母或下划线“_”开头。开头。n字符数不能多于字符数不能多于1024。n标识符区分大小写。标识符区分大小写。n不要与关键字同名。不要与关键字同名。n例如例如 ina、inb、adder、adder8、name_adder是正确的,而是正确的,而1a ?b是错误的。是错误的。(6)关键字)关键

32、字n关键字是关键字是Verilog HDL预先定义的专用词。在预先定义的专用词。在IEEE标准标准Verilog HDL 1364-1995中规定了中规定了102个关键词,都采用小写形式。关键词个关键词,都采用小写形式。关键词有其特定和专有的语法作用,用户不能再对它们做新的定义。有其特定和专有的语法作用,用户不能再对它们做新的定义。27nP449 表表9.2.3 关键字关键字AlwaysandAssignattributeBeginBufBufif0Bufif1CaseCasexCasezCmosDeassignDefaultdefparamDisableedgeelseendendattri

33、buteendcaseendfunctionendmoduleendprimitiveendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0 highzlifinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenmosnornotnotif0 notifloroutputparameterpmosposedgeprimitivepull0pull1pulldownpulluprcmosrealrealtimeregreleaserepeat

34、rtraniflscalaredsignedsmallspecifyspecpramstrengthstrong0strong1supply0supply1tabletasktimetrantranif0tranif1 tritri0tri1triandtriortritegunsignedvectoredwaitwandweak0weak1whilewireworxnorxor 28 (7)变量)变量n变量是在程序运行时其值可以改变的量。在变量是在程序运行时其值可以改变的量。在Verilog HDL中,变量分为中,变量分为网络型(网络型(nets type)和寄存器型()和寄存器型(regi

35、ster type)两种。)两种。 网络型变量网络型变量nnets型变量是输出值始终根据输入变化而更新的变量,一般用来定义硬型变量是输出值始终根据输入变化而更新的变量,一般用来定义硬件电路中的各种物理连线。件电路中的各种物理连线。Verilog HDL提供了多种提供了多种nets型变量。型变量。n常见的常见的nets型变量及说明型变量及说明类型类型功能说明功能说明wire、 tri连线类型(两者功能完全相同)连线类型(两者功能完全相同)wor、 trior具有线或特性的连线(两者功能一致)具有线或特性的连线(两者功能一致)wand、 triand具有线与特性的连线(两者功能一致)具有线与特性的

36、连线(两者功能一致)tri1、 tri0分别为上拉电阻和下拉电阻分别为上拉电阻和下拉电阻supply1、 supply0分别为电源(逻辑分别为电源(逻辑1)和地(逻辑)和地(逻辑0)29 寄存器型变量寄存器型变量nregister型变量是用来描述硬件系统的基本数据对象。作为一种数值型变量是用来描述硬件系统的基本数据对象。作为一种数值容器,可以容纳当前值,也可以保持历史值。与寄存器的记忆功能相容器,可以容纳当前值,也可以保持历史值。与寄存器的记忆功能相对应,可以作为模块各器件间的信息传递通道。对应,可以作为模块各器件间的信息传递通道。nregister型变量与型变量与wire型变量的区别在于:型

37、变量的区别在于:nregister型变量需要被明确的赋值,并且在重新赋值前一直保持原值。型变量需要被明确的赋值,并且在重新赋值前一直保持原值。nregister型变量是在型变量是在always、initial等过程语句中定义,并通过过程等过程语句中定义,并通过过程语句赋值。语句赋值。n常见的常见的register型变量及说明型变量及说明类型类型功能说明功能说明reg常用的寄存器型变量常用的寄存器型变量integer32位带符号整数型变量位带符号整数型变量real64位带符号实数型变量位带符号实数型变量time无符号时间型变量无符号时间型变量3031章节目录章节目录n9.1 硬件描述语言概述硬件

38、描述语言概述n9.2 Verilog HDL简介简介n 9.2.1 基本程序结构基本程序结构n 9.2.2 词法构成词法构成n 补充:常用语句补充:常用语句n 9.2.3 模块的描述方式模块的描述方式n9.3 用用Verilog HDL描述逻辑电路的实例描述逻辑电路的实例n 组合逻辑电路的组合逻辑电路的Verilog HDL描述描述n 时序逻辑电路的时序逻辑电路的Verilog HDL描述描述补充:补充: Verilog HDL的常用语句的常用语句nVerilog HDL的语句包括赋值语句、条件语句、循环语句、结的语句包括赋值语句、条件语句、循环语句、结构声明语句和编译预处理语句等类型,每一类

39、语句又包括几种构声明语句和编译预处理语句等类型,每一类语句又包括几种不同的语句。在这些语句中,有些语句属于顺序执行语句,有不同的语句。在这些语句中,有些语句属于顺序执行语句,有些语句属于并行执行语句。些语句属于并行执行语句。(1)赋值语句)赋值语句n在在Verilog HDL中,赋值语句常用于描述硬件设计电路输出与中,赋值语句常用于描述硬件设计电路输出与输入之间的信息传送,改变输出结果。输入之间的信息传送,改变输出结果。Verilog HDL有有4种赋值种赋值方法:门基元、连续赋值、过程赋值和非阻塞赋值。方法:门基元、连续赋值、过程赋值和非阻塞赋值。门基元赋值语句门基元赋值语句n门基元赋值语句

40、的格式为:门基元赋值语句的格式为:n基本逻辑门关键字基本逻辑门关键字 (门输出,门输入(门输出,门输入1,门输入,门输入2,门输,门输入入n););n例如例如 4输入与非门的门基元赋值语句为输入与非门的门基元赋值语句为 nand (y,a,b,c,d); /与语句与语句assign y=(a&b&c&d)等效等效32 连续赋值语句连续赋值语句n连续赋值语句的关键字连续赋值语句的关键字assign,赋值符号是,赋值符号是“=”,赋值语,赋值语句的格式为:句的格式为: assign 赋值变量赋值变量=表达式;表达式;n例如例如 assign y=(a&b&c

41、&d);n连续赋值语句的连续赋值语句的“=”两边的变量都应该是两边的变量都应该是wire型变量。在型变量。在执行中,输出执行中,输出y的变化跟随输入的变化跟随输入a、b、c、d的变化而变化,的变化而变化,反映了信息传送的连续性。连续赋值语句用于逻辑门和组合反映了信息传送的连续性。连续赋值语句用于逻辑门和组合逻辑电路的描述。逻辑电路的描述。n例例1 四输入端与非门的四输入端与非门的Verilog HDL源程序源程序 module example1(y,a,b,c,d); output y; input a,b,c,d; assign #1 y=(a&b&c&d);

42、 /#1表示输出与输入信号之间具有表示输出与输入信号之间具有1个单位的时间延迟个单位的时间延迟 endmodule33 过程赋值语句过程赋值语句n过程赋值语句出现在过程赋值语句出现在initial和和always块语句中,赋值符号块语句中,赋值符号是是“=”,语句格式为:,语句格式为: 赋值变量赋值变量=表达式;表达式;n过程赋值语句过程赋值语句“=”左边的赋值变量必须是(寄存器)左边的赋值变量必须是(寄存器)reg型型变量,变量,其值在该语句结束时即可得到。其值在该语句结束时即可得到。n如果一个块语句中包含若干条过程赋值语句,按顺序一条一如果一个块语句中包含若干条过程赋值语句,按顺序一条一条

43、执行,前面的语句没完成,后面的语句就不能执行。条执行,前面的语句没完成,后面的语句就不能执行。n因此,过程赋值语句也称为阻塞赋值语句。因此,过程赋值语句也称为阻塞赋值语句。34 非阻塞赋值语句非阻塞赋值语句n非阻塞赋值语句也是出现在非阻塞赋值语句也是出现在initial和和always块语句中,赋值符号是块语句中,赋值符号是“=”,语句格式为:语句格式为: 赋值变量赋值变量=表达式;表达式;n非阻塞赋值语句非阻塞赋值语句“=”左边的赋值变量必须是(寄存器)左边的赋值变量必须是(寄存器)reg型变量,型变量,其值其值在块语句结束时才可得到在块语句结束时才可得到,与过程赋值语句不同。,与过程赋值语

44、句不同。n例如例如 下面的块语句包含下面的块语句包含4条赋值语句条赋值语句 always (posedge clock) begin m=3; n=75; n=m; r=n; endn语句执行结束后,语句执行结束后,r的值是的值是75,而不是,而不是3,因为第,因为第3行是非阻塞赋值语句行是非阻塞赋值语句“n=m”,该语句要等到本块语句结束时,该语句要等到本块语句结束时,n的值才能改变。的值才能改变。n块语句的块语句的“(posedge clock)”是定时控制敏感函数,表示时钟信号是定时控制敏感函数,表示时钟信号clock的上升沿到来的敏感时刻。的上升沿到来的敏感时刻。n例例2 上升沿触发的

45、上升沿触发的D触发器的触发器的Verilog HDL源程序源程序 module D_FF(q,d,clock); input d,clock; /属于属于wire型变量型变量 output q; /属于属于reg型变量型变量 reg q; always (posedge clock) q=d; endmodule35 (2)条件语句)条件语句n条件语句包含条件语句包含if语句和语句和case语句,它们都是顺序语句,应放在语句,它们都是顺序语句,应放在always块中。块中。 if语句语句n完整的完整的Verilog HDL的的if语句结构如下:语句结构如下: if(表达式)(表达式) begi

46、n 语句;语句; end else if(表达式)(表达式) begin 语句;语句; end else begin 语句;语句; endn在在if语句中,语句中,“表达式表达式”是逻辑表达式或关系表达式,也可以是位宽为是逻辑表达式或关系表达式,也可以是位宽为1位的位的变量。变量。n系统对表达式的值进行判断,系统对表达式的值进行判断, 若为若为0,x,z按按“假假”处理;若为处理;若为1,按,按“真真”处理,执行指定的语句。处理,执行指定的语句。36 例例3 8线线-3线优先编码器的设计线优先编码器的设计n8线线-3线优先编码器的功能表线优先编码器的功能表 module code(y,a);

47、input 7:0 a; output 2:0 y; reg 2:0 y; always (a) begin if(a7) y=3b111; else if(a6) y=3b110; else if(a5) y=3b101; else if(a4) y=3b100; else if(a3) y=3b011; else if(a2) y=3b010; else if(a1) y=3b001; else y=3b000; end endmodule输入输入输出输出in0 in1 in2 in3 in4 in5 in6 in7out2 out1 out0 x x x x x x x 0 x x x

48、x x x 0 1 x x x x x 0 1 1 x x x x 0 1 1 1 x x x 0 1 1 1 1 x x 0 1 1 1 1 1 x 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 037 case语句语句ncase语句是一种多分支的条件语句,语句是一种多分支的条件语句,case语句的格式为:语句的格式为: case(表达式)(表达式) 选择值选择值1: 语句语句1; 选择值选择值2: 语句语句2; 选择值选择值n: 语句语句n; default: 语句语句n+1 endc

49、asen执行执行case语句时,首先计算表达式的值,然后执行条件句中语句时,首先计算表达式的值,然后执行条件句中相应的相应的“选择值选择值”的语句。当所有的条件句的的语句。当所有的条件句的“选择值选择值”与表与表达式的值不同时,则执行达式的值不同时,则执行“default”后的语句。后的语句。default可以可以省略。省略。 ncase语句多用于数字系统中的译码器、数据选择器、状态机语句多用于数字系统中的译码器、数据选择器、状态机及微处理器的指令译码器等电路的描述。及微处理器的指令译码器等电路的描述。38 例例4:用:用case语句描述语句描述4选选1数据选择器数据选择器n控制信号控制信号s

50、1,s2有有4种组合,控制种组合,控制a,b,c,d中的一个数据送到输出端。中的一个数据送到输出端。n4选选1数据选择器数据选择器Verilog HDL的描述如下:的描述如下: module mux_4_1(z,a,b,c,d,s1,s2); input s1,s2; input a,b,c,d; output z; reg z; always (a,b,c,d,s1,s2) begin case(s1,s2) 2b00: z=a; 2b01: z=b; 2b10: z=c; 2b11: z=d; endcase end endmodulencase语句还有两种变体形式,语句还有两种变体形式,

51、casez和和casex语句。与语句。与case语句的区别是语句的区别是不考虑语句中的高阻不考虑语句中的高阻z和未知和未知x的那些位,只关注其他位的比较结果。的那些位,只关注其他位的比较结果。s1 s2z0 00 11 01 1abcd4选选1数据选择器功能表数据选择器功能表39 (3)循环语句)循环语句n循环语句包含循环语句包含for语句、语句、repeat语句、语句、while语句和语句和forever语语句句4种。种。 for语句语句nfor语句的格式为:语句的格式为: for(循环指针(循环指针=初值;循环指针初值;循环指针 终值;循环指针终值;循环指针=循环指针循环指针+步长值)步长

52、值) begin 语句;语句; endnfor语句可以是一组语句重复执行,语句中的参数一般属于整语句可以是一组语句重复执行,语句中的参数一般属于整型变量或常量。语句重复执行的次数由语句中的参数确定。即型变量或常量。语句重复执行的次数由语句中的参数确定。即 循环重复次数循环重复次数=(终值(终值-初值)初值)/步长值步长值40 例例5:8位奇偶校验器的描述位奇偶校验器的描述n用用a表示输入信号,长度为表示输入信号,长度为8位的向量。在程序中,用位的向量。在程序中,用for语句对语句对a的值,逐位进行模的值,逐位进行模2加运算(即异或加运算(即异或XOR),循环指针变量),循环指针变量n控控制模制

53、模2加的次数。加的次数。 11100110 奇数个奇数个1n循环变量的初值为循环变量的初值为0,终值为,终值为8,因此,控制循环共执行了,因此,控制循环共执行了8次。次。 例例5 用用Verilog HDL对对8位奇偶校验器的描述如下:位奇偶校验器的描述如下: module test8(a,out); input7:0 a; output out; reg out; integer n; always (a) begin out=0; for(n=0;n=b) max=a; else max=b; end endfunctionn函数调用的格式如下函数调用的格式如下: 函数名函数名 (关联参数

54、表);(关联参数表);n函数调用一般是出现在模块、任务或函数语句中。通过函数的调用来函数调用一般是出现在模块、任务或函数语句中。通过函数的调用来完成某些数据的运算或转换。例如,调用上例中求最大值函数的语句完成某些数据的运算或转换。例如,调用上例中求最大值函数的语句为为 z=max(x, y);n其中,其中,x和和y是与函数定义的两个参数是与函数定义的两个参数a、b相关联的关联参数。通过函相关联的关联参数。通过函数的调用,求出数的调用,求出x和和y中的最大值,并用函数名中的最大值,并用函数名max返回。返回。49 函数和任务存在以下几处区别:函数和任务存在以下几处区别:n(1)任务可以有任意不同

55、类型输入)任务可以有任意不同类型输入/输出参数,函输出参数,函数不能将数不能将inout类型作为输出。类型作为输出。n(2)任务只可以在过程语句中调用,不能在连续)任务只可以在过程语句中调用,不能在连续赋值语句赋值语句assign中调用;函数可以作为表达式中的中调用;函数可以作为表达式中的一个操作数,在过程赋值语句和连续赋值语句中均一个操作数,在过程赋值语句和连续赋值语句中均可调用。可调用。n(3)任务可以调用其他任务或函数;函数可以调)任务可以调用其他任务或函数;函数可以调用其他函数,但不能调用任务。用其他函数,但不能调用任务。n(4)任务不向表达式返回值,函数向调用它的表)任务不向表达式返

56、回值,函数向调用它的表达式返回一个值。达式返回一个值。50(5)语句的顺序执行与并行执行)语句的顺序执行与并行执行nVerilog HDL中有顺序执行语句中有顺序执行语句和并行执行语句之分。和并行执行语句之分。nalways块语句中的语句是顺序语块语句中的语句是顺序语句,按照程序书写的顺序执行。句,按照程序书写的顺序执行。nalways块本身却是并行语句,它块本身却是并行语句,它与其他与其他always语句及语句及assign语语句、元件例化语句的执行都是同句、元件例化语句的执行都是同时(即并行)的。时(即并行)的。n例例9 同步清除十进制加法计数器同步清除十进制加法计数器的描述的描述n同步清

57、同步清0是在时钟信号作用下,是在时钟信号作用下,计数器的状态被计数器的状态被clr清清0,清,清0信号信号clr高电平有效;高电平有效;n时钟信号时钟信号clk上升沿触发。计数器上升沿触发。计数器计数状态从计数状态从4b0000到到4b1001循环。循环。module cnt10(clr,clk,q,co); input clr,clk; output3:0 q; output co; reg 3:0 q; reg co; always (posedge clk) begin if(clr) begin co=0; q=4b0000; end else if (q=4b1001) begin

58、q=4b0000; co=1; end else begin co=0; q=q+1; end end endmodule 5152章节目录章节目录n9.1 硬件描述语言概述硬件描述语言概述n9.2 Verilog HDL简介简介n 9.2.1 基本程序结构基本程序结构n 9.2.2 词法构成词法构成n 补充:常用语句补充:常用语句n 9.2.3 模块的描述方式模块的描述方式n9.3 用用Verilog HDL描述逻辑电路的实例描述逻辑电路的实例n 组合逻辑电路的组合逻辑电路的Verilog HDL描述描述n 时序逻辑电路的时序逻辑电路的Verilog HDL描述描述9.2.3 Verilog

59、 HDL模块的描述方式(建模模块的描述方式(建模方法)方法)n系统级系统级(system): 用高级语言结构用高级语言结构实现设计模块的外部性能的模型。实现设计模块的外部性能的模型。n算法级算法级(algorithmic): 用高级语言用高级语言结构实现设计算法的模型。结构实现设计算法的模型。nRTL级级(Register Transfer Level): 描述数据在寄存器之间流动和如何描述数据在寄存器之间流动和如何处理这些数据的模型。处理这些数据的模型。n门级门级(gate-level): 描述逻辑门以及描述逻辑门以及逻辑门之间的连接的模型。逻辑门之间的连接的模型。n开关级开关级(switc

60、h-level): 描述器件描述器件中三极管和储存节点以及它们之间中三极管和储存节点以及它们之间连接的模型。连接的模型。 逻逻辑辑级级 电电路路级级 系系统统级级 算算法法级级 算算法法级级 RTL 级级 RTL 级级 门门级级 门门级级 开开关关级级 VHDL Verilog HDL 行行为为级级 用用Verilog HDL描述的电路就称为描述的电路就称为该设计电路的该设计电路的Verilog HDL模型模型建模层次:不同抽象级别的建模层次:不同抽象级别的Verilog HDL模型模型53Verilog HDL模块模块的描述方式的描述方式n1、结构描述结构描述:描述元:描述元器件间连接关系:器件间连接关系: 主要采用元件主要采用元件例化语句例化语句instantiate;n2、数据流描述数据流描述:描述:

温馨提示

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

评论

0/150

提交评论