【问题标题】:How to randomize an array of bit arrays in verilog?如何在verilog中随机化一组位数组?
【发布时间】:2016-07-28 12:01:03
【问题描述】:

我是 Verilog 的新手。

如何随机化以下内容:

 bit [7:0] data [];

*不使用systemVerilog的randomize()。

【问题讨论】:

  • 您的问题说您是 Verilog 的新手,但您问的是如何随机化一个动态数组,它是一种 SystemVerilog 数据类型。也许你应该改变它以避免任何混淆。

标签: verilog system-verilog


【解决方案1】:

SystemVerilog 不会改变动态数组的大小,除非你对其施加约束。所以你要么需要在调用randomize()之前分配数组,要么使用约束来随机化大小。

bit [7:0] data [];

data = new[10];
randomize(data);

bit [7:0] data [];

randomize(data) with {data.size inside {[5:15]} ;};

或者如果你没有访问 randomize() SystemVerilog,你可以这样做

  data = new[10];
  foreach(data[ii]) data[ii] = $urandom;

【讨论】:

  • @Rahul Menon-我知道systemVerilog中有一个特殊的方法(随机化),购买我在Verilog中问过。
  • 您在 Verilog 中询问,但您的示例显示 SystemVerilog bit 类型并且您使用了 SystemVerilog 标记。我在不使用randomize() 的情况下添加了答案。
  • @dave_59 不是动态数组 system-verilog 构造吗?
  • @RahulMenon,是的。但如果您使用的是 Modelsim,所有最新版本的 Modelsim 都支持所有 SystemVerilog 数据类型。您需要 Questa 来获得 randomize() 支持
【解决方案2】:

将数组的大小限制在所需范围内并调用randomize。它应该生成一个包含随机数据的数组(在下面的示例中,大小在 30 到 40 之间)

class rand_gen ;

rand bit [7:0]   data[];
constraint db { data.size inside  {[30:40]}; }

task generate ();
 randomize(data);
end task

endclass

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多