在任务中传递内存:Verilog

时间:2015-11-11 10:41:27

标签: verilog

我正在尝试做这样的事情:

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

当我编译它时,我收到错误:

  1. 非法引用内存“b”
  2. 非法LHS转让。
  3. 非法引用内存“a2”
  4. 非法任务输出参数。
  5. 非法引用内存“a1”。
  6. 所以我想了解如何在任务中传递二维数组。

    P.S:我之前没有使用任务。

2 个答案:

答案 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