首页 > 解决方案 > VHDL 连接不同类型

问题描述

我有以下现有的 FPGA 代码

fpga_avr32_data       : INOUT STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL read_sensor                       : INTEGER;

TYPE meas_type IS ARRAY (7 DOWNTO 0) OF STD_LOGIC_VECTOR(11 DOWNTO 0);
TYPE meas_reg_type IS ARRAY (NATURAL RANGE <>) OF meas_type;



fpga_avr32_data <= "0000" & meas_reg(read_sensor)(read_channel)

--

我想用 read_sensor 的最低 4 个“位”替换“0000”,像这样

fpga_avr32_data <= read_sensor(3 DOWNTO 0) & meas_reg(read_sensor)(read_channel)

这可能吗 ?

问候

标签: type-conversionvhdlconcat

解决方案


对的,这是可能的。但不是你这样做的方式。read_sensor是整数,fpga_avr32_data而是 a STD_LOGIC_VECTOR,所以必须先将整数转换为向量:

library ieee;
use ieee.numeric_std.all;
...
signal rsv: std_logic_vector(31 downto 0);
...
rsv <= std_logic_vector(to_signed(read_sensor, 32));

然后提取 4 个 LSB:

fpga_avr32_data <= rsv(3 DOWNTO 0) & meas_reg(read_sensor)(read_channel);

推荐阅读