System verilog SystemVerilog中的随机宽度掩码

System verilog SystemVerilog中的随机宽度掩码,system-verilog,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); 因此

我正在尝试创建一个随机宽度位掩码。我有一个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,这意味着我需要一个掩码,它的位数与我的输入_数据的位数相同,但在开始时有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;
for(int i=0;i
这太难看了。我想知道是否有更好的解决方案?

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

mask=(mask在Python或任何支持位移位和减法的语言中工作!