verilog数据类型与表达式

上传人:shaoy****1971 文档编号:114992812 上传时间:2019-11-12 格式:PPT 页数:43 大小:367.05KB
返回 下载 相关 举报
verilog数据类型与表达式_第1页
第1页 / 共43页
verilog数据类型与表达式_第2页
第2页 / 共43页
verilog数据类型与表达式_第3页
第3页 / 共43页
verilog数据类型与表达式_第4页
第4页 / 共43页
verilog数据类型与表达式_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《verilog数据类型与表达式》由会员分享,可在线阅读,更多相关《verilog数据类型与表达式(43页珍藏版)》请在金锄头文库上搜索。

1、第4讲 数据类型与表达式,Verilog HDL提供了丰富的数据类型,本讲把Verilog HDL的数据分为常量和变量两类,并分别介绍其特点和使用方法。 表达式是操作符、操作数和标点符号序列,其目的是用来说明一个计算过程。 程序中的大部分语句是由表达式构成的。本讲将给出操作符和操作数的种类及正确用法。,主要内容,(一) 常量 在程序运行过程中,其值不能被改变的量称为常量。Verilog HDL有整型、实数型、字符串型3种常量。 在整型或实数型常量的任意位置可以随意插入下划线“_”(但是不能当作首符号),这些下划线对数本身并没有意义,但是当数字很长时使用下划线可以提高可读性。,一、数据类型,Ve

2、rilog HDL有4种基本的逻辑状态: 0 表示逻辑0或“假”; 1 表示逻辑1或“真”; x 表示未知; z 表示高阻。 注意:x值和z值都是不分大小写的,如: 值0x1z与值0X1Z相同。 Verilog HDL的常量是由以上这4种基本值组成的。,Verilog HDL的整数有两种书写格式: 十进制数格式; 基数格式。 (1)十进制数格式是一个可以带正负号的数字序列,代表一个有符号数,如下例: 32 /十进制数32 -15 /十进制数-15,1整型常量(整数),(2)基数格式的数通常是无符号数,形式如下: sizebase value size定义常量的位数(长度),这是可选项; bas

3、e是基数,规定这个数据的进制,可以是o或O(表示八进制),b或B(表示二进制),d或D(表示十进制),h或H(表示十六进制)之一; value是一个数字序列,其形式应与base定义的形式相符。这个数字序列中出现的值x和z以及十六进制中的af不区分大小写,“?”字符可以代替值z。,下面给出一些典型书写方法,有正确的也有错误的。 5O37 /5位八进制数 4D2 /4位十进制数 4B1x_01 /4位二进制数 7Hx /7位x(扩展的x), 即xxxxxxx 4hZ /4位z(扩展的z) , 即zzzz 2h1? /2位十六进制数,与2h1z相同 8h 2 A /在位数和字符之间,以及基数和数值之

4、间允许出现空格 4d-4 /非法:数值不能为负 3 b001 /非法:和基数b之间不允许出现空格 (2+3)b10 /非法:位数不能够为表达式,如果没有定义常量的位数,那么这个数的长度就是相应值的位数,例如: o721 /9位八进制数 hAF /8位十六进制数 如果定义的长度大于数字序列的实际长度,通常在数据序列的高位(左侧)补0。但是如果这个数字序列最左边一位为x或z,就用x或z在左边补位,例如: 10b10 /左边补0, 0000000010 10bx0x1 /左边补x, xxxxxxx0x1 如果定义的长度小于数字序列的实际长度,这个数字序列最左边超出的位将被截断,例如: 3b1001_

5、0011 /与3b011相等 5H0FFF /与5H1F相等,实数的定义方式有两种: (1)十进制格式,由数字和小数点组成(必须有小数点),例如: 2.0 5.678 11572.12 0.1 2. / 非法:小数点右侧必须有数字,2实数型常量(浮点数),2)指数格式,由数字和字符e(E)组成 例: 23_5.1e2 /其值为23510.0,忽略下划线 3.6E2 /其值为360.0 ( e与E相同) 5E4 /其值为0.0005 e的前面必须要有数字而且后面必须为整数,3字符串型常量,字符串常量是由一对双引号括起来的字符序列。例: “INTERNAL ERROR“ “ R E A C H E

6、 D H E R E ” /空格出现在/双引号内,所以是字符串的组成部分 “12345_6789_0“ /下划线出现在/双引号内,所以是字符串的组成部分,实际上,字符都会被转换成二进制数,而且这种二进制数是按特定规则编码的。现在普遍都采用ASCII码,这种代码把每个字符用一个字节(8位)的二进制数表示。所以字符串实际就是若干个8位ASCII码的序列。例如字符串“INTERNAL ERROR”共有14个字符,存储这个字符串的变量就需要8*14位的存储空间,如下: reg 1:8*14 Message; /定义变量Message并分配存储空 Message = “INTERNAL ERROR“ /

7、给变量Message赋值为字符串常量,参数,在Verilog语言中,用参数parameter来定义符号常量。参数常用来定义时延和变量的宽度。 其定义格式如下: parameter 参数名1=表达式1,参数名2=表达式2,参数名3=表达式3, ; 例: parameter sel=8,code=8ha3;,Verilog HDL有线网net和寄存器两种类型的变量,每种类型都有其在电路中的实际意义。 1线网型变量 Net型数据相当于硬件电路中的各种物理连接,其特点是输出的值紧跟输入值的变化而变化。 对net型有两种驱动方式,一种方式是在结构描述中将其连接到一个门元件或模块的输出端;另一种方式是用持

8、续赋值语句assign对其进行赋值。 wire是最常用的Net型变量。,(二) 变量,wire型变量的定义格式如下: wire 数据名1,数据名2,数据名n; 例如: wire a,b; /定义了两个wire型变量a和b,2寄存器型变量,寄存器表示一个抽象的数据存储单元,可以通过赋值语句改变寄存器内存储的值。 寄存器只能在always和initial过程语句中赋值,在未被赋值时,寄存器的缺省值为x。 Verilog HDL共有5种寄存器类型: Reg(最常用的寄存器型),integer,time,real,realtime Reg定义格式如下: reg 数据名1,数据名2,数据名n; 例:re

9、g a,b; /定义了两个reg型变量a,b reg7:0 q; /定义q为8位宽的reg型向量,用reg声明存储器,在Verilog HDL中不能直接声明存储器,存储器是通过寄存器数组声明的,即用reg声明。 存储器声明形式如下: reg msb: lsb memory1 upper1:lower1 ,memory2 upper2:lower2 ,.; 其中msb、lsb定义了存储器中单个寄存器的位宽;memory1和memory2是存储器名;upper1、lower1和upper2、lower2分别定义了这两个存储器的大小(有多少个寄存器)。 下面是两个存储器声明实例:,reg 0:3 M

10、yMem 0:63 / /MyMem是由64个4位寄存器组成的存储器 reg Bog 1:5 / /Bog是由5个1位寄存器组成的数组,注意:可以只用一条赋值语句就完成对一个寄存器的赋值,但是不能只用一条赋值语句就完成对整个存储器的赋值,应当对存储器中的每个寄存器单独赋值。,对存储器赋值的正确方法如下: reg 0:3 Xrom 1 : 4 /Xrom是由4个4位寄存器组成的存储器 对存储器赋值方法一: Xrom1 = 4hA; /对其中一个寄存器赋值 Xrom2 = 4h8; /对其中一个寄存器赋值 Xrom3 = 4hF; /对其中一个寄存器赋值 Xrom4 = 4h2; /对其中一个寄存

11、器赋值,对存储器赋值方法二: 使用$readmemb系统任务从指定的文本文件中读取数据并加载到存储器。 例: reg 1:4 RomB 1:7 ; $readmemb (“ram.patt“, RomB); RomB是存储器名,ram.patt是包含数据的文本文件,ram.patt必须包含二进制值,也可以包含空白和注释。,1 操作数 操作数就是运算对象,位于操作符左右两侧。操作数有如下8种类型: 常数 参数(parameter定义的数) 线网(wire定义的数) 寄存器(Reg定义的数) 位选择(线网或寄存器的某个位) 部分选择(线网或寄存器的部分连续位) 存储器单元 函数调用,二、表达式,V

12、erilog HDL的操作符有如下9种类型: 算术操作符 关系操作符 相等操作符 逻辑操作符 按位操作符 归约操作符(缩位操作符) 移位操作符 条件操作符 连接和复制操作符 其中,除条件操作符从右向左关联外,其余所有操作符均自左向右关联。,2 操作符,(1)算术运算符(Arithmetic operators) 常用的算术运算符包括: + 加 - 减 * 乘 / 除 % 求模,注意: 整数除法将截断所有小数部分,如7/4 结果为1; 模操作符将求出与第一个操作数符号相同的余数,如7%4结果为3,而-7%4结果为-3; 如果算术操作符的操作数中出现x或z,那么整个算术操作的运算结果为x。例如:b

13、10x1 + b01111 的结果为不确定数 bxxxxx。,(2)关系操作符 关系操作符是对两个操作数进行比较,如果比较结果为真则结果为1,如果比较结果为假则结果为0,关系操作符多用于条件判断。 关系操作符有如下4种: (大于) =(不小于) =(不大于),如果操作数中有x或z出现,那么结果为x。例如: 23 45 /结果为假(0) 52= b01110 等价于: b01000 = b01110 /结果为假(0),(3)相等操作符 与关系操作符类似,相等操作符也是对两个操作数进行比较,如果比较结果为假,则结果为0,否则结果为1。 相等操作符有如下4种: =(逻辑相等) !=(逻辑不等) =(

14、全等) !=(非全等),其中,“=”和“!=”是把两个操作数的逻辑值做比较,由于操作数中某些位可能是x或z,所以比较结果也有可能是x。 而 “=”和“!=”是按位进行比较,即便在两个操作数中某些位出现了x或z,只要它们出现在相同的位,那么就认为二者是相同的,比较结果为1,否则为0,而不会出现结果为x的情况。,(4)逻辑操作符 逻辑操作符是对操作数做与、或、非运算,操作结果为0或1。逻辑操作符有3种: &(逻辑与) |(逻辑或) !(逻辑非),逻辑操作符的操作数只能是逻辑值0或1 如: Crd = b0; /Crd是逻辑0 Dgs = b1; /Dgs是逻辑1 那么: Crd & Dgs /结果

15、为0 (假) Crd | Dgs /结果为1 (真) !Dgs /结果为0 (假),(5)位操作符 位操作符是对操作数按位进行与、或、非等逻辑操作。位操作符有如下5种: (一元非,只有一个操作数位于右侧) &(二元与,有两个操作数位于左右两侧) |(二元或,有两个操作数位于左右两侧) (二元异或,有两个操作数位于左右两侧) , (二元异或非,有两个操作数位于左右两侧),例如: A = b0110; B = b0100; 那么: A | B /结果为0110 A & B /结果为0100,(6)缩位运算符(规约操作符) & 与 & 与非 | 或 | 或非 异或 , 同或 缩位运算符与位运算符的逻辑运算法则一样,但 缩位运算是对单个操作数进行与、或、非递推运 算的,它放在操作数的前面。缩位运算符将一个 矢量缩减为一个标量。例:,A = b0110; B = b0100; 那么: |B /结果为1,因为B中有1 MyReg /结果为x,说明操作数MyReg中包含x,(7) 移位操作符 移位操作符是把操作数向左或向右移位若干位。移位操作符有2种: (右移),(8) 条件运算符(conditiona

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

当前位置:首页 > 中学教育 > 职业教育

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