2013-11-10 157 views
0

我有2個std_logic_vector輸入(操作數和Operand2),我試圖用值Operand2中轉移OPERAND1並將其存儲在一個std_logic_vector輸出(輸出1)VHDL移位操作

Output1 <= std_logic_vector(unsigned(Operand1) srl to_integer(unsigned(Operand2))); 

Output1 <= std_logic_vector(unsigned(Operand1) sll to_integer(unsigned(Operand2))); 

Output1 <= std_logic_vector(unsigned(Operand1) sra to_integer(unsigned(Operand2))); 

我能得到前兩行工作,但與sra的行返回此錯誤「sra不能在這種情況下有這樣的操作數。」有人可以告訴我,如果有什麼我做錯了。

回答

1

從它聽起來像你的一些信號的類型std_logic_vector的,有些是類型bit_vector的意見,並沒有發佈你給我們的快樂猜謎遊戲是哪個。

那又怎麼了?

  1. 問題中沒有足夠的信息。發佈相關聲明。

  2. 設計顯然是錯誤的。設計的很大一部分是使用的數據類型,而這些看起來很糟糕。

我們沒有足夠的信息通過這個微小的窗口對準設計以便能夠修復它;所以這是一個狂野的猜想:

製作數1 Unsigned和操作數2 Integer或更好Natural(如果負值將是一個錯誤)和實施將更加順暢,更清潔,更簡單,更容易理解。並且早些時候捕捉更多的錯誤。這些類型是可合成的,如果您願意,可以用作端口或信號或記錄中的組件(結構)。

並意識到SRA不是VHDL語言的一部分。這是一個函數,在某個庫中聲明。

所以如果你決定操作數是unsigned和Operand2是natural(整數的子類型),你可以看看numeric_std包,看看是否有一種SRA接受的參數類型和返回所需的類型的聲明。

如果沒有,就沒有任何東西可以阻止你編寫自己的代碼(可以像調用SRA的包裝器一樣簡單,並根據需要轉換參數類型)。它將與原來的VHDL語言一樣多。

你寫的一些有用的函數和幫助程序將在未來的VHDL項目中證明有用。

+0

Result1 <= to_stdlogicvector(to_bitvector(Operand1) sra to_integer(unsigned(Operand2))); – user2828757

0

嘗試改變最後一行:

Output1 <= std_logic_vector(unsigned(Operand1) sra to_integer(signed(Operand2))); 

即使用signed代替unsigned

+0

當我這樣做時,編譯器返回錯誤「Near unsigned;類型轉換與類型bit_vector不匹配」和「無法將類型bit_vector轉換爲類型std_logic_vector」 – user2828757