Manual ECO for highly congested and high density block
Agenda
: To solve max trans violation .
The
root cause for the max trans violation on the pins was due to high
fanout of the net connected to those pins.The stage was tapeout
phase, so cant go back to again PNR with max_fanout constraints ,
also setup and hold was in control , so the only way to do an ECO.
One
way is to increase the drive strength of the driver but the driver is
already having higher drive strength of D16 and increasing beyond
that was making results bad. And the other way is to break the fanout
sink pins by adding buffer. So we will focus on second option.
The
Challenge is ,the block is very much congested running at 84 %
utilization. So no more place for extra cells to place and again in
upper right region of block you will hardly see space for filler and
DCAPs, so imagine density of logical standard cells in upper right
region.
Below
is the snippet of highlighted pic of DCAPS and FILLER in block :
Below
is the snippet showing upper right portion of block :
In
the above snippet , the density of DCAP and FILLER is very very less
in upper right region. The small highlighted portion are filler cells
of minimum size present in library.
The
Challenge : All high fanout nets are present in this region. Now how
to add buffers? Where to place it? If we do it by automatic/default
eco of tool , will it be giving good results?
Let
me answer this question if we do placement of eco buffer cells by
automated eco tool , as I mentioned earlier we are done with setup
and hold fixing , now tool will try to place those new eco cells near
to connections ,but since there is no place , it will move all the
cells in order to place this new eco buffer cells , this can make the
timing bad . OR it will place the new eco buffer cells far apart
where place is available in the mid region of the block (please refer
to snippet above), this will also make timing worse.
APPROACH
: one NorD16 gate was having 35 fanouts , and PT(PrimeTime) reported
all the timing violation at this sink pins of net driving 35 cells .
1) In
the GUI , highlighted all the fanouts , highlighted the cell driving
this fanout
2) Good
thing is there were spare cells present in databse at 70 by 70
microns.
3) Removed
only spare cells present in upper right region of block by seeing the
location which is sitting near to driver and its fanout , making note
of it. Since we need to add buffers only at those place which is
affected by high fanout nets.
4) Based
on the spare cell location and driver cell location, selected
half(not exact half) of the fanout and this list was given to sink
pins . So tool will break the fanout and will add those sink pins
which will driven by now buffer and remaining will be driven by that
driver cell which was having 35
fanouts earlier.
5) The
ICC has below procedure (available in solvnet)
Source
eco_add_buffer.tcl (Link
https://solvnet.synopsys.com/retrieve/2389864.html?otSearchResultSrc=advSearch&otSearchResultNumber=1&otPageNum=1)
Command
used is as below :
eco_add_buffer
-sink_pins {rp_ppi_pkt_framer/clsfr_fifo/rp_dp_ram/U8789
rp_ppi_pkt_framer/clsfr_fifo/rp_dp_ram/icc_place553/I
rp_ppi_pkt_framer/clsfr_fifo/rp_dp_ram/icc_clock5655/I
rp_ppi_pkt_framer/clsfr_fifo/rp_dp_ram/icc_place554/I} -lib_cell
BUFFD12BWP12T30P140LVT -prefix hfn_eco_cell_0
6) Now
I placed this new eco cells at the coordinate where I have deleted
spare cells (not randomly , making note of point no 1 and 3)
7) Making
sure that this new eco cells are fitting at spare cells location . At
two three places I found that the new eco cell was having higher area
compared to spare cell , so I decreased the driving strength of new
eco cell so that it can fit in that region. At the same thime I found
vice versa too!the spare cells was having more region , in that case
no problem , we have fillers to be inserted in next step,it will be
fill by tool at those empty places.
8) After
placing of new eco cells we are done with manual eco placing , now
saving this cell and give this cell name to start filling fillers ,
route_zrt_eco to route this buffers , doing signoff_drc and
signoff_autofix_drc and signoff_metalfill in the default ECO
script(comment the place eco cells in script since we have done that
manually according to our requirement).
Topic
in : Physical Design, ECO, Max trans,STA