如何传递一个空的
integer_vector
且 length
等于 0? (= 空数组)
背景:
在测试平台内,我想对不同类型的事务使用一个过程。像这样的东西:
procedure Transaction (
constant RX_BYTES : integer_vector;
constant TX_BYTES : integer_vector
) is
variable NUM_WR_BYTES : integer;
variable NUM_RD_BYTES : integer;
begin
NUM_WR_BYTES := TX_BYTES'length;
NUM_RD_BYTES := RX_BYTES'length;
...
end procedure;
我有这样的想法,但这不起作用:
Transaction(RX_BYTES => "", TX_BYTES => "");
据我所知,你不能拥有一个只有一个元素或零个元素的文字数组/聚合,就像你想要做的那样。请参阅 Electronics Stack Exchange 中的相关问题
因此,使用
Transaction(RX_BYTES => (1, 2), TX_BYTES => (3, 4);
调用您的过程会起作用(每个数组 2 个元素),但 Transaction(RX_BYTES => (1), TX_BYTES => (2));
不会(每个数组 1 个元素)。
同样适用于具有假想语法
Transaction(RX_BYTES => (), TX_BYTES => ());
的空数组。
您可以通过对具有空范围(此处为
0 downto 1
)的命名值进行切片或具有一个元素的数组切片来传递空范围。
signal my_vector : integer_vector(7 downto 0) := (others => 0);
--...
Transaction(RX_BYTES => my_vector(0 downto 1), TX_BYTES => my_vector(0 downto 1));
Transaction(RX_BYTES => my_vector(0 to 0), TX_BYTES => my_vector(0 to 0));