]> jspc29.x-matter.uni-frankfurt.de Git - trb3.git/commitdiff
prepared soda test design
authorhadeshyp <hadeshyp>
Mon, 18 Feb 2013 17:21:11 +0000 (17:21 +0000)
committerhadeshyp <hadeshyp>
Mon, 18 Feb 2013 17:21:11 +0000 (17:21 +0000)
soda_source/compile_periph_frankfurt.pl [new file with mode: 0755]
soda_source/trb3_periph_sodasource.prj
soda_source/trb3_periph_sodasource.vhd
soda_source/trb3_periph_sodasource_constraints.lpf
soda_source/version.vhd

diff --git a/soda_source/compile_periph_frankfurt.pl b/soda_source/compile_periph_frankfurt.pl
new file mode 100755 (executable)
index 0000000..d39feb7
--- /dev/null
@@ -0,0 +1,159 @@
+#!/usr/bin/perl
+use Data::Dumper;
+use warnings;
+use strict;
+
+
+
+
+###################################################################################
+#Settings for this project
+my $TOPNAME                      = "trb3_periph_sodasource";  #Name of top-level entity
+my $lattice_path                 = '/d/jspc29/lattice/diamond/2.1_x64';
+my $synplify_path                = '/d/jspc29/lattice/synplify/G-2012.09-SP1/';
+my $lm_license_file_for_synplify = "27000\@lxcad01.gsi.de";
+#my $lm_license_file_for_par      = "1702\@hadeb05.gsi.de";
+my $lm_license_file_for_par      = "1710\@cronos.e12.physik.tu-muenchen.de";
+###################################################################################
+
+$ENV{'PAR_DESIGN_NAME'}=$TOPNAME;
+
+
+
+
+
+
+use FileHandle;
+
+$ENV{'SYNPLIFY'}=$synplify_path;
+$ENV{'SYN_DISABLE_RAINBOW_DONGLE'}=1;
+$ENV{'LM_LICENSE_FILE'}=$lm_license_file_for_synplify;
+
+
+
+
+my $FAMILYNAME="LatticeECP3";
+my $DEVICENAME="LFE3-150EA";
+my $PACKAGE="FPBGA672";
+my $SPEEDGRADE="8";
+
+
+#create full lpf file
+system("cp ../base/trb3_periph_hub.lpf workdir/$TOPNAME.lpf");
+#system("cat ../tdc_releases/tdc_v1.1.1/tdc_constraints.lpf >> workdir/$TOPNAME.lpf");
+system("cat ".$TOPNAME."_constraints.lpf >> workdir/$TOPNAME.lpf");
+
+
+#set -e
+#set -o errexit
+
+#generate timestamp
+my $t=time;
+my $fh = new FileHandle(">version.vhd");
+die "could not open file" if (! defined $fh);
+print $fh <<EOF;
+
+--## attention, automatically generated. Don't change by hand.
+library ieee;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.std_logic_ARITH.ALL;
+USE IEEE.std_logic_UNSIGNED.ALL;
+use ieee.numeric_std.all;
+
+package version is
+
+    constant VERSION_NUMBER_TIME  : integer   := $t;
+
+end package version;
+EOF
+$fh->close;
+
+system("env| grep LM_");
+my $r = "";
+
+my $c="$synplify_path/bin/synplify_premier_dp -batch $TOPNAME.prj";
+$r=execute($c, "do_not_exit" );
+
+
+chdir "workdir";
+$fh = new FileHandle("<$TOPNAME".".srr");
+my @a = <$fh>;
+$fh -> close;
+
+
+
+foreach (@a)
+{
+    if(/\@E:/)
+    {
+       print "\n";
+       $c="cat $TOPNAME.srr | grep \"\@E\"";
+       system($c);
+        print "\n\n";
+       exit 129;
+    }
+}
+
+
+$ENV{'LM_LICENSE_FILE'}=$lm_license_file_for_par;
+
+
+$c=qq| $lattice_path/ispfpga/bin/lin/edif2ngd -path "../" -path "." -l $FAMILYNAME -d $DEVICENAME "$TOPNAME.edf" "$TOPNAME.ngo" |;
+execute($c);
+
+$c=qq|$lattice_path/ispfpga/bin/lin/edfupdate   -t "$TOPNAME.tcy" -w "$TOPNAME.ngo" -m "$TOPNAME.ngo" "$TOPNAME.ngx"|;
+execute($c);
+
+$c=qq|$lattice_path/ispfpga/bin/lin/ngdbuild  -a $FAMILYNAME -d $DEVICENAME -p "$lattice_path/ispfpga/ep5c00/data" -dt "$TOPNAME.ngo" "$TOPNAME.ngd"|;
+execute($c);
+
+my $tpmap = $TOPNAME . "_map" ;
+
+$c=qq|$lattice_path/ispfpga/bin/lin/map  -retime -split_node -a $FAMILYNAME -p $DEVICENAME -t $PACKAGE -s $SPEEDGRADE "$TOPNAME.ngd" -pr "$TOPNAME.prf" -o "$tpmap.ncd"  -mp "$TOPNAME.mrp" "$TOPNAME.lpf"|;
+execute($c);
+
+system("rm $TOPNAME.ncd");
+
+
+#$c=qq|$lattice_path/ispfpga/bin/lin/multipar -pr "$TOPNAME.prf" -o "mpar_$TOPNAME.rpt" -log "mpar_$TOPNAME.log" -p "../$TOPNAME.p2t"  "$tpmap.ncd" "$TOPNAME.ncd"|;
+$c=qq|$lattice_path/ispfpga/bin/lin/par -f "../$TOPNAME.p2t"  "$tpmap.ncd" "$TOPNAME.ncd" "$TOPNAME.prf"|;
+execute($c);
+
+# IOR IO Timing Report
+# $c=qq|$lattice_path/ispfpga/bin/lin/iotiming -s "$TOPNAME.ncd" "$TOPNAME.prf"|;
+# execute($c);
+
+# TWR Timing Report
+$c=qq|$lattice_path/ispfpga/bin/lin/trce -c -v 15 -o "$TOPNAME.twr.setup" "$TOPNAME.ncd" "$TOPNAME.prf"|;
+execute($c);
+
+$c=qq|$lattice_path/ispfpga/bin/lin/trce -hld -c -v 5 -o "$TOPNAME.twr.hold"  "$TOPNAME.ncd" "$TOPNAME.prf"|;
+execute($c);
+
+$c=qq|$lattice_path/ispfpga/bin/lin/ltxt2ptxt $TOPNAME.ncd|;
+execute($c);
+
+$c=qq|$lattice_path/ispfpga/bin/lin/bitgen -w -g CfgMode:Disable -g RamCfg:Reset -g ES:No  $TOPNAME.ncd $TOPNAME.bit $TOPNAME.prf|;
+# $c=qq|$lattice_path/ispfpga/bin/lin/bitgen  -w "$TOPNAME.ncd"  "$TOPNAME.prf"|;
+execute($c);
+
+chdir "..";
+
+exit;
+
+sub execute {
+    my ($c, $op) = @_;
+    #print "option: $op \n";
+    $op = "" if(!$op);
+    print "\n\ncommand to execute: $c \n";
+    $r=system($c);
+    if($r) {
+       print "$!";
+       if($op ne "do_not_exit") {
+           exit;
+       }
+    }
+
+    return $r;
+
+}
index 4616ffd0d03d89d5f61cbd6f30c236f3a11622b0..60b17fe20b3513467d58599fdff2c7044e8d2a52 100644 (file)
@@ -123,7 +123,7 @@ add_file -vhdl -lib work "../../trbnet/lattice/ecp2m/fifo/fifo_var_oreg.vhd"
 add_file -vhdl -lib work "../../trbnet/lattice/ecp3/fifo/fifo_19x16_obuf.vhd"
 add_file -vhdl -lib work "../../trbnet/lattice/ecp3/lattice_ecp3_fifo_16x16_dualport.vhd"
 add_file -vhdl -lib work "../../trbnet/lattice/ecp3/lattice_ecp3_fifo_18x16_dualport.vhd"
-
+add_file -vhdl -lib work "../../trbnet/lattice/ecp3/lattice_ecp3_fifo_18x16_dualport_oreg.vhd"
 add_file -vhdl -lib work "../../trbnet/lattice/ecp3/spi_dpram_32_to_8.vhd"
 
 add_file -vhdl -lib work "../../trbnet/special/spi_slim.vhd"
@@ -132,6 +132,15 @@ add_file -vhdl -lib work "../../trbnet/special/spi_databus_memory.vhd"
 add_file -vhdl -lib work "../../trbnet/special/spi_ltc2600.vhd"
 add_file -vhdl -lib work "../../trbnet/optical_link/f_divider.vhd"
 
+
+add_file -vhdl -lib work "../../trbnet/media_interfaces/sync/med_sync_define.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/sync/rx_control.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/sync/tx_control.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/sync/rx_reset_fsm.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/sync/tx_reset_fsm.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp3_sfp/serdes_sync_0.vhd"
+add_file -vhdl -lib work "../../trbnet/media_interfaces/med_ecp3_sfp_sync.vhd"
+
 add_file -vhdl -lib work "../../trbnet/media_interfaces/ecp3_sfp/sfp_1_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"
index a49946f37520508f46db41c42437653b8e176d79..174ae67be62983f3c21263119cd894cade2da82e 100644 (file)
@@ -6,11 +6,12 @@ library work;
 use work.trb_net_std.all;
 use work.trb_net_components.all;
 use work.trb3_components.all;
+use work.med_sync_define.all;
 use work.version.all;
 
 entity trb3_periph_sodasource is
   generic(
-    SYNC_MODE : integer range 0 to 1 := c_NO   --use the RX clock for internal logic and transmission. 4 SFP links only.
+    SYNC_MODE : integer range 0 to 1 := c_NO   --use the RX clock for internal logic and transmission. Should be NO for soda tests!
     );
   port(
     --Clocks
@@ -23,11 +24,11 @@ entity trb3_periph_sodasource is
     TRIGGER_LEFT  : in std_logic;       --left side trigger input from fan-out
     TRIGGER_RIGHT : in std_logic;       --right side trigger input from fan-out
 
-    --Serdes
+    --Serdes Clocks - do not use
     CLK_SERDES_INT_LEFT  : in  std_logic;  --Clock Manager 1/(1357), off, 125 MHz possible
     CLK_SERDES_INT_RIGHT : in  std_logic;  --Clock Manager 2/(1357), 200 MHz, only in case of problems
---     SERDES_INT_TX        : out std_logic_vector(3 downto 0);
---     SERDES_INT_RX        : in  std_logic_vector(3 downto 0);
+
+    --serdes I/O - connect as you like, no real use
     SERDES_ADDON_TX      : out std_logic_vector(15 downto 0);
     SERDES_ADDON_RX      : in  std_logic_vector(15 downto 0);
 
@@ -269,6 +270,13 @@ architecture trb3_periph_sodasource_arch of trb3_periph_sodasource is
   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_nack     : 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 padiwa_cs  : std_logic_vector(3 downto 0);
   signal padiwa_sck : std_logic;
@@ -277,6 +285,13 @@ architecture trb3_periph_sodasource_arch of trb3_periph_sodasource is
 
   --TDC
   signal hit_in_i : std_logic_vector(63 downto 0);
+      
+  signal soda_rx_clock_100 : std_logic;
+  signal soda_rx_clock_200 : std_logic;
+  signal tx_dlm_i          : std_logic;
+  signal rx_dlm_i          : std_logic;
+  signal tx_dlm_word       : std_logic_vector(7 downto 0);
+  signal rx_dlm_word       : std_logic_vector(7 downto 0);
 
 begin
 ---------------------------------------------------------------------------
@@ -391,21 +406,21 @@ begin
       REGIO_NUM_CTRL_REGS       => REGIO_NUM_CTRL_REGS,  --3,    --8 cotrol reg
       ADDRESS_MASK              => x"FFFF",
       BROADCAST_BITMASK         => x"FF",
-      BROADCAST_SPECIAL_ADDR    => x"48",
+      BROADCAST_SPECIAL_ADDR    => x"45",
       REGIO_COMPILE_TIME        => std_logic_vector(to_unsigned(VERSION_NUMBER_TIME, 32)),
-      REGIO_HARDWARE_VERSION    => x"91004120",
+      REGIO_HARDWARE_VERSION    => x"91000000",
       REGIO_INIT_ADDRESS        => x"f306",
       REGIO_USE_VAR_ENDPOINT_ID => c_YES,
       CLOCK_FREQUENCY           => 100,
       TIMING_TRIGGER_RAW        => c_YES,
       --Configure data handler
       DATA_INTERFACE_NUMBER     => 1,
-      DATA_BUFFER_DEPTH         => 13,  --13
+      DATA_BUFFER_DEPTH         => 9,  --13
       DATA_BUFFER_WIDTH         => 32,
-      DATA_BUFFER_FULL_THRESH   => 2**13-800,
+      DATA_BUFFER_FULL_THRESH   => 256,
       TRG_RELEASE_AFTER_DATA    => c_YES,
       HEADER_BUFFER_DEPTH       => 9,
-      HEADER_BUFFER_FULL_THRESH => 2**9-16
+      HEADER_BUFFER_FULL_THRESH => 256
       )
     port map(
       CLK                => clk_100_i,
@@ -504,9 +519,9 @@ begin
 ---------------------------------------------------------------------------
   THE_BUS_HANDLER : trb_net16_regio_bus_handler
     generic map(
-      PORT_NUMBER    => 8,
-      PORT_ADDRESSES => (0 => x"d000", 1 => x"d100", 2 => x"d400", 3 => x"c000", 4 => x"c100", 5 => x"c200", 6 => x"c300", 7 => x"b000", others => x"0000"),
-      PORT_ADDR_MASK => (0 => 1, 1 => 6, 2 => 5, 3 => 7, 4 => 5, 5 => 7, 6 => 7, 7 => 9, others => 0)
+      PORT_NUMBER    => 9,
+      PORT_ADDRESSES => (0 => x"d000", 1 => x"d100", 2 => x"d400", 3 => x"c000", 4 => x"c100", 5 => x"c200", 6 => x"c300", 7 => x"b000", 8 => x"b800", others => x"0000"),
+      PORT_ADDR_MASK => (0 => 1, 1 => 6, 2 => 5, 3 => 7, 4 => 5, 5 => 7, 6 => 7, 7 => 9, 8 => 9, others => 0)
       )
     port map(
       CLK   => clk_100_i,
@@ -621,6 +636,19 @@ begin
       BUS_WRITE_ACK_IN(7)                 => sci1_ack,
       BUS_NO_MORE_DATA_IN(7)              => '0',
       BUS_UNKNOWN_ADDR_IN(7)              => '0',
+      --SCI soda test Media Interface
+      BUS_READ_ENABLE_OUT(8)              => sci2_read,
+      BUS_WRITE_ENABLE_OUT(8)             => sci2_write,
+      BUS_DATA_OUT(8*32+7 downto 8*32)    => sci2_data_in,
+      BUS_DATA_OUT(8*32+31 downto 8*32+8) => open,
+      BUS_ADDR_OUT(8*16+8 downto 8*16)    => sci2_addr,
+      BUS_ADDR_OUT(8*16+15 downto 8*16+9) => open,
+      BUS_TIMEOUT_OUT(8)                  => open,
+      BUS_DATA_IN(8*32+7 downto 8*32)     => sci2_data_out,
+      BUS_DATAREADY_IN(8)                 => sci2_ack,
+      BUS_WRITE_ACK_IN(8)                 => sci2_ack,
+      BUS_NO_MORE_DATA_IN(8)              => '0',
+      BUS_UNKNOWN_ADDR_IN(8)              => sci2_nack,
       STAT_DEBUG => open
       );
 
@@ -690,6 +718,67 @@ begin
       );
 
 
+      
+---------------------------------------------------------------------------
+-- The synchronous interface for Soda tests
+---------------------------------------------------------------------------      
+---------------------------------------------------------------------------
+-- The TrbNet media interface (Uplink)
+---------------------------------------------------------------------------
+THE_SODA_SOURCE : med_ecp3_sfp_sync
+  generic map(
+    SERDES_NUM  => 0     --number of serdes in quad
+    )
+  port map(
+    CLK                => clk_200_internal, --clk_200_i,
+    SYSCLK             => clk_100_i,
+    RESET              => reset_i,
+    CLEAR              => clear_i,
+    CLK_EN             => '1',
+    --Internal Connection for TrbNet data -> not used a.t.m.
+    MED_DATA_IN        => (others => '0'),
+    MED_PACKET_NUM_IN  => (others => '0'),
+    MED_DATAREADY_IN   => '0',
+    MED_READ_OUT       => open,
+    MED_DATA_OUT       => open,
+    MED_PACKET_NUM_OUT => open,
+    MED_DATAREADY_OUT  => open,
+    MED_READ_IN        => open,
+    CLK_RX_HALF_OUT    => soda_rx_clock_100,
+    CLK_RX_FULL_OUT    => soda_rx_clock_200,
+    
+    IS_SLAVE           => '0',   --will be generic soon
+    RX_DLM             => rx_dlm_i,
+    RX_DLM_WORD        => rx_dlm_word,
+    TX_DLM             => tx_dlm_i,
+    TX_DLM_WORD        => tx_dlm_word,
+    --SFP Connection
+    SD_RXD_P_IN        => SERDES_ADDON_RX(0),
+    SD_RXD_N_IN        => SERDES_ADDON_RX(1),
+    SD_TXD_P_OUT       => SERDES_ADDON_TX(0),
+    SD_TXD_N_OUT       => SERDES_ADDON_TX(1),
+    SD_REFCLK_P_IN     => open,
+    SD_REFCLK_N_IN     => open,
+    SD_PRSNT_N_IN      => SFP_MOD0(1),
+    SD_LOS_IN          => SFP_LOS(1),
+    SD_TXDIS_OUT       => SFP_TXDIS(1),
+    
+    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,  
+    SCI_NACK           => sci2_nack,
+    -- Status and control port
+    STAT_OP            => open,
+    CTRL_OP            => (others => '0'),
+    STAT_DEBUG         => open,
+    CTRL_DEBUG         => (others => '0')
+   );      
+      
+
+
 
 ---------------------------------------------------------------------------
 -- LED
index 14f4925e7b1fd1a7cb33c306e8af97841a47716b..f0e271a19b4ed822e3dbb05f235b4bf7dc13d906 100644 (file)
@@ -28,7 +28,7 @@ LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_1_200_THE_SERDES/PCSD_INST" SITE "PCS
 LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_1_200_ctc_THE_SERDES/PCSD_INST" SITE "PCSA" ;
 LOCATE COMP   "THE_MEDIA_UPLINK/gen_serdes_200/PCSD_INST" SITE "PCSA" ;
 
-LOCATE COMP   "THE_MEDIA_DOWNLINK/gen_serdes_200/PCSD_INST" SITE "PCSB" ;
+LOCATE COMP   "THE_SODA_SOURCE/THE_SERDES/PCSD_INST" SITE "PCSB" ;
 
 
 REGION "MEDIA_UPLINK" "R90C95D" 13 25;
@@ -40,8 +40,14 @@ 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 "THE_MEDIA_DOWNLINK/media_interface_group" REGION "MEDIA_DOWNLINK" ;
+LOCATE UGROUP "THE_SODA_SOURCE/media_interface_group" REGION "MEDIA_DOWNLINK" ;
+
+
+MULTICYCLE FROM CELL "THE_RESET_HANDLER/rese*" 20 ns;
+MULTICYCLE TO CELL "THE_SODA_SOURCE/SCI_DATA_OUT*" 20 ns;
+MULTICYCLE TO CELL "THE_SODA_SOURCE/sci*" 20 ns;
+MULTICYCLE FROM CELL "THE_SODA_SOURCE/sci*" 20 ns;
+MULTICYCLE TO CELL "THE_SODA_SOURCE/wa_pos*" 20 ns;
 
-MULTICYCLE TO CELL "THE_MEDIA_DOWNLINK/SCI_DATA_OUT*" 50 ns;
 MULTICYCLE TO CELL "THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns;
 
index 0cd33ea0aae6293892dc129a41e96921e7d13043..42d40d4514efaeaed0d4a9376214106775a6c7fe 100644 (file)
@@ -8,6 +8,6 @@ use ieee.numeric_std.all;
 
 package version is
 
-    constant VERSION_NUMBER_TIME  : integer   := 1360760605;
+    constant VERSION_NUMBER_TIME  : integer   := 1361206385;
 
 end package version;