Thursday, August 5, 2010

08_05_2010 ICC Power thing

After so many days, and after so many trials. I think I am pretty comfortable for ICC.

ICC is a complicated, but very very powerful tool if you know how to manage and use it.

Here are some notes for my recent power trial for GC:
  •  GC has two group of IOs, each group needs ISO cells. 
  •  ISO cells will lie in the space of always-on, so we have the problem disjointed voltage area.
  •  ICC supports disjointed place_bounds, so Da ignored the voltage area and used placed_bounds to put the ISO cells in the place_bounds. Then he build the buffer tree for the iso ctrl, then he updated the place bound to include the buffers. After everything is done, he manually hooked up the power for these two disjointed area.
  • Note: place bound only takes leaf cells, voltage_area, power_domain only take hierarchical cells.  
  • GC rtl hier is bad, but it is managable.
________________________________________________________________________

From the above notes, I did the following way. I used the UPF mode for ICC:


     Step 1:  build the correct buffer tree for ISO network:

    • no power domain, no voltage area, everything is default. There is no difference between ISO cell and other regular standard cells.
    • Create the place_bounds which is exactly same as the future voltage area. 
    • The place_bounds is for the ISO cells.
    • create_fp_placement to have all the ISO cells inside the place_bounds.
    • To have prefix the newly created cell   set compile_instance_name_prefix i_iso_buffer_  
    • create_buffer_tree for ISO signals.
    • update_place_bounds to include these newly created buffers. 
    • Visually check these buffer cells to make sure they are ok.
    • create_fp_hierarchy for these newly created buffers. 
    • remove_bounds
     Step 2:  real power building for the design

    • derive_pg_connection: to hooked all the existed cells. standard cell, ISO, iso_ctrl. 
    • Please refer to the attached for the detailed upf commands.
    • set up the voltage_area which is exactly same location as the place_bounds
    • remove the standard cell placement
    • place the filler_cell in the non-default voltage_area
    • place the filler_cell in the default voltage_area
    • pre-route standard cell to hook up the m1 power_rail for standard_cell
    • remove the filler cell
    • place the power switch cell
    • power_straps for m2,m3,m4,m5 etc.
    • hook up the power............... 
_____________________________________________________________________

FINAL and general comments:


  1. upf is the trend, you need to figure out ways to use it, you can't avoid it. 
  2. try to do everything inside tcl, perl is good, but you need to go out and come back and it is not convenient.


________________________________________________________________

## generate ISO_CELL_LIST
set ISO_CELL_LIST ""

foreach_in_collection rawiso [get_flat_cells *u_iso -filter "@ref_name =~ ISO*"] {
set isoName [get_attribute $rawiso full_name]
regexp  (.*)/u_iso $isoName dummy hier_iso
lappend ISO_CELL_LIST $hier_iso
}

# create power domains

##source ${LOCAL_SCRIPTS}/iso_cell_list.tcl

create_power_domain GC_TOP
create_power_domain GC_AON -elements [get_cells $ISO_CELL_LIST]

# top level connections

# Always-ON power (1.08V)
create_supply_port vcc_m1  -domain GC_TOP
create_supply_net  vcc_m1  -domain GC_TOP
create_supply_net  vcc_m1  -domain GC_AON -reuse
connect_supply_net vcc_m1  -ports vcc_m1

# vss (0.0V)
create_supply_port  vss -domain GC_TOP
create_supply_net   vss -domain GC_TOP
create_supply_net   vss -domain GC_AON -reuse
connect_supply_net  vss -ports vss

# ISGCMA domain power connection (1.08V)
create_supply_port vcc_gc -domain GC_TOP
create_supply_net  vcc_gc -domain GC_TOP
connect_supply_net vcc_gc -ports vcc_gc

# associated supply nets at the top level
set_domain_supply_net GC_TOP -primary_power_net vcc_gc -primary_ground_net vss
set_domain_supply_net GC_AON -primary_power_net vcc_m1 -primary_ground_net vss

create_power_switch gc_psw -domain GC_TOP \
  -output_supply_port {VDD vcc_gc} -input_supply_port {TVDD vcc_m1} \
  -control_port {NSLEEPIN nspleepin}  -on_state { PSWON TVDD {NSLEEPIN} } \
  -off_state { PSWOFF {!NSLEEPIN} }

map_power_switch gc_psw -domain GC_TOP -lib_cells {s2psw51udrbufx6}

create_voltage_area   -coordinate \
{663.22 4058.30   858.94 4167.48  2088.18 3831.88 2194.48 4166.50} \
-power_domain GC_AON \
-guard_band_x 3 -guard_band_y 3 \
-target_utilization 0.70000 -cycle_color





No comments:

Post a Comment