【发布时间】:2014-04-03 10:23:21
【问题描述】:
我正在使用 system-verilog,我想随机化一个大小为 100 的位向量。
但我希望只有 10 个单元格的值为 1。
我试图在约束中使用 countones() 但它不可能。
所以我没有想法了。
感谢您的帮助!
【问题讨论】:
标签: constraints system-verilog
我正在使用 system-verilog,我想随机化一个大小为 100 的位向量。
但我希望只有 10 个单元格的值为 1。
我试图在约束中使用 countones() 但它不可能。
所以我没有想法了。
感谢您的帮助!
【问题讨论】:
标签: constraints system-verilog
我尝试了这段代码,它在 Incisve 中工作:
package some_package;
class some_class;
rand bit[99:0] vec;
constraint just_10_ones {
$countones(vec) == 10;
}
endclass
endpackage
module top;
import some_package::*;
initial begin
static some_class obj = new();
obj.randomize();
$display("vec = %b", obj.vec);
end
endmodule
据我记得,过去一些供应商不支持此类约束,即使用随机变量作为方法的输入。如果他们确实支持它,则启动 randomize() 时的变量值将用于输入,但此约束不会影响其最终值。
【讨论】:
void(randomize(vec) with { $countones(vec) == 10; });