模块2D数组传递

时间:2013-11-26 18:36:34

标签: arrays module verilog

HEADMODULE中的

我创建了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

1 个答案:

答案 0 :(得分:0)

多维数组不能用作verilog中的输入或输出。

如果您正在尝试创建内存类型模块,那么通常的工作方式是输入写入数据,输入地址,输入读/写控件和输出读取数据。

如果您不想使用这种类型的地址/数据语义,您可以将阵列展平为一个巨大的总线,尽管这可能并不理想,而不是如何设计真正的硬件。