数字电子技术基础ppt第9章 verilog hdl语言

上传人:xiao****1972 文档编号:72590187 上传时间:2019-01-23 格式:PPT 页数:54 大小:555.50KB
返回 下载 相关 举报
数字电子技术基础ppt第9章 verilog hdl语言_第1页
第1页 / 共54页
数字电子技术基础ppt第9章 verilog hdl语言_第2页
第2页 / 共54页
数字电子技术基础ppt第9章 verilog hdl语言_第3页
第3页 / 共54页
数字电子技术基础ppt第9章 verilog hdl语言_第4页
第4页 / 共54页
数字电子技术基础ppt第9章 verilog hdl语言_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《数字电子技术基础ppt第9章 verilog hdl语言》由会员分享,可在线阅读,更多相关《数字电子技术基础ppt第9章 verilog hdl语言(54页珍藏版)》请在金锄头文库上搜索。

1、第9章 Verilog HDL语言 Verilog HDL是使用广泛的硬件描述语言,该语言的特点是语言能力强,代码简单,有大量支持仿真的语句与可综合语句。本章介绍该语言中的可综合语句描述数字电路与系统,重点介绍该语言的基本语法、组合电路与时序电路的描述与实际描述举例。,9.1 Verilog HDL语言基础 Verilog HDL语言以模块(module)的形式来描述数字电路,模块接口部分用来描述与其他模块之间的连接,一般一个文件就是一个模块。模块的定义从关键词module开始,到关键词endmodule结束,每条Verilog HDL语句以分号“;”作为结束(块语句、endmodule等少数

2、语句除外)。注释语句单行以“/”开头,多行以“/*”开始、以“*/”结束。该语言很多规定与C语言相似。,【例9-1】 Verilog HDL描述与非门。 module NAND(in1,in2,out);/以module开头,随后是模块名和括号内的端口名列表,最后以分 /号结束 input in1,in2; /定义端口类型,只有输入(input)、输出(output)和双向(inout)三种 output out; /凡是在端口列表的端口,都必须经过定义 /wire in1,in2,out; /由于in1、in2和out是1位宽连线类型,所以可以采用默认定义,此 /语句可省略 assign o

3、ut=(in1 /连续赋值语句assign描述组合电路 /在Verilog中,还有initial叙述、always叙述、模块调用、门调用等 endmodule /关键字endmodule用于结束行,注意其后没有分号,9.1.1 Verilog HDL中的基本约定 1可用在描述语句中的逻辑状态 0表示逻辑0、逻辑非、低电平、假;1表示逻辑1、逻辑真、高电平、真。 x或X表示不确定的逻辑状态;z或Z表示高阻态。 2整数及其表示 整数可以按照简单十进制数格式或基数格式书写。 (1)简单十进制数格式 简单十进制数的整数表示与普通十进制数表示相同,例如,35、-46。 (2)基数格式 表示格式:+/-

4、其中:+/-是符号位;位宽就是数的等效二进制数的位数(bit),位宽用十进制数表示;二进制的基数符号位b或B;八进制的基数符号是o或O;十进制的基数符号是d或D,可默认不写基数符号;十六进制的基数符号是h或H。 一些规定: 数值中,左边是数值最高位(MSB),右边是最低有效位(LSB); 在二进制中,x、z只代表相应位的逻辑状态,x表示不定,z表示高阻; 当位宽默认时,位宽为32位。 例如:3b000是位宽为3的二进制数; res = 8b11111110是8位二进制数; 9o671是位宽为9的八进制数; 8h3f是位宽为8的十六进制数。,3标志符取名 标志符取名的规定:标志符必须是字母或下画

5、线开头,长度小于1024;后续部分可以是字母、数字或下画线;Verilog HDL中的标志符区分大小写。 例如,_bus,topp,BUS。 4系统命令 以$开头的标志符代表Verilog HDL中的命令(系统任务与系统函数),普通的标志符不能以$开头。 5保留字 Verilog HDL语言内部已经使用的保留字,在Verilog HDL语言编辑器中,保留字以醒目的颜色表示。,9.1.2 数据类型 Verilog HDL中的4种最基本数据类型是:整型(integer)、参数(parameter)型、寄存器(reg)类型和连线(wire)类型。,1连线类型 常用的连线类型关键字为wire。 连线类

6、型的逻辑状态为0、1、x(任意)、z(高阻),连线类型主要用在模块的结构描述中,对应硬件的物理信号连线,当用数字表示其逻辑值时,不存在符号位。 在用连线类型的信号时,必须用连线类型定义语句对信号进行类型说明,当说明被省略时,表示位宽为1bit的wire型连线信号。wire是基本的、不附带其他功能的连线,也是最常用的连线类型。 对于input,output和inout端口,若未指明数据类型,默认为连线类型。 连线类型定义格式: 矢量范围 , 连线名; 矢量范围以MSB:LSB格式描述。 例如:wire 0: 31 w1, w2; / w1和w2是32位连线类型,高位MSB为bit0 wir5e

7、7:0 tmp; /tmp为8位连线,高位MSB为bit7,低位LSB是位0,2寄存器类型 常用的寄存器类型的关键字为reg。 寄存器类型的信号,必须通过过程赋值语句进行赋值,只能出现在always后面的过程语句中。 寄存器变量的定义格式: 矢量范围 ,寄存器名; 矢量范围以MSB:LSB格式描述。 例如:reg a; /a为寄存器类型 reg 3: 0 v; / v为4位寄存器类型 reg 7: 0 m, n; /m和n为8位寄存器类型 在Verilog HDL中,线宽为一位的连线和只有一位的寄存器变量称为标量;线宽大于一位的连线和位宽大于一位的寄存器变量为矢量。 按位或部分位赋值的矢量称为

8、标量类矢量,相当于多个一位标量的集合,标量类矢量进行类型说明时,需要关键字scalared(可以默认)。 例如,reg scalared 7:0 reg_a;/reg_a被定义成标量类矢量 该说明可以默认关键字scalared,因此可以写成:reg 7:0 reg_a;,3端口信号与内部信号 信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其他的信号为内部信号。对于端口信号,输入端口只能是连线类型。输出端口可以是连线(wire)类型,也可以是寄存器(register)类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值,则为wire类型。 内部信号类型与输

9、出端口相同,可以是连线(wire)类型或寄存器(register)类型。若在过程块(always叙述)中赋值,则为register类型;若在过程块外赋值,则为wire类型。 端口类型只有输入(input)、输出(output)和双向(inout)三种,凡是在端口列表中的端口,都必须定义端口类型。例如,“output6:0ag;”定义端口ag为输出端口,“input3:0hex;”定义端口hex为输入端口。,4其他定义语句 (1)参数定义语句 参数定义语句经常用于对时延、线宽、寄存器位数等物理量的定义,其方法是用一个文字参数来代替一个数字量,从而增加描述语句的可修改性。 参数定义的格式: par

10、ameter 其中参数定义部分给出具体的各个参数与数字之间的关系,各个关系之间用逗号隔开。 例如:module module_name( ); parameter msb=7,lsb=0; /定义参数 regmsb:lsb reg_a; /使用参数 endmodule,9.1.3 运算符 1算术运算符 算术运算符包括加法、减法与乘法,例如a+b,a-b,a * b。有些综合工具不支持乘法。 2位运算符 按位运算的运算符是位运算符,原来的操作数有几位,结果就有几位。若两个操作数位数不同,则短的操作数左端会自动补0处理。位运算符为:按位取反 、按位与&、按位或|、按位异或、按位同或或。 例如,a=

11、b0110, b=b0100 则a|b=0110, a&b=0100。 3缩位(归约)运算符 缩位运算符是单目运算符,也是按位进行逻辑运算,但结果是一位逻辑值。例如,对a3,a2,a1,a0进行缩位运算时,先对a3和a2进行缩位运算符指定的运算,产生一位结果,再将这个结果与a1进行缩位运算,然后再将产生的结果与a0缩位运算,产生最后的结果。 缩位运算符包括:与缩位&、或缩位|、异或缩位,以及与、或、异或缩位运算符和非操作运算符组成的复合运算符&、|、。 例如,a=b0110, b=b0100 则 |b=1, &b=0,|a=0。,4逻辑运算符 逻辑运算符包括:逻辑与&、逻辑或|、逻辑非运算符!

12、。 逻辑与和逻辑或为双目运算符,逻辑非为单目运算符。 如果操作数是一位的,则1代表真值,0代表逻辑假。如果操作数是多位的,则将操作数看做整体。如果操作数中每一位都是0,则具有逻辑0值。若其中有一位为1,就把这个操作数看做逻辑1值。因此可以把逻辑运算符看做是字逻辑运算符。 5关系运算符 关系运算符包含:小于、小于等于=。 关系运算符都是双目运算符,用于比较两个操作数的大小,比较结果是1位逻辑值,值1代表关系成立,值0代表比较关系不成立。 6相等与全等运算符 相等与全等运算符包括:相等= =、不等!=、全等= = =、不全等!= =。 这四个运算符都是双目运算符,结果是一位的逻辑值。 7逻辑移位运

13、算符 逻辑移位运算符包括:逻辑左移。 若设a是操作对象,n是移位位数,则an表示将a左移n位。进行移位操作时,用0填补移出的空位。,8连接运算符 该运算符可以将两组信号用大括号括起来,拼接成一个新的信号。例如,a,b,c, b101,若a、b、c都是一位信号,则该连接运算的结果是6位宽信号。 对于一些重复信号,连接运算符有简化表示方法na,这里n是重复数。 例如:4w表示w,w,w,w。,【例9-3】 使用Verilog HDL连接运算符描述全加器。 module addr(sum,co,ci,ina,inb); output 3:0 sum; /4位宽的和 input 3:0 ina,inb

14、; /4位宽的加数与被加数 output co; /1位宽的进位输出 input ci; /1位宽的进位输入 assign co,sum=ina+inb+ci; /连接运算 Endmodule /*将co和sum拼接成一个新信号为co,sum3,sum2,sum1,sum0 */,9条件运算符 条件运算符是三目运算符,它的格式是 条件表达式?条件为真时的表达式:条件为假时的表达式 例如,assign tri_bus=(drv_enable)?data:16bz; 【例9-4】 Verilog HDL描述三态门。 module likebufif( in, en, out); input in;

15、 input en; output out; assign out = (en = 1) ? in : bz; /如果en=1,则输出out=in,否则输出out=z endmodule,9.2 Verilog HDL语言中的描述 1Verilog HDL数据流描述 Verilog HDL语言的数据流描述可以很好地描述组合电路。 (1)连续赋值语句 连续赋值语句将值赋给连线信号,格式为: assign= 例如:wire3:0 z,pre,clr; assign z=pre /a等于b时,equal输出为1;a不等于b时,equal输出为0 endmodule,2Verilog HDL行为描述 (1)过程块 Verilog HDL对模块的行为描述以过程块为基本单位,一个模块的行为描述由一个或多个并行运行的过程块组成。过程块格式如下: 过程语句 (事件控制敏感表) 块语句开始标志符:块名 块内局部变量说明; 一条或多条过程赋值或其他程序语句; 块语句结束标志符 过程语句就是指关键字always开始的语句,事件控制敏感表中的信号用于激活过程语句的执行;块语句标志符为begin-end,块名和块内局部变量说明均为可选项。 (2)过程语句always 如图9-1所示,always从时刻0开始执行

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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