将阵列传递给verilog模块

将阵列传递给verilog模块,verilog,Verilog,我有一个2D数组要传递给模块。我已将其展平为1D数组,并希望将其发送给某个模块进行处理。为此,我声明了一条32位宽的导线,并尝试通过它将32位寄存器的值传递给其他模块。这给了我一个错误“不允许对非寄存器进行过程赋值”我想知道还有没有别的方法?我怎样才能纠正错误呢 @Marty再次感谢。它正在工作。我必须计算1000个采样浮点值的平均值。我有4个单独的浮点加法模块。我想将这些值逐一发送到模块。为此,我使用了for循环。我可以将其发送到 Float_Add dummyinstance(fpvalu

我有一个2D数组要传递给模块。我已将其展平为1D数组,并希望将其发送给某个模块进行处理。为此,我声明了一条32位宽的导线,并尝试通过它将32位寄存器的值传递给其他模块。这给了我一个错误“不允许对非寄存器进行过程赋值”我想知道还有没有别的方法?我怎样才能纠正错误呢


@Marty再次感谢。它正在工作。我必须计算1000个采样浮点值的平均值。我有4个单独的浮点加法模块。我想将这些值逐一发送到模块。为此,我使用了for循环。我可以将其发送到

Float_Add dummyinstance(fpvalue[k]);
其中k是常数

但不是为了

for(..)
  for(..)
     Mean[i]=Float_Add dummyinstance(fpvalue[i][j])

我该怎么做?

听起来像是您试图在
始终
初始
块中分配
导线。如果要更改
导线上的值,请使用
assign
。如果您希望使用程序块(
initial
始终
),则需要将端口类型更改为
reg
。即:

module processor (
    input wire [31:0] flattened_bus_i,
    output wire [31:0] flattened_bus_w,
    output reg  [31:0] flattened_bus_r
);

    initial begin 
       flattened_bus_r = flattened_bus_i + 32'd1; 
    end

    assign flattened_bus_w = flattened_bus_i + 32'd1;

endmodule

在SystemVerilog中,您应该可以使用2D阵列作为端口。

谢谢您的回复。但是有一些困惑:您可以将端口声明为reg吗?这不是内存吗?我知道了。之前没有提到。reg并不一定意味着触发器或其他内存元素是在合成中推断出来的。这完全取决于它的使用方式。如果甚至有可能在赋值之前读取它的值,那么它将是一个内存元素。有关更多信息,请参阅。