]> jspc29.x-matter.uni-frankfurt.de Git - trb5sc.git/commitdiff
corrected top level file
authorBenedikt Gutsche <b.gutsche@gsi.de>
Wed, 10 Jan 2024 14:59:28 +0000 (15:59 +0100)
committerBenedikt Gutsche <b.gutsche@gsi.de>
Wed, 10 Jan 2024 14:59:28 +0000 (15:59 +0100)
mimosis/trb5sc_mimosis.vhd
vldb/trb5sc_mimosis.vhd

index abac92edb4d1ed53e2082878957c41ecb65700a1..1f7e0ceae6e6e26ac1fd4677e4849472eccc5c74 100644 (file)
@@ -28,11 +28,11 @@ entity trb5sc_mimosis is
     SFP_MOD_0  : in  std_logic;\r
 \r
     --AddOn\r
---     FE_GPIO    : inout std_logic_vector(11 downto 0);\r
---     FE_CLK     : out   std_logic_vector( 2 downto 1);\r
---     FE_DIFF    : inout std_logic_vector(63 downto 0);\r
-    --INP : inout std_logic_vector(63 downto 0);\r
-    --LED_ADDON      : out   std_logic_vector(5 downto 0);\r
+    -- FE_GPIO    : inout std_logic_vector(11 downto 0);\r
+    -- FE_CLK     : out   std_logic_vector( 2 downto 1);\r
+    -- FE_DIFF    : inout std_logic_vector(63 downto 0);\r
+    -- INP : inout std_logic_vector(63 downto 0);\r
+    -- LED_ADDON      : out   std_logic_vector(5 downto 0);\r
     LED_ADDON_SFP_ORANGE : out   std_logic_vector(1 downto 0);\r
     LED_ADDON_SFP_GREEN  : out   std_logic_vector(1 downto 0);\r
     LED_ADDON_RJ         : out   std_logic_vector(1 downto 0);\r
@@ -85,27 +85,25 @@ entity trb5sc_mimosis is
     HDR_IO  : inout std_logic_vector(15 downto 0)  --23..16 on v2 only\r
     );\r
 \r
-\r
   attribute syn_useioff              : boolean;\r
   attribute syn_useioff of FLASH_NCS  : signal is true;\r
   attribute syn_useioff of FLASH_SCLK : signal is true;\r
   attribute syn_useioff of FLASH_MOSI : signal is true;\r
   attribute syn_useioff of FLASH_MISO : signal is true;\r
 \r
-\r
 end entity;\r
 \r
 architecture arch of trb5sc_mimosis is\r
+\r
   attribute syn_keep     : boolean;\r
   attribute syn_preserve : boolean;\r
 \r
-  signal clk_sys, clk_full, clk_full_osc, clk_160, clk_320, clk_40 : std_logic;\r
+  signal clk_sys, clk_full, clk_full_osc, clk_160, clk_320, clk_40, clk_80 : std_logic;\r
   signal GSR_N                           : std_logic;\r
   signal reset_i                         : std_logic;\r
   signal clear_i                         : std_logic;\r
   signal trigger_in_i                    : std_logic;\r
 \r
-\r
   attribute syn_keep of GSR_N     : signal is true;\r
   attribute syn_preserve of GSR_N : signal is true;\r
 \r
@@ -123,8 +121,8 @@ architecture arch of trb5sc_mimosis is
   signal readout_rx                  : READOUT_RX;\r
   signal readout_tx                  : readout_tx_array_t(0 to 0);\r
 \r
-  signal ctrlbus_tx, bustdc_tx, bussci_tx, bustools_tx, bustc_tx, busthresh_tx, bus_master_in,  busmimosis_tx, busi2c_tx, busgbeip_tx, busgbereg_tx, busfwd_tx  : CTRLBUS_TX;\r
-  signal ctrlbus_rx, bustdc_rx, bussci_rx, bustools_rx, bustc_rx, busthresh_rx, bus_master_out, busmimosis_rx, busi2c_rx, busgbeip_rx, busgbereg_rx, busfwd_rx  : CTRLBUS_RX;\r
+  signal ctrlbus_tx, bustdc_tx, bussci_tx, bustools_tx, bustc_tx, busthresh_tx, bus_master_in,  busmimosis_tx, busi2c_tx, busgbtcore_tx, busgbeip_tx, busgbereg_tx, busfwd_tx  : CTRLBUS_TX;\r
+  signal ctrlbus_rx, bustdc_rx, bussci_rx, bustools_rx, bustc_rx, busthresh_rx, bus_master_out, busmimosis_rx, busi2c_rx, busgbtcore_rx, busgbeip_rx, busgbereg_rx, busfwd_rx  : CTRLBUS_RX;\r
 \r
   signal common_stat_reg : std_logic_vector(std_COMSTATREG*32-1 downto 0) := (others => '0');\r
   signal common_ctrl_reg : std_logic_vector(std_COMCTRLREG*32-1 downto 0);\r
@@ -145,7 +143,6 @@ architecture arch of trb5sc_mimosis is
   signal inp_i             : std_logic_vector( 7 downto 0);\r
   signal gbe_status        : std_logic_vector(15 downto 0);\r
 \r
-\r
   signal i2c_reg_0, i2c_reg_1 : std_logic_vector(31 downto 0);\r
   signal i2c_reg_2            : std_logic_vector(31 downto 0);\r
   signal i2c_reg_4, i2c_reg_5 : std_logic_vector(31 downto 0);\r
@@ -153,6 +150,7 @@ architecture arch of trb5sc_mimosis is
   signal i2c_go_100, i2c_go : std_logic;\r
   signal i2c_reg_5_40       : std_logic_vector(31 downto 0);\r
   signal counter : unsigned(23 downto 0);\r
+\r
   --signal fwd_dst_mac  : std_logic_vector(47 downto 0);\r
   --signal fwd_dst_ip   : std_logic_vector(31 downto 0);\r
   --signal fwd_dst_port : std_logic_vector(15 downto 0);\r
@@ -167,9 +165,7 @@ architecture arch of trb5sc_mimosis is
 \r
 begin\r
 \r
-\r
-trigger_in_i <= (TRIG_IN_BACKPL and IN_SELECT_EXT_CLOCK) or (TRIG_IN_RJ45 and not IN_SELECT_EXT_CLOCK);\r
-\r
+  trigger_in_i <= (TRIG_IN_BACKPL and IN_SELECT_EXT_CLOCK) or (TRIG_IN_RJ45 and not IN_SELECT_EXT_CLOCK);\r
 \r
 ---------------------------------------------------------------------------\r
 -- Clock & Reset Handling\r
@@ -195,17 +191,17 @@ trigger_in_i <= (TRIG_IN_BACKPL and IN_SELECT_EXT_CLOCK) or (TRIG_IN_RJ45 and no
       );\r
 \r
 \r
+  THE_160_PLL : entity work.pll_200_160\r
+    port map(\r
+      CLKI  => clk_full_osc,\r
+      CLKOP => clk_160,\r
+      CLKOS => clk_320,\r
+      CLKOS2=> clk_40,\r
+      CLKOS3=> clk_80\r
+      );\r
 \r
-THE_160_PLL : entity work.pll_200_160\r
-  port map(\r
-    CLKI  => clk_full_osc,\r
-    CLKOP => clk_160,\r
-    CLKOS => clk_320,\r
-    CLKOS2=> clk_40\r
-    );\r
-\r
-H5(3) <= clk_320;\r
-RJ(0) <= clk_40;\r
+  H5(3) <= clk_320;\r
+  RJ(0) <= clk_40;\r
 \r
 ---------------------------------------------------------------------------\r
 -- TrbNet Uplink\r
@@ -315,7 +311,6 @@ RJ(0) <= clk_40;
 ---------------------------------------------------------------------------\r
 -- Bus Handler\r
 ---------------------------------------------------------------------------\r
-\r
   THE_BUS_HANDLER : entity work.trb_net16_regio_bus_handler_record\r
     generic map(\r
       PORT_NUMBER      => 5,\r
@@ -335,17 +330,19 @@ RJ(0) <= clk_40;
       BUS_RX(2) => bustc_rx,            --Clock switch\r
       BUS_RX(3) => busmimosis_rx,\r
       BUS_RX(4) => busi2c_rx,\r
-      --BUS_RX(5) => busgbeip_rx,\r
-      --BUS_RX(6) => busgbereg_rx,\r
-      --BUS_RX(7) => busfwd_rx,\r
+      BUS_RX(5) => busgbtcore_rx,\r
+      -- BUS_RX(5) => busgbeip_rx,\r
+      -- BUS_RX(6) => busgbereg_rx,\r
+      -- BUS_RX(7) => busfwd_rx,\r
       BUS_TX(0) => bustools_tx,\r
       BUS_TX(1) => bussci_tx,\r
       BUS_TX(2) => bustc_tx,\r
       BUS_TX(3) => busmimosis_tx,\r
       BUS_TX(4) => busi2c_tx,\r
-      --BUS_TX(5) => busgbeip_tx,\r
-      --BUS_TX(6) => busgbereg_tx,\r
-      --BUS_TX(7) => busfwd_tx,\r
+      BUS_TX(5) => busgbtcore_tx,\r
+      -- BUS_TX(5) => busgbeip_tx,\r
+      -- BUS_TX(6) => busgbereg_tx,\r
+      -- BUS_TX(7) => busfwd_tx,\r
       STAT_DEBUG => open\r
       );\r
 \r
@@ -403,12 +400,12 @@ RJ(0) <= clk_40;
       DEBUG_OUT         => debug_tools\r
       );\r
 \r
---counter <= counter + '1' when rising_edge(clk_sys);\r
---HDR_IO <= std_logic_vector(counter(15 downto 0));\r
---LED    <= std_logic_vector(counter(23 downto 16));\r
+  -- counter <= counter + '1' when rising_edge(clk_sys);\r
+  -- HDR_IO <= std_logic_vector(counter(15 downto 0));\r
+  -- LED    <= std_logic_vector(counter(23 downto 16));\r
 \r
-  --COMMON_SDA(6) <= '0' when (add_reg(31) = '1') else 'Z';\r
-  --COMMON_SCL(7) <= '0' when (add_reg(30) = '1') else 'Z';\r
+  -- COMMON_SDA(6) <= '0' when (add_reg(31) = '1') else 'Z';\r
+  -- COMMON_SCL(7) <= '0' when (add_reg(30) = '1') else 'Z';\r
 \r
   FLASH_HOLD <= '1';\r
   FLASH_WP   <= '1';\r
@@ -416,91 +413,92 @@ RJ(0) <= clk_40;
 ---------------------------------------------------------------------------\r
 -- I2C\r
 ---------------------------------------------------------------------------\r
-THE_I2C : entity work.i2c_slim2\r
- port map(\r
-  CLOCK            => clk_40,\r
-  RESET            => reset_i,\r
-  -- I2C command / setup\r
-  I2C_GO_IN       => i2c_go,\r
-  ACTION_IN       => i2c_reg_1(8),           -- '0' -> write, '1' -> read\r
-  WORD_IN         => i2c_reg_1(0),           -- '0' -> byte, '1' -> word\r
-  DIRECT_IN       => i2c_reg_1(4),           -- don't send command\r
-  I2C_SPEED_IN    => i2c_reg_0(5 downto 0),  -- speed adjustment (to be defined)\r
-  I2C_ADDR_IN     => i2c_reg_2(7 downto 0),  -- I2C address byte (R/W bit is ignored)\r
-  I2C_CMD_IN      => i2c_reg_2(15 downto 8), -- I2C command byte (sent after address byte)\r
-  I2C_DW_IN       => i2c_reg_2(31 downto 16),-- data word for write command\r
-  I2C_DR_OUT      => i2c_reg_4(15 downto 0), -- data word from read command\r
-  STATUS_OUT      => i2c_reg_4(23 downto 16),\r
-  VALID_OUT       => i2c_reg_4(31),\r
-  I2C_BUSY_OUT    => i2c_reg_4(30),\r
-  I2C_DONE_OUT    => i2c_reg_4(29),\r
-  -- I2C connections\r
-  SDA_IN          => PIN(4),\r
-  SDA_OUT         => mimosis_sda_drv,\r
-  SCL_IN          => PIN(3),\r
-  SCL_OUT         => mimosis_scl_drv,\r
-  -- Debug\r
-  BSM_OUT         => i2c_reg_4(27 downto 24)\r
-);\r
+  THE_I2C : entity work.i2c_slim2\r
   port map(\r
+      CLOCK            => clk_40,\r
+      RESET            => reset_i,\r
+      -- I2C command / setup\r
+      I2C_GO_IN       => i2c_go,\r
+      ACTION_IN       => i2c_reg_1(8),           -- '0' -> write, '1' -> read\r
+      WORD_IN         => i2c_reg_1(0),           -- '0' -> byte, '1' -> word\r
+      DIRECT_IN       => i2c_reg_1(4),           -- don't send command\r
+      I2C_SPEED_IN    => i2c_reg_0(5 downto 0),  -- speed adjustment (to be defined)\r
+      I2C_ADDR_IN     => i2c_reg_2(7 downto 0),  -- I2C address byte (R/W bit is ignored)\r
+      I2C_CMD_IN      => i2c_reg_2(15 downto 8), -- I2C command byte (sent after address byte)\r
+      I2C_DW_IN       => i2c_reg_2(31 downto 16),-- data word for write command\r
+      I2C_DR_OUT      => i2c_reg_4(15 downto 0), -- data word from read command\r
+      STATUS_OUT      => i2c_reg_4(23 downto 16),\r
+      VALID_OUT       => i2c_reg_4(31),\r
+      I2C_BUSY_OUT    => i2c_reg_4(30),\r
+      I2C_DONE_OUT    => i2c_reg_4(29),\r
+      -- I2C connections\r
+      SDA_IN          => PIN(4),\r
+      SDA_OUT         => mimosis_sda_drv,\r
+      SCL_IN          => PIN(3),\r
+      SCL_OUT         => mimosis_scl_drv,\r
+      -- Debug\r
+      BSM_OUT         => i2c_reg_4(27 downto 24)\r
+      );\r
 \r
 -- I2C signal open collector driver\r
 -- PIN(4) <= '0' when (mimosis_sda_drv = '0') else 'Z';\r
 -- PIN(3) <= '0' when (mimosis_scl_drv = '0') else 'Z';\r
 \r
-PIN(4) <= MIMOSIS_SDA;\r
-PIN(3) <= MIMOSIS_SCL;\r
-MIMOSIS_SDA <= '0' when (mimosis_sda_drv = '0') else 'Z';\r
-MIMOSIS_SCL <= '0' when (mimosis_scl_drv = '0') else 'Z';\r
-\r
-H5(1)  <= i2c_reg_5_40(0);  --MIMOSIS_SYNC\r
-PIN(1) <= i2c_reg_5_40(4);  --MIMOSIS_START\r
-PIN(2) <= i2c_reg_5_40(8);  --MIMOSIS_RESET\r
-\r
-PROC_I2C_REGS : process begin\r
-  wait until rising_edge(CLK_SYS);\r
-  busi2c_tx.ack  <= '0';\r
-  busi2c_tx.unknown <= '0';\r
-  busi2c_tx.nack <= '0';\r
-  busi2c_tx.data <= (others => '0');\r
-  i2c_go_100 <= '0';\r
-\r
-  if busi2c_rx.write = '1' then\r
-    busi2c_tx.ack <= '1';\r
-    if busi2c_rx.addr(3 downto 0) = x"0" then\r
-      i2c_reg_0 <= busi2c_rx.data;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"1" then\r
-      i2c_reg_1 <= busi2c_rx.data;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"2" then\r
-      i2c_reg_2 <= busi2c_rx.data;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"3" then\r
-      i2c_go_100 <= busi2c_rx.data(0);\r
-    elsif busi2c_rx.addr(3 downto 0) = x"5" then\r
-      i2c_reg_5 <= busi2c_rx.data;\r
-    else\r
-      busi2c_tx.ack <= '0';\r
-      busi2c_tx.unknown <= '1';\r
-    end if;\r
-  elsif busi2c_rx.read = '1' then\r
-    busi2c_tx.ack <= '1';\r
-    if busi2c_rx.addr(3 downto 0) = x"0" then\r
-      busi2c_tx.data <= i2c_reg_0;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"1" then\r
-      busi2c_tx.data <= i2c_reg_1;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"2" then\r
-      busi2c_tx.data <= i2c_reg_2;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"3" then\r
-      busi2c_tx.data <= (others => '0');\r
-    elsif busi2c_rx.addr(3 downto 0) = x"4" then\r
-      busi2c_tx.data <= i2c_reg_4;\r
-    elsif busi2c_rx.addr(3 downto 0) = x"5" then\r
-      busi2c_tx.data <= i2c_reg_5;\r
-    else\r
-      busi2c_tx.ack  <= '0';\r
-      busi2c_tx.unknown <= '1';\r
+  PIN(4) <= MIMOSIS_SDA;\r
+  PIN(3) <= MIMOSIS_SCL;\r
+  MIMOSIS_SDA <= '0' when (mimosis_sda_drv = '0') else 'Z';\r
+  MIMOSIS_SCL <= '0' when (mimosis_scl_drv = '0') else 'Z';\r
+\r
+  H5(1)  <= i2c_reg_5_40(0);  --MIMOSIS_SYNC\r
+  PIN(1) <= i2c_reg_5_40(4);  --MIMOSIS_START\r
+  PIN(2) <= i2c_reg_5_40(8);  --MIMOSIS_RESET\r
 \r
+  PROC_I2C_REGS : process\r
+  begin\r
+    wait until rising_edge(CLK_SYS);\r
+    busi2c_tx.ack  <= '0';\r
+    busi2c_tx.unknown <= '0';\r
+    busi2c_tx.nack <= '0';\r
+    busi2c_tx.data <= (others => '0');\r
+    i2c_go_100 <= '0';\r
+\r
+    if busi2c_rx.write = '1' then\r
+      busi2c_tx.ack <= '1';\r
+      if busi2c_rx.addr(3 downto 0) = x"0" then\r
+        i2c_reg_0 <= busi2c_rx.data;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"1" then\r
+        i2c_reg_1 <= busi2c_rx.data;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"2" then\r
+        i2c_reg_2 <= busi2c_rx.data;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"3" then\r
+        i2c_go_100 <= busi2c_rx.data(0);\r
+      elsif busi2c_rx.addr(3 downto 0) = x"5" then\r
+        i2c_reg_5 <= busi2c_rx.data;\r
+      else\r
+        busi2c_tx.ack <= '0';\r
+        busi2c_tx.unknown <= '1';\r
+      end if;\r
+    elsif busi2c_rx.read = '1' then\r
+      busi2c_tx.ack <= '1';\r
+      if busi2c_rx.addr(3 downto 0) = x"0" then\r
+        busi2c_tx.data <= i2c_reg_0;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"1" then\r
+        busi2c_tx.data <= i2c_reg_1;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"2" then\r
+        busi2c_tx.data <= i2c_reg_2;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"3" then\r
+        busi2c_tx.data <= (others => '0');\r
+      elsif busi2c_rx.addr(3 downto 0) = x"4" then\r
+        busi2c_tx.data <= i2c_reg_4;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"5" then\r
+        busi2c_tx.data <= i2c_reg_5;\r
+      else\r
+        busi2c_tx.ack  <= '0';\r
+        busi2c_tx.unknown <= '1';\r
+\r
+      end if;\r
     end if;\r
-  end if;\r
-end process;\r
+  end process;\r
 \r
   THE_I2C_GO_SYNC : pulse_sync\r
     port map(\r
@@ -510,21 +508,20 @@ end process;
       CLK_B_IN        => clk_40,\r
       RESET_B_IN      => reset_i,\r
       PULSE_B_OUT     => i2c_go\r
-    );\r
-\r
- THE_MIMOSIS_SIGNAL_SYNC : signal_sync\r
-   generic map(\r
-     WIDTH => 32,\r
-     DEPTH => 2\r
-     )\r
-   port map(\r
-     RESET => reset_i,\r
-     CLK0  => clk_sys,\r
-     CLK1  => clk_40,\r
-     D_IN  => i2c_reg_5,\r
-     D_OUT => i2c_reg_5_40\r
-   );\r
+      );\r
 \r
+  THE_MIMOSIS_SIGNAL_SYNC : signal_sync\r
+    generic map(\r
+      WIDTH => 32,\r
+      DEPTH => 2\r
+      )\r
+    port map(\r
+      RESET => reset_i,\r
+      CLK0  => clk_sys,\r
+      CLK1  => clk_40,\r
+      D_IN  => i2c_reg_5,\r
+      D_OUT => i2c_reg_5_40\r
+      );\r
 \r
 \r
 ---------------------------------------------------------------------------\r
@@ -556,97 +553,97 @@ end process;
 ---- GbE\r
 -----------------------------------------------------------------------------\r
   --GBE : entity work.gbe_wrapper\r
-    --generic map(\r
-      --DO_SIMULATION             => 0,\r
-      --INCLUDE_DEBUG             => 0,\r
-      --USE_INTERNAL_TRBNET_DUMMY => 0,\r
-      --USE_EXTERNAL_TRBNET_DUMMY => 0,\r
-      --RX_PATH_ENABLE            => 1,\r
-      --FIXED_SIZE_MODE           => 1,\r
-      --INCREMENTAL_MODE          => 1,\r
-      --FIXED_SIZE                => 100,\r
-      --FIXED_DELAY_MODE          => 1,\r
-      --UP_DOWN_MODE              => 0,\r
-      --UP_DOWN_LIMIT             => 100,\r
-      --FIXED_DELAY               => 100,\r
-\r
-      --NUMBER_OF_GBE_LINKS       => 1,\r
-      --LINKS_ACTIVE              => "0001",\r
-\r
-      --LINK_HAS_READOUT          => "0000",\r
-      --LINK_HAS_SLOWCTRL         => "0000",\r
-      --LINK_HAS_DHCP             => "0001",\r
-      --LINK_HAS_ARP              => "0001",\r
-      --LINK_HAS_PING             => "0001",\r
-      --LINK_HAS_FWD              => "0001"\r
-    --)\r
-    --port map(\r
-      --CLK_SYS_IN               => clk_sys,\r
-      --CLK_125_IN               => CLK_125,\r
-      --RESET                    => reset_i,\r
-      --GSR_N                    => GSR_N,\r
-      ---- Trigger\r
-      --TRIGGER_IN               => '0',\r
-      ---- SFP\r
-      --SD_PRSNT_N_IN(0)         => SFP_MOD_0,\r
-      --SD_LOS_IN(0)             => SFP_LOS,\r
-      --SD_TXDIS_OUT(0)          => SFP_TX_DIS,\r
-      ---- trigger channel\r
-      ---- only for LINK_HAS_READOUT\r
-      --CTS_NUMBER_IN            => (others => '0'),\r
-      --CTS_CODE_IN              => (others => '0'),\r
-      --CTS_INFORMATION_IN       => (others => '0'),\r
-      --CTS_READOUT_TYPE_IN      => (others => '0'),\r
-      --CTS_START_READOUT_IN     => '0',\r
-      --CTS_DATA_OUT             => open,\r
-      --CTS_DATAREADY_OUT        => open,\r
-      --CTS_READOUT_FINISHED_OUT => open,\r
-      --CTS_READ_IN              => '1',\r
-      --CTS_LENGTH_OUT           => open,\r
-      --CTS_ERROR_PATTERN_OUT    => open,\r
-      ---- data channel\r
-      ---- only for LINK_HAS_READOUT\r
-      --FEE_DATA_IN              => (others => '0'),\r
-      --FEE_DATAREADY_IN         => '0',\r
-      --FEE_READ_OUT             => open,\r
-      --FEE_STATUS_BITS_IN       => (others => '0'),\r
-      --FEE_BUSY_IN              => '0',\r
-      ---- unique adresses\r
-      --MC_UNIQUE_ID_IN          => timer.uid,\r
-      --MY_TRBNET_ADDRESS_IN     => timer.network_address,\r
-      --ISSUE_REBOOT_OUT         => open, --BUG: needs to be connected\r
-      ---- slow control by GbE\r
-      --GSC_CLK_IN               => open,\r
-      --GSC_INIT_DATAREADY_OUT   => open,\r
-      --GSC_INIT_DATA_OUT        => open,\r
-      --GSC_INIT_PACKET_NUM_OUT  => open,\r
-      --GSC_INIT_READ_IN         => '1',\r
-      --GSC_REPLY_DATAREADY_IN   => '0',\r
-      --GSC_REPLY_DATA_IN        => (others => '0'),\r
-      --GSC_REPLY_PACKET_NUM_IN  => (others => '0'),\r
-      --GSC_REPLY_READ_OUT       => open,\r
-      --GSC_BUSY_IN              => '0',\r
-      ---- readout\r
-      --BUS_IP_RX                => busgbeip_rx, -- registers inside GbE\r
-      --BUS_IP_TX                => busgbeip_tx, -- registers inside GbE\r
-      --BUS_REG_RX               => busgbereg_rx, -- registers inside GbE\r
-      --BUS_REG_TX               => busgbereg_tx, -- registers inside GbE\r
-    ---- Forwarder\r
-      --FWD_DST_MAC_IN(47 downto 0) => fwd_dst_mac,\r
-      --FWD_DST_IP_IN(31 downto 0)  => fwd_dst_ip,\r
-      --FWD_DST_UDP_IN(15 downto 0) => fwd_dst_port,\r
-      --FWD_DATA_IN(7 downto 0)     => fwd_data,\r
-      --FWD_DATA_VALID_IN(0)        => fwd_datavalid,\r
-      --FWD_SOP_IN(0)               => fwd_sop,\r
-      --FWD_EOP_IN(0)               => fwd_eop,\r
-      --FWD_READY_OUT(0)            => fwd_ready,\r
-      --FWD_FULL_OUT(0)             => fwd_full,\r
-    ---- reset\r
-      --MAKE_RESET_OUT           => open, -- reset by GbE --BUG: needs to be connected\r
-      ---- debug and status\r
-      --STATUS_OUT               => open,\r
-      --DEBUG_OUT                => open\r
-    --);\r
+  --generic map(\r
+  --DO_SIMULATION             => 0,\r
+  --INCLUDE_DEBUG             => 0,\r
+  --USE_INTERNAL_TRBNET_DUMMY => 0,\r
+  --USE_EXTERNAL_TRBNET_DUMMY => 0,\r
+  --RX_PATH_ENABLE            => 1,\r
+  --FIXED_SIZE_MODE           => 1,\r
+  --INCREMENTAL_MODE          => 1,\r
+  --FIXED_SIZE                => 100,\r
+  --FIXED_DELAY_MODE          => 1,\r
+  --UP_DOWN_MODE              => 0,\r
+  --UP_DOWN_LIMIT             => 100,\r
+  --FIXED_DELAY               => 100,\r
+\r
+  --NUMBER_OF_GBE_LINKS       => 1,\r
+  --LINKS_ACTIVE              => "0001",\r
+\r
+  --LINK_HAS_READOUT          => "0000",\r
+  --LINK_HAS_SLOWCTRL         => "0000",\r
+  --LINK_HAS_DHCP             => "0001",\r
+  --LINK_HAS_ARP              => "0001",\r
+  --LINK_HAS_PING             => "0001",\r
+  --LINK_HAS_FWD              => "0001"\r
+  --)\r
+  --port map(\r
+  --CLK_SYS_IN               => clk_sys,\r
+  --CLK_125_IN               => CLK_125,\r
+  --RESET                    => reset_i,\r
+  --GSR_N                    => GSR_N,\r
+  ---- Trigger\r
+  --TRIGGER_IN               => '0',\r
+  ---- SFP\r
+  --SD_PRSNT_N_IN(0)         => SFP_MOD_0,\r
+  --SD_LOS_IN(0)             => SFP_LOS,\r
+  --SD_TXDIS_OUT(0)          => SFP_TX_DIS,\r
+  ---- trigger channel\r
+  ---- only for LINK_HAS_READOUT\r
+  --CTS_NUMBER_IN            => (others => '0'),\r
+  --CTS_CODE_IN              => (others => '0'),\r
+  --CTS_INFORMATION_IN       => (others => '0'),\r
+  --CTS_READOUT_TYPE_IN      => (others => '0'),\r
+  --CTS_START_READOUT_IN     => '0',\r
+  --CTS_DATA_OUT             => open,\r
+  --CTS_DATAREADY_OUT        => open,\r
+  --CTS_READOUT_FINISHED_OUT => open,\r
+  --CTS_READ_IN              => '1',\r
+  --CTS_LENGTH_OUT           => open,\r
+  --CTS_ERROR_PATTERN_OUT    => open,\r
+  ---- data channel\r
+  ---- only for LINK_HAS_READOUT\r
+  --FEE_DATA_IN              => (others => '0'),\r
+  --FEE_DATAREADY_IN         => '0',\r
+  --FEE_READ_OUT             => open,\r
+  --FEE_STATUS_BITS_IN       => (others => '0'),\r
+  --FEE_BUSY_IN              => '0',\r
+  ---- unique adresses\r
+  --MC_UNIQUE_ID_IN          => timer.uid,\r
+  --MY_TRBNET_ADDRESS_IN     => timer.network_address,\r
+  --ISSUE_REBOOT_OUT         => open, --BUG: needs to be connected\r
+  ---- slow control by GbE\r
+  --GSC_CLK_IN               => open,\r
+  --GSC_INIT_DATAREADY_OUT   => open,\r
+  --GSC_INIT_DATA_OUT        => open,\r
+  --GSC_INIT_PACKET_NUM_OUT  => open,\r
+  --GSC_INIT_READ_IN         => '1',\r
+  --GSC_REPLY_DATAREADY_IN   => '0',\r
+  --GSC_REPLY_DATA_IN        => (others => '0'),\r
+  --GSC_REPLY_PACKET_NUM_IN  => (others => '0'),\r
+  --GSC_REPLY_READ_OUT       => open,\r
+  --GSC_BUSY_IN              => '0',\r
+  ---- readout\r
+  --BUS_IP_RX                => busgbeip_rx, -- registers inside GbE\r
+  --BUS_IP_TX                => busgbeip_tx, -- registers inside GbE\r
+  --BUS_REG_RX               => busgbereg_rx, -- registers inside GbE\r
+  --BUS_REG_TX               => busgbereg_tx, -- registers inside GbE\r
+  ---- Forwarder\r
+  --FWD_DST_MAC_IN(47 downto 0) => fwd_dst_mac,\r
+  --FWD_DST_IP_IN(31 downto 0)  => fwd_dst_ip,\r
+  --FWD_DST_UDP_IN(15 downto 0) => fwd_dst_port,\r
+  --FWD_DATA_IN(7 downto 0)     => fwd_data,\r
+  --FWD_DATA_VALID_IN(0)        => fwd_datavalid,\r
+  --FWD_SOP_IN(0)               => fwd_sop,\r
+  --FWD_EOP_IN(0)               => fwd_eop,\r
+  --FWD_READY_OUT(0)            => fwd_ready,\r
+  --FWD_FULL_OUT(0)             => fwd_full,\r
+  ---- reset\r
+  --MAKE_RESET_OUT           => open, -- reset by GbE --BUG: needs to be connected\r
+  ---- debug and status\r
+  --STATUS_OUT               => open,\r
+  --DEBUG_OUT                => open\r
+  --);\r
 \r
 \r
 \r
@@ -660,30 +657,30 @@ end process;
   --busfwd_tx.unknown <= '0';\r
 \r
   --if busfwd_rx.write = '1' then\r
-    --busfwd_tx.ack <= '1';\r
-    --case busfwd_rx.addr(7 downto 0) is\r
-      --when x"00" => fwd_dst_ip    <= busfwd_rx.data;\r
-      --when x"01" => fwd_dst_port  <= busfwd_rx.data(15 downto 0);\r
-      --when x"02" => fwd_dst_mac(31 downto 0)  <= busfwd_rx.data;\r
-      --when x"03" => fwd_dst_mac(47 downto 32) <= busfwd_rx.data(15 downto 0);\r
-      --when x"04" => fwd_length    <= busfwd_rx.data(15 downto 0);\r
-      --when x"05" => fwd_do_send   <= busfwd_rx.data(0);\r
-      --when others => busfwd_tx.ack <= '0'; busfwd_tx.unknown <= '1';\r
-    --end case;\r
+  --busfwd_tx.ack <= '1';\r
+  --case busfwd_rx.addr(7 downto 0) is\r
+  --when x"00" => fwd_dst_ip    <= busfwd_rx.data;\r
+  --when x"01" => fwd_dst_port  <= busfwd_rx.data(15 downto 0);\r
+  --when x"02" => fwd_dst_mac(31 downto 0)  <= busfwd_rx.data;\r
+  --when x"03" => fwd_dst_mac(47 downto 32) <= busfwd_rx.data(15 downto 0);\r
+  --when x"04" => fwd_length    <= busfwd_rx.data(15 downto 0);\r
+  --when x"05" => fwd_do_send   <= busfwd_rx.data(0);\r
+  --when others => busfwd_tx.ack <= '0'; busfwd_tx.unknown <= '1';\r
+  --end case;\r
   --elsif busfwd_rx.read = '1' then\r
-    --busfwd_tx.ack <= '1';\r
-    --case busfwd_rx.addr(7 downto 0) is\r
-      --when x"00" => busfwd_tx.data <= fwd_dst_ip;\r
-      --when x"01" => busfwd_tx.data <= x"0000" & fwd_dst_port;\r
-      --when x"02" => busfwd_tx.data <= fwd_dst_mac(31 downto 0);\r
-      --when x"03" => busfwd_tx.data <= x"0000" & fwd_dst_mac(47 downto 32);\r
-      --when x"04" => busfwd_tx.data <= x"0000" & fwd_length;\r
-      --when x"05" => busfwd_tx.data <= x"0000000" & fwd_full & fwd_ready & "0" & fwd_do_send;\r
-      --when others => busfwd_tx.ack <= '0'; busfwd_tx.unknown <= '1';\r
-    --end case;\r
+  --busfwd_tx.ack <= '1';\r
+  --case busfwd_rx.addr(7 downto 0) is\r
+  --when x"00" => busfwd_tx.data <= fwd_dst_ip;\r
+  --when x"01" => busfwd_tx.data <= x"0000" & fwd_dst_port;\r
+  --when x"02" => busfwd_tx.data <= fwd_dst_mac(31 downto 0);\r
+  --when x"03" => busfwd_tx.data <= x"0000" & fwd_dst_mac(47 downto 32);\r
+  --when x"04" => busfwd_tx.data <= x"0000" & fwd_length;\r
+  --when x"05" => busfwd_tx.data <= x"0000000" & fwd_full & fwd_ready & "0" & fwd_do_send;\r
+  --when others => busfwd_tx.ack <= '0'; busfwd_tx.unknown <= '1';\r
+  --end case;\r
   --end if;\r
   --if reset_i = '1' then\r
-    --fwd_do_send <= '0';\r
+  --fwd_do_send <= '0';\r
   --end if;\r
 --end process;\r
 \r
@@ -752,8 +749,5 @@ end process;
 -- readout_tx(0).data_write    <= '0';\r
 -- readout_tx(0).busy_release  <= '1';\r
 \r
-SFP_ADDON_TX_DIS <= (others => '0');\r
+  SFP_ADDON_TX_DIS <= (others => '0');\r
 end architecture;\r
-\r
-\r
-\r
index 2e1123a0cb87094d317a29d2fa91ebada7eeb426..5a3bdd0efe1044d86c70bd0685c8541b27c02c76 100644 (file)
@@ -28,11 +28,11 @@ entity trb5sc_mimosis is
     SFP_MOD_0  : in  std_logic;\r
 \r
     --AddOn\r
-    --FE_GPIO    : inout std_logic_vector(11 downto 0);\r
-    --FE_CLK     : out   std_logic_vector( 2 downto 1);\r
-    --FE_DIFF    : inout std_logic_vector(63 downto 0);\r
-    --INP : inout std_logic_vector(63 downto 0);\r
-    --LED_ADDON      : out   std_logic_vector(5 downto 0);\r
+    -- FE_GPIO    : inout std_logic_vector(11 downto 0);\r
+    -- FE_CLK     : out   std_logic_vector( 2 downto 1);\r
+    -- FE_DIFF    : inout std_logic_vector(63 downto 0);\r
+    -- INP : inout std_logic_vector(63 downto 0);\r
+    -- LED_ADDON      : out   std_logic_vector(5 downto 0);\r
     LED_ADDON_SFP_ORANGE : out   std_logic_vector(1 downto 0);\r
     LED_ADDON_SFP_GREEN  : out   std_logic_vector(1 downto 0);\r
     LED_ADDON_RJ         : out   std_logic_vector(1 downto 0);\r
@@ -70,11 +70,6 @@ entity trb5sc_mimosis is
     I2C_SCL      : inout std_logic;\r
     TMP_ALERT    : in    std_logic;\r
 \r
-    --GBTSCA\r
-    SCA_RX       : in std_logic_vector(1 downto 0);\r
-    SCA_TX       : out std_logic_vector(1 downto 0);\r
-    SCA_CLK      : out std_logic_vector(1 downto 0);\r
-\r
     --LED\r
     LED            : out   std_logic_vector(8 downto 1);\r
     LED_SFP_YELLOW : out   std_logic;\r
@@ -98,7 +93,6 @@ entity trb5sc_mimosis is
 \r
 end entity;\r
 \r
-\r
 architecture arch of trb5sc_mimosis is\r
 \r
   attribute syn_keep     : boolean;\r
@@ -171,10 +165,8 @@ architecture arch of trb5sc_mimosis is
 \r
 begin\r
 \r
-\r
   trigger_in_i <= (TRIG_IN_BACKPL and IN_SELECT_EXT_CLOCK) or (TRIG_IN_RJ45 and not IN_SELECT_EXT_CLOCK);\r
 \r
-\r
 ---------------------------------------------------------------------------\r
 -- Clock & Reset Handling\r
 ---------------------------------------------------------------------------\r
@@ -198,6 +190,7 @@ begin
       DEBUG_OUT => debug_clock_reset\r
       );\r
 \r
+\r
   THE_160_PLL : entity work.pll_200_160\r
     port map(\r
       CLKI  => clk_full_osc,\r
@@ -210,7 +203,6 @@ begin
   H5(3) <= clk_320;\r
   RJ(0) <= clk_40;\r
 \r
-\r
 ---------------------------------------------------------------------------\r
 -- TrbNet Uplink\r
 ---------------------------------------------------------------------------\r
@@ -321,7 +313,7 @@ begin
 ---------------------------------------------------------------------------\r
   THE_BUS_HANDLER : entity work.trb_net16_regio_bus_handler_record\r
     generic map(\r
-      PORT_NUMBER      => 5,\r
+      PORT_NUMBER      => 6,\r
       PORT_ADDRESSES   => (0 => x"d000", 1 => x"b000", 2 => x"d300", 3 => x"a000", 4 => x"de00", 5 => x"8100", 6 => x"8300", 7 => x"8400", others => x"0000"),\r
       PORT_ADDR_MASK   => (0 => 12,      1 => 9,       2 => 1,       3 => 12,      4 => 5,       5 => 8,       6 => 8,       7 => 8,       others => 0),\r
       PORT_MASK_ENABLE => 1\r
@@ -337,8 +329,8 @@ begin
       BUS_RX(1) => bussci_rx,           --SCI Serdes\r
       BUS_RX(2) => bustc_rx,            --Clock switch\r
       BUS_RX(3) => busmimosis_rx,\r
-      BUS_RX(4) => busgbtcore_rx,\r
-      -- BUS_RX(4) => busi2c_rx,\r
+      BUS_RX(4) => busi2c_rx,\r
+      BUS_RX(5) => busgbtcore_rx,\r
       -- BUS_RX(5) => busgbeip_rx,\r
       -- BUS_RX(6) => busgbereg_rx,\r
       -- BUS_RX(7) => busfwd_rx,\r
@@ -346,8 +338,8 @@ begin
       BUS_TX(1) => bussci_tx,\r
       BUS_TX(2) => bustc_tx,\r
       BUS_TX(3) => busmimosis_tx,\r
-      BUS_TX(4) => busgbtcore_tx,\r
-      -- BUS_TX(4) => busi2c_tx,\r
+      BUS_TX(4) => busi2c_tx,\r
+      BUS_TX(5) => busgbtcore_tx,\r
       -- BUS_TX(5) => busgbeip_tx,\r
       -- BUS_TX(6) => busgbereg_tx,\r
       -- BUS_TX(7) => busfwd_tx,\r
@@ -408,16 +400,129 @@ begin
       DEBUG_OUT         => debug_tools\r
       );\r
 \r
---counter <= counter + '1' when rising_edge(clk_sys);\r
---HDR_IO <= std_logic_vector(counter(15 downto 0));\r
---LED    <= std_logic_vector(counter(23 downto 16));\r
+  -- counter <= counter + '1' when rising_edge(clk_sys);\r
+  -- HDR_IO <= std_logic_vector(counter(15 downto 0));\r
+  -- LED    <= std_logic_vector(counter(23 downto 16));\r
 \r
-  --COMMON_SDA(6) <= '0' when (add_reg(31) = '1') else 'Z';\r
-  --COMMON_SCL(7) <= '0' when (add_reg(30) = '1') else 'Z';\r
+  -- COMMON_SDA(6) <= '0' when (add_reg(31) = '1') else 'Z';\r
+  -- COMMON_SCL(7) <= '0' when (add_reg(30) = '1') else 'Z';\r
 \r
   FLASH_HOLD <= '1';\r
   FLASH_WP   <= '1';\r
 \r
+---------------------------------------------------------------------------\r
+-- I2C\r
+---------------------------------------------------------------------------\r
+  THE_I2C : entity work.i2c_slim2\r
+    port map(\r
+      CLOCK            => clk_40,\r
+      RESET            => reset_i,\r
+      -- I2C command / setup\r
+      I2C_GO_IN       => i2c_go,\r
+      ACTION_IN       => i2c_reg_1(8),           -- '0' -> write, '1' -> read\r
+      WORD_IN         => i2c_reg_1(0),           -- '0' -> byte, '1' -> word\r
+      DIRECT_IN       => i2c_reg_1(4),           -- don't send command\r
+      I2C_SPEED_IN    => i2c_reg_0(5 downto 0),  -- speed adjustment (to be defined)\r
+      I2C_ADDR_IN     => i2c_reg_2(7 downto 0),  -- I2C address byte (R/W bit is ignored)\r
+      I2C_CMD_IN      => i2c_reg_2(15 downto 8), -- I2C command byte (sent after address byte)\r
+      I2C_DW_IN       => i2c_reg_2(31 downto 16),-- data word for write command\r
+      I2C_DR_OUT      => i2c_reg_4(15 downto 0), -- data word from read command\r
+      STATUS_OUT      => i2c_reg_4(23 downto 16),\r
+      VALID_OUT       => i2c_reg_4(31),\r
+      I2C_BUSY_OUT    => i2c_reg_4(30),\r
+      I2C_DONE_OUT    => i2c_reg_4(29),\r
+      -- I2C connections\r
+      SDA_IN          => PIN(4),\r
+      SDA_OUT         => mimosis_sda_drv,\r
+      SCL_IN          => PIN(3),\r
+      SCL_OUT         => mimosis_scl_drv,\r
+      -- Debug\r
+      BSM_OUT         => i2c_reg_4(27 downto 24)\r
+      );\r
+\r
+-- I2C signal open collector driver\r
+-- PIN(4) <= '0' when (mimosis_sda_drv = '0') else 'Z';\r
+-- PIN(3) <= '0' when (mimosis_scl_drv = '0') else 'Z';\r
+\r
+  PIN(4) <= MIMOSIS_SDA;\r
+  PIN(3) <= MIMOSIS_SCL;\r
+  MIMOSIS_SDA <= '0' when (mimosis_sda_drv = '0') else 'Z';\r
+  MIMOSIS_SCL <= '0' when (mimosis_scl_drv = '0') else 'Z';\r
+\r
+  H5(1)  <= i2c_reg_5_40(0);  --MIMOSIS_SYNC\r
+  PIN(1) <= i2c_reg_5_40(4);  --MIMOSIS_START\r
+  PIN(2) <= i2c_reg_5_40(8);  --MIMOSIS_RESET\r
+\r
+  PROC_I2C_REGS : process\r
+  begin\r
+    wait until rising_edge(CLK_SYS);\r
+    busi2c_tx.ack  <= '0';\r
+    busi2c_tx.unknown <= '0';\r
+    busi2c_tx.nack <= '0';\r
+    busi2c_tx.data <= (others => '0');\r
+    i2c_go_100 <= '0';\r
+\r
+    if busi2c_rx.write = '1' then\r
+      busi2c_tx.ack <= '1';\r
+      if busi2c_rx.addr(3 downto 0) = x"0" then\r
+        i2c_reg_0 <= busi2c_rx.data;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"1" then\r
+        i2c_reg_1 <= busi2c_rx.data;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"2" then\r
+        i2c_reg_2 <= busi2c_rx.data;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"3" then\r
+        i2c_go_100 <= busi2c_rx.data(0);\r
+      elsif busi2c_rx.addr(3 downto 0) = x"5" then\r
+        i2c_reg_5 <= busi2c_rx.data;\r
+      else\r
+        busi2c_tx.ack <= '0';\r
+        busi2c_tx.unknown <= '1';\r
+      end if;\r
+    elsif busi2c_rx.read = '1' then\r
+      busi2c_tx.ack <= '1';\r
+      if busi2c_rx.addr(3 downto 0) = x"0" then\r
+        busi2c_tx.data <= i2c_reg_0;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"1" then\r
+        busi2c_tx.data <= i2c_reg_1;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"2" then\r
+        busi2c_tx.data <= i2c_reg_2;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"3" then\r
+        busi2c_tx.data <= (others => '0');\r
+      elsif busi2c_rx.addr(3 downto 0) = x"4" then\r
+        busi2c_tx.data <= i2c_reg_4;\r
+      elsif busi2c_rx.addr(3 downto 0) = x"5" then\r
+        busi2c_tx.data <= i2c_reg_5;\r
+      else\r
+        busi2c_tx.ack  <= '0';\r
+        busi2c_tx.unknown <= '1';\r
+\r
+      end if;\r
+    end if;\r
+  end process;\r
+\r
+  THE_I2C_GO_SYNC : pulse_sync\r
+    port map(\r
+      CLK_A_IN        => clk_sys,\r
+      RESET_A_IN      => reset_i,\r
+      PULSE_A_IN      => i2c_go_100,\r
+      CLK_B_IN        => clk_40,\r
+      RESET_B_IN      => reset_i,\r
+      PULSE_B_OUT     => i2c_go\r
+      );\r
+\r
+  THE_MIMOSIS_SIGNAL_SYNC : signal_sync\r
+    generic map(\r
+      WIDTH => 32,\r
+      DEPTH => 2\r
+      )\r
+    port map(\r
+      RESET => reset_i,\r
+      CLK0  => clk_sys,\r
+      CLK1  => clk_40,\r
+      D_IN  => i2c_reg_5,\r
+      D_OUT => i2c_reg_5_40\r
+      );\r
+\r
 \r
 ---------------------------------------------------------------------------\r
 -- LED\r
@@ -444,6 +549,178 @@ begin
   LED_ADDON_SFP_ORANGE(0) <= (gbe_status(3) or gbe_status(4));\r
   LED_ADDON_SFP_ORANGE(1) <= '0';\r
 \r
+-----------------------------------------------------------------------------\r
+---- GbE\r
+-----------------------------------------------------------------------------\r
+  --GBE : entity work.gbe_wrapper\r
+  --generic map(\r
+  --DO_SIMULATION             => 0,\r
+  --INCLUDE_DEBUG             => 0,\r
+  --USE_INTERNAL_TRBNET_DUMMY => 0,\r
+  --USE_EXTERNAL_TRBNET_DUMMY => 0,\r
+  --RX_PATH_ENABLE            => 1,\r
+  --FIXED_SIZE_MODE           => 1,\r
+  --INCREMENTAL_MODE          => 1,\r
+  --FIXED_SIZE                => 100,\r
+  --FIXED_DELAY_MODE          => 1,\r
+  --UP_DOWN_MODE              => 0,\r
+  --UP_DOWN_LIMIT             => 100,\r
+  --FIXED_DELAY               => 100,\r
+\r
+  --NUMBER_OF_GBE_LINKS       => 1,\r
+  --LINKS_ACTIVE              => "0001",\r
+\r
+  --LINK_HAS_READOUT          => "0000",\r
+  --LINK_HAS_SLOWCTRL         => "0000",\r
+  --LINK_HAS_DHCP             => "0001",\r
+  --LINK_HAS_ARP              => "0001",\r
+  --LINK_HAS_PING             => "0001",\r
+  --LINK_HAS_FWD              => "0001"\r
+  --)\r
+  --port map(\r
+  --CLK_SYS_IN               => clk_sys,\r
+  --CLK_125_IN               => CLK_125,\r
+  --RESET                    => reset_i,\r
+  --GSR_N                    => GSR_N,\r
+  ---- Trigger\r
+  --TRIGGER_IN               => '0',\r
+  ---- SFP\r
+  --SD_PRSNT_N_IN(0)         => SFP_MOD_0,\r
+  --SD_LOS_IN(0)             => SFP_LOS,\r
+  --SD_TXDIS_OUT(0)          => SFP_TX_DIS,\r
+  ---- trigger channel\r
+  ---- only for LINK_HAS_READOUT\r
+  --CTS_NUMBER_IN            => (others => '0'),\r
+  --CTS_CODE_IN              => (others => '0'),\r
+  --CTS_INFORMATION_IN       => (others => '0'),\r
+  --CTS_READOUT_TYPE_IN      => (others => '0'),\r
+  --CTS_START_READOUT_IN     => '0',\r
+  --CTS_DATA_OUT             => open,\r
+  --CTS_DATAREADY_OUT        => open,\r
+  --CTS_READOUT_FINISHED_OUT => open,\r
+  --CTS_READ_IN              => '1',\r
+  --CTS_LENGTH_OUT           => open,\r
+  --CTS_ERROR_PATTERN_OUT    => open,\r
+  ---- data channel\r
+  ---- only for LINK_HAS_READOUT\r
+  --FEE_DATA_IN              => (others => '0'),\r
+  --FEE_DATAREADY_IN         => '0',\r
+  --FEE_READ_OUT             => open,\r
+  --FEE_STATUS_BITS_IN       => (others => '0'),\r
+  --FEE_BUSY_IN              => '0',\r
+  ---- unique adresses\r
+  --MC_UNIQUE_ID_IN          => timer.uid,\r
+  --MY_TRBNET_ADDRESS_IN     => timer.network_address,\r
+  --ISSUE_REBOOT_OUT         => open, --BUG: needs to be connected\r
+  ---- slow control by GbE\r
+  --GSC_CLK_IN               => open,\r
+  --GSC_INIT_DATAREADY_OUT   => open,\r
+  --GSC_INIT_DATA_OUT        => open,\r
+  --GSC_INIT_PACKET_NUM_OUT  => open,\r
+  --GSC_INIT_READ_IN         => '1',\r
+  --GSC_REPLY_DATAREADY_IN   => '0',\r
+  --GSC_REPLY_DATA_IN        => (others => '0'),\r
+  --GSC_REPLY_PACKET_NUM_IN  => (others => '0'),\r
+  --GSC_REPLY_READ_OUT       => open,\r
+  --GSC_BUSY_IN              => '0',\r
+  ---- readout\r
+  --BUS_IP_RX                => busgbeip_rx, -- registers inside GbE\r
+  --BUS_IP_TX                => busgbeip_tx, -- registers inside GbE\r
+  --BUS_REG_RX               => busgbereg_rx, -- registers inside GbE\r
+  --BUS_REG_TX               => busgbereg_tx, -- registers inside GbE\r
+  ---- Forwarder\r
+  --FWD_DST_MAC_IN(47 downto 0) => fwd_dst_mac,\r
+  --FWD_DST_IP_IN(31 downto 0)  => fwd_dst_ip,\r
+  --FWD_DST_UDP_IN(15 downto 0) => fwd_dst_port,\r
+  --FWD_DATA_IN(7 downto 0)     => fwd_data,\r
+  --FWD_DATA_VALID_IN(0)        => fwd_datavalid,\r
+  --FWD_SOP_IN(0)               => fwd_sop,\r
+  --FWD_EOP_IN(0)               => fwd_eop,\r
+  --FWD_READY_OUT(0)            => fwd_ready,\r
+  --FWD_FULL_OUT(0)             => fwd_full,\r
+  ---- reset\r
+  --MAKE_RESET_OUT           => open, -- reset by GbE --BUG: needs to be connected\r
+  ---- debug and status\r
+  --STATUS_OUT               => open,\r
+  --DEBUG_OUT                => open\r
+  --);\r
+\r
+\r
+\r
+-----------------------------------------------------------------------------\r
+---- Test registers\r
+-----------------------------------------------------------------------------\r
+--THE_REGS : process begin\r
+  --wait until rising_edge(clk_sys);\r
+  --busfwd_tx.ack <= '0';\r
+  --busfwd_tx.nack <= '0';\r
+  --busfwd_tx.unknown <= '0';\r
+\r
+  --if busfwd_rx.write = '1' then\r
+  --busfwd_tx.ack <= '1';\r
+  --case busfwd_rx.addr(7 downto 0) is\r
+  --when x"00" => fwd_dst_ip    <= busfwd_rx.data;\r
+  --when x"01" => fwd_dst_port  <= busfwd_rx.data(15 downto 0);\r
+  --when x"02" => fwd_dst_mac(31 downto 0)  <= busfwd_rx.data;\r
+  --when x"03" => fwd_dst_mac(47 downto 32) <= busfwd_rx.data(15 downto 0);\r
+  --when x"04" => fwd_length    <= busfwd_rx.data(15 downto 0);\r
+  --when x"05" => fwd_do_send   <= busfwd_rx.data(0);\r
+  --when others => busfwd_tx.ack <= '0'; busfwd_tx.unknown <= '1';\r
+  --end case;\r
+  --elsif busfwd_rx.read = '1' then\r
+  --busfwd_tx.ack <= '1';\r
+  --case busfwd_rx.addr(7 downto 0) is\r
+  --when x"00" => busfwd_tx.data <= fwd_dst_ip;\r
+  --when x"01" => busfwd_tx.data <= x"0000" & fwd_dst_port;\r
+  --when x"02" => busfwd_tx.data <= fwd_dst_mac(31 downto 0);\r
+  --when x"03" => busfwd_tx.data <= x"0000" & fwd_dst_mac(47 downto 32);\r
+  --when x"04" => busfwd_tx.data <= x"0000" & fwd_length;\r
+  --when x"05" => busfwd_tx.data <= x"0000000" & fwd_full & fwd_ready & "0" & fwd_do_send;\r
+  --when others => busfwd_tx.ack <= '0'; busfwd_tx.unknown <= '1';\r
+  --end case;\r
+  --end if;\r
+  --if reset_i = '1' then\r
+  --fwd_do_send <= '0';\r
+  --end if;\r
+--end process;\r
+\r
+\r
+---------------------------------------------------------------------------\r
+-- Output stage\r
+---------------------------------------------------------------------------\r
+  THE_OUT : entity work.testout\r
+    port map(\r
+      clkout => open,\r
+      refclk => clk_160,\r
+      reset  => reset_i,\r
+      data   => out_data,\r
+      data_cflag => open,\r
+      data_direction => (others => '0'),\r
+      data_loadn     => (others => '1'),\r
+      data_move      => (others => '0'),\r
+      dout           => out_i\r
+      );\r
+\r
+  PROC_OUT : process\r
+    variable cnt : integer range 0 to 7;\r
+  begin\r
+    wait until rising_edge(clk_160);\r
+    cnt := cnt + 1;\r
+    case cnt is\r
+      when 0 => out_data <= x"ffff";\r
+      when 1 => out_data <= x"ffff";\r
+      when 2 => out_data <= x"ffff";\r
+      when 3 => out_data <= x"0000";\r
+      when 4 => out_data <= x"5555";\r
+      when 5 => out_data <= x"5555";\r
+      when 6 => out_data <= x"5555";\r
+      when 7 => out_data <= x"5555";\r
+    end case;\r
+  end process;\r
+\r
+  -- H3(3 downto 0) <= out_i(3 downto 0);\r
+  -- H4(3 downto 0) <= out_i(7 downto 4);\r
+\r
 \r
 ---------------------------------------------------------------------------\r
 -- GBT Core\r