AbhyasaSEMICON TECHNOLOGIES

FC(Fusion Compiler) to Innovus command mapping

  • Fusion Compiler
  • Innovus
SynopsysFusion Compiler(FC)
CadenceInnovus

Introduction

comparison of Fusion Compiler and Innovus commands

Common Command Mapping

The command mapping table can be scrolled horizontally on smaller screens. Use the arrow keys while focused on this table region.

Fusion Compiler, Innovus and Requirement command mapping
FcInnovusRequirement
start_guiwin open the gui from shell
stop_guiwin off close the gui
fc_shell  -f    <file_path.tcl>innovus   -init    <file_path.tcl> source a file while launching the tool
open_lib test.ndm source test.enc or open a design
open_block test.designrestoreDesign test.enc.dat <block name>
set_host_options  setMultiCpuUsage To use multicpu
check_design check_design Get the design stats and sanity checks
check_timing check_timing Timing sanity check
check_pg_drccheckDesign -floorplan  -noHtml  -outfile   checkDesign.ascii check powerplan
set_technology  -node setDesignModesets the technology node
get_cells , get_nets, get_* commandsget_cells , get_nets, get_* commandsFind objects in the design
change_selection  [get_cells <inst name>] SelectInst <inst name> Select a particular instance in the design
change_selection [get_nets <net name>]selectNet <net name> Select a net in the design
get_cells  -hier   -filter   ""ref_name==<lib cell name>""get_cells  -hier   -filter {ref_lib_cell_name == <lib cell name>} Find cells with lib name
Get_attribute [get_core_area] namedbGet top.name Find the top name of the design
report_attributes [get_cells hbi_ns] -application dbGet selected.?? Get all the attributes of a selected object
get_attribute [get_selection] <press tab here> dbGet top.<press tab here> If you press tab key after a . (dot) it will display all the possible options there.  you can try
get_attribute [get_selection] name dbGet selected.name Get the name of the selected object (instance, net, ports or any other objects).
Get_attribute [get_selection] ref_name dbGet selected.cell.name  Get the cell name of a selected  Instance. 
get_pins -of_objects [get_selection] dbGet selected.cell.terms.name  Get all the pins of a selected  Instance. 
Report_units dbGet head.dbUnits  Get the database unit 
<>dbGet head.mfgGrid  Get the manufacturing grid value 
get_layers -all_purposesdbGet head.layers.name Get all  the layers name
get_object_name [get_layers -filter layer_type==interconnect] dbGet [dbGet head.layers.type routing -p].nameGet all  the routing layers name
get_attribute [get_layers TM1] min_width dbGet [dbGet [dbGet head.layers.type routing -p].name *2 -p].minWidth  Get the parameters of any particular routing layer (like Masks, Directions, pitch, minWidth, minSpacing etc )
get_attribute [get_lib_cells *] function dbGet head.libCells.name <cell_name>   Get the information of a cell which is present in std. cell library but not in design.
<> dbGet [dbGet head.allCells.objType libCell -p]{.numRefs > 100}  Get the pointers of all the cells which are used more than 100 times in the design
get_lib_cells */* -filter ""cell_footprint=~*inv*"dbGet [dbGet head.libCells.isInverter 1 -p].name   Get all the inverter cells available in the library.
get_attribute [get_core_area] bboxdbGet top.fPlan.box.size  Get  the size of your block
get_attribute [get_core_area ] area dbGet top.fPlan.area Get the area of your block
get_power_domains * -hierarchical dbGet top.fPlan.groups.pd.name  Get all the power domains availble in the design
Get_attribute [get_ports *] name dbGet top.terms.name  Find all the block level ports name 
lsort -u [get_attribute [get_ports *] layer_name] dbGet top.terms.pins.allShapes.layer.name -u Find the metal layers used in block level IO ports
sizeof_collection [get_ports *] (or) llength [dbGet top.terms] dbGet top.numTerms Get the count of block level ports 
llength [dbGet top.terms.inOutput 1 -p] sizeof_collection [get_ports * -filter ""direction==out""] dbGet top.numInputs Get all input and output ports 
get_attribute [get_ports *] is_clock get_attribute [get_ports *] is_scan llength [dbGet top.terms.isClk 1 -p] llength [dbGet top.terms.isScanClk 1 -p] Get all clock and scan clock pins
get_attribute [get_ports *] edge_number dbGet [dbGet top.terms.name <port_name> -p].edge   Get the edge number where a port is placed
 get_ports *FT* -filter ""edge_number==3"dbGet [dbGet top.terms.edge 3 -p].name *ft*   Get all the feedthru ports name which is placed on a particular edge number (suppose 3)
get_attribute [get_flat_cells *] name dbGet top.insts.name Get the name of all the instances present in the design. 
get_cells * -hier -filter ""ref_name=~*<cell_name>*"dbGet [dbGet top.insts.cell.name <cell_name> -p2].name Get all the instances name of a particular cell 
Get_cells * -hier -filter ""is_physical_only==true"dbGet [dbGet top.insts.cell.isPhyOnly 1 -p].name -u Get all the physical cells present in the design 
join [get_object_name [get_ports *]] \n join [dbGet [dbGet top.insts.cell.isPhyOnly 1 -p].name -u ] \n Suppose you want to print all the names in a new line, you can use join them like below.
llength [get_object_name [get_ports *]] llength [dbGet [dbGet top.insts.cell.isPhyOnly 1 -p].name -u ] Suppose you want only a number that how many types of physical cells have been used, llength can be used in that case before the dbGet command.
llength [get_object_name [get_cells * -hier -filter ""is_physical_only==true""]] llength [dbGet top.insts.cell.isPhyOnly 1 -p2] Find the total number of physical cell instances used in the design  
<> llength [dbGet top.insts.cell.numTerms 1 -p2]  Find all the instances which have only one pins (like tie cells, antenna cells)
llength [get_object_name [get_cells *TAP* -hier -filter ""is_physical_only==true""]] llength [dbGet top.insts.cell.name <*TAP*> -p2]  Find total numbers of well tap instances used in the design 
llength [lsort -u [get_attribute [get_cells *TAP* -hier -filter ""is_physical_only==true""] ref_name]] llength [dbGet top.insts.cell.name <*TAP*> -p -u] Find total types of well tap cells used in the design 
lsort -u [get_attribute [get_cells *TAP* -hier -filter ""is_physical_only==true""] ref_name] dbGet [dbGet top.insts.cell.name <*TAP*> -p].name -u  Find  the name of all uniq types of well tap cells used in the design 
lsort -u [get_attribute [get_cells *BOUNDARY* -hier -filter ""is_physical_only==true""] ref_name] dbGet [dbGet top.insts.cell.name <*BOUNDARY*> -p].name -u Find the name of all the unique types of boundary cells used in the design
get_cells * -hier -filter ""is_hard_macro==true"dbGet [dbGet top.insts.cell.baseClass block -p2].name Find the name of all the macro’s in your design
get_cells * -hier -filter ""is_hard_macro==true&&ref_name!~*<ref name you want to exclude*"dbGet [dbGet top.insts.cell.baseClass block -p2].name -v <uniq_name_pattern_of those_macros>Suppose you want to exclude few macros like ESD cells or any othere from this list, then you can use -v option with this. like below.
get_cells * -hier -filter ""is_sequential==true"dbGet [dbGet top.insts.cell.isSequential 1 -p2].name Find the name of all sequential elements (registers/flip flops) in the design
get_cells * -hier -filter ""dont_touch==true"dbGet [dbGet top.insts.isDontTouch 1 -p].name Find the name of all the don’t touch instance
get_cells * -hier -filter ""physical_status==fixed"dbGet [dbGet top.insts.pStatus fixed -p].name Get the name of all the instance in your design which has fixed placement status
get_attribute [get_cells <> -hier] ll dbGet [dbGet top.insts.name <inst_name> -p].pt  Find the lower left cordinate of an instance 
get_attribute [get_selection] ll dbGet selected.pt Or you can first select the instance and then use following command.
get_attribute [get_selection] ll_x get_attribute [get_selection] ll_y dbGet selected.pt_x  dbGet selected.pt_y In case you want only x-coordinate or only y coordinate, you may use following command.
get_attribute [get_cells <> -hier ] width get_attribute [get_cells <> -hier ] hieght set width [dbGet [dbGet top.insts.cell.name <cell_name> -p].size_x -u] set height [dbGet [dbGet top.insts.cell.name <cell_name> -p].size_y -u] Find the width and height of a cell
get_attribute [get_selection] width get_attribute [get_selection] height dbGet [dbGet selected.cell.name <cell_name> -p].size_x -u Or we can select the instance and use following command
get_attribute [get_lib_cells */*<name>*] height dbGet [dbGet head.libCells.name <cell_name> -p].size_x -u Or If that cell is not present in the design we can use following command
get_attribute [get_pins *<name>*] bbox dbGet [dbGet top.insts.instTerms.name <inst_term_name> -p].pt Find the cordinate of a pin of an instance 
get_attribute [get_cells *<name>* -hier] physical_status dbGet [dbGet top.insts.name <inst_name> -p].pStatus  Find the placement status of an instance
set_attribute [get_cells *<name>* -hier] -name physical_status -value <fixed/placed/unrestricted> dbSet [dbGet top.insts.name <inst_name> -p].pStatus <fixed | placed > We can also change the pStatus of an instance using dbSet command.
Get_attribute [get_nets *] name dbGet top.nets.name  Get the name of all the nets in the design
get_attribute [get_nets * -filter ""net_type==power || net_type==ground""] namedbGet [dbGet top.nets.isPwrOrGnd 1 -p].name  Get all the power and ground nets name in the design 
get_attribute [get_nets * -filter ""net_type!=power && net_type!=ground""] name dbGet [dbGet [dbGet [dbGet top.nets.isClock 0 -p].isPwr 0 -p].isGnd 0 -p].name Get all the signal nets only (except clock, power nad ground) 
get_nets *<pattern>*dbGet top.nets.name <*pattern*>Find the name of all the nets with a particular pattern in net name
get_attribute [get_nets * -filter ""net_type==clock""] name dbGet [dbGet top.nets.isCTSClock 1 -p].name   Find the name of all the CTS clock nets
get_nets -of_objects [get_pins <pin_name> -hier] dbGet [dbGet top.insts.instTerms.name <full_inst_pin_name> -p2].net.name  Find the net name connected to a pin of an instance
get_attribute [get_shapes -of_objects [get_nets *<pattern>*]] shape_usedbGet [dbGet top.nets.name <net_name>].wires.status Get the routing status of a net 
set_attribute [get_shapes -of_objects [get_nets *<pattern>*]] -name shape_use -value <global/shield/user/detail> set_attribute [get_shapes -of_objects [get_nets *<pattern>*]] -name physical_status -value <fixed/locked/unrestricted> dbSet [dbGet top.nets.name <net_name>].wires.status <fixed | routed>Further we can change the routing status of the net using dbSet command 
report_routing_rules report_clock_routing_rules dbGet head.rules.name Get all the NDR used in the design
change_selection [get_cells <name> -hier] set box [get_attribute [get_selection] bbox] foreach {x1 y1 x2 y2} [lindex $box 0] {break;} selectInst <inst_name> set box [dbGet [dbGet top.insts.name <inst_name> -p].box] foreach {x1 y1 x2 y2} [lindex $box 0] {break;}  llx lly urx ury all four coordinate in four variable of an instance 
set un [get_selection] get_attribute [get_selection] object_type set un selected.name dbGet [dbGetObjByName $un].objType   Get object type of an unknown object
sizeof_collection [get_cells * -hier -filter ""ref_name=~*ULVT* && is_physical_only==false""]llength [dbGet [dbGet top.insts.isPhyOnly 0 -p].cell.name *ULVT* -e]Get the count of ULVT cells in the design (excluding  physical only cells)
get_attribute [get_cells ctmTdsLR_1_31388] bboxdbget [dbget top.insts.name I_PRO_FE_PSBC3430_N_preCTS_FE_OFN1626848_CL0_CPU0_HRDATAD_dbg_13_N_bbuf -p1].boxllx lly urx ury all four coordinate of an instance
report_routing_rulesdbget [dbget [dbget top.nets.name * -p1].isClock 1 -p1].rule.name -uGet all the NDR used in the design
get_attribute [get_nets net_name ] physical statusdbget [dbget top.nets.name CL0_CPU0_IRQ[248] -p1].wires.status -uGet the routing status of a net
get_flat_nets -all -filter “net_type==clock”dbget [dbget [dbget top.nets.name * -p1].isCTSClock 1 -p1].nameFind the name of all the CTS clock nets
get_nets -of_objects AES_core_keymem/key_mem_reg_9__90_/CPdbget [dbget [dbget top.insts.name I_PRO_FE_PSBC3401_CL0_PAXI_S_IF_WDATA_48_N_bbuf -p1].instTerms.name * -p].net.nameFind the net name connected to a pin of an instance
get_nets <net_pattern*>dbget top.nets.name *<pattern>*Find the name of all the nets with a particular pattern in net name
get_attribute [get_flat_nets -all -filter “net_type==signal”] namedbget [dbget [dbget top.nets.name * -p1] {.isClock == 0 && .isPwr ==0 && .isGnd == 0}].name -uGet all the signal nets only (except clock, power and ground)
get_netsdbget top.nets.name *Get the name of all the nets in the design
get_attribute [get_cells <cell_name>] physical_statusdbget [dbget top.insts.name I_PRO_FE_PSBC3295_HBUS_S_AXI_ARID_3_N_bbuf -p1].pStatusFind the placement status of an instance
report_net_fanout -threshold 50foreach i [get_object_name [get_nets *]] { if {[llength [get_object_name [all_connected [get_nets $i]]]] > 2} { puts $i}}Get all nets having max fanout greater than specified number
get_attribute [get_cells ctmTdsLR_1_31388] heightdbget [dbget top.insts.name I_PRO_FE_PSBC3389_N_ccopt_FE_OFN1804932_CL1_CPU1_HRDATAD_dbg_14_N_bbuf -p1].box_sizeYFind the width and height of a cell
report_cornersreport_analysis_viewsGet the temperature and delay corners of design
get_cells -filter “physical_status == fixed”dbget [dbget [dbget top.insts.name * -p1 ].pStatus fixed -p1].nameGet the name of all the instance in your design which has fixed placement status
report_dont_touch –alldbget [dbget [dbget top.insts.name * -p1 ].dontTouch true -p1].nameFind the name of all the don’t touch instance