integer_vector 作为 NULL 数组

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

如何传递一个空的

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 => "");
vhdl
1个回答
0
投票

据我所知,你不能拥有一个只有一个元素或零个元素的文字数组/聚合,就像你想要做的那样。请参阅 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));
© www.soinside.com 2019 - 2024. All rights reserved.