如何改变变量赋值的下标?
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 您要修改的数据部分的掩码。
我想对具有变量下标的变量进行赋值。这就是我想要做的:
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 您要修改的数据部分的掩码。