VHDL将向量的数组连接到向量

时间:2016-01-05 03:53:15

标签: vector concatenation vhdl

我一直在尝试实现一种方法,通过该方法我可以将向量数组连接到向量。基本上我需要这样的东西:

cuda-memcheck --tool initcheck ...

其中BUILD2_RX_PKT_LEN是常量,rx_data具有可变的字节数,但定义为:

data_received((rx_length_int + 5) * 8)downto 0) <= rx_ident & rx_length & rx_data & rx_checksum;
data_received(BUILD2_RX_PKT_LEN downto ((rx_length_int + 5) * 8)) <= (others => '0');

我已经实现了一些方法,例如for循环遍历rx_data到rx_length_int,但是这会在data_received连接时出现问题,因为它的大小越来越大......我确信有一个非常简单的方法解决方案,但我一直无法想出一个。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

而不是依赖于结果类型来约束范围的无约束聚合(others => 0),您可以构建具有指定范围的聚合,例如(7 downto 2 => '0')

为什么不呢

data_received <= (BUILD2_RX_PKT_LEN downto ((rx_length_int + 5) * 8) => '0') 
                  & rx_ident & rx_length & rx_data & rx_checksum;

然而,它不可思议地笨拙。更好的方法是填充功能:

function pad_packet (data : std_logic_vector) return std_logic_vector is
   variable temp : std_logic_vector (BUILD2_RX_PKT_LEN downto 1) := (others => '0'); 
-- NB "downto 0" would be an off-by-1 error if LEN is actual length
-- Initialised vhole vector to zero
begin
   temp (data'length downto 1) := data;
   return temp;
end pad_packet;

...

data_received <= pad_packet ( rx_ident & rx_length & rx_data & rx_checksum );

更清楚......