1 |
2 |
dimamali |
/*******************************************/
|
2 |
|
|
/* Script to compile leon with synopsys DC */
|
3 |
|
|
/* Jiri Gaisler, Gaisler Research, 2004 */
|
4 |
|
|
/*******************************************/
|
5 |
|
|
|
6 |
|
|
search_path = {"." "/usr/local/synlibs/DesignKit_DARE_V2.0/DesignKit/IO/syn" "/usr/local/synlibs/DesignKit_DARE_V2.0/DesignKit/CORE/syn" "/usr/local/synlibs/rhumc" "/usr/local/synopsys/libraries/syn"}
|
7 |
|
|
target_library = "RadHardUMC18_CORE_WCMIL.db"
|
8 |
|
|
link_library = "RadHardUMC18_CORE_WCMIL.db rhmem_wcmil.db Post_RH_UMC018_IOLIB_WCMIL.db"
|
9 |
|
|
link_library = "*" + link_library
|
10 |
|
|
symbol_library = "generic.sdb"
|
11 |
|
|
allow_newer_db_files = "true";
|
12 |
|
|
|
13 |
|
|
/* constraints - tailor to your own technology. An average 0.35 std-cell tech
|
14 |
|
|
should give you 80 - 100 MHz depending on ram access time. A 0.25 tech
|
15 |
|
|
should run at +150 MHz. Frequency in MHz, delays in ns ... */
|
16 |
|
|
|
17 |
|
|
frequency = 200
|
18 |
|
|
clock_skew = 0.10
|
19 |
|
|
input_setup = 2.0
|
20 |
|
|
output_delay = 4.0
|
21 |
|
|
|
22 |
|
|
/* don't touch anything from here unless you know what you are doing */
|
23 |
|
|
|
24 |
|
|
include leon3mp.dc
|
25 |
|
|
|
26 |
|
|
ungroup find(cell, "*pad*") -flatten
|
27 |
|
|
|
28 |
|
|
group find(cell, {"sr*", "sdc", "apb*", "uart*", "timer*", "irq*" \
|
29 |
|
|
"ahb*", "dsu0", "rst0", "dcom*" }) -design_name amod \
|
30 |
|
|
-cell_name amod0
|
31 |
|
|
|
32 |
|
|
current_instance u0_0/p0
|
33 |
|
|
ungroup -all -flatten
|
34 |
|
|
current_instance ../rf0
|
35 |
|
|
ungroup -all -flatten
|
36 |
|
|
current_instance ../cmem0
|
37 |
|
|
ungroup -all -flatten
|
38 |
|
|
current_instance ../../amod0
|
39 |
|
|
ungroup -all -flatten
|
40 |
|
|
current_instance ..
|
41 |
|
|
|
42 |
|
|
peri = 1000.0 / frequency
|
43 |
|
|
input_delay = peri - input_setup
|
44 |
|
|
tdelay = output_delay + 2
|
45 |
|
|
create_clock -name "clk" -period peri -waveform { 0.0, peri / 2.0 } { "clk" }
|
46 |
|
|
set_wire_load_mode segmented
|
47 |
|
|
|
48 |
|
|
set_clock_skew -plus_uncertainty clock_skew "clk"
|
49 |
|
|
set_clock_skew -minus_uncertainty clock_skew "clk"
|
50 |
|
|
|
51 |
|
|
/*
|
52 |
|
|
set_input_delay input_delay -clock clk { \
|
53 |
|
|
"pio[15]" "pio[14]" "pio[13]" \
|
54 |
|
|
"pio[12]" "pio[11]" "pio[10]" "pio[9]" "pio[8]" "pio[7]" \
|
55 |
|
|
"pio[6]" "pio[5]" "pio[4]" "pio[3]" "pio[2]" "pio[1]" "pio[0]" \
|
56 |
|
|
"data[31]" "data[30]" "data[29]" "data[28]" "data[27]" "data[26]" \
|
57 |
|
|
"data[25]" "data[24]" "data[23]" "data[22]" "data[21]" "data[20]" \
|
58 |
|
|
"data[19]" "data[18]" "data[17]" "data[16]" "data[15]" "data[14]" \
|
59 |
|
|
"data[13]" "data[12]" "data[11]" "data[10]" "data[9]" "data[8]" \
|
60 |
|
|
"data[7]" "data[6]" "data[5]" "data[4]" "data[3]" "data[2]" \
|
61 |
|
|
"data[1]" "data[0]" "brdyn" "bexcn" }
|
62 |
|
|
|
63 |
|
|
set_max_delay tdelay -to { "errorn" "wdogn" \
|
64 |
|
|
"pio[15]" "pio[14]" "pio[13]" \
|
65 |
|
|
"pio[12]" "pio[11]" "pio[10]" "pio[9]" "pio[8]" "pio[7]" \
|
66 |
|
|
"pio[6]" "pio[5]" "pio[4]" "pio[3]" "pio[2]" "pio[1]" "pio[0]" \
|
67 |
|
|
"data[31]" "data[30]" "data[29]" "data[28]" "data[27]" "data[26]" \
|
68 |
|
|
"data[25]" "data[24]" "data[23]" "data[22]" "data[21]" "data[20]" \
|
69 |
|
|
"data[19]" "data[18]" "data[17]" "data[16]" "data[15]" "data[14]" \
|
70 |
|
|
"data[13]" "data[12]" "data[11]" "data[10]" "data[9]" "data[8]" \
|
71 |
|
|
"data[7]" "data[6]" "data[5]" "data[4]" "data[3]" "data[2]" \
|
72 |
|
|
"data[1]" "data[0]" }
|
73 |
|
|
|
74 |
|
|
set_max_delay output_delay -to { \
|
75 |
|
|
"writen" "romsn[1]" "romsn[0]" "read" "oen" \
|
76 |
|
|
"iosn" "rwen[3]" "rwen[2]" "rwen[1]" "rwen[0]" "ramsn[3]" \
|
77 |
|
|
"ramsn[2]" "ramsn[1]" "ramsn[0]" \
|
78 |
|
|
"ramoen[3]" "ramoen[2]" "ramoen[1]" "ramoen[0]" \
|
79 |
|
|
"sdcsn[1]" "sdcsn[0]" "sdwen" "sdrasn" "sdcasn" \
|
80 |
|
|
"sddqm[3]" "sddqm[2]" "sddqm[1]" "sddqm[0]" \
|
81 |
|
|
"address[27]" "address[26]" "address[25]" "address[24]" \
|
82 |
|
|
"address[23]" "address[22]" "address[21]" "address[20]" \
|
83 |
|
|
"address[19]" "address[18]" "address[17]" "address[16]" \
|
84 |
|
|
"address[15]" "address[14]" "address[13]" "address[12]" \
|
85 |
|
|
"address[11]" "address[10]" "address[9]" "address[8]" \
|
86 |
|
|
"address[7]" "address[6]" "address[5]" "address[4]" \
|
87 |
|
|
"address[3]" "address[2]" "address[1]" "address[0]"}
|
88 |
|
|
|
89 |
|
|
*/
|
90 |
|
|
set_max_area 0
|
91 |
|
|
set_max_transition 2.0 leon3mp
|
92 |
|
|
set_flatten false -design {"leon3mp.db:leon3mp"}
|
93 |
|
|
set_structure true -design {"leon3mp.db:leon3mp"} -boolean false -timing true
|
94 |
|
|
|
95 |
|
|
|
96 |
|
|
compile -map_effort medium -boundary_optimization
|
97 |
|
|
|
98 |
|
|
write -f db -hier leon3mp -output leon3mp.db
|
99 |
|
|
|
100 |
|
|
report_timing
|
101 |
|
|
report_area
|