]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
*** empty log message ***
authorhadeshyp <hadeshyp>
Wed, 16 Jul 2008 13:08:13 +0000 (13:08 +0000)
committerhadeshyp <hadeshyp>
Wed, 16 Jul 2008 13:08:13 +0000 (13:08 +0000)
trb_net16_endpoint_1_trg_0_api.vhd
trb_net_priority_arbiter.vhd

index 4c8ada7c527360b1fc09f2f8bff2bc3950ed42b9..f8197c6d1f7c3da491b1c96ecd3923e752d0dd22 100644 (file)
@@ -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');
index a3595868fc0b19464f6c770dd5f619f321122b24..9b2a91d38f95f89841e48dbb3ac80585322fb8e7 100755 (executable)
@@ -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');