我创建了2D数组'数据',我想将它用作内存/存储。 在STRCNVTDATA中,我将它分配给我有的输入(正弦波)。 在SHWAMPLITUDE中,我想显示LED数据的幅度。
我的问题是数据无法传递。
ERROR:HDLCompiler:661 'shwamplitude.v' Non-net port data cannot be of mode input
HEADMODULE
module SPI_Lab (...);
...
wire [7:0] data [99999999:0];
...
strcnvtdata M8 (CCLK, transfer, tmpdata, storagecount, data);
shwamplitude M6 (CCLK, storagecount, data, mled);
endmodule
STRCNVTDATA
module strcnvtdata(input clk, transfer, [7:0] tmpdata, output reg storagecount, output reg [7:0] data [99999999:0]);
always @(posedge clk)
begin
if (transfer==1)
data[storagecount] = tmpdata;
storagecount = storagecount + 1'b1;
if (storagecount == 99999999)
storagecount = 0;
end
endmodule
SHWAMPLITUDE
module shwamplitude(input clk, input storagecount, input reg [7:0]data[99999999:0] , output reg [7:0] mled);
reg [7:0] amplitude;
always @(posedge clk)
begin
if (data[storagecount] > data[storagecount-1])
amplitude = data[storagecount];
mled = amplitude;
end
endmodule
答案 0 :(得分:0)
多维数组不能用作verilog中的输入或输出。
如果您正在尝试创建内存类型模块,那么通常的工作方式是输入写入数据,输入地址,输入读/写控件和输出读取数据。
如果您不想使用这种类型的地址/数据语义,您可以将阵列展平为一个巨大的总线,尽管这可能并不理想,而不是如何设计真正的硬件。