赞
踩
本节记录SystemVerilog约束随机的基础的知识。更多相关内容参考《IEEE Std 1800™-2012, IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language》。
SystemVerilog提供了多种方法来生成和操作随机数据。
function int unsigned $urandom [ (int seed ) ]
function int unsigned $urandom_range(int unsigned maxval, int unsigned minval = 0 )
randomize():内置类方法,用于根据预先设置的约束对带有rand/randc限定符的字段进行随机化。当不带参数调用时,它将递归随机化类中的所有随机变量。它可以被调用来随机化特定的变量(可以用rand限定符定义,也可以不定义),同时保持所有预定义的约束条件都是可满足的。当使用" null "参数调用randomize()方法时,可以将其用作约束检查器。
class Bus;
randc bit [15:0] addr;
rand bit [31:0] data;
int pkt_number;
constraint word_align {addr[1:0] == 2’b0;}
endclass
Bus busA = new;
repeat (50)
if ( busA.randomize() == 1 )
$display("addr = %h data = %h",busA.addr,busA.data);
else
$display("Randomization FAILED");
约束可以定义为类的显式属性,也可以通过randomize()调用内联指定。
约束条件是求解器需要保持为真的表达式。约束表达式包括随机变量、非随机状态变量、操作符、分布、字面量和常量。
约束操作符:
约束表达式有一定的局限性:
具体可以查看SystemVerilog约束随机(二)
本文主要简单的记录一下,SystemVerilog中的约束随机相关的基础知识。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。