如何在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)]的元素。怎么办?
您需要定义一个范围更小的新数组类型,并声明一个新数组类型的新信号,您可以从旧数组到新数组使用它。
首先,我们在这里声明一个新数组,其类型和大小与原始数组相同,但减一。
示例;
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 数组是静态的,它们的大小在声明时确定。