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
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(
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 (
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");
package version is
constant VERSION_NUMBER_TIME : integer := $t;
-
+
end package version;
EOF
$fh->close;
$r=execute($c, "do_not_exit" );
-chdir "workdir";
+chdir './workdir';
$fh = new FileHandle("<$TOPNAME".".srr");
my @a = <$fh>;
$fh -> close;
}
-# $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;
}
+
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',