SystemVerilog中的随机WIDTH掩码

马扎里

我正在尝试创建一个随机宽度的位掩码。我有一个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;

这是非常丑陋的。我想知道是否有更好的解决方案?

dave_59
mask = 1'b1
mask = (mask << MASK_WIDTH) -1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章