【发布时间】:2016-08-24 14:05:13
【问题描述】:
我正在尝试创建一个随机宽度的位掩码。我有一个 256 位的数组,每 32 位对应一个通道(总共 8 个通道)。我需要生成一个可以从 0 到 7 随机选择通道的 Mask。
`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}};
但我收到以下错误:Illegal operand for constant expression [4(IEEE)].
哪种有意义。由于我不能使用动态打包数组,所以我只剩下这个解决方案:
for (int i = 0; i < MASK_WIDTH; i++)
mask [i]=1'b1;
这是超级丑陋的。我想知道是否有更好的解决方案?
【问题讨论】:
标签: system-verilog