一般來說,在數字IC驗證中,編寫testbench文件會採用verilog,但隨着設計越來越複雜,爲了更方便例化模塊,面向對象編程的SystemVerilog(以下簡稱SV)越來越流行。
1.SV簡介
2.SV語法
SV和Verilog的語法類似,基本SV可包含Verilog的所有規則,若有相異處下文會特意指出。
Verilog語法鏈接:https://blog.csdn.net/qq_39815222/article/details/89601331
- 數據類型
- 二值邏輯
包括 bit, byte, shortint, int, longint;這些類型的值只包含{0,1},目的是提高仿真性能,節約空間。若有四值邏輯數給其賦值,x,z會自動被賦值爲0,因此二值邏輯數要遠離DUT - logic
四值類型,類似於verilog裏的reg
- 通配符 .*
可以把相同名字的net和port連在一起
test test1( .a(a), .b(b), .c(c) ); //或者 test test1( .a, .b, .c );
等同於
test test1( .* );
- clocking Block
爲了避免冒險競爭,通常會把clk驅動的同步信號封裝在一個模塊裏,由interface調用。 - interface
將多個信號集合,簡化連接,方便調用,調用非常自由。
/***** 聲明******/
interface signal_test( input bit clk );
logic [1:0] A, B;
logic reset;
clocking dram @( posedge clk)
input #1ps A;
input #5
output #6 B;
endclocking
modport user1( output A, input B, reset); //聲明的端口可以在不同的modport裏定義爲不同的輸入輸出模式
modport user2( clocking cb, input reset); //調用clocking,port輸入輸出和user1不一樣
endinterface
/***** 調用 ******/
always #5 clk = ~clk;
signal_test.user1 signal1(clk); //調用user1模式
signal_temp signal2( .A(signal1.A), ......); //interface互相直接連接
test test1( signal1 ); //interface與module連接
- 賦值
data0 = 'x //SV中賦值可無需添加b,o,h等代表進制的符號
data1 = '1 //SV中可給某個值賦值全1,注意Verilog中不行