【发布时间】:2022-01-20 15:25:14
【问题描述】:
我正在尝试创建一个数组,其限制数组元素的总数小于给定值。比如我想生成一个随机数组,小于4的元素总数不超过6个。我实现的方式是:
function automatic int get_small_vals(input bit [3 : 0] bit_vector [64]);
automatic bit [3 : 0] q [$];
q = bit_vector.find(x) with (x < 4'd4);
return q.size();
endfunction
class InputData;
rand bit [3 : 0] abs_vals [64];
constraint no_more_than_p_small_values {
get_small_vals(abs_vals) < 6;
}
function void display();
foreach (abs_vals[i]) $write("%1h", abs_vals[i]);
$write("\n");
endfunction
endclass
initial begin
InputData rels;
rels = new();
rels.randomize();
rels.display();
#100;
$stop;
end
我在控制台(Vivado 2018.3 64bit)中看到有超过 6 个小于 4 的值:
WARNING: File: C:/my_path/unit_tb.sv Line: 69 : randomize failed to meet constraint.
902ed8fb3af155c14a5402c092709a999d7f0b2adbd6e7d6d698a7d5c2b5baa7
我不明白有什么问题。它适用于“等于”,但不适用于“小于”:
function automatic int get_small_vals(input bit [3 : 0] bit_vector [64]);
automatic bit [3 : 0] q [$];
q = bit_vector.find(x) with (x == 4'd4);
return q.size();
endfunction
【问题讨论】:
标签: random constraints verilog system-verilog