2011-02-01 153 views
2

我對賽靈思ISE模塊ram推理的穩健性有疑問。賽靈思ISE模塊ram推理的穩健性

我沒有安裝我的機器(今天)上的賽靈思ISE但我通常完全使用專用編碼推斷塊RAM,基本都是依靠:

type ram_type is array(2**ADDR_WIDTH-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0); 

我的問題是:你能告訴我,如果ISE將推斷正確的塊RAM與

signed(DATA_WIDTH-1 downto 0)` instead of `std_logic_vector(DATA_WIDTH-1 downto 0) 

或甚至更多(在一個包中):

subtype signed8 is signed(7 downto 0) 

然後

type ram_type is array(2**ADDR_WIDTH-1 downto 0) of signed8; 

我知道合成有時敏感...

回答

5

我沒有測試此我自己,但「簽名」類型是從STD_LOGIC類型派生,所以不看看爲什麼這不應該起作用。

假設您使用XST進行綜合,XST用戶指南是一個很好的開始查看Xilinx官方狀態XST可以識別block ram推斷的好地方。 XST User Guide for 12.4 (pdf)

3

除了喬什建議(它出現在有關XST RAM實現細節)的鏈接,這裏是Xilinx公司的網站,這也解釋了不同的RAM實現及其權衡(第76頁)另一個文檔:

http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_4/sim.pdf

作爲一個方面說明,我已經使用「數組」方法,並且非常適合小塊RAM大小。但是,我不得不說,我試圖用它來生成一個內存模塊,它比我的Spartan-6中的1塊BlockRAM的尺寸大得多,並且它不能推斷出它(XST試圖將它實現爲分佈式RAM)。我通過直接實例化BlockRAM宏Xilinx的提供並創建適當的內存解碼模塊來選擇/寫入/讀取內存模塊中適當的單個BlockRAM來解決問題。

5

這是一般性評論,並非針對您的問題。嘗試假設第二個猜測綜合工具是不是很有成效。結果可能因工具版本和設計和實現的環境(不同的開關,優化目標,目標架構等)而異。ISE/XST是免費的...下載並嘗試您的代碼。然後你可以更有意義地問這個問題......「爲什麼XST版本X.Y在這些條件下不能推斷Block RAM?」然後我們還可以討論XST是否具有正確和預期的行爲。