2017-04-08 84 views
0

我有一個問題,在我的代碼中將矢量輸入轉換爲整數。我是VHDL的新手,但下面的代碼與整數RANGE註釋掉代碼一起工作,但是當我嘗試將矢量值轉換爲整數時出現錯誤。這裏是我的代碼和錯誤副本:整數範圍到矢量

screenshot

UPDATE1: 我想你的補丁,它需要的錯誤之一的保健,而且新的錯誤消息和代碼如下所示:

screenshot

+0

仍然有一個如下所示的錯誤:錯誤(10409):dataRAM_inferred.vhd(26)處的VHDL類型轉換錯誤:文本或符號「UNSIGNED」附近的對象的轉換類型必須與目標對象的整數類型匹配 –

+1

請將您的代碼和錯誤信息粘貼到您的問題中。鏈接有破壞的習慣。 –

+3

@CedrickBaker你應該真的複製並粘貼你的代碼和錯誤消息,而不是發佈它們的截圖。圖像不好,因爲a)任何想調試你的代碼的人都必須從你的屏幕截圖中輸入它,這是一件可怕的事情(和容易出錯)和b)圖像使搜索引擎無法索引你的文章有意義的方式。 – Siguza

回答

1

在根據後續行type mem is array (...) of std_logic_vector(...)你的記憶等待std_logic_vector類型,而不是unsigned就像你分配RAMArray(unsigned(addr)) <= unsigned(din)你的宣言。

這裏只使用類型轉換爲unsigned是不夠的,但您必須在參數中添加類型轉換函數to_integer。換句話說,

RAMArray(to_integer(unsigned(addr))) <= din 

第二個錯誤是在下面的行qout <= RAMArray(addr)。在這裏,您還應該使用類型轉換爲unsigned以及類型轉換功能to_integer。位置參數將是整數類型。例如:

qout <= RAMArray(to_integer(unsigned(addr))) 

嘗試修復您的代碼與我的建議,我認爲它會工作。

+0

嘗試了此修復程序,並將非必要的轉換消除了。但現在它給了我錯誤。 錯誤(10409):dataRAM_inferred.vhd(26)處的VHDL類型轉換錯誤:文本或符號「UNSIGNED」附近的對象的轉換類型必須與目標對象的整數類型匹配 –

+0

也許這是因爲您對'ASIZE使用'positive'類型'和'DSIZE'。嘗試使用轉換爲整數,如下所示:RA​​MArray(to_integer(unsigned(addr)))<= din'和'qout <= RAMArray(to_integer(unsigned(addr)))'。或者只是使用'natural'類型來表示通用值。 – Roman

+0

to_integer修復似乎已經工作......我是新的在這,並將花費接下來的幾個小時計算出來,並閱讀您的答案......感謝您的協助羅馬。 –