【发布时间】:2014-02-15 01:19:15
【问题描述】:
我在测试台中遇到了以下约束。它的行为似乎因使用的模拟器而异。
constraint wr_c {
if (!one_beat) { addr[5:0] == 0, len == 15 };
}
它实际上应该做什么?
一个例子:
import uvm_pkg::*;
class pkt extends uvm_object;
rand bit one_beat;
rand int len;
rand bit [31:0] addr;
`uvm_object_utils_begin(pkt)
`uvm_field_int(one_beat, UVM_DEFAULT)
`uvm_field_int(len, UVM_DEFAULT)
`uvm_field_int(addr, UVM_DEFAULT)
`uvm_object_utils_end
constraint wr_c {
if (!one_beat) { addr[5:0] == 0, len == 15 };
}
endclass
module test;
initial begin
for (int i = 0; i < 10; i++) begin
automatic pkt p = new();
p.randomize();
p.print();
end
end
endmodule
【问题讨论】:
-
解释一下你看到的不同行为怎么样?
-
@dave_59,根据 Greg 的回答,我添加了一个回答,描述了不同模拟器会发生什么。
标签: constraints system-verilog