#! /usr/local/bin/perl

# created on Thu Feb 22 13:47:32 EST 2001

$myname = `basename $0`;
chop $myname ;

if (@ARGV != 1) {
    print STDERR <<EOF;
Usage: $myname source_directory

  'source_directory' should contain the top of the directory tree from
  the "picoJava-II v2.0" download.

  This script copies Synopsys command and constraint files from the
  picoJava-II distribution (v2.0) and places them in the current
  directory. Some files are slightly modified:
    1. fixed typos
    2. changed paths so all files are in one directory

  The resulting code is *not* a functional picoJava processor, however
  it is purely synthesizable code which is useful for EDA tool
  testing.

  For more information about the picoJava-II processor and how to get
  the sources see
  http://www.sun.com/microelectronics/communitysource/picojava

  Created by Steve Golson -- Trilobyte Systems -- sgolson\@trilobyte.com
EOF
    exit 1;
}

# get arguments

$sourcedir = $ARGV[0];

############################################################################

die "Cannot find source directory ${sourcedir}/picoJava-II: $!\n" unless (-d ${sourcedir}."/picoJava-II");

##### compile_cpu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/syn/compile_cpu.cmd > compile_cpu.cmd") or die "Couldn't fork while building compile_cpu.cmd: $!\n";
print WRITEME <<EOF;
79,124d
75,77c
/*sh rm defines.h*/
.
71,73c
write -f db -o cpu.db {cpu}
write -f verilog -h -o cpu.vSyn {cpu}
.
67,69c
report_area > cpu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > cpu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > cpu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > cpu_violators.rpt
report_constraints -all_violators -verbose >> cpu_violators.rpt
.
62,65c
set_false_path -from reset_l*
.
54c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
45a
link
.
43c
read -f verilog { cpu.v }
.
41a
*/
.
29a
/*
.
28c
include mj_synopsys.setup
.
25c
/* sh ln -s ../rtl/defines.h*/
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_cpu.cmd: $!\n";
$expected_cksum = "542131047\\s+2639\\s+compile_cpu.cmd";
chop($new_cksum = `cksum compile_cpu.cmd`);
die "Checksum failed for file compile_cpu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_custom_cells.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/lib_setup/compile_custom_cells.cmd > compile_custom_cells.cmd") or die "Couldn't fork while building compile_custom_cells.cmd: $!\n";
print WRITEME <<EOF;
37a
exit
.
28a
link_library = link_library + mj_muxes.db
.
27c
read -f verilog {custom_cells_behv.v spare.v}
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_custom_cells.cmd: $!\n";
$expected_cksum = "193729798\\s+1595\\s+compile_custom_cells.cmd";
chop($new_cksum = `cksum compile_custom_cells.cmd`);
die "Checksum failed for file compile_custom_cells.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_dcu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/dcu/syn/compile_dcu.cmd > compile_dcu.cmd") or die "Couldn't fork while building compile_dcu.cmd: $!\n";
print WRITEME <<EOF;
109c
/*sh rm defines.h*/
.
107c
write -f verilog -o dcu_gate.vSyn {dcu}
.
103,104c
write -f db -o dcu.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o dcu.vSyn {dcu}
.
96,100c
report_area > dcu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > dcu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > dcu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > dcu_violators.rpt
report_constraints -all_violators -verbose >> dcu_violators.rpt
.
58c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
33,40c
                  dc_dec.v \\
                  dcudp_cntl.v \\
                  wrbuf_cntl.v \\
                  miss_cntl.v \\
                  dcctl.v \\
                  dcu_dpath.v \\
                  dcu.v \\
.
29c
include mj_synopsys.setup
.
27c
/*sh ln -s ../../rtl/defines.h .*/
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_dcu.cmd: $!\n";
$expected_cksum = "3064908453\\s+3680\\s+compile_dcu.cmd";
chop($new_cksum = `cksum compile_dcu.cmd`);
die "Checksum failed for file compile_dcu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_ex.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/ex/syn/compile_ex.cmd > compile_ex.cmd") or die "Couldn't fork while building compile_ex.cmd: $!\n";
print WRITEME <<EOF;
108c
/*sh rm defines.h*/
.
105,106c
write -f db -o ex.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o ex.vSyn {ex} 
.
98,102c
report_area > ex_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > ex_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > ex_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > ex_violators.rpt
report_constraints -all_violators -verbose >> ex_violators.rpt
.
68c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
34,43c
             lib_imdr.v \\
             imdr_ctrl.v \\
             imdr_dpath.v \\
             imdr.v \\
             ex_regs.v \\
	     ex_decode.v \\
             ex_ctl.v \\
             ex_dpath.v \\
             ex.v \\
.
30c
include mj_synopsys.setup
.
27c
/*sh ln -s ../../../rtl/defines.h */
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_ex.cmd: $!\n";
$expected_cksum = "3961109775\\s+3769\\s+compile_ex.cmd";
chop($new_cksum = `cksum compile_ex.cmd`);
die "Checksum failed for file compile_ex.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_fpu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/fpu/syn/compile_fpu.cmd > compile_fpu.cmd") or die "Couldn't fork while building compile_fpu.cmd: $!\n";
print WRITEME <<EOF;
135c
/*sh rm defines.h*/
.
133c
write -f verilog -o fpu_gate.vSyn {fpu}
.
130c
write -f db -o fpu.db current_design() + find(-hier,design) - dont_touch_list
.
123,127c
report_area > fpu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > fpu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > fpu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > fpu_violators.rpt
report_constraints -all_violators -verbose >> fpu_violators.rpt
.
94c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
63c
/*sh rm fpu.h*/
.
36,60c
                 f_fpu.v \\
		 mult_array.v \\
		 exponent_dp.v \\
		 exponent_cntl.v \\
		 exponent.v \\
		 rsadd_dp.v \\
		 rsadd_cntl.v \\
		 rsadd.v \\
		 multmod_dp.v \\
		 multmod_cntl.v \\
		 multmod.v \\
		 fp_roms.v \\
		 mantissa.v \\
		 mantissa_dp.v \\
		 mantissa_cntl.v \\
		 mantissa_cntl_sub.v \\
		 prils.v \\
		 prils_dp.v \\
		 prils_cntl.v \\
		 code_seq.v \\
		 code_seq_cntl.v \\
		 code_seq_dp.v \\
		 incmod.v \\
		 nxsign.v \\
.
31c
include mj_synopsys.setup
.
28,29c
/*sh ln -s ../../rtl/defines.h .*/
/*sh ln -s ../rtl/fpu.h .*/
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_fpu.cmd: $!\n";
$expected_cksum = "3130610428\\s+4177\\s+compile_fpu.cmd";
chop($new_cksum = `cksum compile_fpu.cmd`);
die "Checksum failed for file compile_fpu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_hold_logic.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/pipe/syn/compile_hold_logic.cmd > compile_hold_logic.cmd") or die "Couldn't fork while building compile_hold_logic.cmd: $!\n";
print WRITEME <<EOF;
86,87c
write -f db -o hold_logic.db second_design_list
write -f verilog -h -o hold_logic.vSyn {hold_logic} 
.
79,83c
report_area > hold_logic_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > hold_logic_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > hold_logic_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > hold_logic_violators.rpt
report_constraints -all_violators -verbose >> hold_logic_violators.rpt
.
51c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
31c
                  hold_logic.v \\
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_hold_logic.cmd: $!\n";
$expected_cksum = "1787998738\\s+3122\\s+compile_hold_logic.cmd";
chop($new_cksum = `cksum compile_hold_logic.cmd`);
die "Checksum failed for file compile_hold_logic.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_icu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/icu/syn/compile_icu.cmd > compile_icu.cmd") or die "Couldn't fork while building compile_icu.cmd: $!\n";
print WRITEME <<EOF;
105c
/*sh rm defines.h*/
.
103c
write -f verilog -o icu_gate.vSyn {icu}
.
99,100c
write -f db -o icu.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -o icu.vSyn {icu}
.
92,96c
report_area > icu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > icu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > icu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > icu_violators.rpt
report_constraints -all_violators -verbose >> icu_violators.rpt
.
58c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
33,39c
                  ibuf_ctl.v \\
                  ic_cntl.v \\
                  icctl.v \\
                  ibuffer.v \\
                  icu_dpath.v \\
                  icu.v \\
.
29c
include mj_synopsys.setup
.
27c
/*sh ln -s ../../rtl/defines.h .*/
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_icu.cmd: $!\n";
$expected_cksum = "2575000318\\s+3568\\s+compile_icu.cmd";
chop($new_cksum = `cksum compile_icu.cmd`);
die "Checksum failed for file compile_icu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_ifu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/ifu/syn/compile_ifu.cmd > compile_ifu.cmd") or die "Couldn't fork while building compile_ifu.cmd: $!\n";
print WRITEME <<EOF;
85,86c
write -f db -o ifu.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o ifu.vSyn ifu
.
80,83c
report_timing -path end -delay max -max_paths PATHS_FULL -nosplit > ifu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL -nosplit > ifu_maxtim.rpt
report_area -nosplit > ifu_area.rpt
report_constraints -all_violators -verbose > ifu_violators.rpt
.
68c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
32,44c
		index_adders.v \\
		ex_len_dec.v \\
		length_dec.v \\
		valid_dec.v \\
		fdec.v \\
		fold_dec.v \\
		rs1_dec.v \\
		rs2_dec.v \\
		rsd_dec.v \\
		main_dec.v \\
		fold_logic.v \\
		ifu.v \\
.
28c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_ifu.cmd: $!\n";
$expected_cksum = "3711164717\\s+2816\\s+compile_ifu.cmd";
chop($new_cksum = `cksum compile_ifu.cmd`);
die "Checksum failed for file compile_ifu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_iu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/syn/compile_iu.cmd > compile_iu.cmd") or die "Couldn't fork while building compile_iu.cmd: $!\n";
print WRITEME <<EOF;
95c
write -f verilog -o iu_gate.vSyn {iu}
.
91,92c
write -f db -o iu.db {iu} 
write -f verilog -h -o iu.vSyn {iu}
.
83,87c
report_area > iu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > iu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > iu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > iu_violators.rpt
report_constraints -all_violators -verbose >> iu_violators.rpt
.
79c
/*compile -inc -boundary -map_effort low */
.
51c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
45a
link
.
41c
                  iu.v \\
.
39c
*/
.
29a
/*
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_iu.cmd: $!\n";
$expected_cksum = "1271049212\\s+3277\\s+compile_iu.cmd";
chop($new_cksum = `cksum compile_iu.cmd`);
die "Checksum failed for file compile_iu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_mj_ffs.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/lib_setup/compile_mj_ffs.cmd > compile_mj_ffs.cmd") or die "Couldn't fork while building compile_mj_ffs.cmd: $!\n";
print WRITEME <<EOF;
39a
exit
.
27c
read -f verilog mj_ffs_behv.v
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_mj_ffs.cmd: $!\n";
$expected_cksum = "2226724391\\s+1676\\s+compile_mj_ffs.cmd";
chop($new_cksum = `cksum compile_mj_ffs.cmd`);
die "Checksum failed for file compile_mj_ffs.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_mj_muxes.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/lib_setup/compile_mj_muxes.cmd > compile_mj_muxes.cmd") or die "Couldn't fork while building compile_mj_muxes.cmd: $!\n";
print WRITEME <<EOF;
37a
exit
.
27c
read -f verilog mj_muxes_behv.v
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_mj_muxes.cmd: $!\n";
$expected_cksum = "1224462936\\s+1541\\s+compile_mj_muxes.cmd";
chop($new_cksum = `cksum compile_mj_muxes.cmd`);
die "Checksum failed for file compile_mj_muxes.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_pcsu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/pcsu/syn/compile_pcsu.cmd > compile_pcsu.cmd") or die "Couldn't fork while building compile_pcsu.cmd: $!\n";
print WRITEME <<EOF;
95c
write -f verilog -o pcsu_gate.vSyn {pcsu}
.
91,92c
write -f db -o pcsu.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o pcsu.vSyn {pcsu}
.
84,88c
report_area > pcsu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > pcsu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > pcsu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > pcsu_violators.rpt
report_constraints -all_violators -verbose >> pcsu_violators.rpt
.
48c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
31c
                  pcsu.v \\
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_pcsu.cmd: $!\n";
$expected_cksum = "1648250532\\s+3236\\s+compile_pcsu.cmd";
chop($new_cksum = `cksum compile_pcsu.cmd`);
die "Checksum failed for file compile_pcsu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_pipe.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/pipe/syn/compile_pipe.cmd > compile_pipe.cmd") or die "Couldn't fork while building compile_pipe.cmd: $!\n";
print WRITEME <<EOF;
90,91c
write -f db -o pipe.db second_design_list
write -f verilog -h -o pipe.vSyn {pipe} 
.
83,87c
report_area > pipe_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > pipe_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > pipe_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > pipe_violators.rpt
report_constraints -all_violators -verbose >> pipe_violators.rpt
.
54c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
31,34c
                  pipe_dpath.v \\
                  pipe_cntl.v \\
                  pipe.v \\
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_pipe.cmd: $!\n";
$expected_cksum = "3928895207\\s+3144\\s+compile_pipe.cmd";
chop($new_cksum = `cksum compile_pipe.cmd`);
die "Checksum failed for file compile_pipe.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_rcu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/rcu/syn/compile_rcu.cmd > compile_rcu.cmd") or die "Couldn't fork while building compile_rcu.cmd: $!\n";
print WRITEME <<EOF;
64,65c
write -f db -o rcu.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o rcu.vSyn rcu
.
60,62c
report_timing -path end -delay max -max_paths PATHS_FULL -nosplit > rcu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL -nosplit > rcu_maxtim.rpt
report_area -nosplit > rcu_area.rpt
.
53c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
30,33c
                  rcu_dpath.v \\
                  rcu_ctl.v \\
                  rcu.v \\
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_rcu.cmd: $!\n";
$expected_cksum = "1467855571\\s+2254\\s+compile_rcu.cmd";
chop($new_cksum = `cksum compile_rcu.cmd`);
die "Checksum failed for file compile_rcu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_smu.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/smu/syn/compile_smu.cmd > compile_smu.cmd") or die "Couldn't fork while building compile_smu.cmd: $!\n";
print WRITEME <<EOF;
103c
/*sh rm defines.h*/
.
101c
write -f verilog -o smu_gate.vSyn {smu}
.
97,98c
write -f db -o smu.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o smu.vSyn {smu}
.
90,94c
report_area > smu_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > smu_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > smu_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > smu_violators.rpt
report_constraints -all_violators -verbose >> smu_violators.rpt
.
54c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
33,35c
                  smu_dpath.v \\
                  smu_ctl.v \\
                  smu.v \\
.
29c
include mj_synopsys.setup
.
27c
/* sh ln -s ../../rtl/defines.h . */
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_smu.cmd: $!\n";
$expected_cksum = "753770893\\s+3470\\s+compile_smu.cmd";
chop($new_cksum = `cksum compile_smu.cmd`);
die "Checksum failed for file compile_smu.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_trap.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/pipe/syn/compile_trap.cmd > compile_trap.cmd") or die "Couldn't fork while building compile_trap.cmd: $!\n";
print WRITEME <<EOF;
88,89c
write -f db -o trap.db second_design_list
write -f verilog -h -o trap.vSyn {trap} 
.
81,85c
report_area > trap_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > trap_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > trap_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > trap_violators.rpt
report_constraints -all_violators -verbose >> trap_violators.rpt
.
52c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
31,32c
                  trap.v \\
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_trap.cmd: $!\n";
$expected_cksum = "415977021\\s+3045\\s+compile_trap.cmd";
chop($new_cksum = `cksum compile_trap.cmd`);
die "Checksum failed for file compile_trap.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_ucode.cmd

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/ucode/syn/compile_ucode.cmd > compile_ucode.cmd") or die "Couldn't fork while building compile_ucode.cmd: $!\n";
print WRITEME <<EOF;
108,109c
write -f db -o ucode.db current_design() + find(-hier,design) - dont_touch_list
write -f verilog -h -o ucode.vSyn {ucode} 
.
102,106c
report_area > ucode_area.rpt
report_timing -path end -delay max -max_paths PATHS_END -nosplit > ucode_maxend.rpt
report_timing -path full -delay max -max_paths PATHS_FULL > ucode_maxtim.rpt
report_timing -path end -nets -delay max -max_paths PATHS_END -nosplit > ucode_violators.rpt
report_constraints -all_violators -verbose >> ucode_violators.rpt
.
70c
/*set_operating_conditions "WCCOM" -library TARLIB*/
.
52,54c
                      buf_cf_32, mx3_1, mx3_9, \\
                      branch_bit, ucode_reg, ucode_ind, \\
                      ucode_dpath, ucode_ctrl, ucode \\
.
48,50c
second_design_list = {buf_a_oprd, ucode_dat, ucode_seq, \\
                      ucode_dec, ucode_add, ieu_rom, del1_1, \\
                      del1_16, del1_32, inv_b_1, inv_d_1, \\
                      inv_e_1, inv_a_32, inv_b_32, \\
.
30,41c
                  ucode.h \\
                  ucode_dat.v \\
                  ucode_seq.v \\
                  ucode_dec.v \\
                  ieu_rom.v \\
                  ucode_lib.v \\
                  ucode_reg.v \\
                  ucode_ind.v \\
                  ucode_dpath.v \\
                  ucode_ctrl.v \\
                  ucode.v \\
.
27c
include mj_synopsys.setup
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_ucode.cmd: $!\n";
$expected_cksum = "3182676148\\s+3919\\s+compile_ucode.cmd";
chop($new_cksum = `cksum compile_ucode.cmd`);
die "Checksum failed for file compile_ucode.cmd\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_cpu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/syn/constraint_cpu.con > constraint_cpu.con") or die "Couldn't fork while building constraint_cpu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_cpu.con: $!\n";
$expected_cksum = "314343410\\s+2569\\s+constraint_cpu.con";
chop($new_cksum = `cksum constraint_cpu.con`);
die "Checksum failed for file constraint_cpu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_dcu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/dcu/syn/constraint_dcu.con > constraint_dcu.con") or die "Couldn't fork while building constraint_dcu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_dcu.con: $!\n";
$expected_cksum = "1224661688\\s+3313\\s+constraint_dcu.con";
chop($new_cksum = `cksum constraint_dcu.con`);
die "Checksum failed for file constraint_dcu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_ex.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/ex/syn/constraint_ex.con > constraint_ex.con") or die "Couldn't fork while building constraint_ex.con: $!\n";
print WRITEME <<EOF;
31a
*/
.
28a
/*
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_ex.con: $!\n";
$expected_cksum = "4000356040\\s+8463\\s+constraint_ex.con";
chop($new_cksum = `cksum constraint_ex.con`);
die "Checksum failed for file constraint_ex.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_fpu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/fpu/syn/constraint_fpu.con > constraint_fpu.con") or die "Couldn't fork while building constraint_fpu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_fpu.con: $!\n";
$expected_cksum = "2535728037\\s+1605\\s+constraint_fpu.con";
chop($new_cksum = `cksum constraint_fpu.con`);
die "Checksum failed for file constraint_fpu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_hold_logic.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/pipe/syn/constraint_hold_logic.con > constraint_hold_logic.con") or die "Couldn't fork while building constraint_hold_logic.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_hold_logic.con: $!\n";
$expected_cksum = "1388349472\\s+2837\\s+constraint_hold_logic.con";
chop($new_cksum = `cksum constraint_hold_logic.con`);
die "Checksum failed for file constraint_hold_logic.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_icu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/icu/syn/constraint_icu.con > constraint_icu.con") or die "Couldn't fork while building constraint_icu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_icu.con: $!\n";
$expected_cksum = "867544790\\s+2791\\s+constraint_icu.con";
chop($new_cksum = `cksum constraint_icu.con`);
die "Checksum failed for file constraint_icu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_ifu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/ifu/syn/constraint_ifu.con > constraint_ifu.con") or die "Couldn't fork while building constraint_ifu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_ifu.con: $!\n";
$expected_cksum = "3445137924\\s+8681\\s+constraint_ifu.con";
chop($new_cksum = `cksum constraint_ifu.con`);
die "Checksum failed for file constraint_ifu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_iu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/syn/constraint_iu.con > constraint_iu.con") or die "Couldn't fork while building constraint_iu.con: $!\n";
print WRITEME <<EOF;
34a
*/
.
31a
/*
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_iu.con: $!\n";
$expected_cksum = "3136960292\\s+4009\\s+constraint_iu.con";
chop($new_cksum = `cksum constraint_iu.con`);
die "Checksum failed for file constraint_iu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_pcsu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/pcsu/syn/constraint_pcsu.con > constraint_pcsu.con") or die "Couldn't fork while building constraint_pcsu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_pcsu.con: $!\n";
$expected_cksum = "331246890\\s+1602\\s+constraint_pcsu.con";
chop($new_cksum = `cksum constraint_pcsu.con`);
die "Checksum failed for file constraint_pcsu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_pipe.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/pipe/syn/constraint_pipe.con > constraint_pipe.con") or die "Couldn't fork while building constraint_pipe.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_pipe.con: $!\n";
$expected_cksum = "215097178\\s+3941\\s+constraint_pipe.con";
chop($new_cksum = `cksum constraint_pipe.con`);
die "Checksum failed for file constraint_pipe.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_rcu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/rcu/syn/constraint_rcu.con > constraint_rcu.con") or die "Couldn't fork while building constraint_rcu.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_rcu.con: $!\n";
$expected_cksum = "1974540844\\s+8144\\s+constraint_rcu.con";
chop($new_cksum = `cksum constraint_rcu.con`);
die "Checksum failed for file constraint_rcu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_smu.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/smu/syn/constraint_smu.con > constraint_smu.con") or die "Couldn't fork while building constraint_smu.con: $!\n";
print WRITEME <<EOF;
77,84c
set_load 20 * LOAD_1_INV { "smu_addr"};
set_load 20 * LOAD_1_INV { "smu_st"};
set_load 20 * LOAD_1_INV { "smu_ld"};
set_load 20 * LOAD_1_INV { "smu_data"};
set_load 20 * LOAD_1_INV { "smu_na_st"};
set_load 30 * LOAD_1_INV { "smu_hold"};
set_load 20 * LOAD_1_INV { "smu_prty"};
.
57,61c
set_load 30 * LOAD_1_INV { "smu_we"};
set_load 30 * LOAD_1_INV { "smu_sbase"};
set_load 30 * LOAD_1_INV { "smu_sbase_we"};
set_load 30 * LOAD_1_INV { "smu_rf_addr"};
set_load 30 * LOAD_1_INV { "smu_rf_din"};
.
36c
set_drive DRIVE_OF_INV4 { "iu_smiss"};
.
27,28c
set_drive DRIVE_OF_INV2 all_inputs();
set_load 5 * LOAD_4_INV all_outputs();
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_smu.con: $!\n";
$expected_cksum = "1831273958\\s+3572\\s+constraint_smu.con";
chop($new_cksum = `cksum constraint_smu.con`);
die "Checksum failed for file constraint_smu.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_trap.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/pipe/syn/constraint_trap.con > constraint_trap.con") or die "Couldn't fork while building constraint_trap.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_trap.con: $!\n";
$expected_cksum = "252571020\\s+3748\\s+constraint_trap.con";
chop($new_cksum = `cksum constraint_trap.con`);
die "Checksum failed for file constraint_trap.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### constraint_ucode.con

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/iu/ucode/syn/constraint_ucode.con > constraint_ucode.con") or die "Couldn't fork while building constraint_ucode.con: $!\n";
print WRITEME <<EOF;
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building constraint_ucode.con: $!\n";
$expected_cksum = "2020395743\\s+8072\\s+constraint_ucode.con";
chop($new_cksum = `cksum constraint_ucode.con`);
die "Checksum failed for file constraint_ucode.con\n" unless ($new_cksum =~ /$expected_cksum/);

##### compile_lib.setup

$pid = open(WRITEME, "| ed -s ${sourcedir}/picoJava-II/design/lib_setup/compile_lib.setup > compile_lib.setup") or die "Couldn't fork while building compile_lib.setup: $!\n";
print WRITEME <<EOF;
77,79c
LOAD_1_INV = 1 * load_of(TARLIB + "/NAND2_H/A")
LOAD_2_INV = 2 * load_of(TARLIB + "/NAND2_H/A")
LOAD_3_INV = 3 * load_of(TARLIB + "/NAND2_H/A")
.
73,75c
DRIVE_OF_INV1 = drive_of(TARLIB + "/INVERT_E/Z")
DRIVE_OF_INV2 = drive_of(TARLIB + "/INVERT_H/Z")
DRIVE_OF_INV3 = drive_of(TARLIB + "/INVERT_J/Z")
.
68a
read target_library

set_attribute IBM_SA27_SC default_max_fanout 20 -type float

set_dont_use IBM_SA27_SC/*MPH*
set_dont_touch IBM_SA27_SC/*MPH*

set_dont_use IBM_SA27_SC/*_A
set_dont_use IBM_SA27_SC/*_B
set_dont_use IBM_SA27_SC/*_C

set_dont_use  IBM_SA27_SC/D_LD*
set_dont_touch IBM_SA27_SC/D_LD*

set_dont_use IBM_SA27_SC/D_F_*PH1001*
set_dont_use IBM_SA27_SC/D_F_*PH4001*

set_attribute {IBM_SA27_SC} sequential_bridging true -type boolean
 
auto_wire_load_selection = "false"
set_attribute IBM_SA27_SC default_wire_load "50KCELLS_6LM"
set_attribute IBM_SA27_SC default_wire_load_mode "top"

.
57c
TARLIB = IBM_SA27_SC
TARGET_OPCON = T100_V165_Pwc
TARGET_WL    = 50KCELLS_6LM
.
52,53d
49a
synthetic_library={ \\
		dw01.sldb dw02.sldb dw03.sldb dw04.sldb dw05.sldb \\
.
48a
		IBM_SA27_SC.sdb  \\
};
.
45c
		IBM_SA27_SC.db \\
.
40a
	IBM_SA27_SC.db \\
	dw01.sldb dw02.sldb dw03.sldb dw04.sldb dw05.sldb \\
.
35a
	../../sources \\
	synopsys_root + "/libraries/syn" \\
        ibm_library_root + "/synopsys" \\
.
32a
ibm_library_root = "/asic_libs/ibm/ibm_sa27/v12.0/synthesis"
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building compile_lib.setup: $!\n";
$expected_cksum = "53020537\\s+3315\\s+compile_lib.setup";
chop($new_cksum = `cksum compile_lib.setup`);
die "Checksum failed for file compile_lib.setup\n" unless ($new_cksum =~ /$expected_cksum/);

##### mj_synopsys.setup

# add a missing newline to the end of the file
$pid = open(README, "< ${sourcedir}/picoJava-II/design/lib_setup/mj_synopsys.setup") or die "Couldn't open file mj_synopsys.setup: $!\n";
$pid = open(WRITEME, "> temp.mj_synopsys.setup");
while (<README>) {print WRITEME ;}
print WRITEME "\n";
close (README);
close (WRITEME);

# now do the editing
$pid = open(WRITEME, "| ed -s temp.mj_synopsys.setup > mj_synopsys.setup") or die "Couldn't fork while building mj_synopsys.setup: $!\n";
print WRITEME <<EOF;
125c
PATHS_FULL = 1000
.
123c
/*MAX_TRANSITION = 0.50 */
MAX_TRANSITION = 2.0
.
113a
auto_wire_load_selection = "false"
set_attribute IBM_SA27_SC default_wire_load "50KCELLS_6LM"
set_attribute IBM_SA27_SC default_wire_load_mode "top"
.
93,110c
LOAD_1_INV = 1 * load_of(TARLIB + "/NAND2_H/A")
LOAD_2_INV = 2 * load_of(TARLIB + "/NAND2_H/A")
LOAD_3_INV = 3 * load_of(TARLIB + "/NAND2_H/A")
LOAD_4_INV = 4 * load_of(TARLIB + "/NAND2_H/A")
LOAD_5_INV = 5 * load_of(TARLIB + "/NAND2_H/A")
LOAD_6_INV = 6 * load_of(TARLIB + "/NAND2_H/A")
LOAD_7_INV = 7 * load_of(TARLIB + "/NAND2_H/A")
LOAD_8_INV = 8 * load_of(TARLIB + "/NAND2_H/A")
LOAD_9_INV = 9 * load_of(TARLIB + "/NAND2_H/A")
LOAD_10_INV = 10 * load_of(TARLIB + "/NAND2_H/A")
LOAD_15_INV = 15 * load_of(TARLIB + "/NAND2_H/A")
LOAD_20_INV = 20 * load_of(TARLIB + "/NAND2_H/A")
LOAD_25_INV = 25 * load_of(TARLIB + "/NAND2_H/A")
LOAD_30_INV = 30 * load_of(TARLIB + "/NAND2_H/A")
LOAD_35_INV = 35 * load_of(TARLIB + "/NAND2_H/A")
LOAD_40_INV = 40 * load_of(TARLIB + "/NAND2_H/A")
LOAD_45_INV = 45 * load_of(TARLIB + "/NAND2_H/A")
LOAD_50_INV = 50 * load_of(TARLIB + "/NAND2_H/A")
.
84,91c
DRIVE_OF_INV1 = drive_of(TARLIB + "/INVERT_E/Z")
DRIVE_OF_INV2 = drive_of(TARLIB + "/INVERT_H/Z")
DRIVE_OF_INV3 = drive_of(TARLIB + "/INVERT_J/Z")
DRIVE_OF_INV4 = drive_of(TARLIB + "/INVERT_L/Z")
DRIVE_OF_INV5 = drive_of(TARLIB + "/INVERT_N/Z")
DRIVE_OF_INV6 = drive_of(TARLIB + "/INVERT_P/Z")
DRIVE_OF_FLOP1 = drive_of(TARLIB + "/D_F_LPH0001_LPC_H/L2")
DRIVE_OF_NAND1 = drive_of(TARLIB + "/NAND2_H/Z")
.
76a

read target_library

set_attribute IBM_SA27_SC default_max_fanout 20 -type float

set_dont_use IBM_SA27_SC/*MPH*
set_dont_touch IBM_SA27_SC/*MPH*

set_dont_use IBM_SA27_SC/*_A
set_dont_use IBM_SA27_SC/*_B
set_dont_use IBM_SA27_SC/*_C

set_dont_use  IBM_SA27_SC/D_LD*
set_dont_touch IBM_SA27_SC/D_LD*

set_dont_use IBM_SA27_SC/D_F_*PH1001*
set_dont_use IBM_SA27_SC/D_F_*PH4001*

set_attribute {IBM_SA27_SC} sequential_bridging true -type boolean
.
62c
TARLIB = IBM_SA27_SC
TARGET_OPCON = T100_V165_Pwc
TARGET_WL    = 50KCELLS_6LM
.
57,58d
54a
synthetic_library={ \\
		dw01.sldb dw02.sldb dw03.sldb dw04.sldb dw05.sldb \\
.
53a
		IBM_SA27_SC.sdb  \\
};
.
50c
		IBM_SA27_SC.db \\
.
45a
	IBM_SA27_SC.db \\
	dw01.sldb dw02.sldb dw03.sldb dw04.sldb dw05.sldb \\
.
37c
	../../sources \\
	synopsys_root + "/libraries/syn" \\
        ibm_library_root + "/synopsys" \\
.
34d
32a
ibm_library_root = "/asic_libs/ibm/ibm_sa27/v12.0/synthesis"
.
1,\$p
EOF
close (WRITEME) or die "Couldn't close while building mj_synopsys.setup: $!\n";
$expected_cksum = "909829374\\s+4790\\s+mj_synopsys.setup";
chop($new_cksum = `cksum mj_synopsys.setup`);
die "Checksum failed for file mj_synopsys.setup\n" unless ($new_cksum =~ /$expected_cksum/);

# delete the temp file
system("/bin/rm -f temp.mj_synopsys.setup");

############################################################################
