1.sv随机约束和分布
随机测试相比于定向测试要求更复杂,随机不意味着绝对自由,需要满足一定的联系
器件配置:通过寄存器和系统信号
环境配置:随机化验证环境,例如合理的时钟和外部反馈信号
原始输入数据:例如mcdf数据包的长度,带宽,数据间的顺序
延时:握手信号之间的时序关系,例如valid和ready,req和ack之间的时序关系
协议异常:如果反馈信号给出异常,那么设计是否可以保持后续数据处理的稳定性
随机化函数 std::randomsize
调用randomize()的变量必须是rand 变量
class Packet;
rand bit [31:0] src, dst, data[8]; //随机化变量
randc bit [7:0] kind; //randc周期随机性,所有可能的值都产生过,才会产生新的一轮
constraint x {src > 10;
src < 15;} //添加约束
endclass
Packet p;
initial begin
p = new();
assert(p.randomize()) else //随机化类
$ fatal(0, "Packet::randomize failed")
transmit(p);
end
sv对于logic类型,也只能随机化0或 1,不能随机化X和Z
class data;
rand bit [2