Vous êtes sur la page 1sur 2

4/17/2019 How to use CCOpt engine to build a tree on data nets

How to use CCOpt engine to build a tree on data nets

Problem
After placement, at the post cts opt or even post route opt stage, I see that a few high fanout nets are not buffered.
This may have happened for a variety of reasons, such as "don't touch on nets".

I would like to buffer such nets using the CCOpt engine. How can I accomplish this?

Solution
The flow described below creates additional CCOpt definitions and controls the properties for the HFN network.

This flow assumes that the design already has predefined clock specs and CCOpt properties, and works to keep
those intact.

1. Create a file called "nets.txt" and add the net or nets that will be buffered:
set file [open nets.txt w]
puts $file "FE_OFN1405_n_55"
close $file
deleteBufferTree -selNetFile nets.txt

2. Ensure that the existing clock trees in the design are not touched:
#discarding other clock trees
foreach ct [get_ccopt_clock_trees *] {
set org({$ct\_opt_ignore}) [get_ccopt_property opt_ignore -clock_tree $ct]
set_ccopt_property opt_ignore true -clock_tree $ct
}

3. Get the list of sink points for each net and set as stop pin:
#Setting up stop pin
set idx 0
dbForEachFileLine nets.txt ln {
foreach p [dbGet [dbGet [dbGet -p top.nets.name $ln].instTerms {.isInput ==
1}].name] {
set_ccopt_property sink_type stop -pin $p
lappend stop_pins(${idx}) $p
}
incr idx
}

4. Set up clock trees and skew groups for each root pin of nets:
#Setting up clock trees
set idx 0
dbForEachFileLine nets.txt ln {
set src_pin [dbGet [dbGet [dbGet -p top.nets.name $ln].instTerms {.isOutput ==
1}].name]
create_ccopt_clock_tree -name dt${idx} -source $src_pin -no_skew_group
create_ccopt_skew_group -name sg_dt${idx} -sources $src_pin -sinks
$stop_pins($idx) - target_insertion_delay 1.0
set_ccopt_property target_skew 5ns -skew sg_dt${idx}
set_ccopt_property target_max_trans 300ps -clock_tree dt${idx}
incr idx
}

5. Set up the CCOpt properties for buffer tree synthesis:


#Collecting design status - so that these can be restored later
set org(design_lat) [get_ccopt_property update_io_latency]
set org(design_pc) [get_ccopt_property post_conditioning]
set org(design_route) [get_ccopt_property
use_estimated_routes_during_final_implementation]
set org(design_bufs) [get_ccopt_property buffer_cells]

https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V000006AjbEUAS&pageName=ArticleContent 1/2
4/17/2019 How to use CCOpt engine to build a tree on data nets
#Controlling properties for buffer tree synthesis
set_ccopt_property update_io_latency false
set_ccopt_property post_conditioning false
set_ccopt_property use_estimated_routes_during_final_implementation true
set_ccopt_property buffer_cells "BUFX12 BUFX16 BUFX20"

6. Run CCOPT DESIGN CTS:


ccopt_design -cts

7. Restore design properties so that all earlier CCOpt runs and data remains consistent:
#Restoring Properties
set_ccopt_property update_io_latency $org(design_lat)
set_ccopt_property post_conditioning $org(design_pc)
set_ccopt_property use_estimated_routes_during_final_implementation
$org(design_route)
foreach ct [get_ccopt_clock_trees *] {
catch {set_ccopt_property opt_ignore $org({$ct\_opt_ignore}) -clock_tree $ct}
}
set_ccopt_property buffer_cells $org(design_bufs)

8. Ignore optimization of the buffer tree:


set_ccopt_property opt_ignore true -clock_tree dt*

Note: The above flow works even if the design does not contain preloaded specs. However, running automatic spec
generation after this flow results in the IMPCCOPT-2048 error. Click here to see the solution that explains the
methodology you can use to overcome the error.

Return to the top of the page

https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1O0V000006AjbEUAS&pageName=ArticleContent 2/2

Vous aimerez peut-être aussi