我一直在尝试实现一种方法,通过该方法我可以将向量数组连接到向量。基本上我需要这样的东西:
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连接时出现问题,因为它的大小越来越大......我确信有一个非常简单的方法解决方案,但我一直无法想出一个。任何帮助将不胜感激。
答案 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 );
更清楚......