我有一個8位ADC轉換器的輸入信號(std_logic_vector(7 downto 0)
)。我必須將它們轉換爲16位信號(std_logic_vector(15 downto 0
)),以將16位信號處理轉換爲16位系統。如何將VHDL中的8位轉換爲16位?
回答
如果作爲簽名的(2的補碼)的8位值被解釋,則一般與標準的VHDL轉換方法是使用IEEE numeric_std庫:
library ieee;
use ieee.numeric_std.all;
architecture sim of tb is
signal slv_8 : std_logic_vector(8 - 1 downto 0);
signal slv_16 : std_logic_vector(16 - 1 downto 0);
begin
slv_16 <= std_logic_vector(resize(signed(slv_8), slv_16'length));
end architecture;
因此,首先將std_logic_vector被轉換轉換爲有符號值,然後應用調整大小,這將簽署擴展有符號值,並且結果最終轉換回std_logic_vector。
轉換過程非常漫長,但具有通用性,即使目標長度稍後發生變化也能正常工作。
屬性「長度簡單地返回slv_16 std_logic_vector的長度,從而16.
對於無符號表示代替簽字,它可以使用的代替unsigned
signed
來完成,因此與此代碼:
slv_16 <= std_logic_vector(resize(unsigned(slv_8), slv_16'length));
architecture RTL of test is
signal s8: std_logic_vector(7 downto 0);
signal s16: std_logic_vector(15 downto 0);
begin
s16 <= X"00" & s8;
end;
什麼是線5「X」是什麼意思? –
'x'表示「十六進制」。所以x「00」基本上是「00000000」二進制。 – Passepartout
如果我想將「11111111」轉換爲「1111111111111111」 –
爲了完整起見,另一種方式是偶爾有用:
-- Clear all the slv_16 bits first and then copy in the bits you need.
process (slv_8)
begin
slv_16 <= (others => '0');
slv_16(7 downto 0) <= slv_8;
end process;
我還沒有我必須這樣做才能回憶起來,但在更復雜的情況下,我需要這樣做:將一些相關信號複製成更大,更復雜的記錄是一次。
符號擴展是用第一個賦值完成的:slv_16 <= (others => slv_8(7));' –
這在功能上是正確的,但我認爲如果你想要符號擴展,你應該使用正確的數字類型(即'簽署'),然後使用'resize'函數 - 如你在你的回答中所建議的:) –
此處理,而無需修改零的寬度轉換如果任std_logic_vector變化:
architecture RTL of test is
signal s8: std_logic_vector(7 downto 0);
signal s16: std_logic_vector(15 downto 0) := (others => '0');
begin
s16(s8'range) <= s8;
end;
- 1. DICOM將16位轉換爲8位
- 2. 8位到16位轉換
- 3. VHDL如何將32位變量轉換爲4 x 8位std_logic_vector?
- 4. 8位轉換器-VHDL
- 5. 8位至16位ALU轉換
- 6. 轉換16位PCM到8位
- 7. 需要將16位數據轉換爲8位
- 8. 將16位整數轉換爲8位整數?
- 9. 高效地將16位短轉換爲8位字符
- 10. 將RGB圖像轉換爲RGB 16位和8位
- 11. 將16位深度CvMat *轉換爲8位深度
- 12. 將24位bmp轉換爲16位?
- 13. 將16位轉換爲32位浮點
- 14. Python將32位轉換爲16位tiff
- 15. 如何在Java中將16位.tiff圖像轉換爲8位.tiff圖像?
- 16. 如何將24位圖像轉換爲16位rgb565位圖?
- 17. VHDL - 將std_logic_vector移位8位
- 18. 如何將16位深度的圖像轉換爲8位深度
- 19. 如何在C#中將16位'short'轉換爲32位整數?
- 20. 16位2在VHDL
- 21. OpenCV如何在16位和8位之間進行imread轉換
- 22. 將UIImage轉換爲8位
- 23. 如何將BufferedImage轉換爲8位?
- 24. win32 - 如何將畫面捕捉爲8位或16位位圖?
- 25. 如何將藍牙16位服務UUID轉換爲128位UUID?
- 26. 如何將16位RGB565轉換爲24位RGB888?
- 27. 將8位int轉換爲32位
- 28. QT轉換16位QImage爲8位無符號字符在QT
- 29. 轉換8 16位SSE寄存器8位數據
- 30. VHDL:如何讀取/寫入RAM中的16位數據,每個地址8位
我試圖從16位調整到8位:resized_var1:= std_logic_vector(resize(unsigned(Kp)* unsigned(integration1)),8);我得到錯誤:「類型轉換(對std_logic_vector)不能有聚合操作數。」爲什麼它不起作用? –
因爲,8應該在resize()的parens裏面而不是std_logic_vector()。 –