我有一个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()。 –