目录
随机约束与分布
随机测试可以找到未知缺陷、减少代码量;
约束使随机自由是一种合法的随机,即限定激励的合法范围;
随机分布:器件配置、环境配置、原始输入配置、延时、协议异常
注意:随机发生在仿真阶段
声明随机变量的类
第一步声明含关键词rand、randc和constrait的类,第二步例化并在initial中使用:句柄.randomize
class Packet;
rand bit[31:0] src,dst,data[8];
randc bit [7:0] kind;
constraint c {src>10;
src<15;}//声明性质的代码
endclass
Packet p;
initial begin
p=new();
assert(p.randomize());//使用断言检查randomize结果
else $fatal(0,"Packet::randomize failed");
transmit(p);
end
约束块
形式:constraint+约束块名称,
randomize() with { }增加额外约束;关闭所有约束块P.constraint_mode(0),打开c_short约束块P.c_short.constraint_mode(1);pre_randomize()和post_randomize()是在randomize()之前或之后执行的操作;randomize(low)则只随机化low成员(无论low是否加关键词rand声明)
约束块中的部分关键词:dist、inside、->、if...else...
///////////dist应用
cons