copy from:
http://www.vlsiip.com/dc_shell/Design Compiler user guide
Step 0. Invoke Design Compiler
unix>
dc_shell-tStep 1. Setup technology library. To synthesize a design you need
technology library which will contain
description of the cells from the
fab, and their timing. This is usually a .db file found in
library installation directory. To
do this
1(a). Tell synopsys where your
<library>.db file is.
set search_path
{/homes/amittal/s5/work/physical_lib/corelib/tsmc_090_g_art} 1(b). Tell synopsys what is your technology
library, which you want to map your design on called
set target_library
{scadv_tsmc_cln90g_lvt_ss_0p9v_125c.db} 1(c). Set up link libraries. This is optional
.db files which are pre synthesized and ready to be read in
For this, append your search path where your
optional .db files are
lappend search_path
{[exec pwd]}
lappend search_path {.} 1(d). Set up link libraries. This is optional
.db files which are pre synthesized and ready to be read in
set
link_library {PLL10CCMID_W_125_1.35.db}Step 2. Read In your design files
2(a). if it is verilog:
read_verilog
counter.v 2(b). if it is vhdl: As it is in this tutorial
read_vhdl
counter.vhd read_vhdl
counter_top.vhd 2(c). if it is ddc:
read_ddc counter.ddcStep 3. Set Design Constraints:
3(a) Set frequency of operation: You have to
create a clock in the design,
With a given timeperiod. The command below
creates a clock and calls it
'design_clk' with a timeperiod of 10 ns,
(100MHz), and maps it to the
'clk' input of the design.
create_clock
-period 10 -name design_clk clk 3(b) Set input constraints : Set how much time
would be spent by
signals arriving into your design, outside
your design with respect to the clock
set_input_delay 4.0
[remove_from_collection [all_inputs ] clk] -clock design_clk 3(c) Set output constraints : Set how much
time would be spent by
signals leaving your desing, outside your
design, before they are captured by
the same clock
set_output_delay
7.0 [all_outputs] -clock design_clk 3(d) Set area constraints : set maximum
allowed area to 0
. well its just to
instruct design compiler that use as less area
as possible.
set_max_area 0Step 4. Enable clock gating for low power (optional)
4(a) The following commands will try to insert
clock gates for each 2 registers
set_clock_gating_style
-minimum_bitwidth 2Step 5. Write formal verification setupfile (optional)
set_svf -append
"counter.svf"Step 6. Set Register optimization veriables (optional)
(a) Set automatic removal of constant
flipflop(s)
set
compile_seqmap_propagate_constants true
(b) Set automatic removal of unloaded
flipflop(s)
set compile_delete_unloaded_sequential_cells false
Step 7. Set mapping of sync resets to aviod Xs in sims (optional)
set
hdlin_ff_always_sync_set_reset "true"Step 8. Set the name of top level as current design and compile the
design
(a)
current_design
counter_top compile -map_effort
high (b) If you are using dc ultra :
compile_ultra
You
may want to turn off output inversion of sequential cells
compile_ultra
-no_seq_output_inversionStep 9. Write design output netlist
9(a).Write output in ddc format
write -format ddc
-output counter.ddc -hier 9(b).Write output in verilog format
write -format ddc
-output counter.vlog -hierStep 10. You may want to flatten your design before writing out netlist
ungroup -all
-flatten write -format
verilog -output counter_flat.vlogStep 11. Writing a timing report of your design
report_timing >
counter_timing.repStep 12. Quit Design Compiler
quit More random
DC shell Tcl
mode Commands:define_design_lib lib1 -path ~/misc/vhdl
analyze -library lib1 -format vhdl /homes/amittal/misc/vhdl/xx.vhdl
get_design_lib_path SYNTH
get_design_lib_path work
read_verilog mse.v
report_timing -delay max -from
ARRAYCACHE_I/CACHEDIRRAM_I/regfile64x704_assembly_0/RA_ram[3] -to
pCacheMemReqFifoDataOut
report_timing -delay max -through [find net
ARRAYCACHE_I/CACHEDIRRAM_I/regfile64x704_assembly_0/RA_ram[3]]
report_constraint -verbose -all_violators
create_clock -name "myclk" -period 13 [get_ports pClk]
set_output_delay 1.0 -clock [get_clocks myclk]
pCacheMemReqFifoDataOut[161]
set_wire_load_mode segmented
set_wire_load_mode enclosed
update_timing
report_timing -from [find pin ARRAYCACHE_I/LatencyReqReg*/Q] -to
pCacheMemReqFifoDataOut
report_timing -from [find pin ARRAYCACHE_I/CACHE_DATA_RAM/DO*] -to
pCacheMemReqFifoDataOut
set_output_delay 1.0 -clock myclk pCacheMemReqFifoDataOut
set_false_path -through [find pin ARRAYCACHE_I/FracSetReg*/*]index
It is to be noted that if there are no constraints, 'set_false_path'
does not actually works.
I tried to find delays to a output port, without any constraints, form
a known point in the design.
I got that.
Then I wanted to find next worst path to that output port, to I set a
false path on the path found above.
But it wouldn't work
I then created a clcok and constrainted the output port,
!! False path worked.... magic
create_clock -period 4.8 -name vclk
set_input_delay 2.5 pDmaReadRegIndex -clock vclk -add_delay
set_output_delay 2.5 pInsertNopOut -clock vclk -add_delay
set_false_path -from vclk -to PESWITCH_pClk
set_false_path -from PESWITCH_pClk -to vclk
set_false_path -from PESWITCH_pClk -through pDmaReadRegIndex -to
pInsertNopOut
report_timing -from pDmaReadRegIndex -to pInsertNopOut
set_input_delay [expr 0.35*$vclk_period] [all_inputs] -clock vclk
-add_delay
set_output_delay [expr 0.35*$vclk_period] [all_outputs] -clock vclk
-add_delay
set_false_path -from PESWITCH_pClk -through [all_inputs] -to
[all_outputs]
set compile_log_format "%elap_time %area %wns %tns %drc %endpoint
%group_path"
文章评论(0条评论)
登录后参与讨论