From ab3368138e8a75c861d69681261802d2d706b326 Mon Sep 17 00:00:00 2001 From: Adrian Weber Date: Wed, 17 Nov 2021 15:47:47 +0100 Subject: [PATCH] generalisation of even and odd downlinks --- src/hub/trb_net16_cri_hub.vhd | 118 +++++++++++++++++----------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/src/hub/trb_net16_cri_hub.vhd b/src/hub/trb_net16_cri_hub.vhd index ce95c26..5d517d3 100644 --- a/src/hub/trb_net16_cri_hub.vhd +++ b/src/hub/trb_net16_cri_hub.vhd @@ -350,94 +350,94 @@ gen_data_hubs : for i in 0 to 1 generate --For now fixed to 1 (2 hubs), could be 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; -- 2.43.0