INT_NUMBER : integer range 0 to c_MAX_API_PER_HUB := 1;
INT_CHANNELS : hub_api_config_t := (others => 3);
INT_IBUF_DEPTH : hub_api_config_t := (others => 6);
- RESET_IOBUF_AT_TIMEOUT : integer range 0 to 1 := c_NO--;
+ RESET_IOBUF_AT_TIMEOUT : integer range 0 to 1 := c_NO;
+ USE_UPLINK : integer range 0 to 1 := c_YES
--HUB_CONTROLLER_NUM : integer range 2 to 5 := 5
);
port (
MED_CTRL_OP : out std_logic_vector (MII_NUMBER*16-1 downto 0);
--Received Data from connected boards
- DATA_ACTIVE : out std_logic_vector(MII_NUMBER-2 downto 0);
- DATA_OUT : out std_logic_vector(((MII_NUMBER-1)*(2*c_DATA_WIDTH))-1 downto 0);
- DATA_READY : out std_logic_vector(MII_NUMBER-2 downto 0);
+ DATA_ACTIVE : out std_logic_vector(MII_NUMBER-USE_UPLINK-1 downto 0);
+ DATA_OUT : out std_logic_vector(((MII_NUMBER-USE_UPLINK)*(2*c_DATA_WIDTH))-1 downto 0);
+ DATA_READY : out std_logic_vector(MII_NUMBER-USE_UPLINK-1 downto 0);
- DATA_ADDRESS_SENDER : out std_logic_vector(((MII_NUMBER-1)*c_DATA_WIDTH)-1 downto 0);
- DATA_SEQNMBR : out std_logic_vector(((MII_NUMBER-1)*8)-1 downto 0);
- DATA_LENGTH : out std_logic_vector(((MII_NUMBER-1)*c_DATA_WIDTH)-1 downto 0);
+ DATA_ADDRESS_SENDER : out std_logic_vector(((MII_NUMBER-USE_UPLINK)*c_DATA_WIDTH)-1 downto 0);
+ DATA_SEQNMBR : out std_logic_vector(((MII_NUMBER-USE_UPLINK)*8)-1 downto 0);
+ DATA_LENGTH : out std_logic_vector(((MII_NUMBER-USE_UPLINK)*c_DATA_WIDTH)-1 downto 0);
--ONEWIRE
architecture trb_net16_cri_hub_arch of trb_net16_cri_hub is
- constant HUB_CONTROLLER_NUM : integer := 3;--calc_number_config_hub_ports(MII_NUMBER);
+ constant HUB_CONTROLLER_NUM : integer := 2 + USE_UPLINK;--calc_number_config_hub_ports(MII_NUMBER);
signal hub_init_dataready_out : std_logic_vector( INT_NUMBER downto 0);
signal hub_reply_dataready_out : std_logic_vector( INT_NUMBER downto 0);
signal hub_init_dataready_in : std_logic_vector( INT_NUMBER downto 0);
signal hub_init_packet_num_in : std_logic_vector( INT_NUMBER*c_NUM_WIDTH downto 0);
signal hub_reply_packet_num_in : std_logic_vector( INT_NUMBER*c_NUM_WIDTH downto 0);
- signal int_med_dataready_out : std_logic_vector (HUB_CONTROLLER_NUM-2 downto 0);
- signal int_med_data_out : std_logic_vector ((HUB_CONTROLLER_NUM-1)*16-1 downto 0);
- signal int_med_packet_num_out : std_logic_vector ((HUB_CONTROLLER_NUM-1)*3-1 downto 0);
- signal int_med_read_in : std_logic_vector (HUB_CONTROLLER_NUM-2 downto 0);
+ signal int_med_dataready_out : std_logic_vector (HUB_CONTROLLER_NUM-USE_UPLINK-1 downto 0);
+ signal int_med_data_out : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*16-1 downto 0);
+ signal int_med_packet_num_out : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*3-1 downto 0);
+ signal int_med_read_in : std_logic_vector (HUB_CONTROLLER_NUM-USE_UPLINK-1 downto 0);
- signal int_med_dataready_in : std_logic_vector (HUB_CONTROLLER_NUM-2 downto 0);
- signal int_med_data_in : std_logic_vector ((HUB_CONTROLLER_NUM-1)*16-1 downto 0);
- signal int_med_packet_num_in : std_logic_vector ((HUB_CONTROLLER_NUM-1)*3-1 downto 0);
- signal int_med_read_out : std_logic_vector (HUB_CONTROLLER_NUM-2 downto 0);
+ signal int_med_dataready_in : std_logic_vector (HUB_CONTROLLER_NUM-USE_UPLINK-1 downto 0);
+ signal int_med_data_in : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*16-1 downto 0);
+ signal int_med_packet_num_in : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*3-1 downto 0);
+ signal int_med_read_out : std_logic_vector (HUB_CONTROLLER_NUM-USE_UPLINK-1 downto 0);
- signal int_med_stat_op : std_logic_vector ((HUB_CONTROLLER_NUM-1)*16-1 downto 0);
- signal int_med_ctrl_op : std_logic_vector ((HUB_CONTROLLER_NUM-1)*16-1 downto 0);
+ signal int_med_stat_op : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*16-1 downto 0);
+ signal int_med_ctrl_op : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*16-1 downto 0);
- signal bus_hub_dbg_rx_i : ctrlbus_rx_array_t(0 to HUB_CONTROLLER_NUM-1);--calc_number_data_hubs(MII_NUMBER));
- signal bus_hub_dbg_tx_i : ctrlbus_tx_array_t(0 to HUB_CONTROLLER_NUM-1);--calc_number_data_hubs(MII_NUMBER));
+ signal bus_hub_dbg_rx_i : ctrlbus_rx_array_t(0 to HUB_CONTROLLER_NUM-USE_UPLINK);--calc_number_data_hubs(MII_NUMBER));
+ signal bus_hub_dbg_tx_i : ctrlbus_tx_array_t(0 to HUB_CONTROLLER_NUM-USE_UPLINK);--calc_number_data_hubs(MII_NUMBER));
+
+ signal loc_stat_op : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*16-1 downto 0);
+ signal loc_ctrl_op : std_logic_vector ((HUB_CONTROLLER_NUM-USE_UPLINK)*16-1 downto 0);
+
+ signal buf_DATA_ACTIVE : std_logic_vector(MII_NUMBER-USE_UPLINK-1 downto 0);
+ signal buf_DATA_OUT : std_logic_vector(((MII_NUMBER-USE_UPLINK)*(2*c_DATA_WIDTH))-1 downto 0);
+ signal buf_DATA_READY : std_logic_vector(MII_NUMBER-USE_UPLINK-1 downto 0);
+
+ signal buf_DATA_ADDRESS_SENDER : std_logic_vector(((MII_NUMBER-USE_UPLINK)*c_DATA_WIDTH)-1 downto 0);
+ signal buf_DATA_SEQNMBR : std_logic_vector(((MII_NUMBER-USE_UPLINK)*8)-1 downto 0);
+ signal buf_DATA_LENGTH : std_logic_vector(((MII_NUMBER-USE_UPLINK)*c_DATA_WIDTH)-1 downto 0);
- signal loc_stat_op : std_logic_vector ((HUB_CONTROLLER_NUM-1)*16-1 downto 0);
- signal loc_ctrl_op : std_logic_vector ((HUB_CONTROLLER_NUM-1)*16-1 downto 0);
-
- signal buf_DATA_ACTIVE : std_logic_vector(MII_NUMBER-2 downto 0);
- signal buf_DATA_OUT : std_logic_vector(((MII_NUMBER-1)*(2*c_DATA_WIDTH))-1 downto 0);
- signal buf_DATA_READY : std_logic_vector(MII_NUMBER-2 downto 0);
-
- signal buf_DATA_ADDRESS_SENDER : std_logic_vector(((MII_NUMBER-1)*c_DATA_WIDTH)-1 downto 0);
- signal buf_DATA_SEQNMBR : std_logic_vector(((MII_NUMBER-1)*8)-1 downto 0);
- signal buf_DATA_LENGTH : std_logic_vector(((MII_NUMBER-1)*c_DATA_WIDTH)-1 downto 0);
-
-- Debug
signal datardy_cnt_ret : std_logic_vector (15 downto 0);
signal datardy_cnt_int : std_logic_vector (15 downto 0);
-
+
--external reset_all_sync
signal hub_make_network_reset : std_logic;
signal external_send_reset_long : std_logic;
signal external_send_reset_timer : std_logic;
- signal timer_ticks : std_logic_vector(1 downto 0);
-
+ signal timer_ticks : std_logic_vector(1 downto 0);
+
signal HUB_MED_CTRL_OP : std_logic_vector(MII_NUMBER*16-1 downto 0);
signal buf_HUB_STAT_GEN : std_logic_vector (31 downto 0);
-
- constant MAX_HUB_SIZE : integer := (MII_NUMBER-1)/2;
+
+-- constant MAX_HUB_SIZE : integer := (MII_NUMBER-1)/2;
begin
- gen_hubController : if 1 = 1 generate
+ gen_CONTROL_HUB_WITH_UPLINK : if USE_UPLINK = c_YES generate
begin
THE_HUB_CONTROLLER : entity work.trb_net16_cri_hub_base
generic map(
HUB_USED_CHANNELS => (0,0,0,1),
INIT_ADDRESS => INIT_ADDRESS,
MII_NUMBER => HUB_CONTROLLER_NUM,
- MII_IS_UPLINK => calc_uplink_number(HUB_CONTROLLER_NUM-1,INT_NUMBER), --(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),--(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),-- -- adjust to HUB_CONTROLLER_NUM (here it is for 5)
- MII_IS_DOWNLINK => calc_downlink_number(HUB_CONTROLLER_NUM-1),--(1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--
- MII_IS_UPLINK_ONLY => calc_uplink_only_number(HUB_CONTROLLER_NUM-1,INT_NUMBER),--(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),--(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--
+ MII_IS_UPLINK => calc_uplink_number(HUB_CONTROLLER_NUM-1,INT_NUMBER,USE_UPLINK), --(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),--(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),-- -- adjust to HUB_CONTROLLER_NUM (here it is for 5)
+ MII_IS_DOWNLINK => calc_downlink_number(HUB_CONTROLLER_NUM-1,USE_UPLINK),--(1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--
+ MII_IS_UPLINK_ONLY => calc_uplink_only_number(HUB_CONTROLLER_NUM-1,INT_NUMBER,USE_UPLINK),--(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),--(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--
--USE_ONEWIRE => c_YES,
HARDWARE_VERSION => HARDWARE_VERSION,
INCLUDED_FEATURES => INCLUDED_FEATURES,
--Media interfacces
MED_DATAREADY_OUT(HUB_CONTROLLER_NUM-2 downto 0) => int_med_dataready_out, -- internal Downlinks to other hubs
MED_DATAREADY_OUT(HUB_CONTROLLER_NUM-1) => MED_DATAREADY_OUT(MII_NUMBER-1),--Uplink
-
+
MED_DATA_OUT((HUB_CONTROLLER_NUM-1)*16-1 downto 0) => int_med_data_out,
MED_DATA_OUT((HUB_CONTROLLER_NUM)*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => MED_DATA_OUT(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
-
+
MED_PACKET_NUM_OUT((HUB_CONTROLLER_NUM-1)*3-1 downto 0) => int_med_packet_num_out,
MED_PACKET_NUM_OUT(HUB_CONTROLLER_NUM*3-1 downto (HUB_CONTROLLER_NUM-1)*3) => MED_PACKET_NUM_OUT(MII_NUMBER*3-1 downto (MII_NUMBER-1)*3),
-
+
MED_READ_IN(HUB_CONTROLLER_NUM-2 downto 0) => int_med_read_in,
MED_READ_IN(HUB_CONTROLLER_NUM-1) => MED_READ_IN(MII_NUMBER-1),
- ----------
+ ----------
MED_DATAREADY_IN(HUB_CONTROLLER_NUM-2 downto 0) => int_med_dataready_in,
MED_DATAREADY_IN(HUB_CONTROLLER_NUM-1) => MED_DATAREADY_IN(MII_NUMBER-1),
-
+
MED_DATA_IN((HUB_CONTROLLER_NUM-1)*16-1 downto 0) => int_med_data_in,
MED_DATA_IN((HUB_CONTROLLER_NUM)*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => MED_DATA_IN(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
-
+
MED_PACKET_NUM_IN((HUB_CONTROLLER_NUM-1)*3-1 downto 0) => int_med_packet_num_in,
MED_PACKET_NUM_IN(HUB_CONTROLLER_NUM*3-1 downto (HUB_CONTROLLER_NUM-1)*3) => MED_PACKET_NUM_IN(MII_NUMBER*3-1 downto (MII_NUMBER-1)*3),
-
+
MED_READ_OUT(HUB_CONTROLLER_NUM-2 downto 0) => int_med_read_out,
MED_READ_OUT(HUB_CONTROLLER_NUM-1) => MED_READ_OUT(MII_NUMBER-1),
----------
MED_STAT_OP((HUB_CONTROLLER_NUM-1)*16-1 downto 0) => int_med_stat_op,
MED_STAT_OP(HUB_CONTROLLER_NUM*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => med_stat_op(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
-
+
MED_CTRL_OP((HUB_CONTROLLER_NUM-1)*16-1 downto 0) => int_med_ctrl_op,
MED_CTRL_OP(HUB_CONTROLLER_NUM*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => HUB_MED_CTRL_OP(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
-
- ONEWIRE_DATA => ONEWIRE_DATA,
- ONEWIRE_ADDR => ONEWIRE_ADDR,
+
+ ONEWIRE_DATA => ONEWIRE_DATA,
+ ONEWIRE_ADDR => ONEWIRE_ADDR,
+ ONEWIRE_WRITE => ONEWIRE_WRITE,
+
+ --INT: interfaces to connect DCA slow control (or also other API)
+ INT_INIT_DATAREADY_OUT => hub_init_dataready_out,
+ INT_INIT_DATA_OUT => hub_init_data_out,
+ INT_INIT_PACKET_NUM_OUT => hub_init_packet_num_out,
+ INT_INIT_READ_IN => hub_init_read_in,
+ INT_INIT_DATAREADY_IN => hub_init_dataready_in,
+ INT_INIT_DATA_IN => hub_init_data_in,
+ INT_INIT_PACKET_NUM_IN => hub_init_packet_num_in,
+ INT_INIT_READ_OUT => hub_init_read_out,
+
+ INT_REPLY_DATAREADY_OUT => hub_reply_dataready_out,
+ INT_REPLY_DATA_OUT => hub_reply_data_out,
+ INT_REPLY_PACKET_NUM_OUT => hub_reply_packet_num_out,
+ INT_REPLY_READ_IN => hub_reply_read_in,
+ INT_REPLY_DATAREADY_IN => hub_reply_dataready_in,
+ INT_REPLY_DATA_IN => hub_reply_data_in,
+ INT_REPLY_PACKET_NUM_IN => hub_reply_packet_num_in,
+ INT_REPLY_READ_OUT => hub_reply_read_out,
+
+ COMMON_STAT_REGS => (others => '0'),--open,--common_stat_reg,
+ COMMON_CTRL_REGS => COMMON_CTRL_REGS,
+ MY_ADDRESS_OUT => open,--my_address,
+ TEMPERATURE_IN => TEMPERATURE_IN,
+
+ --REGIO INTERFACE
+ REGIO_ADDR_OUT => REGIO_ADDR_OUT,
+ REGIO_READ_ENABLE_OUT => REGIO_READ_ENABLE_OUT,
+ REGIO_WRITE_ENABLE_OUT => REGIO_WRITE_ENABLE_OUT,
+ REGIO_DATA_OUT => REGIO_DATA_OUT,
+ REGIO_DATA_IN => REGIO_DATA_IN,
+ REGIO_DATAREADY_IN => REGIO_DATAREADY_IN,
+ REGIO_NO_MORE_DATA_IN => REGIO_NO_MORE_DATA_IN,
+ REGIO_WRITE_ACK_IN => REGIO_WRITE_ACK_IN,
+ REGIO_UNKNOWN_ADDR_IN => REGIO_UNKNOWN_ADDR_IN,
+ REGIO_TIMEOUT_OUT => REGIO_TIMEOUT_OUT,
+
+ TIMER_TICKS_OUT => timer_ticks,
+
+ --ONEWIRE => TEMPSENS,
+ --ONEWIRE_MONITOR_OUT => open,
+ --Status ports (for debugging)
+
+ HUB_STAT_GEN => buf_HUB_STAT_GEN,
+
+ MPLEX_CTRL => (others => '0'),
+ CTRL_DEBUG( 2 downto 0) => "111",
+ CTRL_DEBUG(31 downto 3) => (others => '0'),
+ STAT_DEBUG => open,
+
+ BUS_HUB_DBG_RX => bus_hub_dbg_rx_i(0),
+ BUS_HUB_DBG_TX => bus_hub_dbg_tx_i(0)
+ );
+ end generate gen_CONTROL_HUB_WITH_UPLINK;
+
+
+ gen_CONTROL_HUB_WITHOUT_UPLINK : if USE_UPLINK = c_NO generate
+ begin
+ THE_HUB_CONTROLLER : entity work.trb_net16_cri_hub_base
+ generic map(
+ HUB_USED_CHANNELS => (0,0,0,1),
+ INIT_ADDRESS => INIT_ADDRESS,
+ MII_NUMBER => HUB_CONTROLLER_NUM,
+ MII_IS_UPLINK => calc_uplink_number(HUB_CONTROLLER_NUM-1,INT_NUMBER,0), --(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),--(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),-- -- adjust to HUB_CONTROLLER_NUM (here it is for 5)
+ MII_IS_DOWNLINK => calc_downlink_number(HUB_CONTROLLER_NUM-1,0),--(1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--
+ MII_IS_UPLINK_ONLY => calc_uplink_only_number(HUB_CONTROLLER_NUM-1,INT_NUMBER,0),--(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),--(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--
+ --USE_ONEWIRE => c_YES,
+ HARDWARE_VERSION => HARDWARE_VERSION,
+ INCLUDED_FEATURES => INCLUDED_FEATURES,
+ INIT_ENDPOINT_ID => INIT_ENDPOINT_ID,
+ CLOCK_FREQUENCY => CLOCK_FREQUENCY,
+ BROADCAST_SPECIAL_ADDR => BROADCAST_SPECIAL_ADDR,
+ COMPILE_TIME => COMPILE_TIME,
+ USE_VAR_ENDPOINT_ID => c_NO,
+ INT_NUMBER => INT_NUMBER
+ )
+ port map (
+ CLK => CLK,
+ RESET => RESET,
+ CLK_EN => '1',
+
+ --Media interfacces
+ MED_DATAREADY_OUT(HUB_CONTROLLER_NUM-1 downto 0) => int_med_dataready_out, -- internal Downlinks to other hubs
+ --MED_DATAREADY_OUT(HUB_CONTROLLER_NUM-1) => MED_DATAREADY_OUT(MII_NUMBER-1),--Uplink
+
+ MED_DATA_OUT((HUB_CONTROLLER_NUM)*16-1 downto 0) => int_med_data_out,
+ --MED_DATA_OUT((HUB_CONTROLLER_NUM)*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => MED_DATA_OUT(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
+
+ MED_PACKET_NUM_OUT((HUB_CONTROLLER_NUM)*3-1 downto 0) => int_med_packet_num_out,
+ --MED_PACKET_NUM_OUT(HUB_CONTROLLER_NUM*3-1 downto (HUB_CONTROLLER_NUM-1)*3) => MED_PACKET_NUM_OUT(MII_NUMBER*3-1 downto (MII_NUMBER-1)*3),
+
+ MED_READ_IN(HUB_CONTROLLER_NUM-1 downto 0) => int_med_read_in,
+ --MED_READ_IN(HUB_CONTROLLER_NUM-1) => MED_READ_IN(MII_NUMBER-1),
+ ----------
+ MED_DATAREADY_IN(HUB_CONTROLLER_NUM-1 downto 0) => int_med_dataready_in,
+ --MED_DATAREADY_IN(HUB_CONTROLLER_NUM-1) => MED_DATAREADY_IN(MII_NUMBER-1),
+
+ MED_DATA_IN((HUB_CONTROLLER_NUM)*16-1 downto 0) => int_med_data_in,
+ --MED_DATA_IN((HUB_CONTROLLER_NUM)*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => MED_DATA_IN(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
+
+ MED_PACKET_NUM_IN((HUB_CONTROLLER_NUM)*3-1 downto 0) => int_med_packet_num_in,
+ --MED_PACKET_NUM_IN(HUB_CONTROLLER_NUM*3-1 downto (HUB_CONTROLLER_NUM-1)*3) => MED_PACKET_NUM_IN(MII_NUMBER*3-1 downto (MII_NUMBER-1)*3),
+
+ MED_READ_OUT(HUB_CONTROLLER_NUM-1 downto 0) => int_med_read_out,
+ --MED_READ_OUT(HUB_CONTROLLER_NUM-1) => MED_READ_OUT(MII_NUMBER-1),
+ ----------
+ MED_STAT_OP((HUB_CONTROLLER_NUM)*16-1 downto 0) => int_med_stat_op,
+ --MED_STAT_OP(HUB_CONTROLLER_NUM*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => med_stat_op(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
+
+ MED_CTRL_OP((HUB_CONTROLLER_NUM)*16-1 downto 0) => int_med_ctrl_op,
+ --MED_CTRL_OP(HUB_CONTROLLER_NUM*16-1 downto (HUB_CONTROLLER_NUM-1)*16) => HUB_MED_CTRL_OP(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16),
+
+ ONEWIRE_DATA => ONEWIRE_DATA,
+ ONEWIRE_ADDR => ONEWIRE_ADDR,
ONEWIRE_WRITE => ONEWIRE_WRITE,
-
+
--INT: interfaces to connect DCA slow control (or also other API)
INT_INIT_DATAREADY_OUT => hub_init_dataready_out,
INT_INIT_DATA_OUT => hub_init_data_out,
INT_INIT_DATA_IN => hub_init_data_in,
INT_INIT_PACKET_NUM_IN => hub_init_packet_num_in,
INT_INIT_READ_OUT => hub_init_read_out,
-
+
INT_REPLY_DATAREADY_OUT => hub_reply_dataready_out,
INT_REPLY_DATA_OUT => hub_reply_data_out,
INT_REPLY_PACKET_NUM_OUT => hub_reply_packet_num_out,
INT_REPLY_DATA_IN => hub_reply_data_in,
INT_REPLY_PACKET_NUM_IN => hub_reply_packet_num_in,
INT_REPLY_READ_OUT => hub_reply_read_out,
-
+
COMMON_STAT_REGS => (others => '0'),--open,--common_stat_reg,
- COMMON_CTRL_REGS => COMMON_CTRL_REGS,
+ COMMON_CTRL_REGS => COMMON_CTRL_REGS,
MY_ADDRESS_OUT => open,--my_address,
TEMPERATURE_IN => TEMPERATURE_IN,
-
+
--REGIO INTERFACE
REGIO_ADDR_OUT => REGIO_ADDR_OUT,
REGIO_READ_ENABLE_OUT => REGIO_READ_ENABLE_OUT,
REGIO_WRITE_ENABLE_OUT => REGIO_WRITE_ENABLE_OUT,
- REGIO_DATA_OUT => REGIO_DATA_OUT,
- REGIO_DATA_IN => REGIO_DATA_IN,
- REGIO_DATAREADY_IN => REGIO_DATAREADY_IN,
- REGIO_NO_MORE_DATA_IN => REGIO_NO_MORE_DATA_IN,
- REGIO_WRITE_ACK_IN => REGIO_WRITE_ACK_IN,
- REGIO_UNKNOWN_ADDR_IN => REGIO_UNKNOWN_ADDR_IN,
+ REGIO_DATA_OUT => REGIO_DATA_OUT,
+ REGIO_DATA_IN => REGIO_DATA_IN,
+ REGIO_DATAREADY_IN => REGIO_DATAREADY_IN,
+ REGIO_NO_MORE_DATA_IN => REGIO_NO_MORE_DATA_IN,
+ REGIO_WRITE_ACK_IN => REGIO_WRITE_ACK_IN,
+ REGIO_UNKNOWN_ADDR_IN => REGIO_UNKNOWN_ADDR_IN,
REGIO_TIMEOUT_OUT => REGIO_TIMEOUT_OUT,
-
+
TIMER_TICKS_OUT => timer_ticks,
-
+
--ONEWIRE => TEMPSENS,
--ONEWIRE_MONITOR_OUT => open,
--Status ports (for debugging)
-
+
HUB_STAT_GEN => buf_HUB_STAT_GEN,
-
+
MPLEX_CTRL => (others => '0'),
CTRL_DEBUG( 2 downto 0) => "111",
CTRL_DEBUG(31 downto 3) => (others => '0'),
STAT_DEBUG => open,
-
+
BUS_HUB_DBG_RX => bus_hub_dbg_rx_i(0),
BUS_HUB_DBG_TX => bus_hub_dbg_tx_i(0)
);
- end generate;
+ end generate gen_CONTROL_HUB_WITHOUT_UPLINK;
gen_data_hubs : for i in 0 to 1 generate --For now fixed to 1 (2 hubs), could be set to HUB_CONTROLLER_NUM-2 with additional corrections
- constant links : integer := (((MII_NUMBER-1) / 2) + ((MII_NUMBER-1) mod 2) + 1);
- constant downlinks : integer := (((MII_NUMBER-1) / 2) + ((MII_NUMBER-1) mod 2));
+ constant links : integer := (((MII_NUMBER-USE_UPLINK) / 2) + ((MII_NUMBER-USE_UPLINK) mod 2) + 1);
+ constant downlinks : integer := (((MII_NUMBER-USE_UPLINK) / 2) + ((MII_NUMBER-USE_UPLINK) mod 2));
signal data_active_unused : std_logic;
signal data_out_unused : std_logic_vector(2*c_DATA_WIDTH-1 downto 0);
-- end generate Hub_0_LINKS;
--connect links of hub_1: if odd number of downlinks, keep last one open
- EVEN_LINKS: if not ((i = 1) and (((MII_NUMBER-1) mod 2) = 1)) generate
+ EVEN_LINKS: if not ((i = 1) and (((MII_NUMBER-USE_UPLINK) mod 2) = 1)) generate
MED_DATAREADY_OUT((downlinks-1) + i*downlinks downto i*downlinks) <= med_dataready_out_i;
MED_DATA_OUT((downlinks*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH) <= med_data_out_i;
MED_PACKET_NUM_OUT((downlinks*3)-1 + i*downlinks*3 downto i*downlinks*3) <= med_packet_num_out_i;
buf_DATA_LENGTH((downlinks*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH) <= buf_DATA_LENGTH_i;
end generate EVEN_LINKS;
- ODD_LINKS: if (i = 1) and (((MII_NUMBER-1) mod 2) = 1) generate
+ ODD_LINKS: if (i = 1) and (((MII_NUMBER-USE_UPLINK) mod 2) = 1) generate
MED_DATAREADY_OUT((downlinks-2) + i*downlinks downto i*downlinks) <= med_dataready_out_i((downlinks-2) downto 0);
MED_DATA_OUT(((downlinks-1)*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH) <= med_data_out_i(((downlinks-1)*c_DATA_WIDTH-1) downto 0);
MED_PACKET_NUM_OUT(((downlinks-1)*3)-1 + i*downlinks*3 downto i*downlinks*3) <= med_packet_num_out_i(((downlinks-1)*3-1) downto 0);
HUB_USED_CHANNELS => (0,1,0,1),
INIT_ADDRESS => INIT_ADDRESS,
MII_NUMBER => links,
- MII_IS_UPLINK => calc_uplink_number(downlinks,0),
- MII_IS_DOWNLINK => calc_downlink_number(downlinks),
- MII_IS_UPLINK_ONLY => calc_uplink_number(downlinks,0),
+ MII_IS_UPLINK => calc_uplink_number(downlinks,0,c_YES),
+ MII_IS_DOWNLINK => calc_downlink_number(downlinks,c_YES),
+ MII_IS_UPLINK_ONLY => calc_uplink_number(downlinks,0,c_YES),
--USE_ONEWIRE => c_YES,
HARDWARE_VERSION => HARDWARE_VERSION,
INCLUDED_FEATURES => INCLUDED_FEATURES,
--Media interfacces
MED_DATAREADY_OUT(links-2 downto 0) => med_dataready_out_i,
MED_DATAREADY_OUT(links-1) => int_med_dataready_in(i),
-
+
MED_DATA_OUT((links-1)*16-1 downto 0) => med_data_out_i,
MED_DATA_OUT(links*16-1 downto (links-1)*16) => int_med_data_in(i*16+15 downto i*16),
-
+
MED_PACKET_NUM_OUT((links-1)*3-1 downto 0) => med_packet_num_out_i,
MED_PACKET_NUM_OUT(links*3-1 downto (links-1)*3) => int_med_packet_num_in(i*3+2 downto i*3),
-
+
MED_READ_IN((links-1)*1-1 downto 0) => med_read_in_i,
MED_READ_IN(links-1) => int_med_read_out(i),
-
+
MED_DATAREADY_IN((links-1)*1-1 downto 0) => med_dataready_in_i,
MED_DATAREADY_IN(links-1) => int_med_dataready_out(i),
-
+
MED_DATA_IN((links-1)*16-1 downto 0) => med_data_in_i,
MED_DATA_IN((links)*16-1 downto (links-1)*16) => int_med_data_out(i*16+15 downto i*16),
-
+
MED_PACKET_NUM_IN((links-1)*3-1 downto 0) => med_packet_num_in_i,
MED_PACKET_NUM_IN((links)*3-1 downto (links-1)*3) => int_med_packet_num_out(i*3+2 downto i*3),
-
+
MED_READ_OUT((links-1)*1-1 downto 0) => med_read_out_i,
MED_READ_OUT(links-1) => int_med_read_in(i),
-
+
MED_STAT_OP((links-1)*16-1 downto 0) => med_stat_op_i,
MED_STAT_OP((links)*16-1 downto (links-1)*16) => loc_stat_op(i*16+15 downto i*16), --input
-
+
MED_CTRL_OP((links-1)*16-1 downto 0) => med_ctrl_op_i,
MED_CTRL_OP((links)*16-1 downto (links-1)*16) => loc_ctrl_op(i*16+15 downto i*16), --output
DATA_OUT((downlinks*(2*c_DATA_WIDTH)-1) downto 0) => buf_DATA_OUT_i,
DATA_READY(links-1) => data_ready_unused,
DATA_READY((downlinks-1) downto 0) => buf_DATA_READY_i,
-
+
DATA_ADDRESS_SENDER(links*c_DATA_WIDTH-1 downto downlinks*c_DATA_WIDTH) => data_address_sender_unused,
DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH-1) downto 0) => buf_DATA_ADDRESS_SENDER_i,
DATA_SEQNMBR(links*8-1 downto downlinks*8) => data_seqnmbr_unused,
DATA_SEQNMBR((downlinks*8-1) downto 0) => buf_DATA_SEQNMBR_i,
DATA_LENGTH(links*c_DATA_WIDTH-1 downto downlinks*c_DATA_WIDTH) => data_length_unused,
DATA_LENGTH((downlinks*c_DATA_WIDTH-1) downto 0) => buf_DATA_LENGTH_i,
-
- ONEWIRE_DATA => ONEWIRE_DATA,
- ONEWIRE_ADDR => ONEWIRE_ADDR,
+
+ ONEWIRE_DATA => ONEWIRE_DATA,
+ ONEWIRE_ADDR => ONEWIRE_ADDR,
ONEWIRE_WRITE => ONEWIRE_WRITE,
-
+
COMMON_STAT_REGS => (others => '0'),--open,--common_stat_reg,
COMMON_CTRL_REGS => open,--common_ctrl_reg,
MY_ADDRESS_OUT => open,--my_address,
TEMPERATURE_IN => TEMPERATURE_IN,
-
-
+
+
--REGIO INTERFACE
REGIO_ADDR_OUT => open,--ctrlbus_rx.addr,
REGIO_READ_ENABLE_OUT => open,--ctrlbus_rx.read,
REGIO_WRITE_ACK_IN => '0',--wrack,
REGIO_UNKNOWN_ADDR_IN => '0',--ctrlbus_tx.unknown,
REGIO_TIMEOUT_OUT => open,--ctrlbus_rx.timeout,
-
+
--ONEWIRE => TEMPSENS,
--ONEWIRE_MONITOR_OUT => open,
--Status ports (for debugging)
MPLEX_CTRL => (others => '0'),
CTRL_DEBUG => (others => '0'),
STAT_DEBUG => open,
-
+
BUS_HUB_DBG_RX => bus_hub_dbg_rx_i(i + 1),
BUS_HUB_DBG_TX => bus_hub_dbg_tx_i(i + 1)
- );
+ );
-- int_med_dataready_in(3 downto 1) <= (others => '0');
-- int_med_data_in(63 downto 16) <= (others => '0');
---------------------------------------------------------------------
-- External Reset
---------------------------------------------------------------------
+ gen_WITH_UPLINK : if USE_UPLINK = c_YES generate
+ gen_resync : for i in 0 to MII_NUMBER-2 generate
+ MED_CTRL_OP(14+i*16 downto i*16) <= HUB_MED_CTRL_OP(14+i*16 downto i*16);
+ MED_CTRL_OP(15+i*16) <= HUB_MED_CTRL_OP(15+i*16) or hub_make_network_reset or med_stat_op(15+(MII_NUMBER-1)*16);
+ end generate;
+ MED_CTRL_OP(15+(MII_NUMBER-1)*16) <= hub_make_network_reset; -- Uplink
+ end generate GEN_WITH_UPLINK;
+
+ gen_WITHOUT_UPLINK : if USE_UPLINK = c_NO generate
+ gen_resync : for i in 0 to MII_NUMBER-1 generate
+ MED_CTRL_OP(14+i*16 downto i*16) <= HUB_MED_CTRL_OP(14+i*16 downto i*16);
+ MED_CTRL_OP(15+i*16) <= HUB_MED_CTRL_OP(15+i*16) or hub_make_network_reset;
+ end generate;
+ end generate gen_WITHOUT_UPLINK;
- gen_resync : for i in 0 to MII_NUMBER-2 generate
- MED_CTRL_OP(14+i*16 downto i*16) <= HUB_MED_CTRL_OP(14+i*16 downto i*16);
- MED_CTRL_OP(15+i*16) <= HUB_MED_CTRL_OP(15+i*16) or hub_make_network_reset or med_stat_op(15+(MII_NUMBER-1)*16);
- end generate;
- MED_CTRL_OP(15+(MII_NUMBER-1)*16) <= hub_make_network_reset;
--synch_dca_reset : process begin
-- wait until rising_edge(CLK);
hub_make_network_reset <= external_send_reset_long;
---------------------------------------------------------------------
-- Med Control handling
---------------------------------------------------------------------
- loc_stat_op(15 downto 0) <= int_med_ctrl_op(15) & "000" & x"000";--7
- int_med_stat_op(15 downto 0) <= loc_ctrl_op(15) & "000" & x"000"; --7
+--TODO: Use it in both hubs!!
+ gen_med_stst_ctrl : for i in 0 to 1 generate
+ loc_stat_op(15 + i*16 downto i*16) <= int_med_ctrl_op(15 + i*16) & "000" & x"000";--7
+ int_med_stat_op(15 + i*16 downto i*16) <= loc_ctrl_op(15 + i*16) & "000" & x"000"; --7
+ end generate gen_med_stst_ctrl;
---------------------------------------------------------------------
-- Data output preparation