begin
-- connect all links of hub_0
- Hub_0_LINKS: if i = 0 generate
- MED_DATAREADY_OUT((downlinks-1) downto 0) <= med_dataready_out_i;
- MED_DATA_OUT((downlinks*c_DATA_WIDTH)-1 downto 0) <= med_data_out_i;
- MED_PACKET_NUM_OUT((downlinks*3)-1 downto 0 ) <= med_packet_num_out_i;
-
- med_read_in_i <= MED_READ_IN((downlinks-1) downto 0);
-
- med_dataready_in_i <= MED_DATAREADY_IN((downlinks-1) downto 0);
- med_data_in_i <= MED_DATA_IN((downlinks*c_DATA_WIDTH)-1 downto 0);
- med_packet_num_in_i <= MED_PACKET_NUM_IN((downlinks*3)-1 downto 0 );
-
- MED_READ_OUT((downlinks-1) downto 0) <= med_read_out_i;
-
- med_stat_op_i <= MED_STAT_OP((downlinks*16)-1 downto 0);
-
- HUB_MED_CTRL_OP((downlinks*16)-1 downto 0) <= med_ctrl_op_i;
-
- --Data output to uTS generator
- buf_DATA_ACTIVE((downlinks-1) downto 0) <= buf_DATA_ACTIVE_i;
- buf_DATA_OUT((downlinks*2*c_DATA_WIDTH)-1 downto 0) <= buf_DATA_OUT_i;
- buf_DATA_READY((downlinks-1) downto 0) <= buf_DATA_READY_i;
-
- buf_DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH)-1 downto 0) <= buf_DATA_ADDRESS_SENDER_i;
- buf_DATA_SEQNMBR((downlinks*8)-1 downto 0) <= buf_DATA_SEQNMBR_i;
- buf_DATA_LENGTH((downlinks*c_DATA_WIDTH)-1 downto 0) <= buf_DATA_LENGTH_i;
- end generate Hub_0_LINKS;
+-- Hub_0_LINKS: if i = 0 generate
+-- MED_DATAREADY_OUT((downlinks-1) downto 0) <= med_dataready_out_i;
+-- MED_DATA_OUT((downlinks*c_DATA_WIDTH)-1 downto 0) <= med_data_out_i;
+-- MED_PACKET_NUM_OUT((downlinks*3)-1 downto 0 ) <= med_packet_num_out_i;
+--
+-- med_read_in_i <= MED_READ_IN((downlinks-1) downto 0);
+--
+-- med_dataready_in_i <= MED_DATAREADY_IN((downlinks-1) downto 0);
+-- med_data_in_i <= MED_DATA_IN((downlinks*c_DATA_WIDTH)-1 downto 0);
+-- med_packet_num_in_i <= MED_PACKET_NUM_IN((downlinks*3)-1 downto 0 );
+--
+-- MED_READ_OUT((downlinks-1) downto 0) <= med_read_out_i;
+--
+-- med_stat_op_i <= MED_STAT_OP((downlinks*16)-1 downto 0);
+--
+-- HUB_MED_CTRL_OP((downlinks*16)-1 downto 0) <= med_ctrl_op_i;
+--
+-- --Data output to uTS generator
+-- buf_DATA_ACTIVE((downlinks-1) downto 0) <= buf_DATA_ACTIVE_i;
+-- buf_DATA_OUT((downlinks*2*c_DATA_WIDTH)-1 downto 0) <= buf_DATA_OUT_i;
+-- buf_DATA_READY((downlinks-1) downto 0) <= buf_DATA_READY_i;
+--
+-- buf_DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH)-1 downto 0) <= buf_DATA_ADDRESS_SENDER_i;
+-- buf_DATA_SEQNMBR((downlinks*8)-1 downto 0) <= buf_DATA_SEQNMBR_i;
+-- buf_DATA_LENGTH((downlinks*c_DATA_WIDTH)-1 downto 0) <= buf_DATA_LENGTH_i;
+-- end generate Hub_0_LINKS;
--connect links of hub_1: if odd number of downlinks, keep last one open
- EVEN_LINKS: if (i = 1) and (((MII_NUMBER-1) mod 2) = 0) generate
- MED_DATAREADY_OUT((downlinks-1) + downlinks downto downlinks) <= med_dataready_out_i;
- MED_DATA_OUT((downlinks*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH) <= med_data_out_i;
- MED_PACKET_NUM_OUT((downlinks*3)-1 + downlinks*3 downto downlinks*3) <= med_packet_num_out_i;
+ EVEN_LINKS: if not ((i = 1) and (((MII_NUMBER-1) 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;
- med_read_in_i <= MED_READ_IN((downlinks-1) + downlinks downto downlinks);
+ med_read_in_i <= MED_READ_IN((downlinks-1) + i*downlinks downto i*downlinks);
- med_dataready_in_i <= MED_DATAREADY_IN((downlinks-1) + downlinks downto downlinks);
- med_data_in_i <= MED_DATA_IN((downlinks*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH);
- med_packet_num_in_i <= MED_PACKET_NUM_IN((downlinks*3)-1 + downlinks*3 downto downlinks*3);
+ med_dataready_in_i <= MED_DATAREADY_IN((downlinks-1) + i*downlinks downto i*downlinks);
+ med_data_in_i <= MED_DATA_IN((downlinks*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH);
+ med_packet_num_in_i <= MED_PACKET_NUM_IN((downlinks*3)-1 + i*downlinks*3 downto i*downlinks*3);
- MED_READ_OUT((downlinks-1) + downlinks downto downlinks) <= med_read_out_i;
+ MED_READ_OUT((downlinks-1) + i*downlinks downto i*downlinks) <= med_read_out_i;
- med_stat_op_i <= MED_STAT_OP((downlinks*16)-1 + downlinks*16 downto downlinks*16);
+ med_stat_op_i <= MED_STAT_OP((downlinks*16)-1 + i*downlinks*16 downto i*downlinks*16);
- HUB_MED_CTRL_OP((downlinks*16)-1 + downlinks*16 downto downlinks*16) <= med_ctrl_op_i;
+ HUB_MED_CTRL_OP((downlinks*16)-1 + i*downlinks*16 downto i*downlinks*16) <= med_ctrl_op_i;
--Data output to uTS generator
- buf_DATA_ACTIVE((downlinks-1) + downlinks downto downlinks) <= buf_DATA_ACTIVE_i;
- buf_DATA_OUT((downlinks*2*c_DATA_WIDTH)-1 + downlinks*2*c_DATA_WIDTH downto downlinks*2*c_DATA_WIDTH) <= buf_DATA_OUT_i;
- buf_DATA_READY((downlinks-1) + downlinks downto downlinks) <= buf_DATA_READY_i;
+ buf_DATA_ACTIVE((downlinks-1) + i*downlinks downto i*downlinks) <= buf_DATA_ACTIVE_i;
+ buf_DATA_OUT((downlinks*2*c_DATA_WIDTH)-1 + i*downlinks*2*c_DATA_WIDTH downto i*downlinks*2*c_DATA_WIDTH) <= buf_DATA_OUT_i;
+ buf_DATA_READY((downlinks-1) + i*downlinks downto i*downlinks) <= buf_DATA_READY_i;
- buf_DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH) <= buf_DATA_ADDRESS_SENDER_i;
- buf_DATA_SEQNMBR((downlinks*8)-1 + downlinks*8 downto downlinks*8) <= buf_DATA_SEQNMBR_i;
- buf_DATA_LENGTH((downlinks*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH) <= buf_DATA_LENGTH_i;
+ buf_DATA_ADDRESS_SENDER((downlinks*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH) <= buf_DATA_ADDRESS_SENDER_i;
+ buf_DATA_SEQNMBR((downlinks*8)-1 + i*downlinks*8 downto i*downlinks*8) <= buf_DATA_SEQNMBR_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
- MED_DATAREADY_OUT((downlinks-2) + downlinks downto downlinks) <= med_dataready_out_i((downlinks-2) downto 0);
- MED_DATA_OUT(((downlinks-1)*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH) <= med_data_out_i(((downlinks-1)*c_DATA_WIDTH-1) downto 0);
- MED_PACKET_NUM_OUT(((downlinks-1)*3)-1 + downlinks*3 downto downlinks*3) <= med_packet_num_out_i(((downlinks-1)*3-1) downto 0);
+ 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);
- med_read_in_i((downlinks-2) downto 0) <= MED_READ_IN((downlinks-2) + downlinks downto downlinks);
+ med_read_in_i((downlinks-2) downto 0) <= MED_READ_IN((downlinks-2) + i*downlinks downto i*downlinks);
med_read_in_i(downlinks-1) <= '0';
- med_dataready_in_i((downlinks-2) downto 0) <= MED_DATAREADY_IN((downlinks-2) + downlinks downto downlinks);
+ med_dataready_in_i((downlinks-2) downto 0) <= MED_DATAREADY_IN((downlinks-2) + i*downlinks downto i*downlinks);
med_dataready_in_i(downlinks-1) <= '0';
- med_data_in_i(((downlinks-1)*c_DATA_WIDTH-1) downto 0) <= MED_DATA_IN(((downlinks-1)*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH);
+ med_data_in_i(((downlinks-1)*c_DATA_WIDTH-1) downto 0) <= MED_DATA_IN(((downlinks-1)*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH);
med_data_in_i(((downlinks)*c_DATA_WIDTH-1) downto ((downlinks-1)*c_DATA_WIDTH)) <= (others => '0');
- med_packet_num_in_i(((downlinks-1)*3-1) downto 0) <= MED_PACKET_NUM_IN(((downlinks-1)*3)-1 + downlinks*3 downto downlinks*3);
+ med_packet_num_in_i(((downlinks-1)*3-1) downto 0) <= MED_PACKET_NUM_IN(((downlinks-1)*3)-1 + i*downlinks*3 downto i*downlinks*3);
med_packet_num_in_i(((downlinks)*3-1) downto ((downlinks-1)*3)) <= (others => '0');
- MED_READ_OUT((downlinks-2) + downlinks downto downlinks) <= med_read_out_i((downlinks-2) downto 0);
+ MED_READ_OUT((downlinks-2) + i*downlinks downto i*downlinks) <= med_read_out_i((downlinks-2) downto 0);
- med_stat_op_i(((downlinks-1)*16-1) downto 0) <= MED_STAT_OP(((downlinks-1)*16)-1 + downlinks*16 downto downlinks*16);
+ med_stat_op_i(((downlinks-1)*16-1) downto 0) <= MED_STAT_OP(((downlinks-1)*16)-1 + i*downlinks*16 downto i*downlinks*16);
med_stat_op_i(((downlinks)*16-1) downto ((downlinks-1)*16)+3) <= (others => '0');
med_stat_op_i((downlinks-1)*16+2 downto ((downlinks-1)*16)) <= (others => '1'); -- ERROR_NC -> not connected for hub
- HUB_MED_CTRL_OP(((downlinks-1)*16)-1 + downlinks*16 downto downlinks*16) <= med_ctrl_op_i(((downlinks-1)*16-1) downto 0);
+ HUB_MED_CTRL_OP(((downlinks-1)*16)-1 + i*downlinks*16 downto i*downlinks*16) <= med_ctrl_op_i(((downlinks-1)*16-1) downto 0);
--Data output to uTS generator
- buf_DATA_ACTIVE((downlinks-2) + downlinks downto downlinks) <= buf_DATA_ACTIVE_i((downlinks-2) downto 0);
- buf_DATA_OUT(((downlinks-1)*2*c_DATA_WIDTH)-1 + downlinks*2*c_DATA_WIDTH downto downlinks*2*c_DATA_WIDTH) <= buf_DATA_OUT_i(((downlinks-1)*2*c_DATA_WIDTH)-1 downto 0);
- buf_DATA_READY((downlinks-2) + downlinks downto downlinks) <= buf_DATA_READY_i((downlinks-2) downto 0);
+ buf_DATA_ACTIVE((downlinks-2) + i*downlinks downto i*downlinks) <= buf_DATA_ACTIVE_i((downlinks-2) downto 0);
+ buf_DATA_OUT(((downlinks-1)*2*c_DATA_WIDTH)-1 + i*downlinks*2*c_DATA_WIDTH downto i*downlinks*2*c_DATA_WIDTH) <= buf_DATA_OUT_i(((downlinks-1)*2*c_DATA_WIDTH)-1 downto 0);
+ buf_DATA_READY((downlinks-2) + i*downlinks downto i*downlinks) <= buf_DATA_READY_i((downlinks-2) downto 0);
- buf_DATA_ADDRESS_SENDER(((downlinks-1)*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH) <= buf_DATA_ADDRESS_SENDER_i(((downlinks-1)*c_DATA_WIDTH)-1 downto 0);
- buf_DATA_SEQNMBR(((downlinks-1)*8)-1 + downlinks*8 downto downlinks*8) <= buf_DATA_SEQNMBR_i(((downlinks-1)*8)-1 downto 0);
- buf_DATA_LENGTH(((downlinks-1)*c_DATA_WIDTH)-1 + downlinks*c_DATA_WIDTH downto downlinks*c_DATA_WIDTH) <= buf_DATA_LENGTH_i(((downlinks-1)*c_DATA_WIDTH)-1 downto 0);
+ buf_DATA_ADDRESS_SENDER(((downlinks-1)*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH) <= buf_DATA_ADDRESS_SENDER_i(((downlinks-1)*c_DATA_WIDTH)-1 downto 0);
+ buf_DATA_SEQNMBR(((downlinks-1)*8)-1 + i*downlinks*8 downto i*downlinks*8) <= buf_DATA_SEQNMBR_i(((downlinks-1)*8)-1 downto 0);
+ buf_DATA_LENGTH(((downlinks-1)*c_DATA_WIDTH)-1 + i*downlinks*c_DATA_WIDTH downto i*downlinks*c_DATA_WIDTH) <= buf_DATA_LENGTH_i(((downlinks-1)*c_DATA_WIDTH)-1 downto 0);
end generate ODD_LINKS;