]> jspc29.x-matter.uni-frankfurt.de Git - trb3.git/commitdiff
*** empty log message ***
authorhadeshyp <hadeshyp>
Mon, 14 Jan 2013 15:30:34 +0000 (15:30 +0000)
committerhadeshyp <hadeshyp>
Mon, 14 Jan 2013 15:30:34 +0000 (15:30 +0000)
14 files changed:
base/panda_dirc_wasa1.lpf
base/trb3_central.lpf
cts/trb3_central.vhd
cts/trb3_central_constraints.lpf
hub/compile_periph_frankfurt.pl
hub/trb3_periph_hub.vhd
hub/trb3_periph_hub_constraints.lpf
tdc_releases/tdc_v1.1.1/Encoder_304_Bit.vhd
trb3_gbe/compile_central_frankfurt.pl
trb3_gbe/trb3_central.prj
trb3_gbe/trb3_central.vhd
trb3_gbe/trb3_central_constraints.lpf
wasa/panda_dirc_wasa.p2t [new file with mode: 0644]
wasa/panda_dirc_wasa.vhd

index f34ac0f1afcb4d4cd35a3a8f8475949ad7bc04c9..177666aec7b69b80b6d79c471c17c267e5fcb3d1 100644 (file)
@@ -21,17 +21,15 @@ MULTICYCLE TO PORT "SPI_*" 20.000000 ns ;
 #################################################################
 # I/O
 #################################################################
-
-
 LOCATE COMP "CON_1"    SITE "A4";
 LOCATE COMP "CON_2"    SITE "A5";
 LOCATE COMP "CON_3"    SITE "A3";
 LOCATE COMP "CON_4"    SITE "D6";
 LOCATE COMP "CON_5"    SITE "B7";
-LOCATE COMP "CON_6"   SITE "F7";
-LOCATE COMP "CON_7"   SITE "C8";
-LOCATE COMP "CON_8"   SITE "D8";
-LOCATE COMP "CON_9"   SITE "F8";
+LOCATE COMP "CON_6"    SITE "F7";
+LOCATE COMP "CON_7"    SITE "C8";
+LOCATE COMP "CON_8"    SITE "D8";
+LOCATE COMP "CON_9"    SITE "F8";
 LOCATE COMP "CON_10"   SITE "B9";
 LOCATE COMP "CON_11"   SITE "F9";
 LOCATE COMP "CON_12"   SITE "D10";
@@ -42,6 +40,26 @@ LOCATE COMP "CON_16"   SITE "C12";
 DEFINE PORT GROUP "CON_group" "CON*" ;
 IOBUF GROUP  "CON_group" IO_TYPE=LVDS25;
  
+
+# LOCATE COMP "CON_1"    SITE "A4";
+# LOCATE COMP "CON_2"    SITE "A5";
+# LOCATE COMP "CON_3"    SITE "A3";
+# LOCATE COMP "CON_4"    SITE "D6";
+# LOCATE COMP "CON_5"    SITE "B7";
+# LOCATE COMP "CON_6"   SITE "F7";
+# LOCATE COMP "CON_7"   SITE "C8";
+# LOCATE COMP "CON_8"   SITE "D8";
+# LOCATE COMP "CON_9"   SITE "F8";
+# LOCATE COMP "CON_10"   SITE "B9";
+# LOCATE COMP "CON_11"   SITE "F9";
+# LOCATE COMP "CON_12"   SITE "D10";
+# LOCATE COMP "CON_13"   SITE "A11";
+# LOCATE COMP "CON_14"   SITE "B11";
+# LOCATE COMP "CON_15"   SITE "B13";
+# LOCATE COMP "CON_16"   SITE "C12";
+# DEFINE PORT GROUP "CON_group" "CON*" ;
+# IOBUF GROUP  "CON_group" IO_TYPE=LVDS25;
  
 LOCATE COMP "INP_1"    SITE "T2";
 LOCATE COMP "INP_2"    SITE "T3";
index 7edfa4fa51fb333ec61f1f350aea550181dc296d..ec8db6c7b98814811b7ae1a27d8324af0cf13791 100644 (file)
@@ -61,7 +61,12 @@ LOCATE COMP  "TRIGGER_EXT_3"   SITE "W4"; #was EXT_TRIG_2
 DEFINE PORT GROUP "TRIGGER_EXT_group" "TRIGGER_EXT*" ;
 IOBUF GROUP  "TRIGGER_EXT_group" IO_TYPE=LVDS25;
 
-
+LOCATE COMP  "CLK_TEST_OUT_2"   SITE "Y34";
+IOBUF  PORT  "CLK_TEST_OUT_2"  IO_TYPE=LVDS25 ; 
+LOCATE COMP  "CLK_TEST_OUT_1"   SITE "W4";
+IOBUF  PORT  "CLK_TEST_OUT_1"  IO_TYPE=LVDS25 ; 
+LOCATE COMP  "CLK_TEST_OUT_0"   SITE "U9";
+IOBUF  PORT  "CLK_TEST_OUT_0"  IO_TYPE=LVDS25 ; 
 
 
 #################################################################
index a0d158a3f4a7dafad52cdcb555a467636300fc2e..19119fdcfcfadd11b88359e3dc034f8a15b31a04 100644 (file)
@@ -64,9 +64,10 @@ entity trb3_central is
     --Trigger
     TRIGGER_LEFT                   : in  std_logic;  --left side trigger input from fan-out
     TRIGGER_RIGHT                  : in  std_logic;  --right side trigger input from fan-out
-    TRIGGER_EXT                    : in  std_logic_vector(4 downto 2); --additional trigger from RJ45
+    TRIGGER_EXT                    : in  std_logic_vector(2 downto 2); --additional trigger from RJ45
     TRIGGER_OUT                    : out std_logic;  --trigger to second input of fan-out
     TRIGGER_OUT2                   : out std_logic;
+    RXCLK_OUT                      : out std_logic;
     
     --Serdes
     CLK_SERDES_INT_LEFT            : in  std_logic;  --Clock Manager 2/0, 200 MHz, only in case of problems
@@ -190,7 +191,7 @@ architecture trb3_central_arch of trb3_central is
 
   --FPGA Test
   signal time_counter, time_counter2 : unsigned(31 downto 0);
-
+  signal rx_clock : std_logic;
   --Media Interface
   signal med_stat_op             : std_logic_vector (5*16-1  downto 0);
   signal med_ctrl_op             : std_logic_vector (5*16-1  downto 0);
@@ -302,8 +303,7 @@ architecture trb3_central_arch of trb3_central is
   signal cts_rdo_invalid_trg         : std_logic;
 
   signal cts_rdo_trg_status_bits,
-    cts_rdo_trg_status_bits_cts,
-    cts_rdo_trg_status_bits_additional: std_logic_vector(31 downto 0) := (others => '0');
+    cts_rdo_trg_status_bits_cts      : std_logic_vector(31 downto 0) := (others => '0');
   signal cts_rdo_data                : std_logic_vector(31 downto 0);
   signal cts_rdo_write               : std_logic;
   signal cts_rdo_finished            : std_logic;
@@ -313,10 +313,17 @@ architecture trb3_central_arch of trb3_central is
   signal cts_ext_control             : std_logic_vector(31 downto 0);
   signal cts_ext_debug               : std_logic_vector(31 downto 0);
 
-  signal cts_rdo_additional_data     : std_logic_vector(31 downto 0);
-  signal cts_rdo_additional_write    : std_logic := '0';
-  signal cts_rdo_additional_finished : std_logic := '0';
-
+  signal cts_rdo_additional_data            : std_logic_vector(63 downto 0);
+  signal cts_rdo_additional_write           : std_logic_vector(1 downto 0) := "00";
+  signal cts_rdo_additional_finished        : std_logic_vector(1 downto 0) := "00";
+  signal cts_rdo_trg_status_bits_additional : std_logic_vector(63 downto 0) := (others => '0');
+  signal cts_rdo_trg_type                   : std_logic_vector(3 downto 0);
+  signal cts_rdo_trg_code                   : std_logic_vector(7 downto 0);
+  signal cts_rdo_trg_information            : std_logic_vector(23 downto 0);
+  signal cts_rdo_trg_number                 : std_logic_vector(15 downto 0);
+      
+  
+  
   signal cts_trg_send                : std_logic;
   signal cts_trg_type                : std_logic_vector(3 downto 0);
   signal cts_trg_number              : std_logic_vector(15 downto 0);
@@ -446,10 +453,10 @@ begin
       TRG_SYNC_OUT => cts_ext_trigger,
       
       TRIGGER_IN     => cts_rdo_trg_data_valid,
-      DATA_OUT       => cts_rdo_additional_data,
-      WRITE_OUT      => cts_rdo_additional_write,
-      STATUSBIT_OUT  => cts_rdo_trg_status_bits_additional,
-      FINISHED_OUT   => cts_rdo_additional_finished,
+      DATA_OUT       => cts_rdo_additional_data(31 downto 0),
+      WRITE_OUT      => cts_rdo_additional_write(0),
+      STATUSBIT_OUT  => cts_rdo_trg_status_bits_additional(31 downto 0),
+      FINISHED_OUT   => cts_rdo_additional_finished(0),
 
       CONTROL_REG_IN => cts_ext_control,
       STATUS_REG_OUT => cts_ext_status,
@@ -458,7 +465,8 @@ begin
    );
 
    trigger_in_buf_i(1 downto 0) <= CLK_EXT;
-   trigger_in_buf_i(3 downto 2) <= TRIGGER_EXT(3 downto 2);
+   trigger_in_buf_i(2 downto 2) <= TRIGGER_EXT(2 downto 2);
+   trigger_in_buf_i(3)          <= '0';
 
  THE_CTS: CTS 
    generic map (
@@ -611,7 +619,7 @@ THE_MEDIA_UPLINK : trb_net16_med_ecp3_sfp
     MED_PACKET_NUM_OUT => med_packet_num_in(14 downto 12),
     MED_DATAREADY_OUT  => med_dataready_in(4),
     MED_READ_IN        => med_read_out(4),
-    REFCLK2CORE_OUT    => open,
+    REFCLK2CORE_OUT    => rx_clock,
     --SFP Connection
     SD_RXD_P_IN        => SFP_RX_P(1),
     SD_RXD_N_IN        => SFP_RX_N(1),
@@ -703,18 +711,18 @@ THE_MEDIA_ONBOARD : trb_net16_med_ecp3_sfp_4_onboard
     CLOCK_FREQUENCY                  => 100,
     USE_ONEWIRE                      => c_YES,
     BROADCAST_SPECIAL_ADDR           => x"35",
-    RDO_ADDITIONAL_PORT              => c_YES,
+    RDO_ADDITIONAL_PORT              => 2,
     RDO_DATA_BUFFER_DEPTH            => 9,
     RDO_DATA_BUFFER_FULL_THRESH      => 2**9-128,
     RDO_HEADER_BUFFER_DEPTH          => 9,
-    RDO_HEADER_BUFFER_FULL_THRESH    => 2**9-128         
+    RDO_HEADER_BUFFER_FULL_THRESH    => 2**9-16  
     )
   port map( 
          CLK                     => clk_100_i,
          RESET                   => reset_i,
          CLK_EN                  => '1',
  
-         --Media interfacces
+-- Media interfacces ---------------------------------------------------------------
          MED_DATAREADY_OUT(5*1-1 downto 0)   => med_dataready_out,
          MED_DATA_OUT(5*16-1 downto 0)       => med_data_out,
          MED_PACKET_NUM_OUT(5*3-1 downto 0)  => med_packet_num_out,
@@ -763,23 +771,29 @@ THE_MEDIA_ONBOARD : trb_net16_med_ecp3_sfp_4_onboard
     CTS_IPU_BUSY_OUT               => cts_ipu_busy,
     
 -- CTS Data Readout ----------------------------------------------------------------
-    --Trigger In
+    --Trigger to CTS out
     RDO_TRIGGER_IN                 => cts_rdo_trigger,
     RDO_TRG_DATA_VALID_OUT         => cts_rdo_trg_data_valid,
     RDO_VALID_TIMING_TRG_OUT       => cts_rdo_valid_timing_trg,
     RDO_VALID_NOTIMING_TRG_OUT     => cts_rdo_valid_notiming_trg,
     RDO_INVALID_TRG_OUT            => cts_rdo_invalid_trg,
-    --Data out
+    RDO_TRG_TYPE_OUT               => cts_rdo_trg_type,
+    RDO_TRG_CODE_OUT               => cts_rdo_trg_code,
+    RDO_TRG_INFORMATION_OUT        => cts_rdo_trg_information,
+    RDO_TRG_NUMBER_OUT             => cts_rdo_trg_number,
+          
+    --Data from CTS in
     RDO_TRG_STATUSBITS_IN          => cts_rdo_trg_status_bits_cts,
     RDO_DATA_IN                    => cts_rdo_data,
     RDO_DATA_WRITE_IN              => cts_rdo_write,
     RDO_DATA_FINISHED_IN           => cts_rdo_finished,
-    
+    --Data from additional modules
     RDO_ADDITIONAL_STATUSBITS_IN   => cts_rdo_trg_status_bits_additional,
     RDO_ADDITIONAL_DATA            => cts_rdo_additional_data,
     RDO_ADDITIONAL_WRITE           => cts_rdo_additional_write,
     RDO_ADDITIONAL_FINISHED        => cts_rdo_additional_finished,
     
+-- Slow Control --------------------------------------------------------------------
          COMMON_STAT_REGS        => common_stat_regs, --open,
          COMMON_CTRL_REGS        => common_ctrl_regs, --open,
          ONEWIRE                 => TEMPSENS,
@@ -1091,12 +1105,15 @@ THE_BUS_HANDLER : trb_net16_regio_bus_handler
     );
 
 
-PROC_TDC_CTRL_REG : process begin
+PROC_TDC_CTRL_REG : process 
+  variable pos : integer;
+begin
   wait until rising_edge(clk_100_i);
-  tdc_ctrl_data_out <= tdc_ctrl_reg(to_integer(unsigned(tdc_ctrl_addr))*32+31 downto to_integer(unsigned(tdc_ctrl_addr))*32);
+  pos := to_integer(unsigned(tdc_ctrl_addr))*32;
+  tdc_ctrl_data_out <= tdc_ctrl_reg(pos+31 downto pos);
   last_tdc_ctrl_read <= tdc_ctrl_read;
-  if tdc_ctrl_read = '1' then
-    tdc_ctrl_reg(to_integer(unsigned(tdc_ctrl_addr))*32+31 downto to_integer(unsigned(tdc_ctrl_addr))*32) <= tdc_ctrl_data_in;
+  if tdc_ctrl_write = '1' then
+    tdc_ctrl_reg(pos+31 downto pos) <= tdc_ctrl_data_in;
   end if;
 end process;
     
@@ -1180,27 +1197,27 @@ THE_FPGA_REBOOT : fpga_reboot
       TRG_WIN_PRE           => tdc_ctrl_reg(42 downto 32),  -- Pre-Trigger window width
       TRG_WIN_POST          => tdc_ctrl_reg(58 downto 48),  -- Post-Trigger window width
       --
+      
       -- Trigger signals from handler
---       TRG_DATA_VALID_IN     => trg_data_valid_i,  -- trig data valid signal from trbnet
---       VALID_TIMING_TRG_IN   => trg_timing_valid_i,  -- valid timing trigger signal from trbnet
---       VALID_NOTIMING_TRG_IN => trg_notiming_valid_i,  -- valid notiming signal from trbnet
---       INVALID_TRG_IN        => trg_invalid_i,  -- invalid trigger signal from trbnet
---       TMGTRG_TIMEOUT_IN     => trg_timeout_detected_i,  -- timing trigger timeout signal from trbnet
---       SPIKE_DETECTED_IN     => trg_spike_detected_i,
---       MULTI_TMG_TRG_IN      => trg_multiple_trg_i,
---       SPURIOUS_TRG_IN       => trg_spurious_trg_i,
---       --
---       TRG_NUMBER_IN         => trg_number_i,  -- LVL1 trigger information package
---       TRG_CODE_IN           => trg_code_i,  --
---       TRG_INFORMATION_IN    => trg_information_i,   --
---       TRG_TYPE_IN           => trg_type_i,  -- LVL1 trigger information package
---       --
+      TRG_DATA_VALID_IN     => cts_rdo_trg_data_valid,  -- trig data valid signal from trbnet
+      VALID_TIMING_TRG_IN   => cts_rdo_valid_timing_trg,  -- valid timing trigger signal from trbnet
+      VALID_NOTIMING_TRG_IN => cts_rdo_valid_notiming_trg,  -- valid notiming signal from trbnet
+      INVALID_TRG_IN        => cts_rdo_invalid_trg,  -- invalid trigger signal from trbnet
+      TMGTRG_TIMEOUT_IN     => '0',  -- timing trigger timeout signal from trbnet
+      SPIKE_DETECTED_IN     => '0',
+      MULTI_TMG_TRG_IN      => '0',
+      SPURIOUS_TRG_IN       => '0',
+      --
+      TRG_NUMBER_IN         => cts_rdo_trg_number,  -- LVL1 trigger information package
+      TRG_CODE_IN           => cts_rdo_trg_code,  --
+      TRG_INFORMATION_IN    => cts_rdo_trg_information,   --
+      TRG_TYPE_IN           => cts_rdo_trg_type,  -- LVL1 trigger information package
       --Response to handler
 --       TRG_RELEASE_OUT       => fee_trg_release_i,   -- trigger release signal
---       TRG_STATUSBIT_OUT     => fee_trg_statusbits_i,  -- status information of the tdc
---       DATA_OUT              => fee_data_i,  -- tdc data
---       DATA_WRITE_OUT        => fee_data_write_i,  -- data valid signal
---       DATA_FINISHED_OUT     => fee_data_finished_i,  -- readout finished signal
+      TRG_STATUSBIT_OUT     => cts_rdo_trg_status_bits_additional(63 downto 32),  -- status information of the tdc
+      DATA_OUT              => cts_rdo_additional_data(63 downto 32),  -- tdc data
+      DATA_WRITE_OUT        => cts_rdo_additional_write(1),  -- data valid signal
+      DATA_FINISHED_OUT     => cts_rdo_additional_finished(1),  -- readout finished signal
       --
       --Hit Counter Bus
       HCB_READ_EN_IN        => hitreg_read_en,    -- bus read en strobe
@@ -1264,7 +1281,7 @@ end process;
 
   TRIGGER_OUT    <= cts_trigger_out;
   TRIGGER_OUT2   <= cts_trigger_out;
-
+  cts_rdo_trigger <= cts_trigger_out;
 ---------------------------------------------------------------------------
 -- FPGA communication
 ---------------------------------------------------------------------------
@@ -1312,7 +1329,7 @@ LED_ORANGE <= debug(1);
 LED_RED <= debug(2);
 LED_YELLOW <= link_ok; --debug(3);
 
-
+RXCLK_OUT <= rx_clock;
 ---------------------------------------------------------------------------
 -- Test Connector
 ---------------------------------------------------------------------------    
index 9ee332749c2f491d6394cd8692bfc80fe4c88128..56f8b3e8887187d8390a1aef6c9017cb66ddb88c 100644 (file)
@@ -39,6 +39,8 @@ LOCATE UGROUP "THE_MEDIA_UPLINK/media_interface_group" REGION "MEDIA_UPLINK" ;
 REGION "MEDIA_ONBOARD" "R90C122" 20 40;\r
 LOCATE UGROUP "THE_MEDIA_ONBOARD/media_interface_group" REGION "MEDIA_ONBOARD" ;\r
 \r
+MULTICYCLE TO CELL "THE_MEDIA_DOWNLINK/SCI_DATA_OUT*" 50 ns;\r
+MULTICYCLE TO CELL "THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns;\r
 \r
 #SPI Interface\r
 REGION "REGION_SPI" "R13C150D" 12 16 DEVSIZE;\r
index d60e8085f0e60b77495f4082d1ad2a7ef5543282..50dcdda5514b842b24c69c87e0f07a1a504e5d44 100755 (executable)
@@ -9,14 +9,14 @@ use strict;
 ###################################################################################
 #Settings for this project
 my $TOPNAME                      = "trb3_periph_hub";  #Name of top-level entity
-my $lattice_path                 = '/d/jspc29/lattice/diamond/1.4.2.105';
+my $lattice_path                 = '/d/jspc29/lattice/diamond/2.01';
 my $synplify_path                = '/d/jspc29/lattice/synplify/F-2012.03-SP1/';
 my $lm_license_file_for_synplify = "27000\@lxcad01.gsi.de";
 my $lm_license_file_for_par      = "1702\@hadeb05.gsi.de";
 ###################################################################################
 
 
-
+$ENV{'PAR_DESIGN_NAME'}=$TOPNAME;
 
 
 
index c9c67efe5ed08440ebf51d8aa6c4a2258b20e3e2..75ac24b81ad6c320b7ec82a76f19822ddaf6f453 100644 (file)
@@ -12,6 +12,9 @@ use work.version.all;
 
 
 entity trb3_periph_hub is
+  generic(
+    SYNC_MODE : integer range 0 to 1 := c_NO   --use the RX clock for internal logic and transmission. 4 SFP links only.
+    );
   port(
     --Clocks
     CLK_GPLL_LEFT  : in std_logic;      --Clock Manager 1/(2468), 125 MHz
@@ -121,6 +124,10 @@ architecture trb3_periph_hub_arch of trb3_periph_hub is
   signal GSR_N                    : std_logic;
   attribute syn_keep of GSR_N     : signal is true;
   attribute syn_preserve of GSR_N : signal is true;
+  signal clk_100_internal         : std_logic;
+  signal clk_200_internal         : std_logic;
+  signal rx_clock_100             : std_logic;
+  signal rx_clock_200             : std_logic;
 
   --Media Interface
   signal med_stat_op        : std_logic_vector (7*16-1 downto 0);
@@ -218,7 +225,7 @@ begin
     port map(
       CLEAR_IN      => '0',              -- reset input (high active, async)
       CLEAR_N_IN    => '1',              -- reset input (low active, async)
-      CLK_IN        => clk_200_i,        -- raw master clock, NOT from PLL/DLL!
+      CLK_IN        => clk_200_internal, -- raw master clock, NOT from PLL/DLL!
       SYSCLK_IN     => clk_100_i,        -- PLL/DLL remastered clock
       PLL_LOCKED_IN => pll_lock,         -- master PLL lock signal (async)
       RESET_IN      => '0',              -- general reset signal (SYSCLK)
@@ -236,15 +243,26 @@ begin
   THE_MAIN_PLL : pll_in200_out100
     port map(
       CLK   => CLK_GPLL_RIGHT,
-      CLKOP => clk_100_i,
-      CLKOK => clk_200_i,
+      CLKOP => clk_100_internal,
+      CLKOK => clk_200_internal,
       LOCK  => pll_lock
       );
+      
+gen_sync_clocks : if SYNC_MODE = c_YES generate
+  clk_100_i <= rx_clock_100;
+  clk_200_i <= rx_clock_200;
+end generate;
+
+gen_local_clocks : if SYNC_MODE = c_NO generate
+  clk_100_i <= clk_100_internal;
+  clk_200_i <= clk_200_internal;
+end generate;
 
 
 ---------------------------------------------------------------------------
 -- The TrbNet media interface (to other FPGA)
 ---------------------------------------------------------------------------
+gen_full_media : if SYNC_MODE = c_NO generate
   THE_MEDIA_UPLINK : trb_net16_med_ecp3_sfp_4
     generic map(
       REVERSE_ORDER => c_NO,              --order of ports
@@ -339,48 +357,62 @@ begin
       STAT_DEBUG         => open,
       CTRL_DEBUG         => (others => '0')
       );
+end generate; 
+gen_sync_media : if SYNC_MODE = c_YES generate 
+  med_stat_op(3*16+15 downto 3*16) <= x"0007";
+  med_stat_op(5*16+15 downto 5*16) <= x"0007";  
   
-  
-  
---   trb_net16_med_ecp3_sfp
---     generic map(
---       SERDES_NUM  => 1,                 --number of serdes in quad
---       EXT_CLOCK   => c_NO,              --use internal clock
---       USE_200_MHZ => c_YES              --run on 200 MHz clock
---       )
---     port map(
---       CLK                => clk_200_i,
---       SYSCLK             => clk_100_i,
---       RESET              => reset_i,
---       CLEAR              => clear_i,
---       CLK_EN             => '1',
---       --Internal Connection
---       MED_DATA_IN        => med_data_out(15 downto 0),
---       MED_PACKET_NUM_IN  => med_packet_num_out(2 downto 0),
---       MED_DATAREADY_IN   => med_dataready_out(0),
---       MED_READ_OUT       => med_read_in(0),
---       MED_DATA_OUT       => med_data_in(15 downto 0),
---       MED_PACKET_NUM_OUT => med_packet_num_in(2 downto 0),
---       MED_DATAREADY_OUT  => med_dataready_in(0),
---       MED_READ_IN        => med_read_out(0),
---       REFCLK2CORE_OUT    => open,
---       --SFP Connection
---       SD_RXD_P_IN        => SERDES_INT_RX(2),
---       SD_RXD_N_IN        => SERDES_INT_RX(3),
---       SD_TXD_P_OUT       => SERDES_INT_TX(2),
---       SD_TXD_N_OUT       => SERDES_INT_TX(3),
---       SD_REFCLK_P_IN     => open,
---       SD_REFCLK_N_IN     => open,
---       SD_PRSNT_N_IN      => FPGA5_COMM(0),
---       SD_LOS_IN          => FPGA5_COMM(0),
---       SD_TXDIS_OUT       => FPGA5_COMM(2),
---       -- Status and control port
---       STAT_OP            => med_stat_op(15 downto 0),
---       CTRL_OP            => med_ctrl_op(15 downto 0),
---       STAT_DEBUG         => med_stat_debug(63 downto 0),
---       CTRL_DEBUG         => (others => '0')
---       );
-
+  THE_MEDIA_UPLINK : trb_net16_med_ecp3_sfp
+  generic map(
+      SERDES_NUM  => 1,     --number of serdes in quad
+      EXT_CLOCK   => c_NO,  --use internal clock
+      USE_200_MHZ => c_YES, --run on 200 MHz clock
+      USE_CTC     => c_NO,
+      USE_SLAVE   =>  c_YES
+      )
+    port map(
+      CLK                => clk_200_internal,
+      SYSCLK             => clk_100_i,
+      RESET              => reset_i,
+      CLEAR              => clear_i,
+      CLK_EN             => '1',
+      --Internal Connection
+      MED_DATA_IN        => med_data_out(15 downto 0),
+      MED_PACKET_NUM_IN  => med_packet_num_out(2 downto 0),
+      MED_DATAREADY_IN   => med_dataready_out(0),
+      MED_READ_OUT       => med_read_in(0),
+      MED_DATA_OUT       => med_data_in(15 downto 0),
+      MED_PACKET_NUM_OUT => med_packet_num_in(2 downto 0),
+      MED_DATAREADY_OUT  => med_dataready_in(0),
+      MED_READ_IN        => med_read_out(0),
+      REFCLK2CORE_OUT    => open,
+      CLK_RX_HALF_OUT    => rx_clock_100,
+      CLK_RX_FULL_OUT    => rx_clock_200,
+      --SFP Connection
+      SD_RXD_P_IN        => SERDES_ADDON_RX(8),
+      SD_RXD_N_IN        => SERDES_ADDON_RX(9),
+      SD_TXD_P_OUT       => SERDES_ADDON_TX(8),
+      SD_TXD_N_OUT       => SERDES_ADDON_TX(9),
+      SD_REFCLK_P_IN     => open,
+      SD_REFCLK_N_IN     => open,
+      SD_PRSNT_N_IN      => FPGA5_COMM(0),
+      SD_LOS_IN          => FPGA5_COMM(0),
+      SD_TXDIS_OUT       => FPGA5_COMM(2),
+      
+      SCI_DATA_IN        => sci1_data_in,
+      SCI_DATA_OUT       => sci1_data_out,
+      SCI_ADDR           => sci1_addr,
+      SCI_READ           => sci1_read,
+      SCI_WRITE          => sci1_write,
+      SCI_ACK            => sci1_ack,      
+      -- Status and control port
+      STAT_OP            => med_stat_op(15 downto 0),
+      CTRL_OP            => med_ctrl_op(15 downto 0),
+      STAT_DEBUG         => med_stat_debug(63 downto 0),
+      CTRL_DEBUG         => (others => '0')
+      );
+end generate;
       
 THE_MEDIA_DOWNLINK : trb_net16_med_ecp3_sfp_4
     generic map(
@@ -477,8 +509,7 @@ THE_MEDIA_DOWNLINK : trb_net16_med_ecp3_sfp_4
       CTRL_DEBUG         => (others => '0')
       );
 
--- med_stat_op(3*16+15 downto 3*16) <= x"0007";
--- med_stat_op(5*16+15 downto 5*16) <= x"0007";
+
       
 ---------------------------------------------------------------------------
 -- Hub
index 2665b6c3ea4e98402b966a3b4ee30b3e2af7c684..1c2deb02f4532d5d71f2357e232e6bfffed210dc 100644 (file)
@@ -24,8 +24,10 @@ GSR_NET NET "GSR_N";
 #################################################################
 # Locate Serdes and media interfaces
 #################################################################
-LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_1_200_THE_SERDES/PCSD_INST" SITE "PCSA" ;
-LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_200/PCSD_INST" SITE "PCSA" ;
+LOCATE COMP   "gen_sync_media_THE_MEDIA_UPLINK/gen_serdes_1_200_THE_SERDES/PCSD_INST" SITE "PCSA" ;
+LOCATE COMP   "gen_sync_media_THE_MEDIA_UPLINK/gen_serdes_1_200_ctc_THE_SERDES/PCSD_INST" SITE "PCSA" ;
+LOCATE COMP   "gen_full_media_THE_MEDIA_UPLINK/gen_serdes_200/PCSD_INST" SITE "PCSA" ;
+
 LOCATE COMP   "THE_MEDIA_DOWNLINK/gen_serdes_200/PCSD_INST" SITE "PCSB" ;
 
 
@@ -37,7 +39,8 @@ REGION "REGION_IOBUF" "R10C43D"  88 86 DEVSIZE;
 LOCATE UGROUP "THE_SPI_MASTER/SPI_group" REGION "REGION_SPI" ; 
 LOCATE UGROUP "THE_SPI_MEMORY/SPI_group" REGION "REGION_SPI" ;
 
-LOCATE UGROUP "THE_MEDIA_UPLINK/media_interface_group" REGION "MEDIA_UPLINK" ;
+LOCATE UGROUP "gen_sync_media_THE_MEDIA_UPLINK/media_interface_group" REGION "MEDIA_UPLINK" ;
+LOCATE UGROUP "gen_full_media_THE_MEDIA_UPLINK/media_interface_group" REGION "MEDIA_UPLINK" ;
 LOCATE UGROUP "THE_MEDIA_DOWNLINK/media_interface_group" REGION "MEDIA_DOWNLINK" ;
 
 #LOCATE UGROUP "THE_HUB/gen_muxes_0_MPLEX/MUX_group" REGION "REGION_IOBUF" ;
@@ -126,5 +129,6 @@ LOCATE UGROUP "THE_HUB/gen_bufs_0_gen_iobufs_3_gen_iobuf_IOBUF/genINITOBUF2_gen_
 
 
 MULTICYCLE TO CELL "THE_MEDIA_DOWNLINK/SCI_DATA_OUT*" 50 ns;
-MULTICYCLE TO CELL "THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns;
+MULTICYCLE TO CELL "gen_full_media_THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns;
+MULTICYCLE TO CELL "gen_sync_media_THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns;
 
index df471dd11c7c93266727261a460f77fcbdb0e51b..79de25de9d7000418e4414612b7189f25fc1590f 100644 (file)
@@ -99,6 +99,7 @@ architecture behavioral of Encoder_304_Bit is
   signal proc_finished_3 : std_logic;
   signal proc_finished_4 : std_logic;
   signal conv_finished_i : std_logic;
+  signal thermocode_i    : std_logic_vector(303 downto -1);
 
   attribute syn_keep                     : boolean;
   attribute syn_keep of mux_control      : signal is true;
@@ -109,6 +110,11 @@ architecture behavioral of Encoder_304_Bit is
 -------------------------------------------------------------------------------
 begin
 
+
+ thermocode_i(303 downto 0)   <= THERMOCODE_IN;
+ thermocode_i(-1)             <= '1';
   --purpose : Register signals
   Register_Signals : process (CLK, RESET)
   begin
@@ -201,11 +207,19 @@ begin
   end process Interval_Number_to_Binary;
 
   Interval_Selection : process (CLK, RESET)
+  variable tmp : std_logic_vector(8 downto 0);
   begin  -- The interval with the 0-1 transition is selected.
     if rising_edge(CLK) then
       if RESET = '1' then
         interval_reg  <= (others => '0');
       else
+--       tmp := (others => '0');
+--       make_mux : for i in 0 to 37 loop
+--         make_mux_2 : for j in 0 to 8 loop
+--           tmp(j) := tmp(j) or (thermocode_i(i*8-1+j) and P_one(j));
+--         end loop;
+--       end loop;
+--       interval_reg <= tmp;
         case mux_control is
           when "000001" => interval_reg <= THERMOCODE_IN(7 downto 0) & '1';
           when "000010" => interval_reg <= THERMOCODE_IN(15 downto 7);
index 463cc7ec6f8a758d8901a959ed606e1af87c62f9..475f7a31a7dc734c630f1f922ba158ee9ca260a3 100755 (executable)
@@ -9,7 +9,7 @@ use strict;
 ###################################################################################
 #Settings for this project
 my $TOPNAME                      = "trb3_central";  #Name of top-level entity
-my $lattice_path                 = '/d/jspc29/lattice/diamond/1.4.2.105';
+my $lattice_path                 = '/d/jspc29/lattice/diamond/2.01';
 # my $synplify_path                = '/d/jspc29/lattice/synplify/fpga_e201103/';
 my $synplify_path                = '/d/jspc29/lattice/synplify/F-2012.03-SP1/';
 my $lm_license_file_for_synplify = "27000\@lxcad01.gsi.de";
index bb54e25277ff54c3704d74ed273feb10735cbbf5..950d079ed2b69f195ff7d51a19d402a7b997b31d 100644 (file)
@@ -196,12 +196,14 @@ add_file -vhdl -lib work "../../trbnet/lattice/ecp3/trb_net16_fifo_arch.vhd"
 add_file -vhdl -lib work "../../trbnet/lattice/ecp3/trb_net_fifo_16bit_bram_dualport.vhd"
 
 add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp3_sfp/serdes_onboard_full.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp3_sfp/serdes_full_ctc.vhd"
 add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp3_sfp/sfp_0_200_ctc.vhd"
 add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp3_sfp/sfp_0_200_int.vhd"
 
 add_file -vhdl -lib work "../../trbnet/media_interfaces/trb_net16_lsm_sfp.vhd"
 add_file -vhdl -lib work "../../trbnet/media_interfaces/trb_net16_med_ecp3_sfp.vhd"
 add_file -vhdl -lib work "../../trbnet/media_interfaces/trb_net16_med_ecp3_sfp_4_onboard.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/trb_net16_med_ecp3_sfp_4.vhd"
 
 add_file -vhdl -lib work "../base/cores/pll_in200_out100.vhd"
 add_file -vhdl -lib work "./trb3_central.vhd"
index c03699d03702ff75bd1ff7812ef23307d2e17008..db5345bf7d6d67274a57a105b525247b42a4ece9 100644 (file)
@@ -15,22 +15,23 @@ use work.trb_net_gbe_components.all;
 
 entity trb3_central is
   generic (
-    USE_ETHERNET : integer range c_NO to c_YES := c_NO
+    USE_ETHERNET : integer range c_NO to c_YES := c_NO;
+    SYNC_MODE    : integer range c_NO to c_YES := c_NO
   );
   port(
     --Clocks
-    CLK_EXT                        : in  std_logic_vector(4 downto 3); --from RJ45
+--     CLK_EXT                        : in  std_logic_vector(4 downto 3); --from RJ45
     CLK_GPLL_LEFT                  : in  std_logic;  --Clock Manager 2/9, 200 MHz  <-- MAIN CLOCK
     CLK_GPLL_RIGHT                 : in  std_logic;  --Clock Manager 1/9, 125 MHz  <-- for GbE
     CLK_PCLK_LEFT                  : in  std_logic;  --Clock Fan-out, 200/400 MHz 
     CLK_PCLK_RIGHT                 : in  std_logic;  --Clock Fan-out, 200/400 MHz 
+    CLK_TEST_OUT                   : out std_logic_vector(2 downto 0);
 
     --Trigger
     TRIGGER_LEFT                   : in  std_logic;  --left side trigger input from fan-out
     TRIGGER_RIGHT                  : in  std_logic;  --right side trigger input from fan-out
-    TRIGGER_EXT                    : in  std_logic_vector(4 downto 2); --additional trigger from RJ45
+--     TRIGGER_EXT                    : in  std_logic_vector(4 downto 2); --additional trigger from RJ45
     TRIGGER_OUT                    : out std_logic;  --trigger to second input of fan-out
-    
     --Serdes
     CLK_SERDES_INT_LEFT            : in  std_logic;  --Clock Manager 2/0, 200 MHz, only in case of problems
     CLK_SERDES_INT_RIGHT           : in  std_logic;  --Clock Manager 1/0, off, 125 MHz possible
@@ -151,6 +152,11 @@ architecture trb3_central_arch of trb3_central is
   
   --FPGA Test
   signal time_counter, time_counter2 : unsigned(31 downto 0);
+  signal rx_clock : std_logic;
+  signal rx_clock_100 : std_logic;
+  signal rx_clock_200 : std_logic;
+  signal clk_100_internal : std_logic;
+  signal clk_200_internal : std_logic;
   
   --Media Interface
   signal med_stat_op             : std_logic_vector (5*16-1  downto 0);
@@ -194,7 +200,20 @@ architecture trb3_central_arch of trb3_central is
   signal spimem_addr             : std_logic_vector(5 downto 0);
   signal spimem_data_out         : std_logic_vector(31 downto 0);
   signal spimem_ack              : std_logic;
-
+  signal sci1_ack      : std_logic;
+  signal sci1_write    : std_logic;
+  signal sci1_read     : std_logic;
+  signal sci1_data_in  : std_logic_vector(7 downto 0);
+  signal sci1_data_out : std_logic_vector(7 downto 0);
+  signal sci1_addr     : std_logic_vector(8 downto 0);
+
+  signal sci2_ack      : std_logic;
+  signal sci2_write    : std_logic;
+  signal sci2_read     : std_logic;
+  signal sci2_data_in  : std_logic_vector(7 downto 0);
+  signal sci2_data_out : std_logic_vector(7 downto 0);
+  signal sci2_addr     : std_logic_vector(8 downto 0);  
+  
   signal spi_bram_addr           : std_logic_vector(7 downto 0);
   signal spi_bram_wr_d           : std_logic_vector(7 downto 0);
   signal spi_bram_rd_d           : std_logic_vector(7 downto 0);
@@ -275,7 +294,7 @@ THE_RESET_HANDLER : trb_net_reset_handler
   port map(
     CLEAR_IN        => '0',             -- reset input (high active, async)
     CLEAR_N_IN      => '1',             -- reset input (low active, async)
-    CLK_IN          => clk_200_i,       -- raw master clock, NOT from PLL/DLL!
+    CLK_IN          => clk_200_internal,-- raw master clock, NOT from PLL/DLL!
     SYSCLK_IN       => clk_100_i,       -- PLL/DLL remastered clock
     PLL_LOCKED_IN   => pll_lock,        -- master PLL lock signal (async)
     RESET_IN        => '0',             -- general reset signal (SYSCLK)
@@ -303,11 +322,20 @@ process begin
 THE_MAIN_PLL : pll_in200_out100
   port map(
     CLK    => CLK_GPLL_LEFT,
-    CLKOP  => clk_100_i,
-    CLKOK  => clk_200_i,
+    CLKOP  => clk_100_internal,--clk_100_i
+    CLKOK  => clk_200_internal,   --clk_200_i
     LOCK   => pll_lock
     );
 
+gen_sync_clocks : if SYNC_MODE = c_YES generate
+  clk_100_i <= rx_clock_100;
+  clk_200_i <= rx_clock_200;
+end generate;
+
+gen_local_clocks : if SYNC_MODE = c_NO generate
+  clk_100_i <= clk_100_internal;
+  clk_200_i <= clk_200_internal;
+end generate;
 
 ---------------------------------------------------------------------------
 -- The TrbNet media interface (Uplink)
@@ -317,10 +345,11 @@ THE_MEDIA_UPLINK : trb_net16_med_ecp3_sfp
     SERDES_NUM  => 0,     --number of serdes in quad
     EXT_CLOCK   => c_NO,  --use internal clock
     USE_200_MHZ => c_YES, --run on 200 MHz clock
-    USE_CTC     => c_YES
+    USE_CTC     => c_NO,
+    USE_SLAVE   =>  SYNC_MODE
     )
   port map(
-    CLK                => clk_200_i,
+    CLK                => clk_200_internal, --clk_200_i,
     SYSCLK             => clk_100_i,
     RESET              => reset_i,
     CLEAR              => clear_i,
@@ -335,6 +364,8 @@ THE_MEDIA_UPLINK : trb_net16_med_ecp3_sfp
     MED_DATAREADY_OUT  => med_dataready_in(4),
     MED_READ_IN        => med_read_out(4),
     REFCLK2CORE_OUT    => open,
+    CLK_RX_HALF_OUT    => rx_clock_100,
+    CLK_RX_FULL_OUT    => rx_clock_200,
     --SFP Connection
     SD_RXD_P_IN        => SFP_RX_P(1),
     SD_RXD_N_IN        => SFP_RX_N(1),
@@ -345,6 +376,13 @@ THE_MEDIA_UPLINK : trb_net16_med_ecp3_sfp
     SD_PRSNT_N_IN      => SFP_MOD0(1),
     SD_LOS_IN          => SFP_LOS(1),
     SD_TXDIS_OUT       => SFP_TXDIS(1),
+    
+    SCI_DATA_IN        => sci1_data_in,
+    SCI_DATA_OUT       => sci1_data_out,
+    SCI_ADDR           => sci1_addr,
+    SCI_READ           => sci1_read,
+    SCI_WRITE          => sci1_write,
+    SCI_ACK            => sci1_ack,    
     -- Status and control port
     STAT_OP            => med_stat_op(79 downto 64),
     CTRL_OP            => med_ctrl_op(79 downto 64),
@@ -360,7 +398,7 @@ SFP_TXDIS(7 downto 2) <= (others => '1');
 ---------------------------------------------------------------------------
 -- The TrbNet media interface (to other FPGA)
 ---------------------------------------------------------------------------
-THE_MEDIA_ONBOARD : trb_net16_med_ecp3_sfp_4_onboard
+THE_MEDIA_ONBOARD : trb_net16_med_ecp3_sfp_4
   port map(
     CLK                => clk_200_i,
     SYSCLK             => clk_100_i,
@@ -396,6 +434,13 @@ THE_MEDIA_ONBOARD : trb_net16_med_ecp3_sfp_4_onboard
     SD_TXDIS_OUT(1)    => FPGA2_COMM(0),
     SD_TXDIS_OUT(2)    => FPGA3_COMM(0),
     SD_TXDIS_OUT(3)    => FPGA4_COMM(0),
+    
+    SCI_DATA_IN       => sci2_data_in,
+    SCI_DATA_OUT      => sci2_data_out,
+    SCI_ADDR          => sci2_addr,
+    SCI_READ          => sci2_read,
+    SCI_WRITE         => sci2_write,
+    SCI_ACK           => sci2_ack,    
     -- Status and control port
     STAT_OP            => med_stat_op(63 downto 0),
     CTRL_OP            => med_ctrl_op(63 downto 0),
@@ -695,9 +740,9 @@ end generate;
 ---------------------------------------------------------------------------
 THE_BUS_HANDLER : trb_net16_regio_bus_handler
   generic map(
-    PORT_NUMBER    => 4,
-    PORT_ADDRESSES => (0 => x"d000", 1 => x"d100", 2 => x"8100", 3 => x"8300", others => x"0000"),
-    PORT_ADDR_MASK => (0 => 1,       1 => 6,       2 => 8,       3 => 8,       others => 0)
+    PORT_NUMBER    => 6,
+    PORT_ADDRESSES => (0 => x"d000", 1 => x"d100", 2 => x"8100", 3 => x"8300", 4 => x"b000", 5 => x"b200", others => x"0000"),
+    PORT_ADDR_MASK => (0 => 1,       1 => 6,       2 => 8,       3 => 8,       4 => 9,       5 => 9,       others => 0)
     )
   port map(
     CLK                   => clk_100_i,
@@ -739,31 +784,58 @@ THE_BUS_HANDLER : trb_net16_regio_bus_handler
     BUS_NO_MORE_DATA_IN(1)              => '0',
     BUS_UNKNOWN_ADDR_IN(1)              => '0',
 
-       -- third one - IP config memory
-       BUS_ADDR_OUT(3*16-1 downto 2*16) => mb_ip_mem_addr,
-       BUS_DATA_OUT(3*32-1 downto 2*32) => mb_ip_mem_data_wr,
-       BUS_READ_ENABLE_OUT(2)           => mb_ip_mem_read,
-       BUS_WRITE_ENABLE_OUT(2)          => mb_ip_mem_write,
-       BUS_TIMEOUT_OUT(2)               => open,
-       BUS_DATA_IN(3*32-1 downto 2*32)  => mb_ip_mem_data_rd,
-       BUS_DATAREADY_IN(2)              => mb_ip_mem_ack,
-       BUS_WRITE_ACK_IN(2)              => mb_ip_mem_ack,
-       BUS_NO_MORE_DATA_IN(2)           => '0',
-       BUS_UNKNOWN_ADDR_IN(2)           => '0',
-
-       -- gk 22.04.10
-       -- gbe setup
-       BUS_ADDR_OUT(4*16-1 downto 3*16) => gbe_stp_reg_addr,
-       BUS_DATA_OUT(4*32-1 downto 3*32) => gbe_stp_reg_data_wr,
-       BUS_READ_ENABLE_OUT(3)           => gbe_stp_reg_read,
-       BUS_WRITE_ENABLE_OUT(3)          => gbe_stp_reg_write,
-       BUS_TIMEOUT_OUT(3)               => open,
-       BUS_DATA_IN(4*32-1 downto 3*32)  => gbe_stp_reg_data_rd,
-       BUS_DATAREADY_IN(3)              => gbe_stp_reg_ack,
-       BUS_WRITE_ACK_IN(3)              => gbe_stp_reg_ack,
-       BUS_NO_MORE_DATA_IN(3)           => '0',
-       BUS_UNKNOWN_ADDR_IN(3)           => '0',
-
+    -- third one - IP config memory
+    BUS_ADDR_OUT(3*16-1 downto 2*16) => mb_ip_mem_addr,
+    BUS_DATA_OUT(3*32-1 downto 2*32) => mb_ip_mem_data_wr,
+    BUS_READ_ENABLE_OUT(2)           => mb_ip_mem_read,
+    BUS_WRITE_ENABLE_OUT(2)          => mb_ip_mem_write,
+    BUS_TIMEOUT_OUT(2)               => open,
+    BUS_DATA_IN(3*32-1 downto 2*32)  => mb_ip_mem_data_rd,
+    BUS_DATAREADY_IN(2)              => mb_ip_mem_ack,
+    BUS_WRITE_ACK_IN(2)              => mb_ip_mem_ack,
+    BUS_NO_MORE_DATA_IN(2)           => '0',
+    BUS_UNKNOWN_ADDR_IN(2)           => '0',
+
+    -- gk 22.04.10
+    -- gbe setup
+    BUS_ADDR_OUT(4*16-1 downto 3*16) => gbe_stp_reg_addr,
+    BUS_DATA_OUT(4*32-1 downto 3*32) => gbe_stp_reg_data_wr,
+    BUS_READ_ENABLE_OUT(3)           => gbe_stp_reg_read,
+    BUS_WRITE_ENABLE_OUT(3)          => gbe_stp_reg_write,
+    BUS_TIMEOUT_OUT(3)               => open,
+    BUS_DATA_IN(4*32-1 downto 3*32)  => gbe_stp_reg_data_rd,
+    BUS_DATAREADY_IN(3)              => gbe_stp_reg_ack,
+    BUS_WRITE_ACK_IN(3)              => gbe_stp_reg_ack,
+    BUS_NO_MORE_DATA_IN(3)           => '0',
+    BUS_UNKNOWN_ADDR_IN(3)           => '0',
+       
+    --SCI first Media Interface
+    BUS_READ_ENABLE_OUT(4)              => sci1_read,
+    BUS_WRITE_ENABLE_OUT(4)             => sci1_write,
+    BUS_DATA_OUT(4*32+7 downto 4*32)    => sci1_data_in,
+    BUS_DATA_OUT(4*32+31 downto 4*32+8) => open,
+    BUS_ADDR_OUT(4*16+8 downto 4*16)    => sci1_addr,
+    BUS_ADDR_OUT(4*16+15 downto 4*16+9) => open,
+    BUS_TIMEOUT_OUT(4)                  => open,
+    BUS_DATA_IN(4*32+7 downto 4*32)     => sci1_data_out,
+    BUS_DATAREADY_IN(4)                 => sci1_ack,
+    BUS_WRITE_ACK_IN(4)                 => sci1_ack,
+    BUS_NO_MORE_DATA_IN(4)              => '0',
+    BUS_UNKNOWN_ADDR_IN(4)              => '0',
+    --SCI second Media Interface
+    BUS_READ_ENABLE_OUT(5)              => sci2_read,
+    BUS_WRITE_ENABLE_OUT(5)             => sci2_write,
+    BUS_DATA_OUT(5*32+7 downto 5*32)    => sci2_data_in,
+    BUS_DATA_OUT(5*32+31 downto 5*32+8) => open,
+    BUS_ADDR_OUT(5*16+8 downto 5*16)    => sci2_addr,
+    BUS_ADDR_OUT(5*16+15 downto 5*16+9) => open,
+    BUS_TIMEOUT_OUT(5)                  => open,
+    BUS_DATA_IN(5*32+7 downto 5*32)     => sci2_data_out,
+    BUS_DATAREADY_IN(5)                 => sci2_ack,
+    BUS_WRITE_ACK_IN(5)                 => sci2_ack,
+    BUS_NO_MORE_DATA_IN(5)              => '0',
+    BUS_UNKNOWN_ADDR_IN(5)              => '0',
+    
     STAT_DEBUG  => open
     );
 
@@ -904,6 +976,8 @@ LED_YELLOW <= link_ok; --debug(3);
   
   TEST_LINE(31 downto 10) <= (others => '0');
 
+  CLK_TEST_OUT <= clk_200_i & rx_clock & clk_100_i;
+  
 
 --   FPGA1_CONNECTOR(0) <= '0';
   FPGA2_CONNECTOR(0) <= '0';
@@ -916,7 +990,7 @@ LED_YELLOW <= link_ok; --debug(3);
 ---------------------------------------------------------------------------
   process
     begin
-      wait until rising_edge(clk_100_i);
+      wait until rising_edge(clk_100_internal);
       time_counter <= time_counter + 1;
     end process;
 
index c5d55e70386288f5bee8e9dd34db764bd7409231..5d3b54e144afd3e05160b8fbaca38c8912fad156 100644 (file)
@@ -26,6 +26,7 @@ GSR_NET NET "GSR_N";
 #################################################################\r
 LOCATE COMP   "gen_ethernet_hub_GBE/imp_gen_serdes_intclk_gen_PCS_SERDES/clk_int_SERDES_GBE/PCSD_INST" SITE "PCSB";\r
 LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_0_200_ctc_THE_SERDES/PCSD_INST" SITE "PCSA" ;\r
+LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_0_200_THE_SERDES/PCSD_INST" SITE "PCSA" ;\r
 LOCATE COMP   "THE_MEDIA_ONBOARD/gen_serdes_200_THE_SERDES/PCSD_INST" SITE "PCSC" ;\r
 LOCATE COMP   "THE_MEDIA_ONBOARD/gen_serdes_125_THE_SERDES/PCSD_INST" SITE "PCSC" ;\r
 \r
@@ -36,6 +37,8 @@ LOCATE UGROUP "THE_MEDIA_UPLINK/media_interface_group" REGION "MEDIA_UPLINK" ;
 REGION "MEDIA_ONBOARD" "R90C122" 20 40;\r
 LOCATE UGROUP "THE_MEDIA_ONBOARD/media_interface_group" REGION "MEDIA_ONBOARD" ;\r
 \r
+MULTICYCLE TO CELL "THE_MEDIA_ONBOARD/SCI_DATA_OUT*" 50 ns;\r
+MULTICYCLE TO CELL "THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns;\r
 \r
 #SPI Interface\r
 REGION "REGION_SPI" "R13C150D" 12 16 DEVSIZE;\r
diff --git a/wasa/panda_dirc_wasa.p2t b/wasa/panda_dirc_wasa.p2t
new file mode 100644 (file)
index 0000000..995161f
--- /dev/null
@@ -0,0 +1,20 @@
+-w
+-i 15
+-l 5
+-n 1
+-y
+-s 12
+-t 11
+-c 1
+-e 2
+-m nodelist.txt
+# -w
+# -i 6
+# -l 5
+# -n 1
+# -t 1
+# -s 1
+# -c 0
+# -e 0
+#
+-exp parCDP=1:parCDR=1:parPlcInLimit=0:parPlcInNeighborSize=1:parPathBased=ON:parHold=ON:parHoldLimit=10000:paruseNBR=1:
index 1fc24afbd50eb0771b2c5ddf6152b2db2d00ca35..6c65f84131e2e820a10a66c3461b85d1e813cb53 100644 (file)
@@ -14,7 +14,7 @@ use machxo2.all;
 \r
 entity panda_dirc_wasa is\r
   generic(\r
-    SAME_ORDER : integer := 0\r
+    NORMAL_ORDER : integer := 1\r
     );\r
   port(\r
     CON        : out std_logic_vector(16 downto 1);\r
@@ -164,7 +164,7 @@ type ram_t is array(0 to 15) of std_logic_vector(15 downto 0);
 signal ram   : ram_t;\r
 \r
 signal pwm_i : std_logic_vector(31 downto 0);\r
-signal tmp_con     : std_logic_vector(15 downto 0);\r
+signal INP_i     : std_logic_vector(15 downto 0);\r
 signal spi_reg00_i : std_logic_vector(15 downto 0);\r
 signal spi_reg10_i : std_logic_vector(15 downto 0);\r
 signal spi_reg20_i : std_logic_vector(15 downto 0);\r
@@ -258,7 +258,24 @@ clk_source: OSCH
     SEDSTDBY => open\r
   );\r
 \r
+---------------------------------------------------------------------------\r
+-- Input re-ordering\r
+---------------------------------------------------------------------------\r
+gen_outputs_1 : if NORMAL_ORDER = 1 generate\r
+  INP_i <= INP;\r
+  PWM <= pwm_i(15 downto 0);\r
+end generate;\r
 \r
+gen_outputs_2 : if NORMAL_ORDER = 0 generate\r
+  INP_i <= INP(15) & INP(7) & INP(14) & INP(6) & INP(13) & INP(5) & INP(12) & INP(4) & \r
+           INP(11) & INP(3) & INP(10) & INP(2) & INP(9)  & INP(1) & INP(8)  & INP(0);\r
+  PWM <= pwm_i(15) & pwm_i(7) & pwm_i(14) & pwm_i(6) & pwm_i(13) & pwm_i(5) & pwm_i(12) & pwm_i(4) & \r
+         pwm_i(11) & pwm_i(3) & pwm_i(10) & pwm_i(2) & pwm_i(9)  & pwm_i(1) & pwm_i(8)  & pwm_i(0);\r
+end generate;\r
+\r
+  \r
+  \r
+  \r
 ---------------------------------------------------------------------------\r
 -- SPI Interface\r
 ---------------------------------------------------------------------------  \r
@@ -281,13 +298,14 @@ THE_SPI_SLAVE : spi_slave
     );\r
 \r
 SPI_OUT <= buf_SPI_OUT;    \r
----------------------------------------------------------------------------\r
--- RAM Interface\r
----------------------------------------------------------------------------  \r
-\r
 \r
+spi_reg00_i <= pwm_data_o;\r
+spi_reg10_i <= idram(to_integer(unsigned(spi_channel_i(2 downto 0))));\r
 spi_reg40_i <= flash_busy & flash_err & "000000" & ram_data_o;\r
 \r
+---------------------------------------------------------------------------\r
+-- RAM Interface\r
+---------------------------------------------------------------------------  \r
 \r
 \r
 PROC_CTRL_FLASH : process begin\r
@@ -404,9 +422,7 @@ THE_PWM_GEN : pwm_generator
     PWM        => pwm_i\r
     );\r
 \r
-    PWM <= pwm_i(15 downto 0);\r
 \r
-spi_reg00_i <= pwm_data_o;\r
 \r
 PROC_PWM_DATA_MUX : process(fsm_copydat, spi_data_i, spi_write_i, spi_channel_i,\r
                             pwm_fsm_addr, pwm_fsm_data_i, pwm_fsm_write,\r
@@ -463,7 +479,6 @@ PROC_IDMEM : process begin
   else\r
     idram(4) <= "0000" & temperature_i;\r
   end if;\r
-  spi_reg10_i <= idram(to_integer(unsigned(spi_channel_i(2 downto 0))));\r
   \r
   if spi_write_i(1) = '1' then\r
     onewire_reset <= spi_data_i(0);\r
@@ -511,7 +526,7 @@ THE_IO_REG_WRITE : process begin
   end if;\r
 end process;\r
 \r
-inp_status <= INP when rising_edge(clk_i);\r
+inp_status <= INP_i when rising_edge(clk_i);\r
 last_inp <= inp_status(3 downto 0) when rising_edge(clk_i);\r
 \r
 \r
@@ -533,15 +548,8 @@ end process;
 -- Rest of the I/O\r
 ---------------------------------------------------------------------------\r
 \r
-inp_gated <= (INP xor inp_invert) and not input_enable;\r
-tmp_con <= inp_gated or (inp_stretched and inp_stretch);\r
-\r
-gen_outputs_1 : if SAME_ORDER = 1 generate\r
-  CON <= tmp_con;\r
-end generate;\r
-gen_outputs_2 : if SAME_ORDER = 0 generate\r
-  CON <= tmp_con;\r
-end generate;\r
+inp_gated <= (INP_i xor inp_invert) and not input_enable;\r
+CON <= inp_gated or (inp_stretched and inp_stretch);\r
 \r
 \r
 \r
@@ -560,10 +568,10 @@ inp_stretched <= inp_hold_reg or last_inp_hold_reg or inp_hold;
 \r
 \r
 \r
-SPARE_OUTPUT : process(INP, inp_select, inp_or, inp_long_or, inp_long_reg, last_inp_long_reg)\r
+SPARE_OUTPUT : process(INP_i, inp_select, inp_or, inp_long_or, inp_long_reg, last_inp_long_reg)\r
   begin\r
     if inp_select < 16 then\r
-      SPARE_LVDS <= INP(inp_select+1);\r
+      SPARE_LVDS <= INP_i(inp_select);\r
     elsif inp_select < 24 then\r
       SPARE_LVDS <= inp_or;\r
     else\r
@@ -571,12 +579,11 @@ SPARE_OUTPUT : process(INP, inp_select, inp_or, inp_long_or, inp_long_reg, last_
     end if;\r
   end process;\r
 \r
-inp_or <= or_all((INP xor inp_invert) and not input_enable);\r
-\r
+inp_or <= or_all((INP_i xor inp_invert) and not input_enable);\r
 inp_long_or <= (inp_or or inp_long_or) and not inp_long_reg;\r
-\r
 inp_long_reg      <= inp_long_or when rising_edge(clk_i);\r
 last_inp_long_reg <= inp_long_reg when rising_edge(clk_i);\r
+\r
 -- ll_inp_long_reg   <= last_inp_long_reg when rising_edge(clk_i);\r
 \r
 \r
@@ -595,7 +602,7 @@ last_inp_long_reg <= inp_long_reg when rising_edge(clk_i);
 -- TEST_LINE(15)           <= '1' when fsm_copydat = PWM_WRITE_GET_2 or fsm_copydat = PWM_WRITE else '0';\r
 \r
 \r
-TEST_LINE               <= spi_debug_i;\r
+TEST_LINE               <= (others => '0');\r
 \r
 \r
 LED_GREEN  <= not leds(0) when led_status(4) = '0' else not led_status(0);\r