我正在尝试做这样的事情:
module test;
reg [1:0] c [1:0];
reg [1:0] a1 [1:0];
task mem_a;
output reg [1:0] a [1:0];
begin
a[0]=0;
a[1]=1;
a[2]=2;
a[3]=3;
end
endtask
task mem_b;
input reg [1:0] a2 [1:0];
output reg [1:0] b [1:0];
begin
b=a2; // or some other manupulation
end
endtask
initial
begin
mem_a (a1);
mem_b (a1,c);
end
endmodule
当我编译它时,我收到错误:
所以我想了解如何在任务中传递二维数组。
P.S:我之前没有使用任务。答案 0 :(得分:0)
在Verilog中不可能。您可能只需要内联“展开”任务。
答案 1 :(得分:0)
另一种解决方案是压平阵列。例如:
module test;
// reg [1:0] c1 [1:0] ends up as:
reg [2*2-1:0] c;
reg [2*2-1:0] a1;
task mem_a;
output reg [2*2-1:0] a;
begin
a[2*0+:2]=2'd0;
a[2*1+:2]=2'd1;
//a[2]=2; // This was out of bounds
//a[3]=3; // So was this
end
endtask
task mem_b;
input reg [2*2-1:0] a2;
output reg [2*2-1:0] b;
begin
b=a2; // or some other manipulation
end
endtask
initial
begin
mem_a (a1);
mem_b (a1,c);
end
endmodule