芯片验证的一些记录

1、`define宏的使用:
define经常用来代替某些复杂的文本内容或数字,也可以用来构造字符串。

1、`define D(x,y) initial $display("start", x , y, "end")2、`define test_num 14143、`define append(f) f``_master =》`append(clock)   =》  clock_master

2、模块A input类型信号口所对接的模块B,这两个模块如果不是一个时钟域,要检查模块A的输入信号是否要经过同步处理,常用有打拍、DMUX,FIFO等。

3、条件执行标志来控制测试用例testcase的条件执行,所有语句都被编译,但是条件执行它们,这样就不用重新编译浪费时间。有两个系统任务关键字可用于条件执行; t e s t test testplusargs和 v a l u e value valueplusargs。如下例子:

if($test$plusargs("DISPLSY"))
    $display("abcd");

仅当在运行时设置了标志DISPLAY时,才会执行display任务打印abcd;

string test_string;
if($value$pluargs(test_name=%s,test_sring))
    $display("test_string is %s",test_string);

如果在仿真进行时,有找到test_name这个匹配项,就把test_name得值赋给test_string,且 v a l u e value valuepluargs返回1,反正为0。

4、对模块的寄存器存在耦合关系,或者取值可以在一定范围内变动的,一定要在用例里当做背景随机配置起来,以免漏验证某些场景。当然,可以把重点场景随机到的比例增大点。

5、在构造激励的时候一定要想好可复用性,并在最大范围随机性,以免不断返工修改,浪费时间和精力;

你可能感兴趣的:(SystemVerilog)