【问题标题】:Random WIDTH mask in SystemVerilogSystemVerilog 中的随机宽度掩码
【发布时间】: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


    【解决方案1】:
    mask = 1'b1
    mask = (mask << MASK_WIDTH) -1;
    

    【讨论】:

    • 在 Python 或任何支持位移和减法的语言中工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多