具有多方向VHDL记录的顶级端口

具有多方向VHDL记录的顶级端口,vhdl,Vhdl,我想使用记录,因为我有多个端口,同时由多个信号组成。问题是有些信号输入,有些信号输出(特别是AXI stream) 我想避免这样做: port ( s0_axis_tvalid : in STD_LOGIC; s0_axis_tdata : in STD_LOGIC_VECTOR (Data_Width-1 downto 0); s0_axis_tlast : in STD_LOGIC; s0_axis_tready :

我想使用记录,因为我有多个端口,同时由多个信号组成。问题是有些信号输入,有些信号输出(特别是AXI stream)

我想避免这样做:

    port (
        s0_axis_tvalid : in STD_LOGIC;
        s0_axis_tdata  : in STD_LOGIC_VECTOR (Data_Width-1 downto 0);
        s0_axis_tlast  : in STD_LOGIC;
        s0_axis_tready : out STD_LOGIC;

        s1_axis_tvalid : in STD_LOGIC;
        s1_axis_tdata  : in STD_LOGIC_VECTOR (Data_Width-1 downto 0);
        s1_axis_tlast  : in STD_LOGIC;
        s1_axis_tready : out STD_LOGIC;

        m0_axis_tvalid : out STD_LOGIC;
        m0_axis_tdata  : out STD_LOGIC_VECTOR (Data_Width-1 downto 0);
        m0_axis_tlast  : out STD_LOGIC;
        m0_axis_tready : in STD_LOGIC);    
所以,我想要一些像这样的记录:

type AXIS_Slave is record
    s_axis_tvalid :  STD_LOGIC;
    s_axis_tdata  :  STD_LOGIC_VECTOR (Data_Width-1 downto 0);
    s_axis_tlast  :  STD_LOGIC;
    s_axis_tready :  STD_LOGIC;
end record AXIS_Slave;

type AXIS_Master is record
    s_axis_tvalid :  STD_LOGIC;
    s_axis_tdata  :  STD_LOGIC_VECTOR (Data_Width-1 downto 0);
    s_axis_tlast  :  STD_LOGIC;
    s_axis_tready :  STD_LOGIC;
end record AXIS_Master;
现在,my TOP实体设计中的端口应该是:

Port (
    s0: AXIS_Slave;
    s1: AXIS_Slave;
    m0: AXIS_Master);
问题是我需要在端口中声明它是in还是out,但每个信号的方向都应该在记录中定义,我认为这是不允许的,因为我收到了警告“语法错误接近in”或“语法错误接近out”


那么,如何声明具有输入和输出信号的类型呢

在vhdl2008和以前的版本中,整个记录需要具有相同的方向。对于Axis,我使用事务信号(tdata、tkeep、tstrb、tid tlast、tdest)记录tvalid和tready作为单独的信号。在vhdl2008中,这可以是一个无约束记录,每个端口定义长度。它还使验证更容易,因为您只需要检查事务顺序。@您也可以只有一条记录,并且所有信号都是
inout
。在这种情况下,需要正确初始化该记录的对象,以便解析函数正常工作。记录中的所有元素都需要是解析类型。所有模拟器都支持这一点,但像Vivado这样的合成工具存在问题,而Xilinx ISE可以正确处理。一般来说,这个问题从VHDL-2019开始就解决了。
那么,我如何声明具有输入和输出信号的类型?
“类型的特征是一组值和一组操作。”(IEEE Std 1076-2008 5.1)。“对象是包含(具有)类型值的命名实体。”(6.4.1)。“接口对象具有以下模式之一:…**输入**…输出…输入或缓冲…链接…”(6.5.2)。也许问题应该是“如何声明具有不同子元素模式的复合接口信号对象?”因为在-2008或更早的版本中没有这样做的方法。在-2019中,参见6.5.2接口对象声明有一个模式视图声明,可在接口信号声明的模式指示中用作模式视图指示(命名为)。供应商-2019年的支持可能会严重滞后。同时,“不能治愈的,必须忍受”。您可以编写一个脚本来生成繁重的端口子句和端口映射,也可以只编写一次,并将模板放在手边。