]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
new hub version, Jan
authorhadeshyp <hadeshyp>
Thu, 22 Nov 2007 13:32:22 +0000 (13:32 +0000)
committerhadeshyp <hadeshyp>
Thu, 22 Nov 2007 13:32:22 +0000 (13:32 +0000)
trb_net16_hub_base.vhd
trb_net16_hub_func.vhd [new file with mode: 0644]
trb_net16_hub_logic.vhd
trb_net_std.vhd

index e59541c13296245224200800e9d582fb62d1f363..f27bf80d6b7802f7733d70978f40bd27591d3dda 100644 (file)
@@ -1,9 +1,10 @@
 LIBRARY IEEE;
 USE IEEE.std_logic_1164.ALL;
-USE IEEE.std_logic_UNSIGNED.ALL;
 USE IEEE.numeric_std.ALL;
+USE IEEE.std_logic_UNSIGNED.ALL;
 
 use work.trb_net_std.all;
+use work.trb_net16_hub_func.all;
 
 
 entity trb_net16_hub_base is
@@ -16,20 +17,51 @@ entity trb_net16_hub_base is
     NUM_WIDTH               : integer range 2 to 2 := 2;
   --media interfaces
     MII_NUMBER              : integer range 2 to 16 := 2;
-    MII_INIT_DEPTH          : std_logic_vector(MII_NUMBER*2**(MUX_WIDTH-1)*4-1 downto 0) := x"66110000";
-    MII_REPLY_DEPTH         : std_logic_vector(MII_NUMBER*2**(MUX_WIDTH-1)*4-1 downto 0) := x"66110000";
+--each row is one media interface and each column is one channel. starting with 0,0, ending with 15,15
+    MII_INIT_DEPTH    : hub_iobuf_config_t := (1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                               1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                               1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1);
+    MII_REPLY_DEPTH   : hub_iobuf_config_t := (1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                               6,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                               6,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
+                                               0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1);
   -- settings for apis
     API_NUMBER              : integer range 0 to 16 := 1;
-    API_CHANNELS            : bit_vector(API_NUMBER*4-1 downto 0) := x"3";
+    API_CHANNELS            : hub_api_config_t := (3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3);
                                 --channel, each api is connected to
-    API_TYPE                : bit_vector(API_NUMBER*4-1 downto 0) := x"1";
-    API_INIT_DEPTH          : bit_vector(API_NUMBER*4-1 downto 0) := x"1";
-    API_REPLY_DEPTH         : bit_vector(API_NUMBER*4-1 downto 0) := x"1";
-    API_FIFO_TO_INT_DEPTH   : bit_vector(API_NUMBER*4-1 downto 0) := x"1";
-    API_FIFO_TO_APL_DEPTH   : bit_vector(API_NUMBER*4-1 downto 0) := x"1";
+    API_TYPE                : hub_api_config_t := (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+    API_INIT_DEPTH          : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+    API_REPLY_DEPTH         : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+    API_FIFO_TO_INT_DEPTH   : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
+    API_FIFO_TO_APL_DEPTH   : hub_api_config_t := (1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
   --trigger reading interfaces
     TRG_NUMBER              : integer range 0 to 16 := 1;
-    TRG_CHANNELS            : bit_vector(TRG_NUMBER*4-1 downto 0) := x"0"
+    TRG_CHANNELS            : hub_api_config_t := (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
     );
   port (
     CLK    : in std_logic;
@@ -73,58 +105,76 @@ entity trb_net16_hub_base is
     TRG_ERROR_PATTERN_IN  : in  std_logic_vector (TRG_NUMBER*32 downto 0);
     TRG_RELEASE_IN        : in  std_logic_vector (TRG_NUMBER downto 0);
     --Status ports (for debugging)
-    HUB_STAT_CHANNEL   : out std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0);
-    HUB_STAT_GEN       : out std_logic_vector (31 downto 0);
-    HUB_CTRL_CHANNEL   : in  std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0);
-    HUB_CTRL_activepoints     : in  std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0);
-    HUB_CTRL_GEN       : in  std_logic_vector (31 downto 0);
-    MPLEX_CTRL         : in  std_logic_vector (MII_NUMBER*32-1 downto 0);
-    MPLEX_STAT         : out std_logic_vector (MII_NUMBER*32-1 downto 0);
-    IOBUF_STAT_GEN     : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_STAT_LOCKED  : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_STAT_INIT_BUFFER       : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_STAT_REPLY_BUFFER      : out std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_CTRL_GEN               : in  std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_CTRL_LOCKED            : in  std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_STAT_CTRL_INIT_BUFFER  : in  std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0);
-    IOBUF_STAT_CTRL_REPLY_BUFFER : in  std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*32-1 downto 0)
+    HUB_STAT_CHANNEL             : out std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0);
+    HUB_STAT_GEN                 : out std_logic_vector (31 downto 0);
+    HUB_CTRL_CHANNEL             : in  std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0);
+    HUB_CTRL_activepoints        : in  std_logic_vector (2**(MUX_WIDTH-1)*32-1 downto 0);
+    HUB_CTRL_GEN                 : in  std_logic_vector (31 downto 0);
+    MPLEX_CTRL                   : in  std_logic_vector (MII_NUMBER*32-1 downto 0);
+    MPLEX_STAT                   : out std_logic_vector (MII_NUMBER*32-1 downto 0);
+    IOBUF_STAT_GEN               : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_STAT_LOCKED            : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_STAT_INIT_BUFFER       : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_STAT_REPLY_BUFFER      : out std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_CTRL_GEN               : in  std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_CTRL_LOCKED            : in  std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_STAT_CTRL_INIT_BUFFER  : in  std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0);
+    IOBUF_STAT_CTRL_REPLY_BUFFER : in  std_logic_vector ((MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER)*32-1 downto 0)
     );
 end entity;
 
 architecture trb_net16_hub_base_arch of trb_net16_hub_base is
+  constant total_point_num : integer := MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER + TRG_NUMBER;
+  signal m_DATAREADY_OUT : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0);
+  signal m_DATA_OUT      : std_logic_vector (total_point_num*DATA_WIDTH*2**MUX_WIDTH-1 downto 0);
+  signal m_PACKET_NUM_OUT: std_logic_vector (total_point_num*NUM_WIDTH*2**MUX_WIDTH-1 downto 0);
+  signal m_READ_IN       : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0);
+  signal m_DATAREADY_IN  : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0);
+  signal m_DATA_IN       : std_logic_vector (total_point_num*DATA_WIDTH*2**MUX_WIDTH-1 downto 0);
+  signal m_PACKET_NUM_IN : std_logic_vector (total_point_num*NUM_WIDTH*2**MUX_WIDTH-1 downto 0);
+  signal m_READ_OUT      : std_logic_vector (total_point_num*2**MUX_WIDTH-1 downto 0);
+  signal m_ERROR_IN      : std_logic_vector (total_point_num*3*2**MUX_WIDTH-1 downto 0);
 
-  signal m_DATAREADY_OUT : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0);
-  signal m_DATA_OUT      : std_logic_vector (MII_NUMBER*DATA_WIDTH*2**MUX_WIDTH-1 downto 0);
-  signal m_PACKET_NUM_OUT: std_logic_vector (MII_NUMBER*NUM_WIDTH*2**MUX_WIDTH-1 downto 0);
-  signal m_READ_IN       : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0);
-  signal m_DATAREADY_IN  : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0);
-  signal m_DATA_IN       : std_logic_vector (MII_NUMBER*DATA_WIDTH*2**MUX_WIDTH-1 downto 0);
-  signal m_PACKET_NUM_IN : std_logic_vector (MII_NUMBER*NUM_WIDTH*2**MUX_WIDTH-1 downto 0);
-  signal m_READ_OUT      : std_logic_vector (MII_NUMBER*2**MUX_WIDTH-1 downto 0);
-  signal m_ERROR_IN      : std_logic_vector (MII_NUMBER*3*2**MUX_WIDTH-1 downto 0);
+  signal hub_to_buf_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal hub_to_buf_INIT_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal hub_to_buf_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal hub_to_buf_INIT_READ     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
 
-  signal hub_to_buf_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  signal hub_to_buf_INIT_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0);
-  signal hub_to_buf_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0);
-  signal hub_to_buf_INIT_READ     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
+  signal buf_to_hub_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal buf_to_hub_INIT_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal buf_to_hub_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal buf_to_hub_INIT_READ     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
 
-  signal buf_to_hub_INIT_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  signal buf_to_hub_INIT_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0);
-  signal buf_to_hub_INIT_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0);
-  signal buf_to_hub_INIT_READ     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-
-  signal hub_to_buf_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  signal hub_to_buf_REPLY_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0);
-  signal hub_to_buf_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0);
-  signal hub_to_buf_REPLY_READ     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  signal hub_to_buf_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  
-  signal buf_to_hub_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  signal buf_to_hub_REPLY_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*DATA_WIDTH-1 downto 0);
-  signal buf_to_hub_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER*NUM_WIDTH-1 downto 0);
-  signal buf_to_hub_REPLY_READ     : std_logic_vector (2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
-  signal buf_to_hub_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*MII_NUMBER-1 downto 0);
+  signal hub_to_buf_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal hub_to_buf_REPLY_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal hub_to_buf_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal hub_to_buf_REPLY_READ     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal hub_to_buf_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
   
+  signal buf_to_hub_REPLY_DATAREADY: std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal buf_to_hub_REPLY_DATA     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal buf_to_hub_REPLY_PACKET_NUM:std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal buf_to_hub_REPLY_READ     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal buf_to_hub_REPLY_SEND_HEADER : std_logic_vector(2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+
+  signal HUB_INIT_DATAREADY_OUT    : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_INIT_DATA_OUT         : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal HUB_INIT_PACKET_NUM_OUT   : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal HUB_INIT_READ_IN          : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_INIT_DATAREADY_IN     : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_INIT_DATA_IN          : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal HUB_INIT_PACKET_NUM_IN    : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal HUB_INIT_READ_OUT         : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_REPLY_DATAREADY_OUT   : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_REPLY_DATA_OUT        : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal HUB_REPLY_PACKET_NUM_OUT  : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal HUB_REPLY_READ_IN         : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_REPLY_DATAREADY_IN    : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_REPLY_DATA_IN         : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*DATA_WIDTH-1 downto 0);
+  signal HUB_REPLY_PACKET_NUM_IN   : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num*NUM_WIDTH-1 downto 0);
+  signal HUB_REPLY_READ_OUT        : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+  signal HUB_REPLY_SEND_HEADER_OUT : std_logic_vector (2**(MUX_WIDTH-1)*total_point_num-1 downto 0);
+
   component trb_net16_hub_logic is
   generic (
   --media interfaces
@@ -359,11 +409,11 @@ begin
   end generate;
 
 --generate IOBufs for MII
-  gen_iobufs: for i in 0 to 2**(MUX_WIDTH-1)*MII_NUMBER-1 generate
+  gen_iobufs: for i in 0 to total_point_num-1 generate
     IOBUF: trb_net16_iobuf
       generic map (
-        INIT_DEPTH =>  1, --conv_integer(MII_INIT_DEPTH((i+1)*4-1 downto i*4)),
-        REPLY_DEPTH => 1 --conv_integer(MII_REPLY_DEPTH((i+1)*4-1 downto i*4))
+        INIT_DEPTH =>  calc_depth(i,MII_INIT_DEPTH, API_INIT_DEPTH, MII_NUMBER, API_NUMBER, MUX_WIDTH),
+        REPLY_DEPTH => calc_depth(i,MII_REPLY_DEPTH, API_REPLY_DEPTH, MII_NUMBER, API_NUMBER, MUX_WIDTH)
         )
       port map (
         --  Misc
@@ -427,12 +477,152 @@ begin
         STAT_CTRL_REPLY_BUFFER => IOBUF_STAT_CTRL_REPLY_BUFFER((i+1)*32-1 downto i*32)
         );
   end generate;
+
+--rearrange vectors for hub logic
+  gen_rearrange : for CHANNEL in 0 to 2**(MUX_WIDTH-1)-1 generate
+    constant api_num         : integer := calc_special_number(CHANNEL, API_NUMBER, API_CHANNELS);
+    constant trg_num         : integer := calc_special_number(CHANNEL, TRG_NUMBER, TRG_CHANNELS);
+    constant first_point_num : integer := calc_first_point_number(MII_NUMBER, CHANNEL, API_NUMBER, API_CHANNELS, TRG_NUMBER, TRG_CHANNELS);
+  begin
+    gen_hublogicsignals1 : for mii in 0 to MII_NUMBER-1 generate
+      constant buf_to_hub_num : integer := mii*2**(MUX_WIDTH-1)+CHANNEL;
+      constant hublogic_num   : integer := first_point_num + mii;
+    begin
+      HUB_INIT_DATAREADY_IN (hublogic_num)
+                                <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num);
+      HUB_INIT_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16)
+                                <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16);
+      HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2)
+                                <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2);
+      buf_to_hub_INIT_READ(buf_to_hub_num)
+                                <= HUB_INIT_READ_OUT(hublogic_num);
+
+      hub_to_buf_INIT_DATAREADY(buf_to_hub_num)
+                                <= HUB_INIT_DATAREADY_OUT(hublogic_num);
+      hub_to_buf_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16)
+                                <= HUB_INIT_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16);
+      hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2)
+                                <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2);
+      HUB_INIT_READ_IN (hublogic_num)
+                                <= hub_to_buf_INIT_READ(buf_to_hub_num);
+
+      HUB_REPLY_DATAREADY_IN (hublogic_num)
+                                <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num);
+      HUB_REPLY_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16)
+                                <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16);
+      HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2)
+                                <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2);
+      buf_to_hub_REPLY_READ(buf_to_hub_num)
+                                <= HUB_REPLY_READ_OUT(hublogic_num);
+
+      hub_to_buf_REPLY_DATAREADY(buf_to_hub_num)
+                                <= HUB_REPLY_DATAREADY_OUT(hublogic_num);
+      hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16)
+                                <= HUB_REPLY_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16);
+      hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2)
+                                <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2);
+      HUB_REPLY_READ_IN (hublogic_num)
+                                <= hub_to_buf_REPLY_READ(buf_to_hub_num);
+    end generate;
+    
+    gen_hublogicsignals2 : for api in 0 to api_num-1 generate
+      constant hublogic_num   : integer := first_point_num + 2**(MUX_WIDTH-1) + calc_special_number(CHANNEL, api, API_CHANNELS);
+      constant buf_to_hub_num : integer := 2**(MUX_WIDTH-1)*MII_NUMBER + calc_special_number(CHANNEL, api, API_CHANNELS);
+    begin
+      h1: if API_CHANNELS(api) = CHANNEL generate
+        HUB_INIT_DATAREADY_IN (hublogic_num)
+                                  <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num);
+        HUB_INIT_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16)
+                                  <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16);
+        HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2)
+                                  <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2);
+        buf_to_hub_INIT_READ(buf_to_hub_num)
+                                  <= HUB_INIT_READ_OUT(hublogic_num);
+  
+        hub_to_buf_INIT_DATAREADY(buf_to_hub_num)
+                                  <= HUB_INIT_DATAREADY_OUT(hublogic_num);
+        hub_to_buf_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16)
+                                  <= HUB_INIT_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16);
+        hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2)
+                                  <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2);
+        HUB_INIT_READ_IN (hublogic_num)
+                                  <= hub_to_buf_INIT_READ(buf_to_hub_num);
   
+        HUB_REPLY_DATAREADY_IN (hublogic_num)
+                                  <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num);
+        HUB_REPLY_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16)
+                                  <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16);
+        HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2)
+                                  <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2);
+        buf_to_hub_REPLY_READ(buf_to_hub_num)
+                                  <= HUB_REPLY_READ_OUT(hublogic_num);
+  
+        hub_to_buf_REPLY_DATAREADY(buf_to_hub_num)
+                                  <= HUB_REPLY_DATAREADY_OUT(hublogic_num);
+        hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16)
+                                  <= HUB_REPLY_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16);
+        hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2)
+                                  <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2);
+        HUB_REPLY_READ_IN (hublogic_num)
+                                  <= hub_to_buf_REPLY_READ(buf_to_hub_num);
+      end generate;
+    end generate;
+    g3: if trg_num /= 0 generate
+        gen_hublogicsignals3 : for trg in 0 to trg_num-1 generate
+        constant hublogic_num   : integer := first_point_num + 2**(MUX_WIDTH-1) + api_num + calc_special_number(CHANNEL, trg, TRG_CHANNELS);
+        constant buf_to_hub_num : integer := 2**(MUX_WIDTH-1)*MII_NUMBER + api_num + calc_special_number(CHANNEL, trg, TRG_CHANNELS);
+      begin
+        h1: if TRG_CHANNELS(trg) = CHANNEL generate
+          HUB_INIT_DATAREADY_IN (hublogic_num)
+                                    <= buf_to_hub_INIT_DATAREADY(buf_to_hub_num);
+          HUB_INIT_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16)
+                                    <= buf_to_hub_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16);
+          HUB_INIT_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2)
+                                    <= buf_to_hub_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2);
+          buf_to_hub_INIT_READ(buf_to_hub_num)
+                                    <= HUB_INIT_READ_OUT(hublogic_num);
+    
+          hub_to_buf_INIT_DATAREADY(buf_to_hub_num)
+                                    <= HUB_INIT_DATAREADY_OUT(hublogic_num);
+          hub_to_buf_INIT_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16)
+                                    <= HUB_INIT_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16);
+          hub_to_buf_INIT_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2)
+                                    <= HUB_INIT_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2);
+          HUB_INIT_READ_IN (hublogic_num)
+                                    <= hub_to_buf_INIT_READ(buf_to_hub_num);
+    
+          HUB_REPLY_DATAREADY_IN (hublogic_num)
+                                    <= buf_to_hub_REPLY_DATAREADY(buf_to_hub_num);
+          HUB_REPLY_DATA_IN ((hublogic_num+1)*16-1 downto hublogic_num*16)
+                                    <= buf_to_hub_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16);
+          HUB_REPLY_PACKET_NUM_IN ((hublogic_num+1)*2-1 downto hublogic_num*2)
+                                    <= buf_to_hub_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2);
+          buf_to_hub_REPLY_READ(buf_to_hub_num)
+                                    <= HUB_REPLY_READ_OUT(hublogic_num);
+    
+          hub_to_buf_REPLY_DATAREADY(buf_to_hub_num)
+                                    <= HUB_REPLY_DATAREADY_OUT(hublogic_num);
+          hub_to_buf_REPLY_DATA((buf_to_hub_num+1)*16-1 downto buf_to_hub_num*16)
+                                    <= HUB_REPLY_DATA_OUT((hublogic_num+1)*16-1 downto hublogic_num*16);
+          hub_to_buf_REPLY_PACKET_NUM((buf_to_hub_num+1)*2-1 downto buf_to_hub_num*2)
+                                    <= HUB_REPLY_PACKET_NUM_OUT((hublogic_num+1)*2-1 downto hublogic_num*2);
+          HUB_REPLY_READ_IN (hublogic_num)
+                                    <= hub_to_buf_REPLY_READ(buf_to_hub_num);
+        end generate;
+      end generate;
+    end generate;
+  end generate;
+
+--generate hub logic
   gen_hub_logic: for i in 0 to 2**(MUX_WIDTH-1)-1 generate
+    constant point_num       : integer := calc_point_number      (MII_NUMBER, i, API_NUMBER, API_CHANNELS, TRG_NUMBER, TRG_CHANNELS);
+    constant first_point_num : integer := calc_first_point_number(MII_NUMBER, i, API_NUMBER, API_CHANNELS, TRG_NUMBER, TRG_CHANNELS);
+    constant next_point_num  : integer := first_point_num + point_num;
+  begin
     HUBLOGIC : trb_net16_hub_logic
       generic map (
       --media interfaces
-        POINT_NUMBER        => MII_NUMBER,
+        POINT_NUMBER        => point_num,
       --general settings
         DATA_WIDTH          => DATA_WIDTH,
         NUM_WIDTH           => NUM_WIDTH
@@ -441,26 +631,26 @@ begin
         CLK    => CLK,
         RESET  => RESET,
         CLK_EN => CLK_EN,
-        INIT_DATAREADY_IN    => buf_to_hub_INIT_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        INIT_DATA_IN         => buf_to_hub_INIT_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER),
-        INIT_PACKET_NUM_IN   => buf_to_hub_INIT_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER),
-        INIT_READ_OUT        => buf_to_hub_INIT_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        INIT_DATAREADY_OUT   => hub_to_buf_INIT_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        INIT_DATA_OUT        => hub_to_buf_INIT_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER),
-        INIT_PACKET_NUM_OUT  => hub_to_buf_INIT_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER),
-        INIT_READ_IN         => hub_to_buf_INIT_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        REPLY_HEADER_OUT     => hub_to_buf_REPLY_SEND_HEADER((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        REPLY_DATAREADY_IN   => buf_to_hub_REPLY_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        REPLY_DATA_IN        => buf_to_hub_REPLY_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER),
-        REPLY_PACKET_NUM_IN  => buf_to_hub_REPLY_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER),
-        REPLY_READ_OUT       => buf_to_hub_REPLY_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        REPLY_DATAREADY_OUT  => hub_to_buf_REPLY_DATAREADY((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        REPLY_DATA_OUT       => hub_to_buf_REPLY_DATA((i+1)*DATA_WIDTH*MII_NUMBER-1 downto i*DATA_WIDTH*MII_NUMBER),
-        REPLY_PACKET_NUM_OUT => hub_to_buf_REPLY_PACKET_NUM((i+1)*NUM_WIDTH*MII_NUMBER-1 downto i*NUM_WIDTH*MII_NUMBER),
-        REPLY_READ_IN        => hub_to_buf_REPLY_READ((i+1)*MII_NUMBER-1 downto i*MII_NUMBER),
-        STAT                 => HUB_STAT_CHANNEL((i+1)*32-1 downto i*32),
-        CTRL                 => HUB_CTRL_CHANNEL((i+1)*32-1 downto i*32),
-        CTRL_activepoints    => HUB_CTRL_activepoints((i+1)*32-1 downto i*32)
+        INIT_DATAREADY_IN     => HUB_INIT_DATAREADY_IN(next_point_num-1 downto first_point_num),
+        INIT_DATA_IN          => HUB_INIT_DATA_IN(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH),
+        INIT_PACKET_NUM_IN    => HUB_INIT_PACKET_NUM_IN(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH),
+        INIT_READ_OUT         => HUB_INIT_READ_OUT(next_point_num-1 downto first_point_num),
+        INIT_DATAREADY_OUT    => HUB_INIT_DATAREADY_OUT(next_point_num-1 downto first_point_num),
+        INIT_DATA_OUT         => HUB_INIT_DATA_OUT(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH),
+        INIT_PACKET_NUM_OUT   => HUB_INIT_PACKET_NUM_OUT(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH),
+        INIT_READ_IN          => HUB_INIT_READ_IN(next_point_num-1 downto first_point_num),
+        REPLY_HEADER_OUT      => HUB_REPLY_SEND_HEADER_OUT(next_point_num-1 downto first_point_num),
+        REPLY_DATAREADY_IN    => HUB_REPLY_DATAREADY_IN(next_point_num-1 downto first_point_num),
+        REPLY_DATA_IN         => HUB_REPLY_DATA_IN(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH),
+        REPLY_PACKET_NUM_IN   => HUB_REPLY_PACKET_NUM_IN(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH),
+        REPLY_READ_OUT        => HUB_REPLY_READ_OUT(next_point_num-1 downto first_point_num),
+        REPLY_DATAREADY_OUT   => HUB_REPLY_DATAREADY_OUT(next_point_num-1 downto first_point_num),
+        REPLY_DATA_OUT        => HUB_REPLY_DATA_OUT(next_point_num*DATA_WIDTH-1 downto first_point_num*DATA_WIDTH),
+        REPLY_PACKET_NUM_OUT  => HUB_REPLY_PACKET_NUM_OUT(next_point_num*NUM_WIDTH-1 downto first_point_num*NUM_WIDTH),
+        REPLY_READ_IN         => HUB_REPLY_READ_IN(next_point_num-1 downto first_point_num),
+        STAT                  => HUB_STAT_CHANNEL((i+1)*32-1 downto i*32),
+        CTRL                  => HUB_CTRL_CHANNEL((i+1)*32-1 downto i*32),
+        CTRL_activepoints     => HUB_CTRL_activepoints((i+1)*32-1 downto i*32)
         );
   end generate;
   
diff --git a/trb_net16_hub_func.vhd b/trb_net16_hub_func.vhd
new file mode 100644 (file)
index 0000000..cb5687d
--- /dev/null
@@ -0,0 +1,137 @@
+library ieee;
+use ieee.std_logic_1164.all;
+USE IEEE.numeric_std.ALL;
+USE IEEE.std_logic_UNSIGNED.ALL;
+use work.trb_net_std.all;
+
+package trb_net16_hub_func is
+
+  type hub_iobuf_config_t is array(0 to 255) of integer;
+  type hub_api_config_t is array(0 to 15) of integer;
+
+  function calc_point_number (MII_NUMBER   : integer;
+                              CHANNEL      : integer;
+                              API_NUMBER   : integer;
+                              API_CHANNELS : hub_api_config_t;
+                              TRG_NUMBER   : integer;
+                              TRG_CHANNELS : hub_api_config_t)
+    return integer;
+
+  function calc_depth(POINT           : integer;
+                      MII_DEPTH       : hub_iobuf_config_t;
+                      API_DEPTH       : hub_api_config_t;
+                      MII_NUMBER      : integer;
+                      API_NUMBER      : integer;
+                      MUX_WIDTH       : integer)
+    return integer;
+
+  function calc_first_point_number (MII_NUMBER : integer;
+                              CHANNEL      : integer;
+                              API_NUMBER   : integer;
+                              API_CHANNELS : hub_api_config_t;
+                              TRG_NUMBER   : integer;
+                              TRG_CHANNELS : hub_api_config_t)
+    return integer;
+
+  function calc_special_number(CHANNEL  : integer;
+                               NUMBER   : integer;
+                               CHANNELS : hub_api_config_t)
+    return integer;
+
+
+  function reportint(i : integer)
+    return integer;
+
+
+end package trb_net16_hub_func;
+
+package body trb_net16_hub_func is
+
+  function reportint(i : integer)
+    return integer is
+    begin
+      report integer'image(i);
+      return i;
+    end function;
+
+  function calc_point_number (MII_NUMBER   : integer;
+                              CHANNEL      : integer;
+                              API_NUMBER   : integer;
+                              API_CHANNELS : hub_api_config_t;
+                              TRG_NUMBER   : integer;
+                              TRG_CHANNELS : hub_api_config_t)
+    return integer is
+    variable tmp : integer := 0;
+    begin
+      tmp := MII_NUMBER;
+      report "MII"&integer'image(tmp);
+      for i in 0 to API_NUMBER-1 loop
+        if(API_CHANNELS(i) = CHANNEL) then
+          tmp := tmp + 1;
+        end if;
+      end loop;
+      report "API"&integer'image(tmp);
+      if TRG_NUMBER /= 0 then
+        for i in 0 to TRG_NUMBER-1 loop
+          if(TRG_CHANNELS(i) = CHANNEL) then
+            tmp := tmp + 1;
+          end if;
+        end loop;
+      end if;
+      report "ALL"&integer'image(tmp);
+      return tmp;
+    end function;
+
+  function calc_special_number(CHANNEL  : integer;
+                               NUMBER   : integer;
+                               CHANNELS : hub_api_config_t)
+    return integer is
+    variable tmp : integer := 0;
+    begin
+      if NUMBER /= 0 then
+        for i in 0 to NUMBER-1 loop
+          if(CHANNELS(i) = CHANNEL) then
+            tmp := tmp + 1;
+          end if;
+        end loop;
+      end if;
+      return tmp;
+    end function;
+
+  function calc_depth(POINT        : integer;
+                      MII_DEPTH    : hub_iobuf_config_t;
+                      API_DEPTH    : hub_api_config_t;
+                      MII_NUMBER   : integer;
+                      API_NUMBER   : integer;
+                      MUX_WIDTH    : integer)
+    return integer is
+    begin
+      if(POINT < MII_NUMBER*2**(MUX_WIDTH-1)) then
+        return MII_DEPTH((POINT / MII_NUMBER)*16 + (POINT mod MII_NUMBER));
+      elsif POINT < MII_NUMBER*2**(MUX_WIDTH-1) + API_NUMBER then
+        return API_DEPTH(POINT-(MII_NUMBER*2**(MUX_WIDTH-1)));
+      else
+        return 0;
+      end if;
+    end function;
+
+
+  function calc_first_point_number (MII_NUMBER   : integer;
+                                    CHANNEL      : integer;
+                                    API_NUMBER   : integer;
+                                    API_CHANNELS : hub_api_config_t;
+                                    TRG_NUMBER   : integer;
+                                    TRG_CHANNELS : hub_api_config_t)
+    return integer is
+    variable tmp : integer := 0;
+    begin
+      if CHANNEL = 0 then
+        return 0;
+      end if;
+      for i in 0 to CHANNEL-1 loop
+        tmp := tmp + calc_point_number(MII_NUMBER,i,API_NUMBER,API_CHANNELS,TRG_NUMBER,TRG_CHANNELS);
+      end loop;
+      return tmp;
+    end function;
+
+end package body;
\ No newline at end of file
index 47d3693701345bcdc2bbbcab947b278a6cf2e1f3..7a7302b2f8013231e582680f84bb1bb84ca113d1 100644 (file)
@@ -9,7 +9,7 @@ use work.trb_net_std.all;
 entity trb_net16_hub_logic is
   generic (
   --media interfaces
-    POINT_NUMBER        : integer range 2 to 16 := 5;
+    POINT_NUMBER        : integer range 2 to 32 := 5;
 
   --general settings
     DATA_WIDTH          : integer range 16 to 16 := 16;
@@ -215,7 +215,7 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2;
   buf_INIT_READ_OUT <= init_arbiter_read_out when init_locked = '0' else (others => '0');
 
   gen_init_pool_data0: for i in 0 to DATA_WIDTH-1 generate
-    process(INIT_DATA_IN)
+    process(INIT_DATA_IN, buf_INIT_READ_OUT)
       variable VAR_INIT_POOL_DATA : std_logic;
       begin
         VAR_INIT_POOL_DATA := '0';
@@ -227,7 +227,7 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2;
   end generate;
 
   gen_init_pool_data2: for i in 0 to NUM_WIDTH-1 generate
-    process(INIT_PACKET_NUM_IN)
+    process(INIT_PACKET_NUM_IN, buf_INIT_READ_OUT)
       variable VAR_INIT_POOL_PACKET_NUM : std_logic;
       begin
         VAR_INIT_POOL_PACKET_NUM := '0';
@@ -473,11 +473,11 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2;
   -- release is currently done after first packet of TRM
   gen_reply_point_lock : process(comb_REPLY_POOL_PACKET_NUM, comb_REPLY_POOL_DATAREADY, 
                                  saved_REPLY_TYPE, comb_REPLY_muxed_PACKET_NUM, comb_REPLY_muxed_DATAREADY, 
-                                 comb_REPLY_muxed_DATA)
+                                 comb_REPLY_muxed_DATA, buf_REPLY_READ_OUT, REPLY_MUX_reading)
     begin
       release_point_lock <= '0';
       get_point_lock <= '0';
-      if comb_REPLY_muxed_PACKET_NUM = "00" and or_all(buf_REPLY_READ_OUT and REPLY_MUX_reading) = '1' then
+      if comb_REPLY_muxed_PACKET_NUM = "00" and or_all(REPLY_MUX_reading and REPLY_DATAREADY_IN) = '1' then
         if comb_REPLY_muxed_DATA(2 downto 0) = TYPE_TRM then
           release_point_lock <= '1';
         else
@@ -558,9 +558,6 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2;
       if current_state = SENDING_REPLY_TRM then
         comb_REPLY_POOL_DATAREADY <= REPLY_POOL_next_read;
         case packet_counter is
-          when "00" =>
-            comb_REPLY_POOL_DATA <= (others => '0');
-            comb_REPLY_POOL_DATA(2 downto 0) <= TYPE_TRM;
           when "01" =>
             comb_REPLY_POOL_DATA <= REPLY_combined_trm_F1;
           when "10" =>
@@ -573,7 +570,8 @@ STAT_ERRORBITS <= REPLY_combined_trm_F1 & REPLY_combined_trm_F2;
             end if;
           when others =>
             comb_REPLY_POOL_DATA <= (others => '0');
-        end case;
+            comb_REPLY_POOL_DATA(2 downto 0) <= TYPE_TRM;
+          end case;
       end if;
     end process;
 
index 65b224a304424e7adf634fc2ce4f72d8a0192752..eb365cca2f800eefbd6a14b44518e3badb799cfd 100644 (file)
@@ -3,6 +3,8 @@
 
 library ieee;
 use ieee.std_logic_1164.all;
+USE IEEE.numeric_std.ALL;
+USE IEEE.std_logic_UNSIGNED.ALL;
 
 package trb_net_std is
 
@@ -15,7 +17,6 @@ package trb_net_std is
   function xor_all  (arg : std_logic_vector)
     return std_logic;
 
-
   subtype TYPE_POSITION is integer range 50 downto 48;
   constant TYPE_DAT : std_logic_vector(2 downto 0) := "000";
   constant TYPE_HDR : std_logic_vector(2 downto 0) := "001";
@@ -49,24 +50,10 @@ package trb_net_std is
   constant F1_CHECK_ACK : std_logic_vector(15 downto 0) := x"0000";
   subtype BUFFER_SIZE_POSITION is integer range 19 downto 16;
 
-  type mii_d51 is
-    record
-       INT_DATAREADY_OUT: STD_LOGIC;
-       INT_DATA_OUT:      STD_LOGIC_VECTOR (51 downto 0); -- Data word
-       INT_READ_IN:       STD_LOGIC; 
-       INT_ERROR_OUT:     STD_LOGIC_VECTOR (2 downto 0);  -- Status bits
-       INT_DATAREADY_IN:  STD_LOGIC;
-       INT_DATA_IN:       STD_LOGIC_VECTOR (51 downto 0); -- Data word
-       INT_READ_OUT:      STD_LOGIC; 
-       INT_ERROR_IN:      STD_LOGIC_VECTOR (2 downto 0);  -- Status bits  
-    end record;
-
-
 end package trb_net_std;
 
 package body trb_net_std is
 
   function and_all (arg : std_logic_vector)
     return std_logic is
     variable tmp : std_logic := '1';