第三章:systemverilog文本值和数据类型
1.增强的文本值
2.改进的`define文本替换
3.时间值
4.新的变量类型
5.有符号和无符号类型
6.静态和动态变量(***)
7.类型转换
8.常数
增强的文本值(文本赋值增强)
主要是:位扩展更加方便
verilog :
data = 64'hFFFF_FFFF;
data = 'bz;
data = 'bx;
systemverilog:
data = '1;//无论data的size更改与否
data = 'z;
data = 'x;//可以不用写明进制(d/b/h/o)
`define 增强
systemverilog 可以实现宏参数替换。
systemverilog允许字符串内的宏变量替换,但verilog不可以。
eg:
`define print(v) $display("variable v = %h",v)
verilog中预编译后:
`print(data) ;// $display("variable v = %h",data);
systemverilog中预编译后:
`print(data);//$display("variable data = %h",data);
systemverilog变量
1.对象类型和数据类型
2.四态变量(logic/reg)
3.两态变量(bit/byte/int/shortint/longint)
4.显示/隐示变量或线网类型
5.综合指导
对象类型和数据类型
对象类型指明信号是var / wire
数据类型指明信号是四态/两态
显示/隐示var和wire
申明语句中,数据类型前没有显示指定对象类型(var/wire)就为隐示变量。
var logic[7:0] busA;
var bit[31:0] b;
注意四态变量转为两态变量x/z被认定为0;
静态变量和动态变量
1.systemverilog 缺省存储方式与verilog兼容,在module/begin..end/fork..join/非自动function和task中,默认存储为static方式。如果task/fucntion被申明automaitc,则缺省存储方式为自动的。
2.module级所有的变量都是静态的,不可以显示申明为static/automatic.
强制类型转换
verilog 是弱语言,可以把一个数据类型值赋给另一个数据类型的var/wire.
强制类型转换不同,可以发生在表达式中。
使用强制类型转换操作符
1.数据类型转换 <type>'(<expression>)
2.数据宽度转换 <size>'(<expression>)
3.符号类型转换 <sign>'(<expression>)
使用系统函数
$cast(dest_var,source_exp); //可以作为函数/任务调用
常数
verilog 有 : parameter / specparam /localparam
systemverilog 增加了const