2016-08-24 27 views
0

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

`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
mask = 1'b1 
mask = (mask << MASK_WIDTH) -1; 
+0

非常感谢!有用! – maskarih