数字电子技术基础VerilogHDL语言课件_第1页
数字电子技术基础VerilogHDL语言课件_第2页
数字电子技术基础VerilogHDL语言课件_第3页
数字电子技术基础VerilogHDL语言课件_第4页
数字电子技术基础VerilogHDL语言课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1、数字电子技术基础第9章 verilog hdl语言1第第9 9章章 verilog hdlverilog hdl语言语言 verilog hdlverilog hdl是使用广泛的硬件描述语言,该语言的特点是是使用广泛的硬件描述语言,该语言的特点是语言能力强,代码简单,有大量支持仿真的语句与可综合语句。语言能力强,代码简单,有大量支持仿真的语句与可综合语句。本章介绍该语言中的可综合语句描述数字电路与系统,重点介绍本章介绍该语言中的可综合语句描述数字电路与系统,重点介绍该语言的基本语法、组合电路与时序电路的描述与实际描述举例。该语言的基本语法、组合电路与时序电路的描述与实际描述举例。数字电子技术基

2、础第9章 verilog hdl语言29.1 verilog hdl9.1 verilog hdl语言基础语言基础verilog hdlverilog hdl语言以模块(语言以模块(modulemodule)的形式来描述数字电路,模块接口部分用来描)的形式来描述数字电路,模块接口部分用来描述与其他模块之间的连接,一般一个文件就是一个模块。模块的定义从关键词述与其他模块之间的连接,一般一个文件就是一个模块。模块的定义从关键词modulemodule开始,到关键词开始,到关键词endmoduleendmodule结束,每条结束,每条verilog hdlverilog hdl语句以分号语句以分号“

3、;”作为结作为结束(块语句、束(块语句、endmoduleendmodule等少数语句除外)。注释语句单行以等少数语句除外)。注释语句单行以“/”/”开头,多行以开头,多行以“/ /* *”开始、以开始、以“*/”/”结束。该语言很多规定与结束。该语言很多规定与c c语言相似。语言相似。【例例9-19-1】 verilog hdl verilog hdl描述与非门。描述与非门。module nand(in1,in2,out)module nand(in1,in2,out);/以以modulemodule开头,随后是模块名和括号内的端口名列表,最后以开头,随后是模块名和括号内的端口名列表,最后以

4、分分 /号结束号结束 input in1,in2; /input in1,in2; /定义端口类型,只有输入定义端口类型,只有输入(input)(input)、输出、输出(output)(output)和双向和双向(inout)(inout)三种三种 output out; output out; / /凡是在端口列表的端口,都必须经过定义凡是在端口列表的端口,都必须经过定义 /wire in1,in2,out; /wire in1,in2,out; / /由于由于in1in1、in2in2和和outout是是1 1位宽连线类型,所以可以采用默认定位宽连线类型,所以可以采用默认定义,此义,此

5、/语句可省略语句可省略 assign out=(in1&in2); /assign out=(in1&in2); /连续赋值语句连续赋值语句assignassign描述组合电路描述组合电路 /在在verilogverilog中,还有中,还有initialinitial叙述、叙述、alwaysalways叙述、模块调用、门调用叙述、模块调用、门调用等等endmodule /endmodule /关键字关键字endmoduleendmodule用于结束行,注意其后没有分号用于结束行,注意其后没有分号数字电子技术基础第9章 verilog hdl语言39.1.1 verilog hd

6、l9.1.1 verilog hdl中的基本约定中的基本约定1 1可用在描述语句中的逻辑状态可用在描述语句中的逻辑状态0 0表示逻辑表示逻辑0 0、逻辑非、低电平、假;、逻辑非、低电平、假;1 1表示逻辑表示逻辑1 1、逻辑真、高电平、真。、逻辑真、高电平、真。x x或或x x表示不确定的逻辑状态;表示不确定的逻辑状态;z z或或z z表示高阻态。表示高阻态。2 2整数及其表示整数及其表示整数可以按照简单十进制数格式或基数格式书写。整数可以按照简单十进制数格式或基数格式书写。(1 1)简单十进制数格式)简单十进制数格式简单十进制数的整数表示与普通十进制数表示相同,例如,简单十进制数的整数表示与

7、普通十进制数表示相同,例如,3535、-46-46。(2 2)基数格式)基数格式表示格式:表示格式:+/-+/- 其中:其中:+/-+/-是符号位;位宽就是数的等效二进制数的位数(是符号位;位宽就是数的等效二进制数的位数(bitbit),位宽用十进制数),位宽用十进制数表示;二进制的基数符号位表示;二进制的基数符号位b b或或b b;八进制的基数符号是;八进制的基数符号是o o或或o o;十进制的基数符号是;十进制的基数符号是d d或或d d,可默认不写基数符号;十六进制的基数符号是,可默认不写基数符号;十六进制的基数符号是h h或或h h。一些规定:一些规定: 数值中,左边是数值最高位(数值

8、中,左边是数值最高位(msbmsb),右边是最低有效位(),右边是最低有效位(lsblsb);); 在二进制中,在二进制中,x x、z z只代表相应位的逻辑状态,只代表相应位的逻辑状态,x x表示不定,表示不定,z z表示高阻;表示高阻; 当位宽默认时,位宽为当位宽默认时,位宽为3232位。位。例如:例如:3b0003b000是位宽为是位宽为3 3的二进制数;的二进制数; res = 8b11111110res = 8b11111110是是8 8位二进制数;位二进制数; 9o6719o671是位宽为是位宽为9 9的八进制数;的八进制数; 8h3f8h3f是位宽为是位宽为8 8的十六进制数。的十

9、六进制数。 数字电子技术基础第9章 verilog hdl语言43 3标志符取名标志符取名标志符取名的规定:标志符必须是字母或下画线开头,长度小于标志符取名的规定:标志符必须是字母或下画线开头,长度小于10241024;后续部分可以;后续部分可以是字母、数字或下画线;是字母、数字或下画线;verilog hdlverilog hdl中的标志符区分大小写。中的标志符区分大小写。例如,例如,_bus_bus,topptopp,busbus。4 4系统命令系统命令以以$ $开头的标志符代表开头的标志符代表verilog hdlverilog hdl中的命令(系统任务与系统函数),普通的标志符中的命令

10、(系统任务与系统函数),普通的标志符不能以不能以$ $开头。开头。5 5保留字保留字verilog hdlverilog hdl语言内部已经使用的保留字,在语言内部已经使用的保留字,在verilog hdlverilog hdl语言编辑器中,保留字以醒语言编辑器中,保留字以醒目的颜色表示。目的颜色表示。数字电子技术基础第9章 verilog hdl语言59.1.2 9.1.2 数据类型数据类型 verilog hdlverilog hdl中的中的4 4种最基本数据类型是:整型(种最基本数据类型是:整型(integerinteger)、参数()、参数(parameterparameter)型、寄

11、存器(型、寄存器(regreg)类型和连线()类型和连线(wirewire)类型。)类型。1 1连线类型连线类型常用的连线类型关键字为常用的连线类型关键字为wirewire。连线类型的逻辑状态为连线类型的逻辑状态为0 0、1 1、x x(任意)、(任意)、z z(高阻),连线类型主要用在模块的结(高阻),连线类型主要用在模块的结构描述中,对应硬件的物理信号连线,当用数字表示其逻辑值时,不存在符号位。构描述中,对应硬件的物理信号连线,当用数字表示其逻辑值时,不存在符号位。在用连线类型的信号时,必须用连线类型定义语句对信号进行类型说明,当说明被在用连线类型的信号时,必须用连线类型定义语句对信号进行

12、类型说明,当说明被省略时,表示位宽为省略时,表示位宽为1bit1bit的的wirewire型连线信号。型连线信号。wirewire是基本的、不附带其他功能的连是基本的、不附带其他功能的连线,也是最常用的连线类型。线,也是最常用的连线类型。对于对于inputinput,outputoutput和和inoutinout端口,若未指明数据类型,默认为连线类型。端口,若未指明数据类型,默认为连线类型。连线类型定义格式:连线类型定义格式: 矢量范围矢量范围 , , 连线名连线名;矢量范围以矢量范围以msb:lsbmsb:lsb格式描述。格式描述。例如:例如:wire 0: 31 w1, w2; wire

13、 0: 31 w1, w2; / w1/ w1和和w2w2是是3232位连线类型,高位位连线类型,高位msbmsb为为bit0bit0 wir5e 7:0 tmp; wir5e 7:0 tmp; /tmp/tmp为为8 8位连线,高位位连线,高位msbmsb为为bit7bit7,低位,低位lsblsb是是位位0 0数字电子技术基础第9章 verilog hdl语言62 2寄存器类型寄存器类型常用的寄存器类型的关键字为常用的寄存器类型的关键字为regreg。 寄存器类型的信号,必须通过过程赋值语句进行赋值,只能出现在寄存器类型的信号,必须通过过程赋值语句进行赋值,只能出现在alwaysalway

14、s后后面的过程语句中。面的过程语句中。 寄存器变量的定义格式:寄存器变量的定义格式: 矢量范围矢量范围 ,寄存器名,寄存器名;矢量范围以矢量范围以msb:lsbmsb:lsb格式描述。格式描述。例如:例如:reg a; reg a; /a a为寄存器类型为寄存器类型 reg 3: 0 v; reg 3: 0 v; / / v v为为4 4位寄存器类型位寄存器类型 reg 7: 0 m, n; reg 7: 0 m, n; /m m和和n n为为8 8位寄存器类型位寄存器类型在在verilog hdlverilog hdl中,线宽为一位的连线和只有一位的寄存器变量称为标量;线宽中,线宽为一位的连

15、线和只有一位的寄存器变量称为标量;线宽大于一位的连线和位宽大于一位的寄存器变量为矢量。大于一位的连线和位宽大于一位的寄存器变量为矢量。按位或部分位赋值的矢量称为标量类矢量,相当于多个一位标量的集合,标量类按位或部分位赋值的矢量称为标量类矢量,相当于多个一位标量的集合,标量类矢量进行类型说明时,需要关键字矢量进行类型说明时,需要关键字scalaredscalared(可以默认)。(可以默认)。例如,例如,reg scalared 7:0 reg_areg scalared 7:0 reg_a;/reg_a/reg_a被定义成标量类矢量被定义成标量类矢量该说明可以默认关键字该说明可以默认关键字sc

16、alaredscalared,因此可以写成:,因此可以写成:reg 7:0 reg_areg 7:0 reg_a; 数字电子技术基础第9章 verilog hdl语言73 3端口信号与内部信号端口信号与内部信号 信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其他的信号为内部信号。对于端口信号,输入端口只能是连线类型。输出端口可其他的信号为内部信号。对于端口信号,输入端口只能是连线类型。输出端口可以是连线(以是连线(wirewire)类型,也可以是寄存器()类型,也可以是寄存器(registerregister

17、)类型。若输出端口在过程)类型。若输出端口在过程块中赋值则为块中赋值则为registerregister类型;若在过程块外赋值,则为类型;若在过程块外赋值,则为wirewire类型。类型。 内部信号类型与输出端口相同,可以是连线(内部信号类型与输出端口相同,可以是连线(wirewire)类型或寄存器)类型或寄存器(registerregister)类型。若在过程块()类型。若在过程块(alwaysalways叙述)中赋值,则为叙述)中赋值,则为registerregister类型;若类型;若在过程块外赋值,则为在过程块外赋值,则为wirewire类型。类型。 端口类型只有输入(端口类型只有输入

18、(inputinput)、输出()、输出(outputoutput)和双向()和双向(inoutinout)三种,凡是)三种,凡是在端口列表中的端口,都必须定义端口类型。例如,在端口列表中的端口,都必须定义端口类型。例如,“output6:0ag;”output6:0ag;”定义端定义端口口agag为输出端口,为输出端口,“input3:0hex;”input3:0hex;”定义端口定义端口hexhex为输入端口。为输入端口。数字电子技术基础第9章 verilog hdl语言84 4其他定义语句其他定义语句(1 1)参数定义语句)参数定义语句 参数定义语句经常用于对时延、线宽、寄存器位数等物理

19、量的定义,其方法是参数定义语句经常用于对时延、线宽、寄存器位数等物理量的定义,其方法是用一个文字参数来代替一个数字量,从而增加描述语句的可修改性。用一个文字参数来代替一个数字量,从而增加描述语句的可修改性。参数定义的格式:参数定义的格式:parameter parameter 其中参数定义部分给出具体的各个参数与数字之间的关系,各个关系之间用逗号其中参数定义部分给出具体的各个参数与数字之间的关系,各个关系之间用逗号隔开。隔开。例如:例如:module module_name( );module module_name( ); parameter msb=7 parameter msb=7,ls

20、b=0; /lsb=0; /定义参数定义参数 regmsb:lsb reg_aregmsb:lsb reg_a; /使用参数使用参数 . . . endmodule endmodule数字电子技术基础第9章 verilog hdl语言99.1.3 9.1.3 运算符运算符1 1算术运算符算术运算符算术运算符包括加法、减法与乘法,例如算术运算符包括加法、减法与乘法,例如a a+ +b b,a a- -b b,aa* *b b。有些综合工具不支持。有些综合工具不支持乘法。乘法。2 2位运算符位运算符按位运算的运算符是位运算符,原来的操作数有几位,结果就有几位。若两个操作按位运算的运算符是位运算符,

21、原来的操作数有几位,结果就有几位。若两个操作数位数不同,则短的操作数左端会自动补数位数不同,则短的操作数左端会自动补0 0处理。位运算符为:按位取反处理。位运算符为:按位取反 、按位、按位与与& &、按位或、按位或| |、按位异或、按位异或 、按位同或、按位同或或或。例如,例如,a a=b0110, =b0110, b b=b0100 =b0100 则则a a| |b b=0110, =0110, a a& &b b=0100=0100。3 3缩位(归约)运算符缩位(归约)运算符缩位运算符是单目运算符,也是按位进行逻辑运算,但结果是一位逻辑值。例如,缩位运算符是

22、单目运算符,也是按位进行逻辑运算,但结果是一位逻辑值。例如,对对a a33,a a22,a a11,a a00进行缩位运算时,先对进行缩位运算时,先对a a33和和a a22进行缩位运算符指定进行缩位运算符指定的运算,产生一位结果,再将这个结果与的运算,产生一位结果,再将这个结果与a a11进行缩位运算,然后再将产生的结果进行缩位运算,然后再将产生的结果与与a a00缩位运算,产生最后的结果。缩位运算,产生最后的结果。缩位运算符包括:与缩位缩位运算符包括:与缩位& &、或缩位、或缩位| |、异或缩位、异或缩位 ,以及与、或、异或缩位运算符,以及与、或、异或缩位运算符和非操作运算

23、符组成的复合运算符和非操作运算符组成的复合运算符&、|、。例如,例如,a a=b0110, =b0110, b b=b0100 =b0100 则则 | |b b=1, &=1, &b b=0=0,|a a=0=0。数字电子技术基础第9章 verilog hdl语言104 4逻辑运算符逻辑运算符逻辑运算符包括:逻辑与逻辑运算符包括:逻辑与&、逻辑或、逻辑或|、逻辑非运算符!。、逻辑非运算符!。逻辑与和逻辑或为双目运算符,逻辑非为单目运算符。逻辑与和逻辑或为双目运算符,逻辑非为单目运算符。如果操作数是一位的,则如果操作数是一位的,则1 1代表真值,代表真值,0 0代

24、表逻辑假。如果操作数是多位的,则将代表逻辑假。如果操作数是多位的,则将操作数看做整体。如果操作数中每一位都是操作数看做整体。如果操作数中每一位都是0 0,则具有逻辑,则具有逻辑0 0值。若其中有一位为值。若其中有一位为1 1,就把这个操作数看做逻辑就把这个操作数看做逻辑1 1值。因此可以把逻辑运算符看做是字逻辑运算符。值。因此可以把逻辑运算符看做是字逻辑运算符。5 5关系运算符关系运算符关系运算符包含:小于关系运算符包含:小于 、小于等于、小于等于=。关系运算符都是双目运算符,用于比较两个操作数的大小,比较结果是关系运算符都是双目运算符,用于比较两个操作数的大小,比较结果是1 1位逻辑值,位逻

25、辑值,值值1 1代表关系成立,值代表关系成立,值0 0代表比较关系不成立。代表比较关系不成立。6 6相等与全等运算符相等与全等运算符相等与全等运算符包括:相等相等与全等运算符包括:相等= = =、不等!、不等!= =、全等、全等= = = = =、不全等!、不全等!= = =。这四个运算符都是双目运算符,结果是一位的逻辑值。这四个运算符都是双目运算符,结果是一位的逻辑值。7 7逻辑移位运算符逻辑移位运算符逻辑移位运算符包括:逻辑左移逻辑移位运算符包括:逻辑左移。若设若设a a是操作对象,是操作对象,n n是移位位数,则是移位位数,则a an n表示将表示将a a左移左移n n位。进行移位操作时

26、,用位。进行移位操作时,用0 0填补移出的空位。填补移出的空位。数字电子技术基础第9章 verilog hdl语言118 8连接运算符连接运算符该运算符可以将两组信号用大括号括起来,拼接成一个新的信号。例如,该运算符可以将两组信号用大括号括起来,拼接成一个新的信号。例如, a a, ,b b, ,c c, b101, b101,若,若a a、b b、c c都是一位信号,则该连接运算的结果是都是一位信号,则该连接运算的结果是6 6位宽信号。位宽信号。对于一些重复信号,连接运算符有简化表示方法对于一些重复信号,连接运算符有简化表示方法 n n a a,这里,这里n n是重复数。是重复数。例如:例如

27、:4w4w表示表示w,w,w,ww,w,w,w。【例例9-39-3】 使用使用verilog hdlverilog hdl连接运算符描述全加器。连接运算符描述全加器。module addr(sum,co,ci,ina,inb);module addr(sum,co,ci,ina,inb); output 3:0 sum; output 3:0 sum; /4/4位宽的和位宽的和 input 3:0 ina,inb; input 3:0 ina,inb; /4/4位宽的加数与被加数位宽的加数与被加数 output co; output co; /1/1位宽的进位输出位宽的进位输出 input c

28、i; input ci; /1/1位宽的进位输入位宽的进位输入 assign co,sum=ina+inb+ci; assign co,sum=ina+inb+ci; /连接运算连接运算endmoduleendmodule/ /* *将将coco和和sumsum拼接成一个新信号为拼接成一个新信号为coco,sum3,sum2,sum1,sum0 sum3,sum2,sum1,sum0 * */ /数字电子技术基础第9章 verilog hdl语言129 9条件运算符条件运算符条件运算符是三目运算符,它的格式是条件运算符是三目运算符,它的格式是条件表达式条件表达式?条件为真时的表达式条件为真时的

29、表达式:条件为假时的表达式条件为假时的表达式例如,例如,assign tri_bus=(drv_enable)?data:16bz;assign tri_bus=(drv_enable)?data:16bz;【例例9-49-4】 verilog hdl verilog hdl描述三态门。描述三态门。module likebufif( in, en, out); module likebufif( in, en, out); input in; input in; input en; input en; output out; output out; assign out = (en = 1)

30、? in : bz; / assign out = (en = 1) ? in : bz; /如果如果en=1en=1,则输出,则输出out=inout=in,否则,否则输出输出out=zout=zendmoduleendmodule数字电子技术基础第9章 verilog hdl语言139.2 verilog hdl9.2 verilog hdl语言中的描述语言中的描述1 1verilog hdlverilog hdl数据流描述数据流描述verilog hdlverilog hdl语言的数据流描述可以很好地描述组合电路。语言的数据流描述可以很好地描述组合电路。(1 1)连续赋值语句)连续赋值语

31、句连续赋值语句将值赋给连线信号,格式为:连续赋值语句将值赋给连线信号,格式为:assignassign= 例如:例如:wire3:0 z,pre,clr;wire3:0 z,pre,clr; assign z=pre&clr; / assign z=pre&clr; /将将pre&clrpre&clr的值赋给的值赋给z z assign co,sum=a+b+ci; assign co,sum=a+b+ci; assign mux=(s=0)? a: bz; assign mux=(s=0)? a: bz;(2 2)在定义连线类型时赋值)在定义连线类型时赋值连续

32、赋值可作为连线说明的一部分,成为连线说明赋值。连续赋值可作为连线说明的一部分,成为连线说明赋值。wire 3:0 sum=4b0; wire 3:0 sum=4b0; /将将4b04b0赋给赋给sumsumwire clear=b1wire clear=b1; /将将b1b1赋给赋给clearclear【例例9-59-5】 描述一个数值比较器。描述一个数值比较器。在在verilog hdlverilog hdl中,描述组合逻辑时常使用中,描述组合逻辑时常使用assignassign结构。源代码如下:结构。源代码如下:module compare(equal,a,b); module compa

33、re(equal,a,b); input a,b; input a,b; output equal; output equal; assign equal=(a=b)?1:0; /a assign equal=(a=b)?1:0; /a等于等于b b时,时,equalequal输出为输出为1 1;a a不等于不等于b b时,时,equalequal输出为输出为0 0endmoduleendmodule数字电子技术基础第9章 verilog hdl语言142 2verilog hdlverilog hdl行为描述行为描述(1 1)过程块)过程块 verilog hdlverilog hdl对模块

34、的行为描述以过程块为基本单位,一个模块的行为描述由对模块的行为描述以过程块为基本单位,一个模块的行为描述由一个或多个并行运行的过程块组成。过程块格式如下:一个或多个并行运行的过程块组成。过程块格式如下:过程语句过程语句 (事件控制敏感表)(事件控制敏感表)块语句开始标志符:块名块语句开始标志符:块名 块内局部变量说明;块内局部变量说明; 一条或多条过程赋值或其他程序语句;一条或多条过程赋值或其他程序语句;块语句结束标志符块语句结束标志符 过程语句就是指关键字过程语句就是指关键字alwaysalways开始的语句,事件控制敏感表中的信号用于激活开始的语句,事件控制敏感表中的信号用于激活过程语句的

35、执行;块语句标志符为过程语句的执行;块语句标志符为begin-endbegin-end,块名和块内局部变量说明均为可选,块名和块内局部变量说明均为可选项。项。(2 2)过程语句)过程语句alwaysalways 如图如图9-19-1所示,所示,alwaysalways从时刻从时刻0 0开始执行,并循环重复执行后面的块语句。开始执行,并循环重复执行后面的块语句。 alwaysalways语句常带有触发(激活或敏感)条件,只有当触发条件满足时,块中的语句常带有触发(激活或敏感)条件,只有当触发条件满足时,块中的语句才真正开始执行,若触发条件默认,则触发条件始终成立。语句才真正开始执行,若触发条件默

36、认,则触发条件始终成立。 一个模块的行为描述中可以有多个一个模块的行为描述中可以有多个alwaysalways语句,这些语句之间相互独立,并行语句,这些语句之间相互独立,并行运行。运行。 数字电子技术基础第9章 verilog hdl语言153 3块语句块语句(1 1)串行块)串行块串行块的标志符是串行块的标志符是begin-endbegin-end,位于串行块中的语句按串行方式顺序执行。综合工具,位于串行块中的语句按串行方式顺序执行。综合工具支持串行块描述。支持串行块描述。(2 2)串行块的行为描述可以形象地理解为硬件电路中,数据在时钟与控制信号的作)串行块的行为描述可以形象地理解为硬件电路

37、中,数据在时钟与控制信号的作用下,沿数据通道的各级寄存器之间的传送过程。用下,沿数据通道的各级寄存器之间的传送过程。例如,例如,beginbegin reg_a=reg_b; reg_a=reg_b; reg_c=reg_a; reg_c=reg_a; end end4 4过程赋值语句过程赋值语句verilog hdlverilog hdl对模块的行为描述由一个或多个并行运行的过程块构成,而位于过程块对模块的行为描述由一个或多个并行运行的过程块构成,而位于过程块中赋值语句称为过程赋值语句。在过程赋值语句中表达式左边的信号必须是寄存器中赋值语句称为过程赋值语句。在过程赋值语句中表达式左边的信号必

38、须是寄存器类型(如类型(如regreg类型);在过程赋值语句等式右边可以是任何有效的表达式,数据类型类型);在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。如果一个信号没有声明则默认为也没有限制。如果一个信号没有声明则默认为wirewire类型,使用过程赋值语句给类型,使用过程赋值语句给wirewire赋值会产生错误。赋值会产生错误。过程赋值的基本格式是:过程赋值的基本格式是: = 例如:如果例如:如果sumsum定义为寄存器信号,而定义为寄存器信号,而carrycarry为连线信号,则在为连线信号,则在alwaysalways过程块中有:过程块中有:sum = a b ci

39、n ; /sum = a b cin ; /正确正确carry = a & b | a & !b & cin | !a & b & cin ; /carry = a & b | a & !b & cin | !a & b & cin ; /错误错误数字电子技术基础第9章 verilog hdl语言16(1 1)事件控制)事件控制事件控制以事件控制以“”开头,后面紧跟的是事件敏感表开头,后面紧跟的是事件敏感表a a) (信号名)。(信号名)。其中信号名通常是一位标量,也可以是多位矢量,数据类型没有限制,其含义是只其中

40、信号名通常是一位标量,也可以是多位矢量,数据类型没有限制,其含义是只有检测到信号名所确定的信号发生变化时,后面的赋值语句才能执行。有检测到信号名所确定的信号发生变化时,后面的赋值语句才能执行。例如,例如,(clock) (clock) reg_a=reg_b; / reg_a=reg_b; /当时钟信号当时钟信号clockclock发生变化的时候,执行发生变化的时候,执行reg_a=reg_breg_a=reg_bb b)(posedge (posedge 信号名信号名) )。与前一情况相比,只关心信号上升沿(与前一情况相比,只关心信号上升沿(posedgeposedge)跳变的情况。)跳变的

41、情况。例如,例如,(posedge clock) (posedge clock) reg_a=reg_b; / reg_a=reg_b; / 当时钟上升沿到来的时候,执行当时钟上升沿到来的时候,执行reg_a=reg_breg_a=reg_bc c)(negedge (negedge 信号名信号名) )。只关心信号下降沿(只关心信号下降沿(negedgenegedge)跳变的情况。)跳变的情况。例如,例如,(negedge clock) (negedge clock) reg_a=reg_b; / reg_a=reg_b; /当时钟下降沿到来的时候,执行当时钟下降沿到来的时候,执行reg_a=

42、reg_breg_a=reg_b数字电子技术基础第9章 verilog hdl语言17d d)(敏感事件敏感事件1 or 1 or 敏感事件敏感事件2 or 2 or 敏感事件敏感事件3 )3 )。在这个表达式中,敏感事件可以是上面、三类事件控制中的任一种,只在这个表达式中,敏感事件可以是上面、三类事件控制中的任一种,只要所列举的任意一种情况发生,都将激活事件控制,各个敏感事件之间是要所列举的任意一种情况发生,都将激活事件控制,各个敏感事件之间是“或或”的关系。的关系。例如,例如,(posedge reset or negedge clear) (posedge reset or negedg

43、e clear) reg_out=0; reg_out=0;alwaysalways语句的敏感信号表中,注意敏感信号的动作类型应该一致,语句的敏感信号表中,注意敏感信号的动作类型应该一致,例如:例如:always (posedge clk or negedge rst_n) /always (posedge clk or negedge rst_n) /正确,都是边沿动作。负沿可以代替低电平,正确,都是边沿动作。负沿可以代替低电平, /正沿可以代替高电平,这里正沿可以代替高电平,这里rst_nrst_n为低电平有效为低电平有效always (state or go or ws) always

44、(state or go or ws) / /正确,都是电平动作正确,都是电平动作always ( posedge clk or go or ws) /always ( posedge clk or go or ws) /不正确,有边沿和电平两类,动作类型不正确,有边沿和电平两类,动作类型不一致不一致数字电子技术基础第9章 verilog hdl语言18(2 2)阻塞型过程赋值与非阻塞型过程赋值)阻塞型过程赋值与非阻塞型过程赋值等号赋值符等号赋值符“=”=”,在,在verilog hdlverilog hdl中称为阻塞(中称为阻塞(blockingblocking)型过程赋值符,该赋值)型过程

45、赋值符,该赋值符的特点是它在串行块的执行过程中,前一条语句没有完成赋值过程之前,后面的符的特点是它在串行块的执行过程中,前一条语句没有完成赋值过程之前,后面的语句不能执行,阻塞的意义就是前一条语句阻塞了后面语句的执行。语句不能执行,阻塞的意义就是前一条语句阻塞了后面语句的执行。非阻塞(非阻塞(non_blockingnon_blocking)赋值符)赋值符“=”=”可以改变阻塞的情况,在串行块中,非阻塞可以改变阻塞的情况,在串行块中,非阻塞赋值符是并行执行的。赋值符是并行执行的。例如:例如:阻塞赋值:阻塞赋值:a a=1;=1;b b= =a a; ;c c= =b b; ;结果是结果是a a

46、、b b、c c都等于都等于1 1,相当于图,相当于图9-29-2所示的组合逻辑电所示的组合逻辑电路。路。非阻塞赋值:非阻塞赋值:a a=1;=1;b b=a a; ;c c=b b; ; 则则a a等于等于1 1,b b是是a a的老值,的老值,c c是是b b的老值,相当于图的老值,相当于图9-9-3 3所示的寄存器电路。所示的寄存器电路。图9-2 阻塞型赋值示意图 图9-3 非阻塞型示意图数字电子技术基础第9章 verilog hdl语言19【例例9-69-6】 如果实现图如果实现图9-49-4所示的逻辑图,必须在过程块中使用阻塞型赋值语所示的逻辑图,必须在过程块中使用阻塞型赋值语句,程

47、序如下:句,程序如下:module blocking(a,b,c,x,y); /module blocking(a,b,c,x,y); /a a、b b和和c c是输入,是输入,x x、y y是输出是输出input a,b,c;input a,b,c;output x,y;output x,y;reg x,y;reg x,y; always (a or b or c) always (a or b or c) begin begin x=a&b; / x=a&b; /阻塞赋值阻塞赋值 y=x|c; y=x|c; end endendmoduleendmodule数字电子技术基础

48、第9章 verilog hdl语言20【例例9-79-7】 对于图对于图9-59-5所示的电路,必须在过程块中使用非阻塞型赋值语句,所示的电路,必须在过程块中使用非阻塞型赋值语句,程序如下:程序如下:module demo1 (reg_a,reg_b,d,clock); module demo1 (reg_a,reg_b,d,clock); /该例相当于两个寄该例相当于两个寄存器串联存器串联input d,clock;input d,clock;output reg_a,reg_boutput reg_a,reg_b;reg reg_a,reg_b;reg reg_a,reg_b;always

49、 (posedge clock) /always (posedge clock) /时钟上升沿动作时钟上升沿动作 beginbegin reg_a=d; reg_a=d; / reg_a/ reg_a的的输入为输入为d d reg_b=reg_a; reg_b=reg_a; / reg_b/ reg_b的的输出为输出为reg_areg_a的老值的老值 endendendmoduleendmodule数字电子技术基础第9章 verilog hdl语言21(3 3)连续赋值语句与过程赋值语句的区别)连续赋值语句与过程赋值语句的区别verilog hdlverilog hdl语言中的过程赋值语句与连

50、续赋值语句之间的区别如下。语言中的过程赋值语句与连续赋值语句之间的区别如下。 赋值对象不同:连续赋值语句用于连线类型信号,过程赋值语句用于寄存器赋值对象不同:连续赋值语句用于连线类型信号,过程赋值语句用于寄存器类型信号。类型信号。 赋值语句的实现过程不同:连线信号一旦被连续赋值语句赋值后,赋值语句赋值语句的实现过程不同:连线信号一旦被连续赋值语句赋值后,赋值语句右端表达式中的信号有任何变化,都将反映到左端的连线变量中;过程赋值语右端表达式中的信号有任何变化,都将反映到左端的连线变量中;过程赋值语句只有在执行时才有效。句只有在执行时才有效。 语句的位置不同:连续赋值语句不能出现在过程块中;而过程

51、赋值语句只能语句的位置不同:连续赋值语句不能出现在过程块中;而过程赋值语句只能出现在过程块中。出现在过程块中。 语句结构不同:连续赋值语句以语句结构不同:连续赋值语句以assignassign开头;而过程赋值不需要先导字。开头;而过程赋值不需要先导字。数字电子技术基础第9章 verilog hdl语言229.3 verilog hdl9.3 verilog hdl语言中的分支语句语言中的分支语句1 1if-elseif-else语句语句(1 1)ifif(条件表达式)(条件表达式) 块语句块语句当条件表达式成立时,执行后面的块语句,否则不执行。当条件表达式成立时,执行后面的块语句,否则不执行。

52、(2 2)ifif(条件表达式)(条件表达式) 块语句块语句1 1 else else 块语句块语句2 2当条件表达式成立时,执行块语句当条件表达式成立时,执行块语句1 1,否则执行块语句,否则执行块语句2 2。(3 3)ifif(条件表达式)(条件表达式) 块语句块语句1 1 else if else if (条件表达式)(条件表达式) 块语句块语句2 2 else if else if (条件表达式)(条件表达式) 块语句块语句n n else else (条件表达式)(条件表达式) 块语句块语句n n+1+1if-else if-else 语句可以嵌套使用,使用方法同语句可以嵌套使用,使

53、用方法同c c语言,注意语言,注意elseelse与最近的与最近的ifif搭配。搭配。数字电子技术基础第9章 verilog hdl语言232 2casecase语句语句语句格式:语句格式:casecase(敏感表达式)(敏感表达式) 值值1 1:块语句:块语句1 1 值值2 2:块语句:块语句2 2 值值n n:块语句:块语句n n default: default: 块语句块语句n n+1+1endcaseendcaseifif语句、语句、casecase语句必须在语句必须在alwaysalways块中使用,块中使用,assignassign语句不能在语句不能在alwaysalways块中

54、使用。块中使用。ifif语句中,关系表达式之间应该用逻辑运算符(语句中,关系表达式之间应该用逻辑运算符(&、|、!)连接。注意不要用、!)连接。注意不要用赋值语句代替关系运算符。赋值语句代替关系运算符。数字电子技术基础第9章 verilog hdl语言249.4 verilog hdl9.4 verilog hdl语言中的结构描述语言中的结构描述1 1结构描述方法结构描述方法verilog hdl verilog hdl 结构描述只是将逻辑图方式的连接关系转换成文字表达,若是已经结构描述只是将逻辑图方式的连接关系转换成文字表达,若是已经有了模块的逻辑图,则可以按照如下步骤将逻辑图转换成

55、有了模块的逻辑图,则可以按照如下步骤将逻辑图转换成verilog hdlverilog hdl模块。模块。 给逻辑电路图中的每个输入给逻辑电路图中的每个输入/ /输出端口命名端口名。输出端口命名端口名。 给逻辑电路图中的内部连线命名连线信号名。给逻辑电路图中的内部连线命名连线信号名。 给每个逻辑单元命名调用名。给每个逻辑单元命名调用名。 命名模块名。命名模块名。 书写模块名和输入书写模块名和输入/ /输出端口,进行端口的类型说明。输出端口,进行端口的类型说明。 依据逻辑电路图,描述信号之间的连接关系。依据逻辑电路图,描述信号之间的连接关系。数字电子技术基础第9章 verilog hdl语言25

56、2 2模块调用模块调用模块调用是模块调用是verilog hdlverilog hdl结构描述的基本构成方式,一个模块可以调用其他模块,结构描述的基本构成方式,一个模块可以调用其他模块,则被调用的模块是底层模块,而调用底层模块的模块是顶层模块。则被调用的模块是底层模块,而调用底层模块的模块是顶层模块。模块调用分为两类:一类是调用基本门,另一类是调用用户自己写的模块。模块调用分为两类:一类是调用基本门,另一类是调用用户自己写的模块。模块调用的格式:模块调用的格式:模块名模块名 调用名调用名 (端口名列表)(端口名列表)调用时注意端口名列表中端口名的排列顺序、输入调用时注意端口名列表中端口名的排列

57、顺序、输入/ /输出类型,它们都必须与被调输出类型,它们都必须与被调用模块定义的顺序保持一致。用模块定义的顺序保持一致。(1 1)位置对应调用法)位置对应调用法将被调用模块定义时的端口名,对应地用与之相连的信号名代替。将被调用模块定义时的端口名,对应地用与之相连的信号名代替。(2 2)端口名对应调用法)端口名对应调用法调用格式:调用格式:定义时的端口名(调用时与之相连的信号名)。定义时的端口名(调用时与之相连的信号名)。数字电子技术基础第9章 verilog hdl语言269.5 verilog hdl9.5 verilog hdl语言描述组合逻辑电路语言描述组合逻辑电路组合逻辑电路是输出仅与

58、当前输入信号有关的电路,描述组合电路可用组合逻辑电路是输出仅与当前输入信号有关的电路,描述组合电路可用alwaysalways块块或连续赋值或连续赋值assignassign语句。语句。1 1alwaysalways块实现组合电路块实现组合电路在使用在使用alwaysalways块实现组合电路时,需要将所有影响块实现组合电路时,需要将所有影响alwaysalways块内赋值的信号都列入块内赋值的信号都列入always always 的敏感信号表中,同时注意在的敏感信号表中,同时注意在alwaysalways块内部赋值一定要使用声明过的块内部赋值一定要使用声明过的regreg型信号。型信号。在敏

59、感信号表中不能有描述时钟边沿的在敏感信号表中不能有描述时钟边沿的posedgeposedge和和negedgenegedge关键字。关键字。数字电子技术基础第9章 verilog hdl语言27【例例9-89-8】 verilog hdl verilog hdl描述描述8 8线线-3-3线编码器例线编码器例1 1。module encoder1(none_on, out2, out1, out0, h, g, f, e, d, c, b, a); module encoder1(none_on, out2, out1, out0, h, g, f, e, d, c, b, a); input

60、h, g, f, e, d, c, b, a; input h, g, f, e, d, c, b, a; /编码器输入信号,可以是编码器输入信号,可以是按钮信号,高电平有效按钮信号,高电平有效output out2, out1, out0; output out2, out1, out0; /编码器输出信号编码器输出信号output none_on; output none_on; /有编码输出信号有编码输出信号reg 3:0 out;reg 3:0 out; assign none_on, out2, out1, out0 = out; assign none_on, out2, out1, out0 = out; /连接运算连接运算always (a or b or c or d or e or f or g or h) /alwaysalways (a or b or c or d or e

温馨提示

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

评论

0/150

提交评论