2013-11-26 13 views
0

的模塊2D數組我創建二維數組「數據」,我想將其用作內存/存儲。 在STRCNVTDATA中,我將它分配給我有的輸入(正弦波)。 在SHWAMPLPLUDE中,我想顯示LED上數據的振幅。在HEADMODULE中傳遞

我的問題是數據無法傳遞。

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

出於好奇,爲什麼vhdl標籤?你可以通過2D數組作爲VHDL中的端口信號嗎?是的你可以。你應該傳遞1億個成員數組嗎?工具通常不能處理大的堆棧存儲,並且模擬吞吐率會很糟糕。你能避免傳遞數組嗎?你可以在VHDL中,在同一個作用域(一個內存'模塊')中創建兩個'模塊'進程語句,儘管這無助於用一個大型的數組來描述一個模型。內存可以被抽象爲創建一個外部模型或爲了模擬目的而縮小尺寸。 – user1155120

回答

0

多維數組不能用作verilog中的輸入或輸出。

如果您嘗試創建內存類型模塊,那些通常工作的方式是具有輸入寫入數據,輸入地址,輸入讀取/寫入控制以及輸出讀取數據。

如果你不想使用這種類型的地址/數據語義,你可以將你的陣列平鋪成一個巨大的總線,儘管這可能並不理想,而不是如何設計真正的硬件。

+0

非常感謝你! –

+0

爲什麼不使用系統verilog來傳遞數組?在這種情況下不適用,但通常比平坦化陣列和在另一側重新組裝更好。 – nguthrie