SystemVerilog中的随机WIDTH掩码

时间:2016-08-24 14:05:13

标签: system-verilog

我正在尝试创建一个随机宽度位掩码。我有一个256位的数组,每32位对应一个通道(总共8个通道)。我需要生成一个可以随机选择0到7的通道的掩码。

`define CHANNELS    8
`define INPUT_WIDTH 256 
...
logic [`INPUT_WIDTH -1:0] input_data ='{default:1'b0};
int num_channels                     = $urandom_range(0,`CHANNELS-1);

因此,如果num_channels为4,则意味着我需要一个与input_data具有相同位数但仍在开头有4 * 32个的掩码,所以:

const int MASK_WIDTH = num_channels*`CHANNELS;

我希望使用SystemVerilog复制功能来创建掩码,如下所示:

logic [`INPUT_WIDTH -1:0] mask
mask = '{MASK_WIDTH{1}};

但是我收到以下错误:常量表达式的非法操作数[4(IEEE)]。

哪种有道理。由于我不能使用动态打包数组,我只剩下这个解决方案:

for (int i = 0; i < MASK_WIDTH; i++) 
    mask [i]=1'b1;

超级丑陋。我想知道是否有更好的解决方案?

1 个答案:

答案 0 :(得分:3)

123