- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4。verilog数据类型和表达式
第4讲 数据类型与表达式;Verilog HDL提供了丰富的数据类型,本讲把Verilog HDL的数据分为常量和变量两类,并分别介绍其特点和使用方法。
表达式是操作符、操作数和标点符号序列,其目的是用来说明一个计算过程。
程序中的大部分语句是由表达式构成的。本讲将给出操作符和操作数的种类及正确用法。
;(一) 常量
在程序运行过程中,其值不能被改变的量称为常量。Verilog HDL有整型、实数型、字符串型3种常量。
在整型或实数型常量的任意位置可以随意插入下划线“_”(但是不能当作首符号),这些下划线对数本身并没有意义,但是当数字很长时使用下划线可以提高可读性。
;Verilog HDL有4种基本的逻辑状态:
0 表示逻辑0或“假”;
1 表示逻辑1或“真”;
x 表示未知;
z 表示高阻。
注意:x值和z值都是不分大小写的,如:
值0x1z与值0X1Z相同。
Verilog HDL的常量是由以上这4种基本值组成的。
;Verilog HDL的整数有两种书写格式:
十进制数格式;
基数格式。
(1)十进制数格式是一个可以带正负号的数字序列,代表一个有符号数,如下例:
32 //十进制数32
-15 //十进制数-15
;(2)基数格式的数通常是无符号数,形式如下:
[size]base value
size定义常量的位数(长度),这是可选项;
base是基数,规定这个数据的进制,可以是o或O(表示八进制),b或B(表示二进制),d或D(表示十进制),h或H(表示十六进制)之一;
value是一个数字序列,其形式应与base定义的形式相符。这个数字序列中出现的值x和z以及十六进制中的a~f不区分大小写,“?”字符可以代替值z。
;下面给出一些典型书写方法,有正确的也有错误的。
5O37 //5位八进制数
4D2 //4位十进制数
4B1x_01 //4位二进制数
7Hx //7位x(扩展的x), 即xxxxxxx
4hZ //4位z(扩展的z) , 即zzzz
2h1? //2位十六进制数,与2h1z相同
8h 2 A //在位数和字符之间,以及基数和数值之间允许出现空格
?
4d-4 //非法:数值不能为负
3 b001 //非法:和基数b之间不允许出现空格
(2+3)b10 //非法:位数不能够为表达式
;如果没有定义常量的位数,那么这个数的长度就是相应值的位数,例如:
o721 //9位八进制数
hAF //8位十六进制数
如果定义的长度大于数字序列的实际长度,通常在数据序列的高位(左侧)补0。但是如果这个数字序列最左边一位为x或z,就用x或z在左边补位,例如:
10b10 //左边补0, 0000000010
10bx0x1 //左边补x, xxxxxxx0x1
如果定义的长度小于数字序列的实际长度,这个数字序列最左边超出的位将被截断,例如:
3b1001_0011 //与3b011相等
5H0FFF //与5H1F相等
;实数的定义方式有两种:
(1)十进制格式,由数字和小数点组成(必须有小数点),例如:
2.0
5.678
11572.12
0.1
2. // 非法:小数点右侧必须有数字
;;3.字符串型常量;;参数;Verilog HDL有线网net和寄存器两种类型的变量,每种类型都有其在电路中的实际意义。
1.线网型变量
Net型数据相当于硬件电路中的各种物理连接,其特点是输出的值紧跟输入值的变化而变化。
对net型有两种驱动方式,一种方式是在结构描述中将其连接到一个门元件或模块的输出端;另一种方式是用持续赋值语句assign对其进行赋值。 wire是最常用的Net型变量。
;
wire型变量的定义格式如下:
wire 数据名1,数据名2,……数据名n;
例如: wire a,b;
//定义了两个wire型变量a和b
;2.寄存器型变量;用reg声明存储器;;
注意:可以只用一条赋值语句就完成对一个寄存器的赋值,但是不能只用一条赋值语句就完成对整个存储器的赋值,应当对存储器中的每个寄存器单独赋值。;;对存储器赋值方法二: 使用$readmemb系统任务从指定的文本文件中读取数据并加载到存储器。
例:
reg [1:4] RomB [1:7] ;
$readmemb (ram.patt, RomB);
RomB是存储器名,ram.patt是包含
文档评论(0)