From f26788d4a41cbed798ab2aae2f8a773f5a5f4b5d Mon Sep 17 00:00:00 2001 From: hadeshyp Date: Wed, 16 Jul 2008 13:08:13 +0000 Subject: [PATCH] *** empty log message *** --- trb_net16_endpoint_1_trg_0_api.vhd | 526 +++++++++++++---------------- trb_net_priority_arbiter.vhd | 2 +- 2 files changed, 238 insertions(+), 290 deletions(-) diff --git a/trb_net16_endpoint_1_trg_0_api.vhd b/trb_net16_endpoint_1_trg_0_api.vhd index 4c8ada7..f8197c6 100644 --- a/trb_net16_endpoint_1_trg_0_api.vhd +++ b/trb_net16_endpoint_1_trg_0_api.vhd @@ -1,30 +1,3 @@ - --- NOT UP TO DATE - - - - - - - - - - - - - - - - - - - - - - - - - -- a trigger receiver - as simple as possible LIBRARY IEEE; @@ -39,13 +12,9 @@ use work.trb_net_std.all; 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 ); @@ -58,35 +27,33 @@ entity trb_net16_endpoint_1_trg_0_api is -- 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) @@ -95,159 +62,164 @@ end entity; 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); @@ -275,54 +247,45 @@ architecture trb_net16_endpoint_1_trg_0_api_arch of trb_net16_endpoint_1_trg_0_a 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 @@ -330,23 +293,20 @@ begin 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; @@ -362,20 +322,15 @@ IOBUF: trb_net16_iobuf 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, @@ -385,7 +340,6 @@ IOBUF: trb_net16_iobuf 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, @@ -396,22 +350,12 @@ IOBUF: trb_net16_iobuf 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 , @@ -435,32 +379,36 @@ IOBUF: trb_net16_iobuf 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'); diff --git a/trb_net_priority_arbiter.vhd b/trb_net_priority_arbiter.vhd index a359586..9b2a91d 100755 --- a/trb_net_priority_arbiter.vhd +++ b/trb_net_priority_arbiter.vhd @@ -103,7 +103,7 @@ architecture trb_net_priority_arbiter_arch of trb_net_priority_arbiter is sampled_rr_pattern1, sampled_rr_pattern2, proposed_rr_pattern1, proposed_rr_pattern2, leading_rr_pattern1, leading_rr_pattern2, current_rr_mask, CTRL, next_fixed_pattern, next_rr_pattern, - ENABLE) + ENABLE, INPUT_IN) begin next_rr_pattern(0) <= '1'; --stay tuned on highst Pr. next_rr_pattern(WIDTH -1 downto 1) <= (others => '0'); -- 2.43.0