System Verilog总结 第六章 随机化

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)在表达式中最多使用一

你可能感兴趣的:(SV)