COMPILE_VERSION : std_logic_vector(15 downto 0) := x"0001";
HARDWARE_VERSION : std_logic_vector(31 downto 0) := x"12345678";
--media interfaces
- MII_NUMBER : integer range 2 to c_MAX_MII_PER_HUB := 2;
+ MII_NUMBER : integer range 2 to c_MAX_MII_PER_HUB := 4;
MII_IBUF_DEPTH : hub_iobuf_config_t := std_HUB_IBUF_DEPTH;
- -- settings for apis
- API_NUMBER : integer range 0 to c_MAX_API_PER_HUB := 0;
- API_CHANNELS : hub_api_config_t := (3,3,3,3,3,3,3,3);
- API_TYPE : hub_api_config_t := (0,0,0,0,0,0,0,0);
- API_FIFO_TO_INT_DEPTH : hub_api_config_t := (1,1,1,1,1,1,1,1);
- API_FIFO_TO_APL_DEPTH : hub_api_config_t := (1,1,1,1,1,1,1,1);
- SECURE_MODE_TO_APL : integer range 0 to 1 := c_YES;
- SECURE_MODE_TO_INT : integer range 0 to 1 := c_YES;
- APL_WRITE_ALL_WORDS : hub_api_config_t := (0,0,0,0,0,0,0,0);
- BROADCAST_BITMASK : hub_api_broadcast_t := (x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF",x"FF");
-
- --trigger reading interfaces
- TRG_NUMBER : integer range 0 to c_MAX_TRG_PER_HUB := 0;
- TRG_SECURE_MODE : integer range 0 to 1 := c_NO;
- TRG_CHANNELS : hub_api_config_t := (0,1,0,0,0,0,0,0)
+ -- settings for external api connections
+ INT_NUMBER : integer range 0 to c_MAX_API_PER_HUB := 0;
+ INT_CHANNELS : hub_api_config_t := (3,3,3,3,3,3,3,3);
+ INT_IBUF_DEPTH : hub_api_config_t := (6,6,6,6,6,6,6,6)
);
port (
CLK : in std_logic;
MED_READ_OUT : out std_logic_vector (MII_NUMBER-1 downto 0);
MED_STAT_OP : in std_logic_vector (MII_NUMBER*16-1 downto 0);
MED_CTRL_OP : out std_logic_vector (MII_NUMBER*16-1 downto 0);
- --API: interfaces
- APL_DATA_IN : in std_logic_vector (VAL(API_NUMBER*c_DATA_WIDTH) downto 0);
- APL_PACKET_NUM_IN : in std_logic_vector (VAL(API_NUMBER*c_NUM_WIDTH) downto 0);
- APL_DATAREADY_IN : in std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_READ_OUT : out std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_SHORT_TRANSFER_IN : in std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_DTYPE_IN : in std_logic_vector (VAL(API_NUMBER*4) downto 0);
- APL_ERROR_PATTERN_IN : in std_logic_vector (VAL(API_NUMBER*32) downto 0);
- APL_SEND_IN : in std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_TARGET_ADDRESS_IN : in std_logic_vector (VAL(API_NUMBER*16) downto 0);
- APL_DATA_OUT : out std_logic_vector (VAL(API_NUMBER*c_DATA_WIDTH) downto 0);
- APL_PACKET_NUM_OUT : out std_logic_vector (VAL(API_NUMBER*c_NUM_WIDTH) downto 0);
- APL_TYP_OUT : out std_logic_vector (VAL(API_NUMBER*3) downto 0);
- APL_DATAREADY_OUT : out std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_READ_IN : in std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_RUN_OUT : out std_logic_vector (VAL(API_NUMBER) downto 0);
- APL_MY_ADDRESS_IN : in std_logic_vector (VAL(API_NUMBER*16) downto 0);
- APL_SEQNR_OUT : out std_logic_vector (VAL(API_NUMBER*8) downto 0);
- APL_LENGTH_IN : in std_logic_vector (VAL(API_NUMBER*16) downto 0);
+ --INT: interfaces to connect APIs
+ INT_INIT_DATAREADY_OUT : out std_logic_vector (INT_NUMBER downto 0);
+ INT_INIT_DATA_OUT : out std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0);
+ INT_INIT_PACKET_NUM_OUT : out std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0);
+ INT_INIT_READ_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0');
+ INT_INIT_DATAREADY_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0');
+ INT_INIT_DATA_IN : in std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0) := (others => '0');
+ INT_INIT_PACKET_NUM_IN : in std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0) := (others => '0');
+ INT_INIT_READ_OUT : out std_logic_vector (INT_NUMBER downto 0);
+ INT_REPLY_DATAREADY_OUT : out std_logic_vector (INT_NUMBER downto 0);
+ INT_REPLY_DATA_OUT : out std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0);
+ INT_REPLY_PACKET_NUM_OUT : out std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0);
+ INT_REPLY_READ_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0');
+ INT_REPLY_DATAREADY_IN : in std_logic_vector (INT_NUMBER downto 0) := (others => '0');
+ INT_REPLY_DATA_IN : in std_logic_vector (INT_NUMBER*c_DATA_WIDTH downto 0) := (others => '0');
+ INT_REPLY_PACKET_NUM_IN : in std_logic_vector (INT_NUMBER*c_NUM_WIDTH downto 0) := (others => '0');
+ INT_REPLY_READ_OUT : out std_logic_vector (INT_NUMBER downto 0);
ONEWIRE : inout std_logic;
--Fixed status and control ports
HUB_STAT_CHANNEL : out std_logic_vector (2**(c_MUX_WIDTH-1)*16-1 downto 0);
end entity;
architecture trb_net16_hub_base_arch of trb_net16_hub_base is
- constant total_point_num : integer := MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER + 1;
+ constant total_point_num : integer := MII_NUMBER*2**(c_MUX_WIDTH-1) + INT_NUMBER + 1;
signal m_DATAREADY_OUT : std_logic_vector (MII_NUMBER*2**(c_MUX_WIDTH)-1 downto 0);
signal m_DATA_OUT : std_logic_vector (MII_NUMBER*2**(c_MUX_WIDTH)*c_DATA_WIDTH-1 downto 0);
signal m_PACKET_NUM_OUT: std_logic_vector (MII_NUMBER*2**(c_MUX_WIDTH)*c_NUM_WIDTH-1 downto 0);
signal buf_to_hub_REPLY_DATA : std_logic_vector (total_point_num*c_DATA_WIDTH-1 downto 0);
signal buf_to_hub_REPLY_PACKET_NUM : std_logic_vector (total_point_num*c_NUM_WIDTH-1 downto 0);
signal buf_to_hub_REPLY_READ : std_logic_vector (total_point_num-1 downto 0);
- signal buf_to_hub_REPLY_SEND_HEADER : std_logic_vector (total_point_num-1 downto 0);
signal HUB_INIT_DATAREADY_OUT : std_logic_vector (total_point_num-1 downto 0);
signal HUB_INIT_DATA_OUT : std_logic_vector (total_point_num*c_DATA_WIDTH-1 downto 0);
signal HUB_REPLY_DATA_IN : std_logic_vector (total_point_num*c_DATA_WIDTH-1 downto 0);
signal HUB_REPLY_PACKET_NUM_IN : std_logic_vector (total_point_num*c_NUM_WIDTH-1 downto 0);
signal HUB_REPLY_READ_OUT : std_logic_vector (total_point_num-1 downto 0);
- signal HUB_REPLY_SEND_HEADER_OUT : std_logic_vector (total_point_num-1 downto 0);
signal buf_HUB_STAT_CHANNEL : std_logic_vector (2**(c_MUX_WIDTH-1)*16-1 downto 0);
signal buf_STAT_POINTS_locked : std_logic_vector (2**(c_MUX_WIDTH-1)*32-1 downto 0);
signal HC_DTYPE_IN : std_logic_vector (3 downto 0);
signal HC_ERROR_PATTERN_IN : std_logic_vector (31 downto 0);
signal HC_SEND_IN : std_logic;
- signal HC_TARGET_ADDRESS_IN : std_logic_vector (15 downto 0);
signal HC_DATA_OUT : std_logic_vector (c_DATA_WIDTH-1 downto 0);
signal HC_PACKET_NUM_OUT: std_logic_vector (c_NUM_WIDTH-1 downto 0);
signal HC_TYP_OUT : std_logic_vector (2 downto 0);
signal HUB_CTRL_activepoints : std_logic_vector (2**(c_MUX_WIDTH-1)*32-1 downto 0);
signal HUB_CTRL_GEN : std_logic_vector (31 downto 0);
signal HUB_ADDRESS : std_logic_vector (15 downto 0);
- singal HUBLOGIC_IPU_STAT_DEBUG : std_logic_vector (31 downto 0);
+ signal HUBLOGIC_IPU_STAT_DEBUG : std_logic_vector (31 downto 0);
- signal IOBUF_STAT_GEN : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
- signal IOBUF_IBUF_BUFFER : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
- signal IOBUF_CTRL_GEN : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
- signal IOBUF_STAT_INIT_OBUF_DEBUG : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
- signal IOBUF_STAT_REPLY_OBUF_DEBUG : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+ signal IOBUF_STAT_GEN : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1))*32-1 downto 0);
+ signal IOBUF_IBUF_BUFFER : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1))*32-1 downto 0);
+ signal IOBUF_CTRL_GEN : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1))*32-1 downto 0);
+ signal IOBUF_STAT_INIT_OBUF_DEBUG : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1))*32-1 downto 0);
+ signal IOBUF_STAT_REPLY_OBUF_DEBUG : std_logic_vector ((MII_NUMBER*2**(c_MUX_WIDTH-1))*32-1 downto 0);
signal resync : std_logic_vector(MII_NUMBER-1 downto 0);
signal combined_resync : std_logic;
- signal reg_resync : std_logic;
- signal resync_counter : std_logic_vector(7 downto 0);
signal IDRAM_DATA_IN, IDRAM_DATA_OUT : std_logic_vector(15 downto 0);
signal IDRAM_WR_IN : std_logic;
signal IDRAM_ADDR_IN : std_logic_vector(2 downto 0);
gen_iobuf: if HUB_USED_CHANNELS(k) = 1 generate
IOBUF: trb_net16_iobuf
generic map (
- IBUF_DEPTH => calc_depth(i,MII_IBUF_DEPTH, API_FIFO_TO_APL_DEPTH, MII_NUMBER, API_NUMBER, c_MUX_WIDTH, HUB_CTRL_DEPTH),
+ IBUF_DEPTH => calc_depth(i,MII_IBUF_DEPTH, INT_IBUF_DEPTH, MII_NUMBER, INT_NUMBER, c_MUX_WIDTH, HUB_CTRL_DEPTH),
USE_CHECKSUM => USE_CHECKSUM(k),
IBUF_SECURE_MODE => IBUF_SECURE_MODE,
SBUF_VERSION => std_SBUF_VERSION,
APL_DTYPE_IN => HC_DTYPE_IN(3 downto 0),
APL_ERROR_PATTERN_IN => HC_ERROR_PATTERN_IN(31 downto 0),
APL_SEND_IN => HC_SEND_IN,
- APL_TARGET_ADDRESS_IN => HC_TARGET_ADDRESS_IN(15 downto 0),
+ APL_TARGET_ADDRESS_IN => (others => '0'),
-- Receiver port
APL_DATA_OUT => HC_DATA_OUT(c_DATA_WIDTH-1 downto 0),
APL_PACKET_NUM_OUT => HC_PACKET_NUM_OUT(c_NUM_WIDTH-1 downto 0),
STAT_FIFO_TO_APL => open
);
end generate;
- gen_apisa : if API_NUMBER /= 0 generate
- gen_apis : for i in 2**(c_MUX_WIDTH-1)*MII_NUMBER+1 to 2**(c_MUX_WIDTH-1)*MII_NUMBER+API_NUMBER generate
- --+1 because of hub_ctrl
- constant offset : integer := 2**(c_MUX_WIDTH-1)*MII_NUMBER + 1;
- constant aploffset : integer := i - offset;
+ gen_int : if INT_NUMBER /= 0 generate
+ gen_int1 : for i in 0 to INT_NUMBER-1 generate
+ constant j : integer := i + 2**(c_MUX_WIDTH-1)*MII_NUMBER+1;
begin
- gen_pas_api : if API_TYPE(aploffset) = 0 generate
- constant t : integer := 0;
- begin
- PAS_API : trb_net16_api_base
- generic map(
- API_TYPE => API_TYPE(aploffset),
- FIFO_TO_INT_DEPTH => API_FIFO_TO_INT_DEPTH(aploffset),
- FIFO_TO_APL_DEPTH => API_FIFO_TO_APL_DEPTH(aploffset),
- FORCE_REPLY => cfg_FORCE_REPLY(API_CHANNELS(aploffset)),
- SBUF_VERSION => std_SBUF_VERSION,
- USE_VENDOR_CORES => USE_VENDOR_CORES,
- SECURE_MODE_TO_APL => SECURE_MODE_TO_APL,
- SECURE_MODE_TO_INT => SECURE_MODE_TO_INT,
- APL_WRITE_ALL_WORDS => APL_WRITE_ALL_WORDS(aploffset),
- BROADCAST_BITMASK => BROADCAST_BITMASK(aploffset)
- )
- port map(
- -- Misc
- CLK => CLK,
- RESET => RESET,
- CLK_EN => CLK_EN,
- -- APL Transmitter port
- APL_DATA_IN => APL_DATA_IN((aploffset+1)*c_DATA_WIDTH-1 downto aploffset * c_DATA_WIDTH),
- APL_PACKET_NUM_IN => APL_PACKET_NUM_IN((aploffset+1)*c_NUM_WIDTH-1 downto aploffset * c_NUM_WIDTH),
- APL_DATAREADY_IN => APL_DATAREADY_IN(aploffset),
- APL_READ_OUT => APL_READ_OUT(aploffset),
- APL_SHORT_TRANSFER_IN => APL_SHORT_TRANSFER_IN(aploffset),
- APL_DTYPE_IN => APL_DTYPE_IN((aploffset+1)*4-1 downto aploffset*4),
- APL_ERROR_PATTERN_IN => APL_ERROR_PATTERN_IN((aploffset+1)*32-1 downto aploffset*32),
- APL_SEND_IN => APL_SEND_IN(aploffset),
- APL_TARGET_ADDRESS_IN => APL_TARGET_ADDRESS_IN((aploffset+1)*16-1 downto aploffset*16),
- -- Receiver port
- APL_DATA_OUT => APL_DATA_OUT((aploffset+1)*c_DATA_WIDTH-1 downto aploffset * c_DATA_WIDTH),
- APL_PACKET_NUM_OUT => APL_PACKET_NUM_OUT((aploffset+1)*c_NUM_WIDTH-1 downto aploffset * c_NUM_WIDTH),
- APL_TYP_OUT => APL_TYP_OUT((aploffset+1)*3-1 downto aploffset*3),
- APL_DATAREADY_OUT => APL_DATAREADY_OUT(aploffset),
- APL_READ_IN => APL_READ_IN(aploffset),
- -- APL Control port
- APL_RUN_OUT => APL_RUN_OUT(aploffset),
- APL_MY_ADDRESS_IN => APL_MY_ADDRESS_IN((aploffset+1)*16-1 downto aploffset*16),
- APL_SEQNR_OUT => APL_SEQNR_OUT((aploffset+1)*8-1 downto aploffset*8),
- APL_LENGTH_IN => APL_LENGTH_IN((aploffset+1)*16-1 downto aploffset*16),
- -- Internal direction port
- INT_MASTER_DATAREADY_OUT => buf_to_hub_REPLY_DATAREADY(i),
- INT_MASTER_DATA_OUT => buf_to_hub_REPLY_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_MASTER_PACKET_NUM_OUT => buf_to_hub_REPLY_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_MASTER_READ_IN => buf_to_hub_REPLY_READ(i),
- INT_MASTER_DATAREADY_IN => hub_to_buf_REPLY_DATAREADY(i),
- INT_MASTER_DATA_IN => hub_to_buf_REPLY_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_MASTER_PACKET_NUM_IN => hub_to_buf_REPLY_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_MASTER_READ_OUT => hub_to_buf_REPLY_READ(i),
- INT_SLAVE_DATAREADY_OUT => buf_to_hub_INIT_DATAREADY(i),
- INT_SLAVE_DATA_OUT => buf_to_hub_INIT_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_SLAVE_PACKET_NUM_OUT => buf_to_hub_INIT_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_SLAVE_READ_IN => buf_to_hub_INIT_READ(i),
- INT_SLAVE_DATAREADY_IN => hub_to_buf_INIT_DATAREADY(i),
- INT_SLAVE_DATA_IN => hub_to_buf_INIT_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_SLAVE_PACKET_NUM_IN => hub_to_buf_INIT_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_SLAVE_READ_OUT => hub_to_buf_INIT_READ(i),
- -- Status and control port
- STAT_FIFO_TO_INT => open,
- STAT_FIFO_TO_APL => open
- );
- end generate;
- gen_act_api : if API_TYPE(aploffset) = 1 generate
- constant t : integer := 0;
- begin
- ACT_API : trb_net16_api_base
- generic map(
- API_TYPE => API_TYPE(aploffset),
- FIFO_TO_INT_DEPTH => API_FIFO_TO_INT_DEPTH(aploffset),
- FIFO_TO_APL_DEPTH => API_FIFO_TO_APL_DEPTH(aploffset),
- FORCE_REPLY => cfg_FORCE_REPLY(API_CHANNELS(aploffset)),
- SBUF_VERSION => std_SBUF_VERSION,
- USE_VENDOR_CORES => USE_VENDOR_CORES,
- SECURE_MODE_TO_APL => SECURE_MODE_TO_APL,
- SECURE_MODE_TO_INT => SECURE_MODE_TO_INT,
- APL_WRITE_ALL_WORDS => APL_WRITE_ALL_WORDS(aploffset),
- BROADCAST_BITMASK => BROADCAST_BITMASK(aploffset)
- )
- port map(
- -- Misc
- CLK => CLK,
- RESET => RESET,
- CLK_EN => CLK_EN,
- -- APL Transmitter port
- APL_DATA_IN => APL_DATA_IN((aploffset+1)*c_DATA_WIDTH-1 downto aploffset * c_DATA_WIDTH),
- APL_PACKET_NUM_IN => APL_PACKET_NUM_IN((aploffset+1)*c_NUM_WIDTH-1 downto aploffset * c_NUM_WIDTH),
- APL_DATAREADY_IN => APL_DATAREADY_IN(aploffset),
- APL_READ_OUT => APL_READ_OUT(aploffset),
- APL_SHORT_TRANSFER_IN => APL_SHORT_TRANSFER_IN(aploffset),
- APL_DTYPE_IN => APL_DTYPE_IN((aploffset+1)*4-1 downto aploffset*4),
- APL_ERROR_PATTERN_IN => APL_ERROR_PATTERN_IN((aploffset+1)*32-1 downto aploffset*32),
- APL_SEND_IN => APL_SEND_IN(aploffset),
- APL_TARGET_ADDRESS_IN => APL_TARGET_ADDRESS_IN((aploffset+1)*16-1 downto aploffset*16),
- -- Receiver port
- APL_DATA_OUT => APL_DATA_OUT((aploffset+1)*c_DATA_WIDTH-1 downto aploffset * c_DATA_WIDTH),
- APL_PACKET_NUM_OUT => APL_PACKET_NUM_OUT((aploffset+1)*c_NUM_WIDTH-1 downto aploffset * c_NUM_WIDTH),
- APL_TYP_OUT => APL_TYP_OUT((aploffset+1)*3-1 downto aploffset*3),
- APL_DATAREADY_OUT => APL_DATAREADY_OUT(aploffset),
- APL_READ_IN => APL_READ_IN(aploffset),
- -- APL Control port
- APL_RUN_OUT => APL_RUN_OUT(aploffset),
- APL_MY_ADDRESS_IN => APL_MY_ADDRESS_IN((aploffset+1)*16-1 downto aploffset*16),
- APL_SEQNR_OUT => APL_SEQNR_OUT((aploffset+1)*8-1 downto aploffset*8),
- APL_LENGTH_IN => APL_LENGTH_IN((aploffset+1)*16-1 downto aploffset*16),
- -- Internal direction port
- INT_MASTER_DATAREADY_OUT => buf_to_hub_INIT_DATAREADY(i),
- INT_MASTER_DATA_OUT => buf_to_hub_INIT_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_MASTER_PACKET_NUM_OUT => buf_to_hub_INIT_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_MASTER_READ_IN => buf_to_hub_INIT_READ(i),
- INT_MASTER_DATAREADY_IN => hub_to_buf_INIT_DATAREADY(i),
- INT_MASTER_DATA_IN => hub_to_buf_INIT_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_MASTER_PACKET_NUM_IN => hub_to_buf_INIT_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_MASTER_READ_OUT => hub_to_buf_INIT_READ(i),
- INT_SLAVE_DATAREADY_OUT => buf_to_hub_REPLY_DATAREADY(i),
- INT_SLAVE_DATA_OUT => buf_to_hub_REPLY_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_SLAVE_PACKET_NUM_OUT => buf_to_hub_REPLY_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_SLAVE_READ_IN => buf_to_hub_REPLY_READ(i),
- INT_SLAVE_DATAREADY_IN => hub_to_buf_REPLY_DATAREADY(i),
- INT_SLAVE_DATA_IN => hub_to_buf_REPLY_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
- INT_SLAVE_PACKET_NUM_IN => hub_to_buf_REPLY_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
- INT_SLAVE_READ_OUT => hub_to_buf_REPLY_READ(i),
- -- Status and control port
- STAT_FIFO_TO_INT => open,
- STAT_FIFO_TO_APL => open
- );
- end generate;
+ buf_to_hub_REPLY_DATAREADY(j) <= INT_REPLY_DATAREADY_IN(i);
+ buf_to_hub_REPLY_DATA((j+1)*c_DATA_WIDTH-1 downto j*c_DATA_WIDTH) <= INT_REPLY_DATA_IN((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH);
+ buf_to_hub_REPLY_PACKET_NUM((j+1)*c_NUM_WIDTH-1 downto j*c_NUM_WIDTH) <= INT_REPLY_PACKET_NUM_IN((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH);
+ INT_REPLY_READ_OUT(i) <= buf_to_hub_REPLY_READ(j);
+
+ INT_REPLY_DATAREADY_OUT(i) <= hub_to_buf_REPLY_DATAREADY(j);
+ INT_REPLY_DATA_OUT((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH)<= hub_to_buf_REPLY_DATA((j+1)*c_DATA_WIDTH-1 downto j*c_DATA_WIDTH);
+ INT_REPLY_PACKET_NUM_OUT((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH) <= hub_to_buf_REPLY_PACKET_NUM((j+1)*c_NUM_WIDTH-1 downto j*c_NUM_WIDTH);
+ hub_to_buf_REPLY_READ(j) <= INT_REPLY_READ_IN(i);
+ buf_to_hub_INIT_DATAREADY(j) <= INT_INIT_DATAREADY_IN(i);
+ buf_to_hub_INIT_DATA((j+1)*c_DATA_WIDTH-1 downto j*c_DATA_WIDTH) <= INT_INIT_DATA_IN((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH);
+ buf_to_hub_INIT_PACKET_NUM((j+1)*c_NUM_WIDTH-1 downto j*c_NUM_WIDTH) <= INT_INIT_PACKET_NUM_IN((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH);
+ INT_INIT_READ_OUT(i) <= buf_to_hub_INIT_READ(j);
+ INT_INIT_DATAREADY_OUT(i) <= hub_to_buf_INIT_DATAREADY(j);
+ INT_INIT_DATA_OUT((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH) <= hub_to_buf_INIT_DATA((j+1)*c_DATA_WIDTH-1 downto j*c_DATA_WIDTH);
+ INT_INIT_PACKET_NUM_OUT((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH) <= hub_to_buf_INIT_PACKET_NUM((j+1)*c_NUM_WIDTH-1 downto j*c_NUM_WIDTH);
+ hub_to_buf_INIT_READ(j) <= INT_INIT_READ_IN(i);
end generate;
end generate;
+ INT_INIT_DATAREADY_OUT(INT_NUMBER) <= '0';
+ INT_INIT_DATA_OUT(INT_NUMBER*c_DATA_WIDTH) <= '0';
+ INT_INIT_PACKET_NUM_OUT(INT_NUMBER*c_NUM_WIDTH) <= '0';
+ INT_INIT_READ_OUT(INT_NUMBER) <= '0';
+ INT_REPLY_DATAREADY_OUT(INT_NUMBER) <= '0';
+ INT_REPLY_DATA_OUT(INT_NUMBER*c_DATA_WIDTH) <= '0';
+ INT_REPLY_PACKET_NUM_OUT(INT_NUMBER*c_NUM_WIDTH) <= '0';
+ INT_REPLY_READ_OUT(INT_NUMBER) <= '0';
--- gen_trgapi : if TRG_NUMBER /= 0 generate
--- gen_apis : for i in 2**(c_MUX_WIDTH-1)*MII_NUMBER+1+API_NUMBER to 2**(c_MUX_WIDTH-1)*MII_NUMBER+API_NUMBER+TRG_NUMBER generate
--- constant trg_offset : integer := i - (2**(c_MUX_WIDTH-1)*MII_NUMBER+1+API_NUMBER);
--- begin
--- TRG : trb_net16_term
--- generic map (
--- SECURE_MODE => TRG_SECURE_MODE
--- )
--- port map(
--- -- Misc
--- CLK => CLK,
--- RESET => RESET,
--- CLK_EN => CLK_EN,
--- INT_DATAREADY_OUT => buf_to_hub_REPLY_DATAREADY(i),
--- INT_DATA_OUT => buf_to_hub_REPLY_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
--- INT_PACKET_NUM_OUT => buf_to_hub_REPLY_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
--- INT_READ_IN => buf_to_hub_REPLY_READ(i),
--- INT_DATAREADY_IN => hub_to_buf_INIT_DATAREADY(i),
--- INT_DATA_IN => hub_to_buf_INIT_DATA((i+1)*c_DATA_WIDTH-1 downto i*c_DATA_WIDTH),
--- INT_PACKET_NUM_IN => hub_to_buf_INIT_PACKET_NUM((i+1)*c_NUM_WIDTH-1 downto i*c_NUM_WIDTH),
--- INT_READ_OUT => hub_to_buf_INIT_READ(i),
--- -- "mini" APL, just to see the triggers coming in
--- APL_DTYPE_OUT => TRG_DTYPE_OUT((trg_offset+1)*3-1 downto trg_offset*3),
--- APL_ERROR_PATTERN_OUT => TRG_ERROR_PATTERN_OUT((trg_offset+1)*32-1 downto trg_offset*32),
--- APL_SEQNR_OUT => TRG_SEQNR_OUT((trg_offset+1)*8-1 downto trg_offset*8),
--- APL_GOT_TRM => TRG_GOT_TRIGGER_OUT(trg_offset),
--- APL_RELEASE_TRM => TRG_RELEASE_IN(trg_offset),
--- APL_ERROR_PATTERN_IN => TRG_ERROR_PATTERN_IN((trg_offset+1)*32-1 downto trg_offset*32)
--- -- Status and control port
--- );
--- end generate;
--- end generate;
--rearrange vectors for hub logic
gen_rearrange : for CHANNEL in 0 to 2**(c_MUX_WIDTH-1)-1 generate
- constant api_num : integer := calc_special_number(CHANNEL, API_NUMBER, API_CHANNELS);
- constant trg_num : integer := calc_special_number(CHANNEL, 0, TRG_CHANNELS);
- constant first_point_num : integer := calc_first_point_number(MII_NUMBER, CHANNEL, HUB_CTRL_CHANNELNUM, API_NUMBER, API_CHANNELS, 0, TRG_CHANNELS);
+ constant int_num : integer := calc_special_number(CHANNEL, INT_NUMBER, INT_CHANNELS);
+ constant first_point_num : integer := calc_first_point_number(MII_NUMBER, CHANNEL, HUB_CTRL_CHANNELNUM, INT_NUMBER, INT_CHANNELS);
constant is_ctrl_channel : integer := calc_is_ctrl_channel(CHANNEL, HUB_CTRL_CHANNELNUM);
begin
gen_hublogicsignals1 : for mii in 0 to MII_NUMBER-1 generate
HUB_REPLY_READ_IN (hublogic_num)
<= hub_to_buf_REPLY_READ(buf_to_hub_num);
end generate;
- g5: if api_num /= 0 generate
- gen_hublogicsignals2 : for api in 0 to API_NUMBER-1 generate
- constant hublogic_num : integer := first_point_num + MII_NUMBER + is_ctrl_channel + calc_special_number(CHANNEL, api, API_CHANNELS);
- constant buf_to_hub_num : integer := 2**(c_MUX_WIDTH-1)*MII_NUMBER + 1 + api;
+ g5: if int_num /= 0 generate
+ gen_hublogicsignals2 : for int in 0 to INT_NUMBER-1 generate
+ constant hublogic_num : integer := first_point_num + MII_NUMBER + is_ctrl_channel + calc_special_number(CHANNEL, int, INT_CHANNELS);
+ constant buf_to_hub_num : integer := 2**(c_MUX_WIDTH-1)*MII_NUMBER + 1 + int;
--calc_special_number(CHANNEL, api, API_CHANNELS)
begin
- h1: if API_CHANNELS(api) = CHANNEL generate
+ h1: if INT_CHANNELS(int) = CHANNEL generate
HUB_INIT_DATAREADY_IN (hublogic_num)
<= buf_to_hub_INIT_DATAREADY(buf_to_hub_num);
HUB_INIT_DATA_IN ((hublogic_num+1)*c_DATA_WIDTH-1 downto hublogic_num*c_DATA_WIDTH)
end generate;
end generate;
end generate;
--- g3: if trg_num /= 0 generate
--- gen_hublogicsignals3 : for trg in 0 to TRG_NUMBER-1 generate
--- constant hublogic_num : integer := first_point_num + MII_NUMBER + is_ctrl_channel + calc_special_number(CHANNEL, API_NUMBER, API_CHANNELS) + calc_special_number(CHANNEL, trg, TRG_CHANNELS);
--- constant buf_to_hub_num : integer := 2**(c_MUX_WIDTH-1)*MII_NUMBER + 1 + API_NUMBER + trg;
--- begin
--- h1: if TRG_CHANNELS(trg) = CHANNEL generate
--- HUB_INIT_DATAREADY_IN (hublogic_num)
--- <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num);
--- HUB_INIT_DATA_IN ((hublogic_num+1)*c_DATA_WIDTH-1 downto hublogic_num*c_DATA_WIDTH)
--- <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*c_DATA_WIDTH-1 downto buf_to_hub_num*c_DATA_WIDTH);
--- HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*c_NUM_WIDTH-1 downto hublogic_num*c_NUM_WIDTH)
--- <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*c_NUM_WIDTH-1 downto buf_to_hub_num*c_NUM_WIDTH);
--- buf_to_hub_INIT_READ(buf_to_hub_num)
--- <= HUB_INIT_READ_OUT(hublogic_num);
---
--- hub_to_buf_INIT_DATAREADY(buf_to_hub_num)
--- <= HUB_INIT_DATAREADY_OUT(hublogic_num);
--- hub_to_buf_INIT_DATA((buf_to_hub_num+1)*c_DATA_WIDTH-1 downto buf_to_hub_num*c_DATA_WIDTH)
--- <= HUB_INIT_DATA_OUT((hublogic_num+1)*c_DATA_WIDTH-1 downto hublogic_num*c_DATA_WIDTH);
--- hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*c_NUM_WIDTH-1 downto buf_to_hub_num*c_NUM_WIDTH)
--- <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*c_NUM_WIDTH-1 downto hublogic_num*c_NUM_WIDTH);
--- HUB_INIT_READ_IN (hublogic_num)
--- <= hub_to_buf_INIT_READ(buf_to_hub_num);
---
--- HUB_REPLY_DATAREADY_IN (hublogic_num)
--- <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num);
--- HUB_REPLY_DATA_IN ((hublogic_num+1)*c_DATA_WIDTH-1 downto hublogic_num*c_DATA_WIDTH)
--- <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*c_DATA_WIDTH-1 downto buf_to_hub_num*c_DATA_WIDTH);
--- HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*c_NUM_WIDTH-1 downto hublogic_num*c_NUM_WIDTH)
--- <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*c_NUM_WIDTH-1 downto buf_to_hub_num*c_NUM_WIDTH);
--- buf_to_hub_REPLY_READ(buf_to_hub_num)
--- <= HUB_REPLY_READ_OUT(hublogic_num);
---
--- hub_to_buf_REPLY_DATAREADY(buf_to_hub_num)
--- <= HUB_REPLY_DATAREADY_OUT(hublogic_num);
--- hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*c_DATA_WIDTH-1 downto buf_to_hub_num*c_DATA_WIDTH)
--- <= HUB_REPLY_DATA_OUT((hublogic_num+1)*c_DATA_WIDTH-1 downto hublogic_num*c_DATA_WIDTH);
--- hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*c_NUM_WIDTH-1 downto buf_to_hub_num*c_NUM_WIDTH)
--- <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*c_NUM_WIDTH-1 downto hublogic_num*c_NUM_WIDTH);
--- HUB_REPLY_READ_IN (hublogic_num)
--- <= hub_to_buf_REPLY_READ(buf_to_hub_num);
--- end generate;
--- end generate;
--- end generate;
end generate;
gen_MED_CON : for i in 0 to MII_NUMBER-1 generate
HUB_MED_CONNECTED(i) <= '1';
end if;
end process;
-
end generate;
--generate hub logic
gen_hub_logic: for i in 0 to 2**(c_MUX_WIDTH-1)-1 generate
- constant point_num : integer := calc_point_number (MII_NUMBER, i, HUB_CTRL_CHANNELNUM, API_NUMBER, API_CHANNELS, 0, TRG_CHANNELS);
- constant first_point_num : integer := calc_first_point_number(MII_NUMBER, i, HUB_CTRL_CHANNELNUM, API_NUMBER, API_CHANNELS, 0, TRG_CHANNELS);
+ constant point_num : integer := calc_point_number (MII_NUMBER, i, HUB_CTRL_CHANNELNUM, INT_NUMBER, INT_CHANNELS);
+ constant first_point_num : integer := calc_first_point_number(MII_NUMBER, i, HUB_CTRL_CHANNELNUM, INT_NUMBER, INT_CHANNELS);
constant next_point_num : integer := first_point_num + point_num;
begin
gen_logic : if HUB_USED_CHANNELS(i) = 1 generate
INIT_DATA_OUT => HUB_INIT_DATA_OUT(next_point_num*c_DATA_WIDTH-1 downto first_point_num*c_DATA_WIDTH),
INIT_PACKET_NUM_OUT => HUB_INIT_PACKET_NUM_OUT(next_point_num*c_NUM_WIDTH-1 downto first_point_num*c_NUM_WIDTH),
INIT_READ_IN => HUB_INIT_READ_IN(next_point_num-1 downto first_point_num),
- REPLY_HEADER_OUT => HUB_REPLY_SEND_HEADER_OUT(next_point_num-1 downto first_point_num),
REPLY_DATAREADY_IN => HUB_REPLY_DATAREADY_IN(next_point_num-1 downto first_point_num),
REPLY_DATA_IN => HUB_REPLY_DATA_IN(next_point_num*c_DATA_WIDTH-1 downto first_point_num*c_DATA_WIDTH),
REPLY_PACKET_NUM_IN => HUB_REPLY_PACKET_NUM_IN(next_point_num*c_NUM_WIDTH-1 downto first_point_num*c_NUM_WIDTH),
CTRL => HUB_CTRL_CHANNEL((i+1)*16-1 downto i*16),
CTRL_activepoints => HUB_CTRL_final_activepoints((i+1)*32-1 downto i*32)
);
+ buf_HUB_STAT_CHANNEL((i+1)*16-1 downto i*16) <= (others => '0');
end generate;
end generate;
end generate;
HUB_CTRL_CHANNEL <= HC_CTRL_REGS(160+2**(c_MUX_WIDTH-1)*16-1 downto 160);
-
+ IOBUF_CTRL_GEN <= (others => '0');
--map regio registers to stat & ctrl outputs
STAT_COMMON_STAT_REGS <= HC_COMMON_STAT_REGS;
STAT_COMMON_CTRL_REGS <= HC_COMMON_CTRL_REGS;