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