请教constraint
时间:10-02
整理:3721RD
点击:
class ctrl_seq_cfg extends ctrl_seq_base;
rand bit [13:0]data0;
rand bit [13:0]data1;
constraint c_data0{ data0<= 14'd4096; data0>= -14'd4096;}
constraint c_data1{ data1<= 14'd4096; data1>= -14'd4096;}
请教,定义位宽为14bit的数据rand bit,是不是就不能限制 data0>= -14'd4096;
如何解决这个问题呢?应该如何定义?
rand bit [13:0]data0;
rand bit [13:0]data1;
constraint c_data0{ data0<= 14'd4096; data0>= -14'd4096;}
constraint c_data1{ data1<= 14'd4096; data1>= -14'd4096;}
请教,定义位宽为14bit的数据rand bit,是不是就不能限制 data0>= -14'd4096;
如何解决这个问题呢?应该如何定义?
定义成int 型
信号是14bit的,我可以定义
rand int [13:0]data0; ?不对吧。
应该如何处理呢?
接口的信号只能是14bit,我必须定义int,然后用的时候,截取低14bit?
是的,用的时候截取,其实不用做多余的工作,用的时候直接赋值就可以了,
你要是用uvm的话,直接定义成rand bit [13:0],然后注册的时候用`uvm_field_int注册就可以了
单纯sv的话就写成rand int ,用的时候截取就对了,毕竟截取是按照无符号数截取,就是说每个bit值不会动,原封不动赋值过去,这样你看到的该是正还是正,该是负数还是负数
非常感谢,我已经用另一种方法实现了
constraint c_data0{ (data0 [13:12]==2'b00) | (data0 [13:12]==2'b11 ) ; }
constraint c_data1{ (data1 [13:12]==2'b00) | (data1 [13:12]==2'b11 ) ; }
这样是可以的,但是这种方法更类似rtl设计而不是验证
keyide
其实直接复制给出范围就行了,你只是要得到一个范围内的值而已