将阵列传递给verilog模块
我有一个2D数组要传递给模块。我已将其展平为1D数组,并希望将其发送给某个模块进行处理。为此,我声明了一条32位宽的导线,并尝试通过它将32位寄存器的值传递给其他模块。这给了我一个错误“不允许对非寄存器进行过程赋值”我想知道还有没有别的方法?我怎样才能纠正错误呢将阵列传递给verilog模块,verilog,Verilog,我有一个2D数组要传递给模块。我已将其展平为1D数组,并希望将其发送给某个模块进行处理。为此,我声明了一条32位宽的导线,并尝试通过它将32位寄存器的值传递给其他模块。这给了我一个错误“不允许对非寄存器进行过程赋值”我想知道还有没有别的方法?我怎样才能纠正错误呢 @Marty再次感谢。它正在工作。我必须计算1000个采样浮点值的平均值。我有4个单独的浮点加法模块。我想将这些值逐一发送到模块。为此,我使用了for循环。我可以将其发送到 Float_Add dummyinstance(fpvalu
@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并不一定意味着触发器或其他内存元素是在合成中推断出来的。这完全取决于它的使用方式。如果甚至有可能在赋值之前读取它的值,那么它将是一个内存元素。有关更多信息,请参阅。