]> jspc29.x-matter.uni-frankfurt.de Git - cri.git/commitdiff
generalisation of even and odd downlinks
authorAdrian Weber <adrian.a.weber@exp2.physik.uni-giessen.de>
Wed, 17 Nov 2021 14:47:47 +0000 (15:47 +0100)
committerAdrian Weber <adrian.a.weber@exp2.physik.uni-giessen.de>
Wed, 17 Nov 2021 14:47:47 +0000 (15:47 +0100)
src/hub/trb_net16_cri_hub.vhd

index ce95c26c6836e9ce07bc1c296219cfcd48edf3f0..5d517d37613036da5e15bc0d93aa0bf6f340957b 100644 (file)
@@ -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;