如何改变变量赋值的下标?

How do I vary the lower index of a variable assignment?

我想对具有变量下标的变量进行赋值。这就是我想要做的:

int i;
logic [63:0] data;

i = someCalculatedNumber;
data[63:(i*8)] = 'h0;

我知道这不会编译。完成这项任务的最佳方法是什么?

一种方法是使用 for 循环:

module tb;

int i; 
logic [63:0] data;

initial begin
    data = '1;
    $displayh(data);

    i = 7;
    for (int j=63; j>=(i*8); j--) data[j] = 0;
    $displayh(data);

    i = 2;
    for (int j=63; j>=(i*8); j--) data[j] = 0;
    $displayh(data);
end
endmodule

输出:

ffffffffffffffff
00ffffffffffffff
000000000000ffff

您可以将代码包装在 function 中。

如果您希望将 LSB 归零,那么这应该可以为您完成

data &= '1 << i*8;

或更具可读性

data = data & ('1 << i*8);

如果这不是您所需要的,您仍然可以使用 '1 << i*8 或其补码作为 select 您要修改的数据部分的掩码。