【问题标题】:Systemverilog random bit vectorSystemverilog 随机位向量
【发布时间】:2014-04-03 10:23:21
【问题描述】:

我正在使用 system-verilog,我想随机化一个大小为 100 的位向量。
但我希望只有 10 个单元格的值为 1。 我试图在约束中使用 countones() 但它不可能。

所以我没有想法了。

感谢您的帮助!

【问题讨论】:

    标签: constraints system-verilog


    【解决方案1】:

    我尝试了这段代码,它在 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; });
    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多