Systemverilog随机位向量

adi*_*dir -1 constraints system-verilog

我正在使用system-verilog并且我想随机化一个大小为100的位向量.
但是我想只有10个单元格将获得值1.我试图在约束中使用countones()但它不可能.

所以我没有想法.

谢谢你的帮助!

Tud*_*imi 6

我尝试了这个代码,它在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
Run Code Online (Sandbox Code Playgroud)

根据我的记忆,一些供应商过去不支持这样的约束,其中随机变量被用作方法的输入.如果他们支持的话,变量在开始的时间值randomize()被用于输入,但这种限制并不影响其最终值.

  • 如果你不想要这个课你可以做`void(randomize(vec)with {$ countones(vec)== 10;});` (2认同)