Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章

上传人:E**** 文档编号:89353238 上传时间:2019-05-23 格式:PPT 页数:60 大小:413KB
返回 下载 相关 举报
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章_第1页
第1页 / 共60页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章_第2页
第2页 / 共60页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章_第3页
第3页 / 共60页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章_第4页
第4页 / 共60页
Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章》由会员分享,可在线阅读,更多相关《Verilog HDL数字系统设计——原理、实例及仿真 教学课件 ppt 作者 康磊 第1-7章 第3章(60页珍藏版)》请在金锄头文库上搜索。

1、第3章 数据类型和表达式,3.1 数据类型 3.2 操作符和表达式,3.1 数 据 类 型 3.1.1 常量 在程序运行过程中,其值不能被改变的量称为常量。Verilog HDL中有三类常量:整型、实数型和字符串型。 在整型或实数型常量的任何位置可以随意插入下划线符号“_”(但不能作为首字符),它们就数的本身来说没有意义,但当数很长时,使用下划线更易读。,1整型常量 整型常量就是整型数,它可以按如下两种方式书写: (1) 简单的十进制数格式,表示为有符号数,如20、-10。 (2) 基数格式,通常是无符号数,这种形式的格式为 ,2实数型常量 在Verilog HDL中,实常数的定义可以用十进制

2、表示也可以用科学浮点数表示。 (1) 十进制表示:由数字和小数点组成(必须有小数点)例如3.2、1158.29、25.8。 (2) 指数格式:由数字和字符e(E)组成,e(E)的前面必须有数字而且后面必须为整数。例如:,3字符串型常量 字符串常量用于表示需要显示的信息,是由一对双引号括起来的字符序列。显示在双引号内的任何字符(包括空格和下划线)都作为字符串的一部分。字符串不能分成多行书写。例如:,3.1.2 变量 变量即在程序运行过程中其值可以改变的量,在Verilog HDL中变量的数据类型有很多种,其中最基本的是线网型(Net Type)和寄存器型(Register Type)两种,且每种

3、类型都有其在电路中的实际意义。这两种数据类型中最常用的是wire型、reg型和integer型。,1线网型变量 线网表示器件之间的物理连接,称为线网类型信号,其特点是输出的值紧跟输入值的变化而变化。对线网型变量有两种驱动方式,一种是在结构描述中将其连接到逻辑门或模块的输出端;另一种方式是用持续赋值语句assign对其进行赋值。该类变量不能存储数据。 Verilog HDL提供了多种线网型变量,见表3.1。在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。,线网型变量的语法格式为: net_kind msb:lsb net1, net2, , n

4、etN; 其中,net_kind是线网类型;msb:lsb定义线网宽度的最高位和最低位,此项可选,如果没有定义宽度,则默认线网宽度是1位;net1, net2, , netN是线网变量的名称。可在同一个定义中声明多个变量,例如:,wire和tri是最常用的线网类型,它们具有相同的语法格式和功能。wire型变量通常用来表示单个门驱动或连续赋值语句驱动的网络型数据,tri型变量则用来表示多驱动器驱动的网络型数据。如果wire型或tri型变量没有定义逻辑强度(logic strength),在多个驱动源的情况下,逻辑值会发生冲突从而产生不确定值。如果多个驱动源驱动同一个连线(或三态线网),则这个线网

5、的有效值可由表3.2来决定。,wire型数据常用来表示以assign关键字指定的组合逻辑信号。Verilog HDL程序模块中的输入输出信号类型缺省时自动定义为wire型。wire型变量可以用作任何方程式的输入,也可以用作assign语句或实例元件的输出。 wire型变量的语法格式如下: wire n-1:0 数据名1, 数据名2, , 数据名i; 或 wire n:1 数据名1, 数据名2, , 数据名i;,其中,wire是wire型数据的确认符;n-1:0和n:1代表该数据的位宽,即该数据有几位;数据名是变量的名字。如果一次定义多个变量,则变量名之间用逗号隔开。声明语句的最后要用分号表示语

6、句结束。例如:,2寄存器型变量 寄存器是数据存储单元的抽象,通过赋值语句可以改变寄存器内存储的值,其作用与改变触发器存储的值相当。在设计中必须将寄存器变量放在过程语句(如initial、always)中,通过过程赋值语句赋值。在未被赋值时,寄存器的缺省值为x。 寄存器型信号或变量共有五种数据类型,见表3.3。,1) reg型变量 reg型是最常用的寄存器类型。reg类型数据的缺省初始值为不定值x。它只能存储无符号数。 reg型变量的语法格式如下: reg n-1:0 数据名1,数据名2,数据名i; 或 reg n:1 数据名1,数据名2,数据名i;,其中,reg是reg型数据的确认标识符;n-

7、1:0和n:1代表该数据的位宽,即该数据有几位(bit)。数据名是变量的名字,如果一次定义多个变量,变量名之间用逗号隔开。声明语句的最后要用分号表示语句结束。例如:,2) integer寄存器型变量 integer型是整数寄存器,也是Verilog HDL中常用的变量类型。这种寄存器用于存储整数值,并且可以存储带符号数。 integer型的定义形式如下: integer integer1, integer2, integerN msb:lsb; 其中,integer1, integer2, integerN是整数寄存器名;msb和lsb是定义整数数组界限的常量,数组界限的定义是可选的。例如:,

8、3) time型变量 time类型的寄存器用于存储和处理时间。time型变量的语法格式如下: time time_id1, time_id2 , , time_idNmsb:1sb; 例如: time Events 31:0; /时间值数组 time CurrTime; /CurrTime存储一个时间值,4) real和realtime型变量 real是实数寄存器型变量;realtime是实数型时间寄存器,一般用于在测试模块中存储仿真时间。它们的语法格式如下: real real_reg1, real_reg2, , real_regN; realtime realtime_reg1, rea

9、ltime_reg2, , realtime_regN; 例如: real Swing, Top; /实数变量,3.2 操作符和表达式 3.2.1 操作符 Verilog HDL提供了丰富的操作符,按功能可分为算术操作符、位操作符、归约操作符、逻辑操作符、关系操作符、相等与全等操作符、移位操作符、连接与复制操作符和条件操作符等9类;如果按操作符所带操作数的个数来区分,操作符可分为3类,即单目操作符(可带一个操作数)、双目操作符(可带两个操作数)和三目操作符(可带三个操作数)。,例如:,1算术操作符 常用的算术操作符主要有5种:+ (加法操作符),如c+d,+4;- (减法操作符),如a-b,-

10、a;* (乘法操作符),如a*5;/ (除法操作符),如c/d;% (取模操作符),如8%3的值是2。 例如:,1) 算术操作结果的长度 算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作符左端的赋值目标的长度决定。例如:,在第一个语句赋值中,加法操作的溢出部分被丢弃;在第二个赋值语句中,任何溢出的位存储在结果位Frx1中。在较长的表达式中,中间结果的长度如何确定?在Verilog HDL中定义了如下规则:表达式中的所有中间结果的长度应取最大操作数的长度(赋值时,此规则也包括左端目标)。例如:,2) 无符号数和有符号数 执行算术操作和赋值时,区分无符号数和有符号数是

11、非常重要的。无符号数存储在线网、一般寄存器和基数形式表示的整数中。有符号数存储在整数寄存器和十进制形式表示的整数中。例如:,例如:算术操作符应用举例。,2位操作符 位操作符是对操作数按位进行与、或、非等逻辑操作,分别如下: (一元非)单目操作符,相当于非门操作; & (二元与)双目操作符,相当于与门操作; | (二元或)双目操作符,相当于或门操作; (二元异或)双目操作符,相当于异或门操作; , (二元异或非)双目操作符,相当于同或门操作。 这些操作符在两个操作数的对应位上按位进行逻辑操作,并产生结果。,1) (取反)操作符 是一个单目操作符, 用来对一个操作数进行按位取反运算,其运算规则见表

12、3.6。,2) &(按位与)操作符 按位与操作就是将两个操作数的相应位进行与运算, 其运算规则见表3.7。,3) | (按位或)操作符 按位或操作就是将两个操作数的相应位进行或运算,其运算规则见表3.8。,4) (按位异或)操作符 按位异或操作就是将两个操作数的相应位进行异或运算,其运算规则见表3.9。,5) (按位异或非)操作符 按位异或非操作就是将两个操作数的相应位先进行异或运算再进行非运算,其运算规则见表3.10。,3归约操作符 归约操作符是单目操作符,对操作数逐位进行运算,运算的结果是一位逻辑值。归约操作符有6种: & (归约与)如果存在位值为0,那么结果为0;如果存在位值为x或z,则

13、结果为x;否则结果为1。 & (归约与非)与归约操作符&相反。 | (归约或)如果存在位值为1,那么结果为1;如果存在位值为x或z,则结果为x;否则结果为0。 | (归约或非)与归约操作符 | 相反。 (归约异或)如果存在位值为x或z,那么结果为x;如果操作数中有偶数个1,则结果为0;否则结果为1。 (归约异或非)与归约操作符 相反。,4逻辑操作符 逻辑操作符是对操作数做与、或、非操作,这些操作符在逻辑值0或1上操作。操作结果为0或1,逻辑操作符有3种:&(逻辑与)、| (逻辑或)、! (逻辑非)。,5关系操作符 关系操作符是对两个操作数进行比较,比较结果为真,则结果为1;比较结果为假,则结果

14、为0。关系操作符有4种:(大于)、= (不小于)和= (不大于)。,6相等与全等操作符 相等与全等操作符和关系操作符类似,也是对两个操作数进行比较,如果比较结果为假,则结果为0,否则结果为1。这类操作符有4种:=(逻辑相等)、!=(逻辑不等)、= (全等)和!= (非全等)。其中,“=”和“!=”严格按位进行比较,把不定态(x)和高阻态(z)看做逻辑状态进行比较,比较结果不存在不定态,一定是1或0。而“=”和“!=”是把两个操作数的逻辑值做比较,值x和z具有通常的意义,如果两个操作数之一包含x或z,则结果为未知的值(x)。,7移位操作符 移位操作符是把操作数向左或向右移若干位。移位操作符有两种

15、:(右移)。 移位操作符有两个操作数,右侧操作数表示的是左侧操作数所移动的位数。它是一个逻辑移位,空闲位添0补位。如果右侧操作数的值为x或z,则移位操作的结果为x。,8连接和复制操作符 连接操作是将多组信号用大括号括起来,拼接成一组新信号。其表示形式如下: expr1, expr2, , exprN 其中,expr1, expr2, ,exprN是若干个小表达式。,9条件操作符 条件操作符是Verilog HDL中唯一的三目操作符,它根据条件表达式的值选择表达式,其表示形式如下: cond_expr ? expr1: expr2 其中,如果cond_expr 为真(即值为1),则选择expr1;如果cond_expr为假(值为0),则选择expr2。如果cond_expr 为x或z,则结果是将两个待选择的表达式进行计算,然后把两个计算结果按位进行运算得到最终结果,按位运算的原则是,如果两个表达式的某一位都为1,则这一位的最终结果是1;如果都是0,则这一位的结果是0;否则结果为x。,3.2.2 操作数 1常数 前面已讲述了常量的书写方式,下面举例说明。,表达式中的整数值可解释为有符号数或无符号数。如果表达式中是十进制整数,那么该整数就是有符号数,例如,12被解释为有符号

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

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

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