-
--- NOT UP TO DATE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-- a trigger receiver - as simple as possible
LIBRARY IEEE;
entity trb_net16_endpoint_1_trg_0_api is
generic (
- TRG_INIT_DEPTH : integer := 0;
- TRG_REPLY_DEPTH : integer := 0;
- MUX_WIDTH : integer := 3;
- MUX_SECURE_MODE : integer := 0;
+ TRG_INIT_DEPTH : integer := 6;
+ TRG_REPLY_DEPTH : integer := 6;
TRG_CHANNEL : integer := 0;
- DATA_WIDTH : integer := 16; --not to be changed
- NUM_WIDTH : integer := 2; --not to be changed
TRG_SECURE_MODE : integer := 0 -- if 0, error pattern and dtype must be valid until next
-- trigger comes in. if 1 these can be valid on falling edge of hold_trm only
);
-- Media direction port
MED_DATAREADY_OUT: out std_logic; --Data word ready to be read out
--by the media (via the TrbNetIOMultiplexer)
- MED_DATA_OUT: out std_logic_vector (DATA_WIDTH-1 downto 0); -- Data word
- MED_PACKET_NUM_OUT:out std_logic_vector (NUM_WIDTH-1 downto 0);
+ MED_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ MED_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0);
MED_READ_IN: in std_logic; -- Media is reading
MED_DATAREADY_IN: in std_logic; -- Data word is offered by the Media
-- (the IOBUF MUST read)
- MED_DATA_IN: in std_logic_vector (DATA_WIDTH-1 downto 0); -- Data word
- MED_PACKET_NUM_IN: in std_logic_vector (NUM_WIDTH-1 downto 0);
+ MED_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ MED_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0);
MED_READ_OUT: out std_logic; -- buffer reads a word from media
MED_ERROR_IN: in std_logic_vector (2 downto 0); -- Status bits
- TRG_ERROR_PATTERN_OUT : out std_logic_vector(31 downto 0);
- TRG_GOT_TRIGGER_OUT : out std_logic;
- TRG_DTYPE_OUT : out std_logic_vector(3 downto 0);
- TRG_SEQNR_OUT : out std_logic_vector(7 downto 0);
- TRG_ERROR_PATTERN_IN : in std_logic_vector(31 downto 0);
- TRG_RELEASE_IN : in std_logic;
+ LVL1_ERROR_PATTERN_OUT : out std_logic_vector(31 downto 0);
+ LVL1_GOT_TRIGGER_OUT : out std_logic;
+ LVL1_DTYPE_OUT : out std_logic_vector(3 downto 0);
+ LVL1_SEQNR_OUT : out std_logic_vector(7 downto 0);
+ LVL1_ERROR_PATTERN_IN : in std_logic_vector(31 downto 0);
+ LVL1_RELEASE_IN : in std_logic;
-- Status and control port => just coming from the iobuf for debugging
STAT_GEN: out std_logic_vector (31 downto 0); -- General Status
STAT_LOCKED: out std_logic_vector (31 downto 0); -- Status of the handshake and buffer control
- STAT_INIT_BUFFER: out std_logic_vector (31 downto 0); -- Status of the handshake and buffer control
- STAT_REPLY_BUFFER: out std_logic_vector (31 downto 0); -- General Status
- STAT_api_control_signals: out std_logic_vector(31 downto 0);
+ STAT_IBUF_BUFFER: out std_logic_vector (31 downto 0); -- Status of the handshake and buffer control
+ STAT_api_control_signals: out std_logic_vector(31 downto 0);
STAT_MPLEX: out std_logic_vector(31 downto 0);
CTRL_GEN: in std_logic_vector (31 downto 0);
CTRL_LOCKED: in std_logic_vector (31 downto 0);
- STAT_CTRL_INIT_BUFFER: in std_logic_vector (31 downto 0);
- STAT_CTRL_REPLY_BUFFER: in std_logic_vector (31 downto 0);
+ STAT_CTRL_IBUF_BUFFER: in std_logic_vector (31 downto 0);
MPLEX_CTRL: in std_logic_vector (31 downto 0);
API_STAT_FIFO_TO_INT: out std_logic_vector(31 downto 0);
API_STAT_FIFO_TO_APL: out std_logic_vector(31 downto 0)
architecture trb_net16_endpoint_1_trg_0_api_arch of trb_net16_endpoint_1_trg_0_api is
- component trb_net16_iobuf is
- generic (INIT_DEPTH : integer := TRG_INIT_DEPTH; -- Depth of the FIFO, 2^(n+1), if
- -- the initibuf
- REPLY_DEPTH : integer := TRG_REPLY_DEPTH); -- or the replyibuf
- port(
- -- Misc
- CLK : in std_logic;
- RESET : in std_logic;
- CLK_EN : in std_logic;
- -- Media direction port
- MED_INIT_DATAREADY_OUT: out std_logic; --Data word ready to be read out
- --by the media (via the TrbNetIOMultiplexer)
- MED_INIT_DATA_OUT: out std_logic_vector (15 downto 0); -- Data word
- MED_INIT_PACKET_NUM_OUT:out std_logic_vector (1 downto 0);
- MED_INIT_READ_IN: in std_logic; -- Media is reading
- MED_INIT_DATAREADY_IN: in std_logic; -- Data word is offered by the Media
- -- (the IOBUF MUST read)
- MED_INIT_DATA_IN: in std_logic_vector (15 downto 0); -- Data word
- MED_INIT_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- MED_INIT_READ_OUT: out std_logic; -- buffer reads a word from media
- MED_INIT_ERROR_IN: in std_logic_vector (2 downto 0); -- Status bits
- MED_REPLY_DATAREADY_OUT: out std_logic; --Data word ready to be read out
- --by the media (via the TrbNetIOMultiplexer)
- MED_REPLY_DATA_OUT: out std_logic_vector (15 downto 0); -- Data word
- MED_REPLY_PACKET_NUM_OUT:out std_logic_vector (1 downto 0);
- MED_REPLY_READ_IN: in std_logic; -- Media is reading
- MED_REPLY_DATAREADY_IN: in std_logic; -- Data word is offered by the Media
- -- (the IOBUF MUST read)
- MED_REPLY_DATA_IN: in std_logic_vector (15 downto 0); -- Data word
- MED_REPLY_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- MED_REPLY_READ_OUT: out std_logic; -- buffer reads a word from media
- MED_REPLY_ERROR_IN: in std_logic_vector (2 downto 0); -- Status bits
- -- Internal direction port
- INT_INIT_DATAREADY_OUT: out std_logic;
- INT_INIT_DATA_OUT: out std_logic_vector (15 downto 0); -- Data word
- INT_INIT_PACKET_NUM_OUT:out std_logic_vector (1 downto 0);
- INT_INIT_READ_IN: in std_logic;
- INT_INIT_DATAREADY_IN: in std_logic;
- INT_INIT_DATA_IN: in std_logic_vector (15 downto 0); -- Data word
- INT_INIT_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- INT_INIT_READ_OUT: out std_logic;
- INT_REPLY_HEADER_IN: in std_logic; -- Concentrator kindly asks to resend the last
- -- header (only for the reply path)
- INT_REPLY_DATAREADY_OUT: out std_logic;
- INT_REPLY_DATA_OUT: out std_logic_vector (15 downto 0); -- Data word
- INT_REPLY_PACKET_NUM_OUT:out std_logic_vector (1 downto 0);
- INT_REPLY_READ_IN: in std_logic;
-
- INT_REPLY_DATAREADY_IN: in std_logic;
- INT_REPLY_DATA_IN: in std_logic_vector (15 downto 0); -- Data word
- INT_REPLY_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- INT_REPLY_READ_OUT: out std_logic;
-
- -- Status and control port
- STAT_GEN: out std_logic_vector (31 downto 0); -- General Status
- STAT_LOCKED: out std_logic_vector (31 downto 0); -- Status of the handshake and buffer control
- STAT_INIT_BUFFER: out std_logic_vector (31 downto 0); -- Status of the handshake and buffer control
- STAT_REPLY_BUFFER: out std_logic_vector (31 downto 0); -- General Status
- CTRL_GEN: in std_logic_vector (31 downto 0);
- CTRL_LOCKED: in std_logic_vector (31 downto 0);
- STAT_CTRL_INIT_BUFFER: in std_logic_vector (31 downto 0);
- STAT_CTRL_REPLY_BUFFER: in std_logic_vector (31 downto 0)
- );
- end component;
- component trb_net16_io_multiplexer is
- generic (
- DATA_WIDTH : integer := DATA_WIDTH;
- NUM_WIDTH : integer := NUM_WIDTH;
- MUX_WIDTH : integer range 1 to 5 := MUX_WIDTH;
- MUX_SECURE_MODE : integer range 0 to 1 := MUX_SECURE_MODE --use sbufs or not?
- );
- port(
- -- Misc
- CLK : in std_logic;
- RESET : in std_logic;
- CLK_EN : in std_logic;
- -- Media direction port
- MED_DATAREADY_IN: in std_logic;
- MED_DATA_IN: in std_logic_vector (DATA_WIDTH-1 downto 0);
- -- highest bits are mult.
- MED_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- MED_READ_OUT: out std_logic;
- MED_DATAREADY_OUT: out std_logic;
- MED_DATA_OUT: out std_logic_vector (DATA_WIDTH-1 downto 0);
- MED_PACKET_NUM_OUT:out std_logic_vector (1 downto 0);
- MED_READ_IN: in std_logic;
- -- Internal direction port
- INT_DATAREADY_OUT: out std_logic_vector (2**MUX_WIDTH-1 downto 0);
- INT_DATA_OUT: out std_logic_vector ((DATA_WIDTH)*(2**MUX_WIDTH)-1 downto 0);
- INT_PACKET_NUM_OUT:out std_logic_vector (2*(2**MUX_WIDTH)-1 downto 0);
- INT_READ_IN: in std_logic_vector (2**MUX_WIDTH-1 downto 0);
- INT_DATAREADY_IN: in std_logic_vector (2**MUX_WIDTH-1 downto 0);
- INT_DATA_IN: in std_logic_vector ((DATA_WIDTH)*(2**MUX_WIDTH)-1 downto 0);
- INT_PACKET_NUM_IN: in std_logic_vector (2*(2**MUX_WIDTH)-1 downto 0);
- INT_READ_OUT: out std_logic_vector (2**MUX_WIDTH-1 downto 0);
- -- Status and control port
- CTRL: in std_logic_vector (31 downto 0);
- STAT: out std_logic_vector (31 downto 0)
- );
- end component;
- component trb_net16_term is
- generic (
- USE_APL_PORT : integer range 0 to 1 := 1;
- SECURE_MODE : integer range 0 to 1 := TRG_SECURE_MODE
+component trb_net16_iobuf is
+ generic (
+ IBUF_DEPTH : integer range 0 to 6 := c_FIFO_BRAM;--std_FIFO_DEPTH;
+ IBUF_SECURE_MODE : integer range 0 to 1 := c_NO;--std_IBUF_SECURE_MODE;
+ SBUF_VERSION : integer range 0 to 1 := std_SBUF_VERSION;
+ OBUF_DATA_COUNT_WIDTH : integer range 2 to 7 := std_DATA_COUNT_WIDTH;
+ USE_ACKNOWLEDGE : integer range 0 to 1 := std_USE_ACKNOWLEDGE;
+ USE_CHECKSUM : integer range 0 to 1 := c_YES;
+ USE_VENDOR_CORES : integer range 0 to 1 := c_YES;
+ INIT_CAN_SEND_DATA : integer range 0 to 1 := c_YES;
+ REPLY_CAN_SEND_DATA : integer range 0 to 1 := c_YES
+ );
+ port(
+ -- Misc
+ CLK : in std_logic;
+ RESET : in std_logic;
+ CLK_EN : in std_logic;
+ -- Media direction port
+ MED_INIT_DATAREADY_OUT: out std_logic;
+ MED_INIT_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ MED_INIT_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ MED_INIT_READ_IN: in std_logic;
+
+ MED_REPLY_DATAREADY_OUT: out std_logic;
+ MED_REPLY_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ MED_REPLY_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ MED_REPLY_READ_IN: in std_logic;
+
+
+ MED_DATAREADY_IN: in std_logic; -- Data word is offered by the Media(the IOBUF MUST read)
+ MED_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ MED_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ MED_READ_OUT: out std_logic;
+ MED_ERROR_IN: in std_logic_vector (2 downto 0);
+
+
+
+ -- Internal direction port
+
+ INT_INIT_DATAREADY_OUT: out std_logic;
+ INT_INIT_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ INT_INIT_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ INT_INIT_READ_IN: in std_logic;
+
+ INT_INIT_DATAREADY_IN: in std_logic;
+ INT_INIT_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ INT_INIT_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ INT_INIT_READ_OUT: out std_logic;
+
+ INT_REPLY_DATAREADY_OUT: out std_logic;
+ INT_REPLY_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ INT_REPLY_PACKET_NUM_OUT:out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ INT_REPLY_READ_IN: in std_logic;
+
+ INT_REPLY_DATAREADY_IN: in std_logic;
+ INT_REPLY_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0);
+ INT_REPLY_PACKET_NUM_IN :in std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ INT_REPLY_READ_OUT: out std_logic;
+
+ -- Status and control port
+ STAT_GEN: out std_logic_vector (31 downto 0);
+ STAT_IBUF_BUFFER: out std_logic_vector (31 downto 0);
+ CTRL_GEN: in std_logic_vector (31 downto 0);
+ STAT_CTRL_IBUF_BUFFER: in std_logic_vector (31 downto 0)
+ );
+end component;
+ component trb_net16_io_multiplexer is
+
+ port(
+ -- Misc
+ CLK : in std_logic;
+ RESET : in std_logic;
+ CLK_EN : in std_logic;
+
+ -- Media direction port
+ MED_DATAREADY_IN: in STD_LOGIC;
+ MED_DATA_IN: in STD_LOGIC_VECTOR (c_DATA_WIDTH-1 downto 0);
+ MED_PACKET_NUM_IN: in STD_LOGIC_VECTOR (1 downto 0);
+ MED_READ_OUT: out STD_LOGIC;
+
+ MED_DATAREADY_OUT: out STD_LOGIC;
+ MED_DATA_OUT: out STD_LOGIC_VECTOR (c_DATA_WIDTH-1 downto 0);
+ MED_PACKET_NUM_OUT: out STD_LOGIC_VECTOR (1 downto 0);
+ MED_READ_IN: in STD_LOGIC;
+
+ -- Internal direction port
+ INT_DATA_OUT: out STD_LOGIC_VECTOR (c_DATA_WIDTH-1 downto 0);
+ INT_PACKET_NUM_OUT: out STD_LOGIC_VECTOR (c_NUM_WIDTH-1 downto 0);
+ INT_DATAREADY_OUT: out STD_LOGIC_VECTOR (2**(c_MUX_WIDTH-1)-1 downto 0);
+ INT_READ_IN: in STD_LOGIC_VECTOR (2**(c_MUX_WIDTH-1)-1 downto 0);
+
+ INT_DATAREADY_IN: in STD_LOGIC_VECTOR (2**c_MUX_WIDTH-1 downto 0);
+ INT_DATA_IN: in STD_LOGIC_VECTOR ((c_DATA_WIDTH)*(2**c_MUX_WIDTH)-1 downto 0);
+ INT_PACKET_NUM_IN: in STD_LOGIC_VECTOR (2*(2**c_MUX_WIDTH)-1 downto 0);
+ INT_READ_OUT: out STD_LOGIC_VECTOR (2**c_MUX_WIDTH-1 downto 0);
+
+ -- Status and control port
+ CTRL: in STD_LOGIC_VECTOR (31 downto 0);
+ STAT: out STD_LOGIC_VECTOR (31 downto 0)
+ );
+end component;
+component trb_net16_term is
+ generic (
+ USE_APL_PORT : integer range 0 to 1 := c_YES;
+ --even when 0, ERROR_PACKET_IN is used for automatic replys
+ SECURE_MODE : integer range 0 to 1 := std_TERM_SECURE_MODE
--if secure_mode is not used, apl must provide error pattern and dtype until
- --next trigger comes in. In secure mode these must be available when hold_trm goes low
- );
- port(
- -- Misc
- CLK : in std_logic;
- RESET : in std_logic;
- CLK_EN : in std_logic;
- INT_DATAREADY_OUT: out std_logic;
- INT_DATA_OUT: out std_logic_vector (15 downto 0); -- Data word
- INT_PACKET_NUM_OUT: out std_logic_vector (1 downto 0);
- INT_READ_IN: in std_logic;
- INT_DATAREADY_IN: in std_logic;
- INT_DATA_IN: in std_logic_vector (15 downto 0); -- Data word
- INT_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- INT_READ_OUT: out std_logic;
- -- "mini" APL, just to see the triggers coming in
- APL_DTYPE_OUT: out std_logic_vector (3 downto 0); -- see NewTriggerBusNetworkDescr
- APL_ERROR_PATTERN_OUT: out std_logic_vector (31 downto 0); -- see NewTriggerBusNetworkDescr
- APL_SEQNR_OUT: out std_logic_vector (7 downto 0);
- APL_GOT_TRM: out std_logic;
- APL_RELEASE_TRM: in std_logic;
- APL_ERROR_PATTERN_IN: in std_logic_vector (31 downto 0) -- see NewTriggerBusNetworkDescr
- -- Status and control port
- );
- end component;
- component trb_net16_term_buf is
- port(
- CLK : in std_logic;
- RESET : in std_logic;
- CLK_EN : in std_logic;
- MED_INIT_DATAREADY_OUT: out std_logic;
- MED_INIT_DATA_OUT: out std_logic_vector (15 downto 0);
- MED_INIT_PACKET_NUM_OUT: out std_logic_vector (1 downto 0);
- MED_INIT_READ_IN: in std_logic;
- MED_INIT_DATAREADY_IN: in std_logic;
- MED_INIT_DATA_IN: in std_logic_vector (15 downto 0);
- MED_INIT_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- MED_INIT_READ_OUT: out std_logic;
- MED_REPLY_DATAREADY_OUT: out std_logic;
- MED_REPLY_DATA_OUT: out std_logic_vector (15 downto 0);
- MED_REPLY_PACKET_NUM_OUT: out std_logic_vector (1 downto 0);
- MED_REPLY_READ_IN: in std_logic;
- MED_REPLY_DATAREADY_IN: in std_logic;
- MED_REPLY_DATA_IN: in std_logic_vector (15 downto 0);
- MED_REPLY_PACKET_NUM_IN: in std_logic_vector (1 downto 0);
- MED_REPLY_READ_OUT: out std_logic
- );
- end component;
+ --next trigger comes in. In secure mode these need to be available while relase_trg is high
+ );
+ port(
+ -- Misc
+ CLK : in std_logic;
+ RESET : in std_logic;
+ CLK_EN : in std_logic;
+
+ INT_DATAREADY_OUT: out std_logic;
+ INT_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ INT_PACKET_NUM_OUT: out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ INT_READ_IN: in std_logic;
+
+ INT_DATAREADY_IN: in std_logic;
+ INT_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ INT_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ INT_READ_OUT: out std_logic;
+
+ -- "mini" APL, just to see the triggers coming in
+ APL_DTYPE_OUT: out std_logic_vector (3 downto 0); -- see NewTriggerBusNetworkDescr
+ APL_ERROR_PATTERN_OUT: out std_logic_vector (31 downto 0); -- see NewTriggerBusNetworkDescr
+ APL_SEQNR_OUT: out std_logic_vector (7 downto 0);
+ APL_GOT_TRM: out std_logic;
+ APL_RELEASE_TRM: in std_logic;
+ APL_ERROR_PATTERN_IN: in std_logic_vector (31 downto 0) -- see NewTriggerBusNetworkDescr
+ -- Status and control port
+ );
+end component;
+component trb_net16_term_buf is
+ port(
+ -- Misc
+ CLK : in std_logic;
+ RESET : in std_logic;
+ CLK_EN : in std_logic;
+
+ MED_INIT_DATAREADY_OUT: out std_logic;
+ MED_INIT_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ MED_INIT_PACKET_NUM_OUT: out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ MED_INIT_READ_IN: in std_logic;
+
+ MED_REPLY_DATAREADY_OUT: out std_logic;
+ MED_REPLY_DATA_OUT: out std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ MED_REPLY_PACKET_NUM_OUT: out std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ MED_REPLY_READ_IN: in std_logic;
+
+ MED_DATAREADY_IN: in std_logic;
+ MED_DATA_IN: in std_logic_vector (c_DATA_WIDTH-1 downto 0); -- Data word
+ MED_PACKET_NUM_IN: in std_logic_vector (c_NUM_WIDTH-1 downto 0);
+ MED_READ_OUT: out std_logic
+ );
+end component;
signal apl_to_buf_INIT_DATAREADY: std_logic;
signal apl_to_buf_INIT_DATA : std_logic_vector (15 downto 0);
signal MED_INIT_PACKET_NUM_OUT : std_logic_vector (1 downto 0);
signal MED_INIT_READ_IN : std_logic;
- signal MED_INIT_DATAREADY_IN : std_logic;
- signal MED_INIT_DATA_IN : std_logic_vector (15 downto 0);
- signal MED_INIT_PACKET_NUM_IN : std_logic_vector (1 downto 0);
- signal MED_INIT_READ_OUT : std_logic;
+ signal MED_IBUF_DATAREADY_IN : std_logic;
+ signal MED_IBUF_DATA_IN : std_logic_vector (15 downto 0);
+ signal MED_IBUF_PACKET_NUM_IN : std_logic_vector (1 downto 0);
+ signal MED_IBUF_READ_OUT : std_logic;
signal MED_REPLY_DATAREADY_OUT : std_logic;
signal MED_REPLY_DATA_OUT : std_logic_vector (15 downto 0);
signal MED_REPLY_PACKET_NUM_OUT : std_logic_vector (1 downto 0);
signal MED_REPLY_READ_IN : std_logic;
-
- signal MED_REPLY_DATAREADY_IN : std_logic;
- signal MED_REPLY_DATA_IN : std_logic_vector (15 downto 0);
- signal MED_REPLY_PACKET_NUM_IN : std_logic_vector (1 downto 0);
- signal MED_REPLY_READ_OUT : std_logic;
-
-signal m_DATAREADY_OUT : std_logic_vector (2**MUX_WIDTH-1 downto 0);
-signal m_DATA_OUT : std_logic_vector (DATA_WIDTH*(2**MUX_WIDTH)-1 downto 0);
-signal m_PACKET_NUM_OUT: std_logic_vector (NUM_WIDTH*(2**MUX_WIDTH)-1 downto 0);
-signal m_READ_IN : std_logic_vector (2**MUX_WIDTH-1 downto 0);
-signal m_DATAREADY_IN : std_logic_vector (2**MUX_WIDTH-1 downto 0);
-signal m_DATA_IN : std_logic_vector (DATA_WIDTH*2**MUX_WIDTH-1 downto 0);
-signal m_PACKET_NUM_IN : std_logic_vector (NUM_WIDTH*2**MUX_WIDTH-1 downto 0);
-signal m_READ_OUT : std_logic_vector (2**MUX_WIDTH-1 downto 0);
+signal m_DATAREADY_OUT : std_logic_vector (2**c_MUX_WIDTH-1 downto 0);
+signal m_DATA_OUT : std_logic_vector (c_DATA_WIDTH*(2**c_MUX_WIDTH)-1 downto 0);
+signal m_PACKET_NUM_OUT: std_logic_vector (c_NUM_WIDTH*(2**c_MUX_WIDTH)-1 downto 0);
+signal m_READ_IN : std_logic_vector (2**c_MUX_WIDTH-1 downto 0);
+
+signal m_DATAREADY_IN : std_logic_vector (2**(c_MUX_WIDTH-1)-1 downto 0);
+signal m_DATA_IN : std_logic_vector (c_DATA_WIDTH-1 downto 0);
+signal m_PACKET_NUM_IN : std_logic_vector (c_NUM_WIDTH-1 downto 0);
+signal m_READ_OUT : std_logic_vector (2**(c_MUX_WIDTH-1)-1 downto 0);
begin
-------------------------------------------------
--Connection between multiplexer and iobuf
-------------------------------------------------
--Connections for data and trigger channel
- genmuxcon : for i in 0 to 2**(MUX_WIDTH-1)-1 generate
+ genmuxcon : for i in 0 to 2**(c_MUX_WIDTH-1)-1 generate
gentrg: if i = TRG_CHANNEL generate
m_DATAREADY_OUT(i*2) <= MED_INIT_DATAREADY_OUT;
m_DATAREADY_OUT(i*2+1) <= MED_REPLY_DATAREADY_OUT;
- m_DATA_OUT((i*2+1)*DATA_WIDTH-1 downto i*DATA_WIDTH*2) <= MED_INIT_DATA_OUT;
- m_DATA_OUT((i*2+2)*DATA_WIDTH-1 downto (i*2+1)*DATA_WIDTH) <= MED_REPLY_DATA_OUT;
- m_PACKET_NUM_OUT(i*NUM_WIDTH*2+1 downto i*NUM_WIDTH*2) <= MED_INIT_PACKET_NUM_OUT;
- m_PACKET_NUM_OUT(i*NUM_WIDTH*2+3 downto i*NUM_WIDTH*2+2) <= MED_REPLY_PACKET_NUM_OUT;
+ m_DATA_OUT((i*2+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH*2) <= MED_INIT_DATA_OUT;
+ m_DATA_OUT((i*2+2)*c_DATA_WIDTH-1 downto (i*2+1)*c_DATA_WIDTH) <= MED_REPLY_DATA_OUT;
+ m_PACKET_NUM_OUT(i*c_NUM_WIDTH*2+1 downto i*c_NUM_WIDTH*2) <= MED_INIT_PACKET_NUM_OUT;
+ m_PACKET_NUM_OUT(i*c_NUM_WIDTH*2+3 downto i*c_NUM_WIDTH*2+2) <= MED_REPLY_PACKET_NUM_OUT;
MED_INIT_READ_IN <= m_READ_IN(i*2);
- MED_REPLY_READ_IN <= m_READ_IN(i*2+1);
- MED_INIT_DATAREADY_IN <= m_DATAREADY_IN(i*2);
- MED_REPLY_DATAREADY_IN <= m_DATAREADY_IN(i*2+1);
- MED_INIT_DATA_IN <= m_DATA_IN((i*2+1)*DATA_WIDTH-1 downto i*DATA_WIDTH*2);
- MED_REPLY_DATA_IN <= m_DATA_IN((i*2+2)*DATA_WIDTH-1 downto (i*2+1)*DATA_WIDTH);
- MED_INIT_PACKET_NUM_IN <= m_PACKET_NUM_IN(i*NUM_WIDTH*2+1 downto i*NUM_WIDTH*2);
- MED_REPLY_PACKET_NUM_IN <= m_PACKET_NUM_IN(i*NUM_WIDTH*2+3 downto i*NUM_WIDTH*2+2);
- m_READ_OUT(i*2) <= MED_INIT_READ_OUT;
- m_READ_OUT(i*2+1) <= MED_REPLY_READ_OUT;
+ MED_REPLY_READ_IN <= m_READ_IN(i+1);
+ MED_IBUF_DATAREADY_IN <= m_DATAREADY_IN(i);
+ MED_IBUF_DATA_IN <= m_DATA_IN((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH);
+ MED_IBUF_PACKET_NUM_IN <= m_PACKET_NUM_IN(i*c_NUM_WIDTH+1 downto i*c_NUM_WIDTH);
+ m_READ_OUT(i) <= MED_IBUF_READ_OUT;
end generate;
genelse: if i /= TRG_CHANNEL generate
termbuf: trb_net16_term_buf
CLK => CLK,
RESET => RESET,
CLK_EN => CLK_EN,
+ MED_DATAREADY_IN => m_DATAREADY_IN(i),
+ MED_DATA_IN => m_DATA_IN((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
+ MED_PACKET_NUM_IN => m_PACKET_NUM_IN(i*c_NUM_WIDTH+1 downto i*c_NUM_WIDTH),
+ MED_READ_OUT => m_READ_OUT(i),
+
MED_INIT_DATAREADY_OUT => m_DATAREADY_OUT(i*2),
- MED_INIT_DATA_OUT => m_DATA_OUT((i*2+1)*DATA_WIDTH-1 downto i*DATA_WIDTH*2),
- MED_INIT_PACKET_NUM_OUT => m_PACKET_NUM_OUT(i*NUM_WIDTH*2+1 downto i*NUM_WIDTH*2),
+ MED_INIT_DATA_OUT => m_DATA_OUT((i*2+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH*2),
+ MED_INIT_PACKET_NUM_OUT => m_PACKET_NUM_OUT(i*c_NUM_WIDTH*2+1 downto i*c_NUM_WIDTH*2),
MED_INIT_READ_IN => m_READ_IN(i*2),
- MED_INIT_DATAREADY_IN => m_DATAREADY_IN(i*2),
- MED_INIT_DATA_IN => m_DATA_IN((i*2+1)*DATA_WIDTH-1 downto i*DATA_WIDTH*2),
- MED_INIT_PACKET_NUM_IN => m_PACKET_NUM_IN(i*NUM_WIDTH*2+1 downto i*NUM_WIDTH*2),
- MED_INIT_READ_OUT => m_READ_OUT(i*2),
MED_REPLY_DATAREADY_OUT => m_DATAREADY_OUT(i*2+1),
- MED_REPLY_DATA_OUT => m_DATA_OUT((i*2+2)*DATA_WIDTH-1 downto (i*2+1)*DATA_WIDTH),
- MED_REPLY_PACKET_NUM_OUT => m_PACKET_NUM_OUT(i*NUM_WIDTH*2+3 downto i*NUM_WIDTH*2+2),
- MED_REPLY_READ_IN => m_READ_IN(i*2+1),
- MED_REPLY_DATAREADY_IN => m_DATAREADY_IN(i*2+1),
- MED_REPLY_DATA_IN => m_DATA_IN((i*2+2)*DATA_WIDTH-1 downto (i*2+1)*DATA_WIDTH),
- MED_REPLY_PACKET_NUM_IN => m_PACKET_NUM_IN(i*NUM_WIDTH*2+3 downto i*NUM_WIDTH*2+2),
- MED_REPLY_READ_OUT => m_READ_OUT(i*2+1)
+ MED_REPLY_DATA_OUT => m_DATA_OUT((i*2+2)*c_DATA_WIDTH-1 downto (i*2+1)*c_DATA_WIDTH),
+ MED_REPLY_PACKET_NUM_OUT => m_PACKET_NUM_OUT(i*c_NUM_WIDTH*2+3 downto i*c_NUM_WIDTH*2+2),
+ MED_REPLY_READ_IN => m_READ_IN(i*2+1)
);
end generate;
end generate;
MED_INIT_DATA_OUT => MED_INIT_DATA_OUT,
MED_INIT_PACKET_NUM_OUT => MED_INIT_PACKET_NUM_OUT,
MED_INIT_READ_IN => MED_INIT_READ_IN,
- MED_INIT_DATAREADY_IN => MED_INIT_DATAREADY_IN,
- MED_INIT_DATA_IN => MED_INIT_DATA_IN,
- MED_INIT_PACKET_NUM_IN => MED_INIT_PACKET_NUM_IN,
- MED_INIT_READ_OUT => MED_INIT_READ_OUT,
- MED_INIT_ERROR_IN => (others => '0'),
+ MED_DATAREADY_IN => MED_IBUF_DATAREADY_IN,
+ MED_DATA_IN => MED_IBUF_DATA_IN,
+ MED_PACKET_NUM_IN => MED_IBUF_PACKET_NUM_IN,
+ MED_READ_OUT => MED_IBUF_READ_OUT,
+ MED_ERROR_IN => (others => '0'),
MED_REPLY_DATAREADY_OUT => MED_REPLY_DATAREADY_OUT,
MED_REPLY_DATA_OUT => MED_REPLY_DATA_OUT,
MED_REPLY_PACKET_NUM_OUT=> MED_REPLY_PACKET_NUM_OUT,
MED_REPLY_READ_IN => MED_REPLY_READ_IN,
- MED_REPLY_DATAREADY_IN => MED_REPLY_DATAREADY_IN,
- MED_REPLY_DATA_IN => MED_REPLY_DATA_IN,
- MED_REPLY_PACKET_NUM_IN => MED_REPLY_PACKET_NUM_IN,
- MED_REPLY_READ_OUT => MED_REPLY_READ_OUT,
- MED_REPLY_ERROR_IN => (others => '0'),
-- Internal direction port
INT_INIT_DATAREADY_OUT => buf_to_apl_INIT_DATAREADY,
INT_INIT_DATA_OUT => buf_to_apl_INIT_DATA,
INT_INIT_DATA_IN => apl_to_buf_INIT_DATA,
INT_INIT_PACKET_NUM_IN => apl_to_buf_INIT_PACKET_NUM,
INT_INIT_READ_OUT => apl_to_buf_INIT_READ,
- INT_REPLY_HEADER_IN => '0',
INT_REPLY_DATAREADY_OUT => buf_to_apl_REPLY_DATAREADY,
INT_REPLY_DATA_OUT => buf_to_apl_REPLY_DATA,
INT_REPLY_PACKET_NUM_OUT=> buf_to_apl_REPLY_PACKET_NUM,
INT_REPLY_READ_OUT => apl_to_buf_REPLY_READ,
-- Status and control port
STAT_GEN => STAT_GEN,
- STAT_LOCKED => STAT_LOCKED,
- STAT_INIT_BUFFER => STAT_INIT_BUFFER,
- STAT_REPLY_BUFFER => STAT_REPLY_BUFFER,
+ STAT_IBUF_BUFFER => STAT_IBUF_BUFFER,
CTRL_GEN => CTRL_GEN,
- CTRL_LOCKED => CTRL_LOCKED,
- STAT_CTRL_INIT_BUFFER => STAT_CTRL_INIT_BUFFER,
- STAT_CTRL_REPLY_BUFFER => STAT_CTRL_REPLY_BUFFER
+ STAT_CTRL_IBUF_BUFFER => STAT_CTRL_IBUF_BUFFER
);
MPLEX: trb_net16_io_multiplexer
- generic map (
- DATA_WIDTH => DATA_WIDTH,
- NUM_WIDTH => NUM_WIDTH,
- MUX_WIDTH => MUX_WIDTH,
- MUX_SECURE_MODE => MUX_SECURE_MODE
- )
port map (
CLK => CLK,
RESET => RESET ,
CTRL => MPLEX_CTRL
);
-
- TRM_INIT : trb_net16_term
+ trglvl1 : trb_net16_term
+ generic map(
+ USE_APL_PORT => c_YES,
+ SECURE_MODE => std_TERM_SECURE_MODE
+ )
port map(
-- Misc
- CLK => CLK,
- RESET => RESET,
- CLK_EN => CLK_EN,
- INT_DATAREADY_OUT => apl_to_buf_REPLY_DATAREADY,
- INT_DATA_OUT => apl_to_buf_REPLY_DATA,
- INT_PACKET_NUM_OUT => apl_to_buf_REPLY_PACKET_NUM,
- INT_READ_IN => apl_to_buf_REPLY_READ,
- INT_DATAREADY_IN => buf_to_apl_INIT_DATAREADY,
- INT_DATA_IN => buf_to_apl_INIT_DATA,
- INT_PACKET_NUM_IN => buf_to_apl_INIT_PACKET_NUM,
- INT_READ_OUT => buf_to_apl_INIT_READ,
+ CLK => CLK,
+ RESET => RESET,
+ CLK_EN => CLK_EN,
+
+ INT_DATAREADY_OUT => apl_to_buf_REPLY_DATAREADY,
+ INT_DATA_OUT => apl_to_buf_REPLY_DATA,
+ INT_PACKET_NUM_OUT=> apl_to_buf_REPLY_PACKET_NUM,
+ INT_READ_IN => apl_to_buf_REPLY_READ,
+
+ INT_DATAREADY_IN => buf_to_apl_INIT_DATAREADY,
+ INT_DATA_IN => buf_to_apl_INIT_DATA,
+ INT_PACKET_NUM_IN=> buf_to_apl_INIT_PACKET_NUM,
+ INT_READ_OUT => buf_to_apl_INIT_READ,
+
-- "mini" APL, just to see the triggers coming in
- APL_DTYPE_OUT => TRG_DTYPE_OUT,
- APL_ERROR_PATTERN_OUT => TRG_ERROR_PATTERN_OUT,
- APL_SEQNR_OUT => TRG_SEQNR_OUT,
- APL_GOT_TRM => TRG_GOT_TRIGGER_OUT,
- APL_RELEASE_TRM => TRG_RELEASE_IN,
- APL_ERROR_PATTERN_IN => TRG_ERROR_PATTERN_IN
- -- Status and control port
+ APL_DTYPE_OUT => LVL1_DTYPE_OUT,
+ APL_ERROR_PATTERN_OUT => LVL1_ERROR_PATTERN_OUT,
+ APL_SEQNR_OUT => LVL1_SEQNR_OUT,
+ APL_GOT_TRM => LVL1_GOT_TRIGGER_OUT,
+ APL_RELEASE_TRM => LVL1_RELEASE_IN,
+ APL_ERROR_PATTERN_IN => LVL1_ERROR_PATTERN_IN
);
-
apl_to_buf_INIT_DATAREADY <= '0';
apl_to_buf_INIT_DATA <= (others => '0');
apl_to_buf_INIT_PACKET_NUM <= (others => '0');