SV学习笔记之随机化

SV学习笔记之随机化

1.首先 CRT 随机测试法通过随机激励 找到定向测试无法确定的BUG。

2.组成有两部分 1.使用随机的数据流来为DUT产生输入的测试代码。

                          2.伪随机数发生器的种子。

3.第九章将会用功能覆盖率来确定验证的进度。

$random函数可以产生随机的数据

1.器件配置

2.环境配置

3.原始输入数据

4.封装后的输入数据

5.协议异常错误违规

6.延时

6.3 和OOP使用时 sv的随机激励产生是最有效的

首先建立一个具有一组相关的随机变量的类,然后用随机函数为这些变量赋随机值。可以用约束来限制这些随机值的范围,使它门为有效的值,也可以测试某些专用的功能。

受约束的随机激励使在事务级产生的,通常不会一次只产生一个值。

例带有随机变量的简单类

 class packet;

//随机变量

rand bit【31:0】 src,dst,data【8】; //每次随机化这个类时  变量都会赋一个值

randc bit[7:0] kind;  //周期随机性  所有可能的值都赋值过后随机值才可能重复  像发牌    单一变量的周期性  

//src的约束

constraint c{ src>10; src<15;} //约束 只有src 为括号内为真

endclass

packet p;

initial begin

p= new();

assert(p.randomize()); //randomize ()函数在遇到约束方面的问题时会返回0   希望为1  为0时跳到                                     else

else $fatal(0,"packet::randomize failed");

transmit(p);

end

补充断言 assert  希望括号为真

6.3.2  ranmomize

randomize();函数为类里所有的的rand和randc都赋一次  为1时则代表随机化成功

可以被随机化???

整形的变量 由位构成的变量  不能随机化字符串。

6、4  约束

 必须是随机变量才能添加约束。

一个表达式中最多只能有一个关系操作符;

对枚举类型的疑惑  显示类型的转换

转换分为 静态转换 动态转换 $cast 即所谓的显示转换

整形不可以直接赋值给枚举

枚举可以直接赋值给整形

整形赋值给枚举  需要进行动态转换 $cast

右边的值赋值给左边的量。

约束块里只能包含表达式  所以约束块里不能赋值;

权重  DIST

src dist{ 0:=40 ,【1:3】:=60}   

:=  是每一个

:/是均分权重;

6.4.5集合(set)成员和inside运算符

inside运算符可以产生一个值的集合

可以用$来代表取值范围内的最大值或最小值(个人觉得花里胡哨没用)

6.4.7  条件约束  双向约束

约束块代码是并行的

6.6 一个类可以控制多个约束快

用constraint_mode()来控制 0关 1 开,

6.8内嵌约束

randomize() with 

6.9 pre_randomize post_randomize;

6.10随机化参数

$random()  //返回32位有符号整形  int

$urandom()//返回32位无符号整形

$urandom_range() //无符号 范围

$dist_exponential()//指数衰落

$dist_normal()//钟形

$dist_poisson()//钟形

$dist_uniform()平均

6.13数组约束

6.15随机控制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值