use work.trb_net_std.all;
use work.trb_net_components.all;
use work.trb_net16_hub_func.all;
+use work.cri_hub_func.all;
--take care of USE_INPUT_SBUF for multiplexer!
INT_NUMBER : integer range 0 to c_MAX_API_PER_HUB := 0;
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;
- HUB_CONTROLLER_NUM : integer range 2 to 5 := 2
+ RESET_IOBUF_AT_TIMEOUT : integer range 0 to 1 := c_NO--;
+ --HUB_CONTROLLER_NUM : integer range 2 to 5 := 5
);
port (
CLK : in std_logic;
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-1 downto 0);
- DATA_OUT : out std_logic_vector((MII_NUMBER*(2*c_DATA_WIDTH))-1 downto 0);
- DATA_READY : out std_logic_vector(MII_NUMBER-1 downto 0);
+ DATA_ACTIVE : out std_logic_vector(MII_NUMBER-2 downto 0);
+ DATA_OUT : out std_logic_vector((MII_NUMBER*(2*c_DATA_WIDTH))-2 downto 0);
+ DATA_READY : out std_logic_vector(MII_NUMBER-2 downto 0);
- DATA_ADDRESS_SENDER : out std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-1 downto 0);
- DATA_SEQNMBR : out std_logic_vector((MII_NUMBER*8)-1 downto 0);
- DATA_LENGTH : out std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-1 downto 0);
+ DATA_ADDRESS_SENDER : out std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-2 downto 0);
+ DATA_SEQNMBR : out std_logic_vector((MII_NUMBER*8)-2 downto 0);
+ DATA_LENGTH : out std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-2 downto 0);
--ONEWIRE
architecture trb_net16_cri_hub_arch of trb_net16_cri_hub is
- 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 (calc_number_config_hub_ports(MII_NUMBER)-2 downto 0);
+ signal int_med_data_out : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*16-1 downto 0);
+ signal int_med_packet_num_out : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*3-1 downto 0);
+ signal int_med_read_in : std_logic_vector (calc_number_config_hub_ports(MII_NUMBER)-2 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 (calc_number_config_hub_ports(MII_NUMBER)-2 downto 0);
+ signal int_med_data_in : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*16-1 downto 0);
+ signal int_med_packet_num_in : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*3-1 downto 0);
+ signal int_med_read_out : std_logic_vector (calc_number_config_hub_ports(MII_NUMBER)-2 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 ((calc_number_config_hub_ports(MII_NUMBER)-1)*16-1 downto 0);
+ signal int_med_ctrl_op : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*16-1 downto 0);
signal bus_hub_dbg_0_rx, bus_hub_dbg_1_rx : CTRLBUS_RX;
signal bus_hub_dbg_0_tx, bus_hub_dbg_1_tx : CTRLBUS_TX;
- signal loc_stat_op_1 : std_logic_vector (15 downto 0);
- signal loc_ctrl_op_1 : std_logic_vector (15 downto 0);
+ signal loc_stat_op : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*16-1 downto 0);
+ signal loc_ctrl_op : std_logic_vector ((calc_number_config_hub_ports(MII_NUMBER)-1)*16-1 downto 0);
- signal buf_DATA_ACTIVE : std_logic_vector(MII_NUMBER-1 downto 0);
- signal buf_DATA_OUT : std_logic_vector((MII_NUMBER*(2*c_DATA_WIDTH))-1 downto 0);
- signal buf_DATA_READY : std_logic_vector(MII_NUMBER-1 downto 0);
+ signal buf_DATA_ACTIVE : std_logic_vector(MII_NUMBER-2 downto 0);
+ signal buf_DATA_OUT : std_logic_vector((MII_NUMBER*(2*c_DATA_WIDTH))-2 downto 0);
+ signal buf_DATA_READY : std_logic_vector(MII_NUMBER-2 downto 0);
- signal buf_DATA_ADDRESS_SENDER : std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-1 downto 0);
- signal buf_DATA_SEQNMBR : std_logic_vector((MII_NUMBER*8)-1 downto 0);
- signal buf_DATA_LENGTH : std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-1 downto 0);
+ signal buf_DATA_ADDRESS_SENDER : std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-2 downto 0);
+ signal buf_DATA_SEQNMBR : std_logic_vector((MII_NUMBER*8)-2 downto 0);
+ signal buf_DATA_LENGTH : std_logic_vector((MII_NUMBER*c_DATA_WIDTH)-2 downto 0);
-- Debug
signal datardy_cnt_ret : std_logic_vector (15 downto 0);
begin
+ gen_unused_signals : if 1 =1 generate
+ constant HUB_CONTROLLER_NUM : integer := calc_number_config_hub_ports(MII_NUMBER);
+ 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 => (0,1,0,0,0,0,0,0,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), -- adjust to HUB_CONTROLLER_NUM (here it is for 5)
- MII_IS_DOWNLINK => (1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),--(1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0),
- MII_IS_UPLINK_ONLY => (0,1,0,0,0,0,0,0,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),
+ MII_IS_UPLINK => calc_uplink_number(HUB_CONTROLLER_NUM-1), --(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),--(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 => x"0001",
+ INIT_ENDPOINT_ID => x"0000",
CLOCK_FREQUENCY => CLOCK_FREQUENCY,
BROADCAST_SPECIAL_ADDR => BROADCAST_SPECIAL_ADDR,
COMPILE_TIME => COMPILE_TIME,
BUS_HUB_DBG_RX => bus_hub_dbg_0_rx,
BUS_HUB_DBG_TX => bus_hub_dbg_0_tx
);
-
+ end generate;
+
+gen_data_hubs : for i in 0 to calc_number_data_hubs(MII_NUMBER)-1 generate --MII_NUMBER = Down- and Uplinks
+ constant links : integer := calc_ports_data_hub(MII_NUMBER,i)+1;
+ constant downlinks : integer := calc_ports_data_hub(MII_NUMBER,i);
+ begin
THE_HUB_1 : entity work.trb_net16_cri_hub_base
generic map(
HUB_USED_CHANNELS => (0,1,0,1),
INIT_ADDRESS => INIT_ADDRESS,
- MII_NUMBER => MII_NUMBER,
+ MII_NUMBER => links,
MII_IS_UPLINK => MII_IS_UPLINK,
MII_IS_DOWNLINK => MII_IS_DOWNLINK,
MII_IS_UPLINK_ONLY => MII_IS_UPLINK_ONLY,
--USE_ONEWIRE => c_YES,
HARDWARE_VERSION => HARDWARE_VERSION,
INCLUDED_FEATURES => INCLUDED_FEATURES,
- INIT_ENDPOINT_ID => x"0002",
+ INIT_ENDPOINT_ID => std_logic_vector(to_unsigned(i+1,16)),
CLOCK_FREQUENCY => CLOCK_FREQUENCY,
BROADCAST_SPECIAL_ADDR => BROADCAST_SPECIAL_ADDR,
COMPILE_TIME => COMPILE_TIME,
CLK_EN => '1',
--Media interfacces
- MED_DATAREADY_OUT(MII_NUMBER-2 downto 0) => MED_DATAREADY_OUT(MII_NUMBER-2 downto 0),
- MED_DATAREADY_OUT(MII_NUMBER-1) => int_med_dataready_in(0),
+ MED_DATAREADY_OUT(links-2 downto 0) => MED_DATAREADY_OUT((downlinks-1)+i*12 downto i*12),
+ MED_DATAREADY_OUT(links-1) => int_med_dataready_in(i),
- MED_DATA_OUT((MII_NUMBER-1)*16-1 downto 0) => MED_DATA_OUT((MII_NUMBER-1)*16-1 downto 0),
- MED_DATA_OUT(MII_NUMBER*16-1 downto (MII_NUMBER-1)*16) => int_med_data_in(15 downto 0),
+ MED_DATA_OUT((links-1)*16-1 downto 0) => MED_DATA_OUT((downlinks*16)-1+i*12*16 downto i*12*16),
+ MED_DATA_OUT(links*16-1 downto (links-1)*16) => int_med_data_in(i*16+15 downto i*16),
- MED_PACKET_NUM_OUT((MII_NUMBER-1)*3-1 downto 0) => MED_PACKET_NUM_OUT((MII_NUMBER-1)*3-1 downto 0),
- MED_PACKET_NUM_OUT(MII_NUMBER*3-1 downto (MII_NUMBER-1)*3) => int_med_packet_num_in(2 downto 0),
+ MED_PACKET_NUM_OUT((links-1)*3-1 downto 0) => MED_PACKET_NUM_OUT((downlinks*3)-1+i*12*3 downto i*12*3),
+ 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((MII_NUMBER-1)*1-1 downto 0) => MED_READ_IN((MII_NUMBER-1)*1-1 downto 0),
- MED_READ_IN(MII_NUMBER-1) => int_med_read_out(0),
+ MED_READ_IN((links-1)*1-1 downto 0) => MED_READ_IN((downlinks-1)+i*12 downto i*12),
+ MED_READ_IN(links-1) => int_med_read_out(i),
- MED_DATAREADY_IN((MII_NUMBER-1)*1-1 downto 0) => MED_DATAREADY_IN((MII_NUMBER-1)*1-1 downto 0),
- MED_DATAREADY_IN(MII_NUMBER-1) => int_med_dataready_out(0),
+ MED_DATAREADY_IN((links-1)*1-1 downto 0) => MED_DATAREADY_IN((downlinks-1)+i*12 downto i*12),
+ MED_DATAREADY_IN(links-1) => int_med_dataready_out(i),
- MED_DATA_IN((MII_NUMBER-1)*16-1 downto 0) => MED_DATA_IN((MII_NUMBER-1)*16-1 downto 0),
- MED_DATA_IN((MII_NUMBER)*16-1 downto (MII_NUMBER-1)*16) => int_med_data_out(15 downto 0),
+ MED_DATA_IN((links-1)*16-1 downto 0) => MED_DATA_IN((downlinks*16)-1+i*12*16 downto i*12*16),
+ MED_DATA_IN((links)*16-1 downto (links-1)*16) => int_med_data_out(i*16+15 downto i*16),
- MED_PACKET_NUM_IN((MII_NUMBER-1)*3-1 downto 0) => MED_PACKET_NUM_IN((MII_NUMBER-1)*3-1 downto 0),
- MED_PACKET_NUM_IN((MII_NUMBER)*3-1 downto (MII_NUMBER-1)*3) => int_med_packet_num_out(2 downto 0),
+ MED_PACKET_NUM_IN((links-1)*3-1 downto 0) => MED_PACKET_NUM_IN((downlinks*3)-1+i*12*3 downto i*12*3),
+ 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((MII_NUMBER-1)*1-1 downto 0) => MED_READ_OUT((MII_NUMBER-1)*1-1 downto 0),
- MED_READ_OUT(MII_NUMBER-1) => int_med_read_in(0),
+ MED_READ_OUT((links-1)*1-1 downto 0) => MED_READ_OUT((downlinks-1)+i*12 downto i*12),
+ MED_READ_OUT(links-1) => int_med_read_in(i),
- MED_STAT_OP((MII_NUMBER-1)*16-1 downto 0) => MED_STAT_OP((MII_NUMBER-1)*16-1 downto 0),
- MED_STAT_OP((MII_NUMBER)*16-1 downto (MII_NUMBER-1)*16) => loc_stat_op_1, --input
+ MED_STAT_OP((links-1)*16-1 downto 0) => MED_STAT_OP((downlinks*16)-1+i*12*16 downto i*12*16),
+ MED_STAT_OP((links)*16-1 downto (links-1)*16) => loc_stat_op(i*16+15 downto i*16), --input
- MED_CTRL_OP((MII_NUMBER-1)*16-1 downto 0) => MED_CTRL_OP((MII_NUMBER-1)*16-1 downto 0),
- MED_CTRL_OP((MII_NUMBER)*16-1 downto (MII_NUMBER-1)*16) => loc_ctrl_op_1, --output
+ MED_CTRL_OP((links-1)*16-1 downto 0) => MED_CTRL_OP((downlinks*16)-1+i*12*16 downto i*12*16),
+ MED_CTRL_OP((links)*16-1 downto (links-1)*16) => loc_ctrl_op(i*16+15 downto i*16), --output
- DATA_ACTIVE => buf_DATA_ACTIVE,
- DATA_OUT => buf_DATA_OUT,
- DATA_READY => buf_DATA_READY,
+ DATA_ACTIVE((downlinks-1) downto 0) => buf_DATA_ACTIVE((downlinks-1)+i*12 downto i*12),
+ DATA_OUT((downlinks*(2*c_DATA_WIDTH)-1) downto 0) => buf_DATA_OUT((downlinks*(2*c_DATA_WIDTH)-1)+i*12*(2*c_DATA_WIDTH) downto i*12*(2*c_DATA_WIDTH)),
+ DATA_READY((downlinks-1) downto 0) => buf_DATA_READY((downlinks-1)+i*12 downto i*12),
- DATA_ADDRESS_SENDER => buf_DATA_ADDRESS_SENDER,
- DATA_SEQNMBR => buf_DATA_SEQNMBR,
- DATA_LENGTH => buf_DATA_LENGTH,
+ DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH-1) downto 0) => buf_DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH-1)+i*12*c_DATA_WIDTH downto i*12*c_DATA_WIDTH),
+ DATA_SEQNMBR((downlinks*8-1) downto 0) => buf_DATA_SEQNMBR((downlinks*8-1)+i*12*8 downto i*12*8),
+ DATA_LENGTH((downlinks*c_DATA_WIDTH-1) downto 0) => buf_DATA_LENGTH((downlinks*c_DATA_WIDTH-1)+i*12*c_DATA_WIDTH downto i*12*c_DATA_WIDTH),
ONEWIRE_DATA => ONEWIRE_DATA,
ONEWIRE_ADDR => ONEWIRE_ADDR,
BUS_HUB_DBG_TX => bus_hub_dbg_1_tx
);
+-- int_med_dataready_in(3 downto 1) <= (others => '0');
+-- int_med_data_in(63 downto 16) <= (others => '0');
+-- int_med_packet_num_in(11 downto 3) <= (others => '0');
+-- int_med_read_in(3 downto 1) <= (others => '0');
+ end generate;
THE_Event_Cntr : process begin
wait until rising_edge(CLK);
--end if;
end if;
end process;
-
-loc_stat_op_1 <= int_med_ctrl_op(15) & "000" & x"000";--7
-int_med_stat_op <= loc_ctrl_op_1(15) & "000" & x"000"; --7
+
+ 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
+
+-- gen_med_controls : for i in 1 to HUB_CONTROLLER_NUM-2 generate
+-- loc_stat_op((i+1)*16-1 downto i*16) <= int_med_ctrl_op(i*16+15) & "000" & x"007";--7
+-- int_med_stat_op((i+1)*16-1 downto i*16) <= loc_ctrl_op(i*16+15) & "000" & x"007"; --7
+-- end generate;
DATA_ACTIVE <= buf_DATA_ACTIVE;
DATA_OUT <= buf_DATA_OUT;