From: Your Name Date: Mon, 18 Sep 2017 12:42:15 +0000 (+0200) Subject: gbe with forwarder X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=d829dc431ae8d8e475b7857d2a6769945744bc0e;p=trb3.git gbe with forwarder --- diff --git a/base/trb3_central_gbe.lpf b/base/trb3_central_gbe.lpf index 34b396b..4816cbf 100644 --- a/base/trb3_central_gbe.lpf +++ b/base/trb3_central_gbe.lpf @@ -541,7 +541,7 @@ MULTICYCLE TO CELL "gen_uplink_THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50 ns; MULTICYCLE TO CELL "THE_SPI_RELOAD_THE_SPI_MASTER_THE_SPI_SLIM_*io*" 20 ns; MULTICYCLE FROM CELL "THE_MEDIA_*_sfp_losio*" 20 ns; -LOCATE COMP "GBE/physical_impl_gen.physical/impl_gen.gbe_serdes/PCSD_INST" SITE "PCSB"; +LOCATE COMP "gen_ethernet_hub_GBE/physical_impl_gen_physical/impl_gen_gbe_serdes/PCSD_INST" SITE "PCSB"; diff --git a/cts/compile_central_gsi.pl b/cts/compile_central_gsi.pl index 065d0a8..aed6092 100755 --- a/cts/compile_central_gsi.pl +++ b/cts/compile_central_gsi.pl @@ -16,8 +16,8 @@ my $CbmNetPath = "../../cbmnet"; my $lm_license_file_for_synplify = "27000\@lxcad01.gsi.de"; my $lm_license_file_for_par = "1702\@hadeb05.gsi.de"; -my $lattice_path = '/opt/lattice/diamond/3.2_x64/'; -my $synplify_path = '/opt/synplicity/I-2013.09-SP1/'; +my $lattice_path = '/opt/lattice/diamond/3.8_x64/'; +my $synplify_path = '/opt/synplicity/L-2016.09-1/'; my $lattice_bin_path = "$lattice_path/bin/lin64"; # note the lin or lin64 at the end, no isfgpa needed my $config_vhd = 'config_mainz_a2.vhd'; ################################################################################### diff --git a/cts/trb3_central.prj b/cts/trb3_central.prj index 9bf012c..bc0c3e3 100644 --- a/cts/trb3_central.prj +++ b/cts/trb3_central.prj @@ -120,6 +120,7 @@ add_file -vhdl -lib work "../../trbnet/gbe_trb/protocols/trb_net16_gbe_response_ add_file -vhdl -lib work "../../trbnet/gbe_trb/protocols/trb_net16_gbe_response_constructor_DHCP.vhd" add_file -vhdl -lib work "../../trbnet/gbe_trb/protocols/trb_net16_gbe_response_constructor_SCTRL.vhd" add_file -vhdl -lib work "../../trbnet/gbe_trb/protocols/trb_net16_gbe_response_constructor_TrbNetData.vhd" +add_file -vhdl -lib work "../../trbnet/gbe_trb/protocols/trb_net16_gbe_response_constructor_Forward.vhd" add_file -vhdl -lib work "../../trbnet/gbe_trb/media/serdes_gbe_4ch.vhd" add_file -verilog -lib work "../../trbnet/gbe_trb/media/sgmii_channel_smi.v" add_file -verilog -lib work "../../trbnet/gbe_trb/media/reset_controller_pcs.v" diff --git a/cts/trb3_central.vhd b/cts/trb3_central.vhd index 6442cd2..752fe73 100644 --- a/cts/trb3_central.vhd +++ b/cts/trb3_central.vhd @@ -591,6 +591,9 @@ architecture trb3_central_arch of trb3_central is signal reboot_from_gbe : std_logic; + signal fwd_data : std_logic_vector(4 * 8 - 1 downto 0); + signal fwd_dv, fwd_sop, fwd_eop, fwd_ready, fwd_full : std_logic_vector(3 downto 0); + component OSCF is port ( OSC : out std_logic @@ -1323,7 +1326,8 @@ end generate; LINK_HAS_SLOWCTRL => "1000", LINK_HAS_DHCP => "1000", LINK_HAS_ARP => "1000", - LINK_HAS_PING => "1000" + LINK_HAS_PING => "1000", + LINK_HAS_FWD => "1000" ) port map( @@ -1375,12 +1379,56 @@ end generate; BUS_IP_TX => busgbeip_tx, BUS_REG_RX => busgbereg_rx, BUS_REG_TX => busgbereg_tx, + + FWD_DATA_IN => fwd_data, + FWD_DATA_VALID_IN => fwd_dv, + FWD_SOP_IN => fwd_sop, + FWD_EOP_IN => fwd_eop, + FWD_READY_OUT => fwd_ready, + FWD_FULL_OUT => fwd_full, MAKE_RESET_OUT => reset_via_gbe, DEBUG_OUT => open ); + + +-- process(clk_100_i) +-- begin +-- if rising_edge(clk_100_i) then +-- if (reset_i = '1') then +-- fwd_data <= (others => '0'); +-- else +-- fwd_data <= fwd_data + x"1"; +-- end if; +-- end if; +-- end process; +-- +-- process(clk_100_i) +-- begin +-- if rising_edge(clk_100_i) then +-- if (fwd_data(23 downto 0) = x"100000") then +-- fwd_sop <= x"f"; +-- fwd_eop <= x"0"; +-- fwd_dv <= x"f"; +-- elsif (fwd_data(23 downto 0) > x"100000" and fwd_data(23 downto 0) < x"100064") then +-- fwd_sop <= x"0"; +-- fwd_eop <= x"0"; +-- fwd_dv <= x"f"; +-- elsif (fwd_data(23 downto 0) = x"100064") then +-- fwd_sop <= x"0"; +-- fwd_eop <= x"f"; +-- fwd_dv <= x"f"; +-- else +-- fwd_sop <= x"0"; +-- fwd_eop <= x"0"; +-- fwd_dv <= x"0"; +-- end if; +-- end if; +-- end process; + + -- -- GBE : trb_net16_gbe_buf -- generic map ( diff --git a/trb3_gbe/compile_central_gsi.pl b/trb3_gbe/compile_central_gsi.pl index e9bb84d..56bb9d9 100755 --- a/trb3_gbe/compile_central_gsi.pl +++ b/trb3_gbe/compile_central_gsi.pl @@ -2,49 +2,52 @@ use Data::Dumper; use warnings; use strict; - - +use Term::ANSIColor; +use File::stat; +use POSIX; +use FileHandle; ################################################################################### #Settings for this project -my $TOPNAME = "trb3_central"; #Name of top-level entity -my $lattice_path = '/opt/lattice/diamond/1.3'; -my $synplify_path = '/opt/synopsys/fpga_e201103/'; +my $TOPNAME = "trb3_central_gbe"; #Name of top-level entity +my $BasePath = "../base/"; #path to "base" directory +my $CbmNetPath = "../../cbmnet"; my $lm_license_file_for_synplify = "27000\@lxcad01.gsi.de"; my $lm_license_file_for_par = "1702\@hadeb05.gsi.de"; -################################################################################### - - - - - - +my $lattice_path = '/opt/lattice/diamond/3.8_x64/'; +my $synplify_path = '/opt/synplicity/L-2016.09-1/'; +my $lattice_bin_path = "$lattice_path/bin/lin64"; # note the lin or lin64 at the end, no isfgpa needed +my $config_vhd = 'config_mainz_a2.vhd'; +################################################################################### -use FileHandle; +system("ln -f -s $config_vhd config.vhd") unless (-e "config.vhd"); +system("./compile_constraints.pl"); +system("cp ../base/mulipar_nodelist_example.txt workdir/nodelist.txt") unless (-e "workdir/nodelist.txt"); +symlink($CbmNetPath, '../cbmnet/cbmnet') unless (-e '../cbmnet/cbmnet'); + +# source the standard lattice environment +$ENV{bindir}="$lattice_bin_path"; +open my $SOURCE, "bash -c '. $lattice_bin_path/diamond_env >& /dev/null; env'|" or + die "Can't fork: $!"; +while (<$SOURCE>) { + if (/^(.*)=(.*)/) { + $ENV{$1} = ${2} ; + } +} +close $SOURCE; $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="FPBGA1156"; my $SPEEDGRADE="8"; - -#create full lpf file -#system("cp ../base/$TOPNAME.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"); @@ -61,7 +64,7 @@ use ieee.numeric_std.all; package version is constant VERSION_NUMBER_TIME : integer := $t; - + end package version; EOF $fh->close; @@ -73,7 +76,7 @@ my $c="$synplify_path/bin/synplify_premier_dp -batch $TOPNAME.prj"; $r=execute($c, "do_not_exit" ); -chdir "workdir"; +chdir './workdir'; $fh = new FileHandle("<$TOPNAME".".srr"); my @a = <$fh>; $fh -> close; @@ -93,62 +96,68 @@ foreach (@a) } -# $ENV{'LM_LICENSE_FILE'}=$lm_license_file_for_par; -# -# $c=qq| $lattice_path/ispfpga/bin/lin/edif2ngd -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" -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"|; -# 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 "$TOPNAME.ncd" "$TOPNAME.prf"|; -# execute($c); +$ENV{'LM_LICENSE_FILE'}=$lm_license_file_for_par; + +$c=qq|edif2ngd -l $FAMILYNAME -d $DEVICENAME "$TOPNAME.edf" "$TOPNAME.ngo" |; +execute($c); + +$c=qq|edfupdate -t "$TOPNAME.tcy" -w "$TOPNAME.ngo" -m "$TOPNAME.ngo" "$TOPNAME.ngx"|; +execute($c); + +$c=qq'ngdbuild -a $FAMILYNAME -d $DEVICENAME -p "$lattice_path/ispfpga/ep5c00/data" -dt "$TOPNAME.ngo" "$TOPNAME.ngd" | grep -v -e "^WARNING.*has no load"'; +execute($c); + +my $tpmap = $TOPNAME . "_map" ; + +system("rm $tpmap.ncd"); +$c=qq|map -hier -td_pack -retime EFFORT=6 -split_node -a $FAMILYNAME -p $DEVICENAME -t $PACKAGE -s $SPEEDGRADE "$TOPNAME.ngd" -o "$tpmap.ncd" -xref_sig -mp "$TOPNAME.mrp"|; +execute($c); + +system("rm $TOPNAME.ncd"); + +#$c=qq|multipar -pr "$TOPNAME.prf" -o "mpar_$TOPNAME.rpt" -log "mpar_$TOPNAME.log" -p "../$TOPNAME.p2t" "$tpmap.ncd" "$TOPNAME.ncd"|; +#$c=qq|par -f "../$TOPNAME.p2t" "$tpmap.ncd" "$TOPNAME.ncd" "$TOPNAME.prf"|; +#$c=qq|par -f "../$TOPNAME.p2t" "$tpmap.ncd" "$TOPNAME.dir" "$TOPNAME.prf"|; +# dont forget to create a nodelist.txt for multipar / mpartrce +$c=qq|mpartrce -p "../$TOPNAME.p2t" -f "../$TOPNAME.p3t" -tf "$TOPNAME.pt" "$tpmap.ncd" "$TOPNAME.ncd"|; +execute($c); + +# IOR IO Timing Report +$c=qq|iotiming -s "$TOPNAME.ncd" "$TOPNAME.prf"|; +execute($c); + +# TWR Timing Report +$c=qq|trce -c -v 15 -o "$TOPNAME.twr.setup" "$TOPNAME.ncd" "$TOPNAME.prf"|; +execute($c); + +$c=qq|trce -hld -c -v 5 -o "$TOPNAME.twr.hold" "$TOPNAME.ncd" "$TOPNAME.prf"|; +execute($c); + +$c=qq|ltxt2ptxt $TOPNAME.ncd|; +execute($c); + +$c=qq|bitgen -w "$TOPNAME.ncd" "$TOPNAME.prf"|; +execute($c); chdir ".."; -exit; sub execute { my ($c, $op) = @_; #print "option: $op \n"; $op = "" if(!$op); + print color 'blue bold'; print "\n\ncommand to execute: $c \n"; + print color 'reset'; $r=system($c); if($r) { - print "$!"; - if($op ne "do_not_exit") { - exit; - } + print "$!"; + if($op ne "do_not_exit") { + wait; + } } return $r; } + diff --git a/trb3_gbe/config_compile_gsi.pl b/trb3_gbe/config_compile_gsi.pl index f1e9364..5822c3e 100644 --- a/trb3_gbe/config_compile_gsi.pl +++ b/trb3_gbe/config_compile_gsi.pl @@ -1,10 +1,12 @@ TOPNAME => "trb3_central_gbe", lm_license_file_for_synplify => "27000\@lxcad01.gsi.de", lm_license_file_for_par => "1702\@hadeb05.gsi.de", -lattice_path => '/opt/lattice/diamond/3.7_x64/', -synplify_path => '/opt/synplicity/K-2015.09', +lattice_path => '/opt/lattice/diamond/3.8_x64/', +synplify_path => '/opt/synplicity/L-2016.09-1', +#lattice_path => '/opt/lattice/diamond/3.2_x64/', +#synplify_path => '/opt/synplicity/I-2013.09-SP1/', #synplify_command => "/opt/lattice/diamond/3.5_x64/bin/lin64/synpwrap -fg -options", -synplify_command => "/opt/synplicity/K-2015.09/bin/synplify_premier_dp", +synplify_command => "/opt/synplicity/L-2016.09-1/bin/synplify_premier_dp", nodelist_file => '../nodes_lxhadeb07.txt', diff --git a/trb3_gbe/trb3_central_gbe.lpf b/trb3_gbe/trb3_central_gbe.lpf deleted file mode 120000 index e03b2d5..0000000 --- a/trb3_gbe/trb3_central_gbe.lpf +++ /dev/null @@ -1 +0,0 @@ -trb3_central_constraints.lpf \ No newline at end of file