1、define宏的使用:
define经常用来代替某些复杂的文本内容或数字,也可以用来构造字符串。``
1、`define D(x,y) initial $display("start", x , y, "end");
2、`define test_num 1414;
3、`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、在构造激励的时候一定要想好可复用性,并在最大范围随机性,以免不断返工修改,浪费时间和精力;
相关阅读
作者:谷公子
首发博客:https://blog.csdn.net/W1Z1Q/article/details/105694156