summaryrefslogtreecommitdiffstats
path: root/lab4/build/dc_synthesize.tcl
blob: 45afc7437bec38f5db9edd73f5415a8e466dbb05 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
sh date

# set some per design variables FIXME - use these!
# set LOG_PATH  "synth/dc_test_synth/log/"
# set GATE_PATH "synth/dc_test_synth/gate/"
# set RTL_PATH  "synth/dc_test_synth/verilog/"

# Should be moved to a synthesis setup dot file?
set target_library {/sw/mentor/libraries/cmos065_522/CORE65LPLVT_5.1/libs/CORE65LPLVT_nom_1.20V_25C.db}
set link_library $target_library 



proc dir_exists {name} {
    if { [catch {set type [file type $name] } ]  } {
	return 0;
    } 
    if { $type == "directory" } {
	return 1;
    }
    return 0;

}

source designinfo.tcl


if {[dir_exists $TOPLEVEL.out]} {
    sh rm -r ./$TOPLEVEL.out
}
sh mkdir ./$TOPLEVEL.out

set power_preserve_rtl_hier_names true


current_design $TOPLEVEL

elaborate $TOPLEVEL

# Set timing constaints, this says that a max of .5ns of delay from
# input to output is allowable 
#set_max_delay .1 -from [all_inputs] -to [all_outputs]


# If this were a clocked piece of logic we could set a clock
#  period to shoot for like this 
set_clock_gating_style  -max_fanout 16

# Some default settings, you probably need to change this for your
# particular project!
create_clock clk -period 2
set_input_delay -clock clk 0.1 [all_inputs]
set_output_delay -clock clk 0.1 [all_outputs]



# FIXME - check this!
#optimize_registers -sync_trans multiclass 

# Check for warnings/errors 
check_design

# ungroup everything 
ungroup -flatten -all

# flatten it all, this forces all the hierarchy to be flattened out 
set_flatten true -effort high
uniquify

# This forces the compiler to spend as much effort (and time)
# compiling this RTL to achieve timing possible. 
#
# Clock gating is enabled by default to reduce power.
compile_ultra -gate_clock

# Now that the compile is complete report on the results 

check_design > ./$TOPLEVEL.out/check_design.rpt

report_constraint -all_violators -verbose  > constraint.rpt
report_wire_load > wire_load_model_used.rpt
report_area > area.rpt
report_qor > qor.rpt
report_timing -max_paths 1000 > timing.rpt


report_ultra_optimization > ultraopt.rpt
report_power -verbose > power_estimate.rpt
report_design > ./$TOPLEVEL.out/design_information.rpt
report_resources > ./$TOPLEVEL.out/resources.rpt

# Finally write the post synthesis netlist out to a verilog file 
write -f verilog -output synthesized_netlist.v -hierarchy

quit