首页 > 编程知识 正文

verilog generate例化(带小数的随机函数)

时间:2023-05-04 02:34:19 阅读:75134 作者:2412

验证创建的模块时,经常需要几种随机测试方法来检测隐藏漏洞。

与verilog相比,sv在随机化方面非常强大,有很多关于随机化的操作。

=====================================

随机数据:

一般来说,随机化操作需要封装到类中。 classBus

randbit[15:0]addr;

randbit[31:0]data;

constraint word _ align { addr [ 1:0 ]==2’B0; }

最终类

这是一个简单的例子,只要在类的数据类型之前添加rand或randc,就可以实例化该类

对象调用randomize ()方法,具有rand和randc的数据类型是随机化的。

但是,随机化不是完全随机化,往往需要一定的限制,所以也需要constraint语句

构建约束条件。

其中有各种各样的限制。

(1)公式约束) constraintword_align ) addr [ 1:0 ]==2’B0; 数据传输

(2)条件约束) classMyBusextendsBus;

randAddrTypeatype;

constraintaddr_range

{

(atype==low )-addrinside([0:15];

(atype==mid (-addr inside ([ 16:127 ] );

(atype==high )-addrinside([128:255];

//(以前的条件)-(相应的限制) ) ) ) ) )。

}

最终类

条件约束可以使用-方法,也可以使用if-else方法。 只有满足前一个条件时,才能进行后一个约束。

(3)嵌套约束) taskexercise_bus ) mybusbus;

内含子;

//example 1: restricttolowaddresses

res=bus.randomize () with ) atype==low; (;

//example 2: restricttoaddressbetween 10 and 20

RES=bus.randomize(with ) 10=addraddr=20; (;

//example 3: restrictdatavaluestopowers-of-two

res=bus.randomize(with ) data (数据-1)==0; (;

结束任务

在randomize方法之后使用with { }添加约束条件。

(4)权重约束) xd ist ([ 1003360102 ] :=1,2003360=2,3003360=5) /其中,(=之前的各要素的权重值为)=之后的值

xd ist { [ 100:102 ] :/1,2003360/2,3003360/5 } /其中,/之前的各要素将/之后的权重值平分

双随机序列:

是randsequence(main )

main:firstseconddone; 从主节点开始依次运行firstseconddone

first :添加| dec; 运行//add或dec

第二阶段: pop|push;

done:{$display('done ); (;

ADD:{$display('add ); (;

DEC:{$display('dec ); (;

pop:{$display('pop ); (;

推式: { $ display (' push ); (;

结束序列

决策树(randcase )

3:x=1; //前一个值是相应的权重

1:x=2;

4:x=3;

6:randcase

4:x=4;

5:x=5;

结束案例

结束案例

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。