IC验证学霸笔记2——Verilog基本语法之数据类型(二)

数据类型及常量、变量
数据类型

数据类型是用来表示数字电路中的数据存储和传送单元

4种基本的数据类型

integer (整形)             parameter类型                reg                wire(线网)

常量

在程序运行的过程中,其值不允许被改变

包括:
数字(包括整形,x和z值,负数)
parameter常量(或称符号常量)

1.整数型常量
二进制 (b/B)
十进制 (d/D)
十六进制 (h/H)
八进制   (o/O)


 注:位宽表示二进制时的宽度

2.x和z值
x表示不定值(8'b1001xxxx或8’h9x);

z表示高阻值(8'b1001zzzz或8’h9z);

每个字符代表的二进制的宽度取决于所用的进制;

当用二进制表示时,以表明位宽的数若用x或者z表示某些位,则只有在最左边的x或z具有扩展性例如:8'bzx = 8'bzzzz_zzzx    8'b1x = 8'b0000_001x

?是z的另一种表示符号,建议在case语句中使用?表示高阻态z。


3.负数
在位宽前边加一个负号,表示负数;

如:-8’d5      //5的补数   =8'11111011

负号不能放在位宽和进制之间,也不能放在进制和数字之间

4.parameter常量(符号常量)
用parameter来定义一个标示符,代表一个常量,称为符号常量



每个赋值语句的右边必须为常数表达式,且只能包含数字或先前定义过的符号常量:

parameter addrwidth =16;  //合法

parameter addrwidth = addrwidth * 2  //非法

常用参数来定义延时时间和变量宽度

可用字符串表示的任何地方,都可用定义的参数来代替;

参数是本地的,其定义只在本模块有效;

在模块或实例例化时,可通过参数传递改变在被引用模块或实例中已定义的参数

localparam 符号常量:



parameter可作为在顶层模块中例化底层模块时传递参数的接口;

localparam的作用域仅仅限于当前module,不能作为参数传递的接口; 

实例:


变量

在程序运行过程中,其值可以改变的量,称为变量;


1.net型变量
输出始终随输入的变化二变化的变量(表示结构实体之间的物理连接)

常用的net变量为wire。


2.register 型变量
对应具有状态保持作用的电路元件(如触发器,寄存器)

常用来表示过程块语句(initial always,task,function)内的指定信号


register变量与net变量的根本区别:register变量要被明确的赋值,并且在被重新赋值前一直保持原值

register变量必须通过过程语句块赋值,不能使用assign语句块赋值

在过程语句块内赋值的每个信号必须定义成register型。

reg型变量 

在过程块中被赋值的信号,往往代表触发器,但不一定就是触发器(也可以是组合逻辑信号)

reg与wire的区别:

边沿触发和电平触发的区别:

边沿触发:posedge定义为上升沿触发,只有在后面信号由低变高的时候才触发,negedge正好相反,为下降沿触发。

电平触发:当敏感信号发生变化是触发

3.memory型变量——数组
有若干个相同宽度的reg向量构成的数组

Verilog 通过reg型变量简历数组来对存储器建模

memory型变量可描述RAM,ROM和reg文件

memory型变量通过扩展reg型变量的地址范围来生成

reg [n-1:0] 存储器名[m-1:0]; 每个存储单元位宽为n,共有m个存储单元

例:

reg [n-1:0] rega;  //一个n位的寄存器;

reg  mema  [n-1:0] ; //n个一位寄存器组成的存储器

赋值方式不同:

一个n位的寄存器可用一条赋值语句赋值,一个完整的存储器则不行,若要对某存储器中的存储单元进行读写操作,必须指明该单元在存储器中的地址!

例:

rega=0;       //合法赋值语句

mema=0;    // 非合法赋值语句

mema[8]=1;//合法赋值语句

mema[1023:0]=0; //合法赋值语句

注:优秀验证学员随堂笔记,已经征求到学生的同意,会持续给牛友们分享!
大家看完记得 一键三连!多多支持


#你为什么选择硬件行业##不去互联网还可以去硬件行业##芯片设计工程师##芯片IC验证工程师##做项目#
全部评论
感谢大佬分享的数据类型用法
点赞 回复 分享
发布于 2022-08-03 15:52

相关推荐

07-11 10:56
门头沟学院 Java
码客明:大胆的说自己能实习6个月就行
点赞 评论 收藏
分享
07-09 18:28
门头沟学院 Java
写着提前批,结果还要实习4个月以上???
程序员牛肉:这种不用看,直接投了,面试的时候问对应的HR就行。有可能他们是直接复制的暑期实习的模板。
点赞 评论 收藏
分享
06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 12:10
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务