我在编译代码行9时遇到错误,所以我不确定如何动态访问数组。我必须从收到的logic [255:0]
中构建bytes
。
(看起来我必须查看SystemVerilog的数据类型:()。
提前谢谢。
module test;
task test_array (logic [7:0] B);
static logic [255:0] l_ar_B;
l_ar_B[7:0] = B;
for(int i=0; i<32; i++)
l_ar_B[(i*8+7) : (i*8)] = B; // Error-[IRIPS] Illegal range in part select
$stop();
endtask
initial begin
$display("Start");
test_array(8'h11);
end
endmodule
答案 0 :(得分:0)
使用[M : N]
语法的范围选择时,M
和N
必须是常量。您应该使用语法[s +: W]
的部分选择寻址,其中W
是宽度的常量,s
可以是指示起始位位置的变量。自IEEE Std 1364-2001(Verilog 2001)以来+:
已经存在。看到
Indexing vectors and arrays with +:
for(int i=0; i<32; i++)
l_ar_B[(i*8) +: 8] = B;
由于您正在进行复制,因此您可以使用l_ar_B = {32{B}};
在相同的步骤中获得相同的结果。