2013-04-13 81 views
1

我在將一個端口ROM設計到斯巴達6板上時遇到了一些麻煩。我使用提供的核心生成器創建塊存儲器,並選擇32位寬度和256深度的單端口ROM,coe文件的計數範圍爲0到255.我將該ROM作爲組件下載到vhdl中,並將XilinxCoreLib作爲圖書館。當我嘗試生成編程文件,我得到的翻譯錯誤:使用賽靈思ISE設計套件在Spartan 6上生成單端口ROM

logical block 'rom1' with type 'rom' could not be 
resolved. A pin name misspelling can cause this, a missing edif or ngc file, 
case mismatch between the block name and the edif or ngc file name, or the 
misspelling of a type name. Symbol 'rom' is not supported in target 
'spartan6'. 

我目前使用的賽靈思ISE 13.1是否有幫助。我覺得這應該很容易做,但我一直無法找到如何去做。

編輯:謝謝大家,是一個事物的組合。錯誤的速度等級,並沒有將ngc文件的副本添加到我的工作目錄中。我將來會使用數組。

回答

1

由於您在ISE中爲您的設計添加了賽靈思生成的核心,因此您需要通過「項目」菜單中的「添加源」添加VHD文件和NGC文件。

更容易,取決於您的ROM需要多大以及進入的數據,甚至不會用Xilinx內核打擾,而是使用純VHDL來聲明一個常量數組和初始化值VHDL文件。這裏有一個例子:

type array_ROM is array (0 to NUMBER_OF_ROWS-1) of std_logic_vector (ROM_BITWIDTH-1 downto 0); 

signal my_ROM : array_ROM 
    := 
     (
      x"12345678", 
      x"ABCDEF01", 
      ... 
      x"01010101" 
     ); 

現在,你不要把省略號(...)在初始化列表中,只是把匹配ROM_BITWIDTH位寬常量行。 NUMBER_OF_ROWS是您在ROM中需要的地址位置數。在這個例子中,ROM_BITWIDTH必須設置爲32,因爲我在初始化列表中使用了32位十六進制常量。作爲一個信號,它實際上是可以修改的,所以如果你需要它是不變的,只需使用「常量」而不是信號。

4

最簡單的方法是完全忘記供應商的工具,並簡單地聲明一個常量數組!

如果這是一個包從設計的其餘部分分開,printf的的幾行或一個簡單的腳本可以生成約的內容,它們來自你的彙編或任何工具的VHDL樣板創建的實際數據

1

我想問題是,正如消息所說,拼寫錯誤。要獲得正確的組件聲明/實例化,請在ISE的設計窗口中選擇您的rom.xco。然後從進程窗口中選擇「查看vhdl實例化模板」。使用其中描述的組件聲明和實例化。

1

有很多事情會導致這個問題,其中一個是您正在使用爲另一個FPGA系列生成的blocck,並在Spartan6中使用它。另一個原因是您可能使用舊版本的工具生成了ROM,並且自此ROM的包裝器發生了變化。 您可以像Brian建議的那樣生成anrray並忘記工具專用ROM類型,或者在您的curernt項目設置下重新生成IP並查看它是如何發生的。