数字IC验证——SystemVerilog学习

一般来说,在数字IC验证中,编写testbench文件会采用verilog,但随着设计越来越复杂,为了更方便例化模块,面向对象编程的SystemVerilog(以下简称SV)越来越流行。

1.SV简介

2.SV语法

SV和Verilog的语法类似,基本SV可包含Verilog的所有规则,若有相异处下文会特意指出。
Verilog语法链接:https://blog.csdn.net/qq_39815222/article/details/89601331

  • 数据类型
  1.   二值逻辑
    包括 bit, byte, shortint, int, longint;这些类型的值只包含{0,1},目的是提高仿真性能,节约空间。若有四值逻辑数给其赋值,x,z会自动被赋值为0,因此二值逻辑数要远离DUT
  2. 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中不行

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章