如何在VHDL中从数组中删除元素

问题描述 投票:0回答:1

如何在VHDL中通过索引从数组中删除元素?

type ROM_Array is array (0 to 2) of std_logic_vector(31 downto 0);

signal operand : ROM_Array:= (0=>b"11000000100000000000000000000000",
                                1=>b"01000000110000000000000000000000",                                        2=>b"01000000010000000000000000000000"); 

例如我想删除(删除)带有[索引1,操作数(1)]的元素。怎么办?

arrays vhdl
1个回答
0
投票

您需要定义一个范围更小的新数组类型,并声明一个新数组类型的新信号,您可以从旧数组到新数组使用它。

首先,我们在这里声明一个新数组,其类型和大小与原始数组相同,但减一。

示例;

type New_ROM_Array is array (0 to 1) of std_logic_vector(31 downto 0);
signal new_operand : New_ROM_Array;

然后将元素从原始数组复制到新数组,跳过要删除的索引处的元素。 在这里,它跳过索引 1 处的元素。

new_operand(0) <= operand(0);
new_operand(1) <= operand(2);

上面将第一个和第三个元素从

operand
复制到
new_operand
,有效地删除了第二个元素。

这个

operand <= new_operand;
类似于拼接。我们使用它通过删除现有元素和/或添加新元素来更改数组的内容。

但是如何将旧数组的元素传递到新数组,除了我想删除的元素?

您可以循环并检查元素的索引。如果索引不是您要删除的索引,请将其复制到新数组中。

process
begin
 for i in operand'range loop
   if i /= 1 then -- Skip the element at index 1
     new_operand(i - 1) <= operand(i);
   end if;
 end loop;
end process;

您可以尝试上述方法,因为我知道您不能像在其他 pl 中那样直接从数组中删除元素,因为 vhdl 数组是静态的,它们的大小在声明时确定。

© www.soinside.com 2019 - 2024. All rights reserved.