Friday, November 6, 2015

Distributing Spare Cells

Automatically Distributing the Spare Cells During Placement
Note:
Automatic spare cell placement work only for spare cells that have  all inputs tied low or high and have output ports that float. Addtionally, due to the current tool limitations, you must set the attribute is_spare_cell on the spare cells to enable the tool to place spare cells automatically. Any spare cells that are connected to signal nets, such as sequential cells connected to a clock, cannot be distributed automatically. You need to insert these spare cells manually.

After you add your spare cells into the Verilog netlist and import the netlist into ICC, the tool will distribute the spare cells automatically during placement. This placement is hierarchically aware, so you can insert spare cells in a logic submodule instead of across the entire design.
In this case, When ICC places these spare cells, instead of placing the cells across the entire floorplan, the placement is limited to the area that the submodule covers.

1. The spare cells in module Top/spare1 are distributed across the placed area of Top(A,B and C).    
 2. The module Top/A contains a submodule, spare2, which contains only spare cells. The spare cells 
in spare2 are placed only in the area in which Top/A is placed.                                                    

When you want ICC to place the spare cells automatically, keep the following in mind:
1) If you apply the dont_touch attribute to the spare cells, the spare cells will not be removed during poptimization.
2)You must connect the spare cell inputs to low or high. The tool identifies spare cells automatically by checking the inputs. If the inputs of spare cells are not tied low or high, they are not treated as spare cells and placement might place them in one tight location.
3)Set the spare cells to the soft-fixed attribute once the spare cells are distributed. With the soft-fixed attribute, they can still be moved slightly.

Manually Distributing the Spare Cells After Placement
If you want to manually control spare cell placement, use the spread_spare_cells cmd.

The sparead_spare_cells cmd evenly distributes specified spare cells over a specified region. Manual cell spareading means that the spare cells are not placed automatically during placement; instead , they are placed either before or after placement.
This is useful when you want to control the space cell location.

To manually place spare cells after placement, use the following steps:
1. Apply the  is_spare_cell attribute to the spare cells.
To do this, you can run the set_attribute cmd. For example,
set_attribute [get_cells block1/spare*] is_spare_cell true
If you do not apply this attribute, the sparead_spare_cells cmd will not work.

2. Apply the dont_touch attribute and the fixed attribute to all the spare cells.
If you do not set the cell to fixed status, the placement will place all the spare cells into a small tight location and waste the placement area.

3. Run the placement optimization.

4. Remove the fixed attribute from spare cells.
If you do not remove the fixed attribute, the spare cells cannot be distributed.

5. Run the spread_spare_cell command.
The spread_spare_cells cmd accepts collections, which means you can pass any collection variable from other Tcl cmds. The spread_spare_cells cmd distributes the specified spare cells into the specified region. It derives the location for each of the spare cells but does not perform legalization on the distributed spare cells.
You will need to run incremental legalization for these spare cells. The cmd works for both rectangular and rectilinear areas.

6. Run incremental legalization.
Incremental legalization attempts to maintain the existing placement. It is highly recommended that you run the increamental legalization, using the following syntax:
legalize_placement -incremental

7. Set the spare cells to soft-fixed.
This maintains the spare cell placement location and also allows the cell to be moved slightly, if necessary , later in further optimization. Do this with the set_attribute cmd.

For example,
Manually Place Spare Cells After Placement
source icc.setup
open_mw_lib MDBLIB
open_mw_cel top
set_attribute [get_cells *spares*] is_spare_cell true
set_dont_touch_placement [get_cells *spares*]
place_opt
remove_dont_touch_placement [get_cells *spare* ]
place_opt
remove_dont_touch_placement [get_cells spare*]
spread_spare_cells [get_cells spare*] -bbox { { 20 20} { 999 999}}
legalize_placement -incremental
set_dont_touch [get_cells *spare*] true
set_attribute [get_cells *spare*] is_soft_fixed true
clock_opt
route_opt
....

For Example,
Manually Placing Spare Cells Before Placement
open_mw_cel top
set_attribute [get_cells spare*] is_apre_cell true
sparead_spare_cells [get_cells spare*] -bbox {{ 5 5 } { 2000 2000} }
set_attribute [ get_cell spares*] is_soft_fixed true
set_dont_touch [get_cells spares*]
place_opt
clock_opt
route_opt

Inserting Spare Cells By Using the insert_spare_cells commands
Use the insert_spare_cells command to insert a specified number of instances of  a specified library cell as spare cells in a legalized design.
If your design does not have legal placement, use the insert_spare_cells -skip_legal cmd to skip legalized placement checking on the design. However, the cmd still tries to find the legal location for each spare cell even if the design has illegal placement.

When you insert spare cells in a specific hierarchy by using the -hier_cell option, the spare cells are placed in the rectangular area that encloses all of the cells belonging to the specified subdesign so that the spare cells are closer to those cells.

If you want to insert a different number of spare cells for different library cells, run the insert_spare_cells cmd with -num_cells option.
For example, if you want to insert two AND2 and three BUF3, run the following cmd:
insert_spare_cells  -num_cells {AND2 2 BUF3 3}
Each cell is inserted with legal placement if there is enough space. New spare cells of the same library cell are spread as evenly as possible.
This is the same as if you specify different library cells with the -num_instances and -lib_cell options;
they are placed together if possible. The only difference is now you can have a different number of each library cell . if you use the -num_cells option, you do not need to specify the -num_instances and -lib_cell option.

For example,
open_mw_cel top
place_opt
insert_spare_cells -lib_cell {INV8 DFF1} -cell_name spares \
 -num_instances 300
set_attribute [get_cells spare*] is_soft_fixed true
set_dont_touch [get_cells spares*] true












No comments:

Post a Comment