6.1 介绍
(1)受约束的随机测试法(CRT):
自动产生测试集,通过约束来选择测试方案,产生有效激励,测试感兴趣的功能项,预测输出结果
(2)两部分:测试代码、伪随机数发生器(PRNG)的种子
改变种子的值:调整每次测试
6.2 什么需要随机化
(1)产生随机化的数据:$random (只能找到数据路径的Bug,大部分Bug在控制路径里)
(2)BUT(待测设计)的所有关键点都采用随机化:
器件配置;环境~;原始输入数据;封装后的输入数据;协议异常;延时;事务状态;错误和违规
6.2.1 器件配置
6.3 SV中的随机化
(1)与OOP同时使用:
建立具有一组相关的随机变量的类,用随机函数为变量赋随机值,可以约束随机值范围,也可以测试专用功能
6.3.1 带有随机变量的简单类
(1)class Packet;
// 随机变量
rand bit [31:0] src,dat,data[8]; // 每次随机化这个类,变量会赋一个值
randc bit [7:0] kind; // 周期随机性 (所有可能的值都赋过再重复)
// src约束
constraint c {src>10; src<15;} // 约束:变量范围 至少有一个变量是rand或randc类型的随机变量
endclass
Packet p;
initial begin
p=new(); // 产生一个包
assert (p.randomize()); // randomize():为类中的所有rand和randc类型的随机变量赋随机值(不违背所有的有效约 束),遇到约束问题返回0,使用断言(assert)检查randomize函数的结果(成功:1,失败:0,检查到错误会显示错误信息)
else $fatal(0,"Packet::randomize failed"); // $fatal:终止仿真
transmit(p);
end
(2) 不能在类的构造函数中随机化对象
类里的所有变量都应是随机的、公有的
6.3.4 随机化:整型变量(由位组构成的变量)、整数、位矢量
6.4 约束
(1)在表达式中最多使用一
System Verilog总结 第六章 随机化
最新推荐文章于 2023-11-22 10:52:06 发布