tests随机的构造方式分析
大致整理了5种,后续发现新的点子再补充。
- 随机序列生成器,一般用在上电后,去替换掉上电默认值的寄存器配置。主要是约束寄存器取值的有效范围以及寄存器与寄存器之间的依赖关系。
2.在test测试集中进行随机
3.在uvc的cfg file 里面随机
- 用$𝑣𝑎𝑙𝑢𝑒args 传递cmd参数来随机
5.用系统自带的$RANDOM函数进行随机。
举例:
当rtl是参数化的时候,验证会去随机rtl的参数。此时可选用$RANDOM函数来构造每种参数的随机并传递到例化接口上,通过seed的不同产生不同的随机。
在Makefile里定义define添加随机。
点击查看代码
rand0 :=(𝑠ℎ𝑒𝑙𝑙𝑒𝑐ℎ𝑜
$RANDOM)
rand1 :=(𝑠ℎ𝑒𝑙𝑙𝑒𝑐ℎ𝑜
$RANDOM)
rand2 :=(𝑠ℎ𝑒𝑙𝑙𝑒𝑐ℎ𝑜
$RANDOM)
VLOG_OPTS += +define+M_T=(𝑟𝑎𝑛𝑑0)+𝑁𝑇=
(rand1)+K_T=$(rand2)
点击查看代码
module tb;
parameter M=`M_T%2;
parameter N=`N_T%4;
parameter K=`K_T%6;
abc#(M,N,K) u_dut(
.din(),
.dvld(),
.dout()
);
endmodule;
1-4都是使用随机约束产生随机。随机的常用语法举例:
静态约束
rand int a; constraint c_dist { a dist {0:=40,[1:3]:=60};}
动态约束
typedef enum {BYTE,WORD,LWRD} length_e;
rand length_e len;
bit[31:0] w_byte=1,w_word=3,w_lwrd=5;
constraint c_len { len dist {BYTE:=w_byte, WORD:=w_word, LWRD:=w_lwrd};}
确定上下限的约束
rand int a;
int 10,20;
constraint c_range {c inside {[10:20]};}

浙公网安备 33010602011771号