2.0 Design Flow
2.0 Design Flow
2.0 Design Flow
4.2 Placement
The main command during placement in ICC is place_opt. We
use the following commands to execute the placement:
Because of the timing and congestion issues, we choose the
options: -effort high, -congestion and -area_recovery
when using the command: place_opt.
The option: -effort high can improve the timing quality but it
will take a longer runtime. -congestion and -area_recovery
options can get a better congestion result. Scan reorder is
executed by choose the option: -optimize_dft.
After the above commands, if the design still has some
congestion issue, you can use the following command:
The refine_placement command can further improve the
congestion quality but it will make the timing result worst.
Also, you can use the following command to improve the
timing:
Pay attentions here, during timing optimization in ICC, we
should extract RC before the optimization to avoid not
updating the timing information. To update the RC information
the command extract_rc estimate is used before routing
and extract_rc is directly used after routing. During
placement, group and placement blockage are the normal
methods to be used according to the request of design. ICC
also provides these commands.
1) Group: create_bounds
The command: create_bounds can generate two types of
group: hard and soft. The hard type request the elements
which are grouped to put into the group region only and the
soft type imply that some elements can be put outside of the
group region. By default, other cells cant be put into the
group region, if you want, you can choose the option: cycle_color to do so.
The target skew of our design is 300 ps. To solve the timing
issues in our design, we create a useful skew during CTS to
borrow the timing on none critical paths. By this way, we
improve the timing quality very much. To create the useful
skew, we need to choose suitable pins. None critical paths
exist before or after them. Then we first compile sub clock
trees from these pins:
In the above examples, a none-critical path exists before the
pin: mp_vu_dp/mp_vu_vfmt /perm_cc/I0_Ctg/CLK and 500 ps
can be borrowed from it. Another none critical path exists after
the pin: mp_vu_dp/mp_vu_vfa/vfax324/W0_ctg/CLK and 460
ps can be borrowed from it. If timing can be borrowed from
front, the useful skew is negative, otherwise, it is positive.
So the useful skew of the two pins are -500ps and 460ps.
After building the clock sub trees, we report the clock latency
from these pins.
From mp_vu_dp/mp_vu_vfmt/perm_cc/I0_Ctg/CLK, the latency
is 336.72.
From mp_vu_dp/mp_vu_vfa/vfax324/W0_ctg/CLK, the
latency is 353.46.
Before the whole clock tree building, we should set these pins
as float pin:
The value of float_pin_max_delay_rise is equal to the
latency of pin subtract the useful skew of pin
After the above settings complete, we will build the whole
clock tree:
There are three clocks in our design, but in the top level, these
three clocks are the same. So we use the command:
set_inter_clock_delay_options -balance_group clk gvrclk pclk
to balance these three clocks.
The following is the CTS summary: