FC(Fusion Compiler) to Innovus command mapping
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.
| Fc | Innovus | Requirement |
|---|---|---|
| start_gui | win | open the gui from shell |
| stop_gui | win 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.design | restoreDesign 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_drc | checkDesign -floorplan -noHtml -outfile checkDesign.ascii | check powerplan |
| set_technology -node | setDesignMode | sets the technology node |
| get_cells , get_nets, get_* commands | get_cells , get_nets, get_* commands | Find 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] name | dbGet 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_purposes | dbGet head.layers.name | Get all the layers name |
| get_object_name [get_layers -filter layer_type==interconnect] | dbGet [dbGet head.layers.type routing -p].name | Get 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] bbox | dbGet 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""] name | dbGet [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_use | dbGet [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] bbox | dbget [dbget top.insts.name I_PRO_FE_PSBC3430_N_preCTS_FE_OFN1626848_CL0_CPU0_HRDATAD_dbg_13_N_bbuf -p1].box | llx lly urx ury all four coordinate of an instance |
| report_routing_rules | dbget [dbget [dbget top.nets.name * -p1].isClock 1 -p1].rule.name -u | Get all the NDR used in the design |
| get_attribute [get_nets net_name ] physical status | dbget [dbget top.nets.name CL0_CPU0_IRQ[248] -p1].wires.status -u | Get the routing status of a net |
| get_flat_nets -all -filter “net_type==clock” | dbget [dbget [dbget top.nets.name * -p1].isCTSClock 1 -p1].name | Find the name of all the CTS clock nets |
| get_nets -of_objects AES_core_keymem/key_mem_reg_9__90_/CP | dbget [dbget [dbget top.insts.name I_PRO_FE_PSBC3401_CL0_PAXI_S_IF_WDATA_48_N_bbuf -p1].instTerms.name * -p].net.name | Find 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”] name | dbget [dbget [dbget top.nets.name * -p1] {.isClock == 0 && .isPwr ==0 && .isGnd == 0}].name -u | Get all the signal nets only (except clock, power and ground) |
| get_nets | dbget top.nets.name * | Get the name of all the nets in the design |
| get_attribute [get_cells <cell_name>] physical_status | dbget [dbget top.insts.name I_PRO_FE_PSBC3295_HBUS_S_AXI_ARID_3_N_bbuf -p1].pStatus | Find the placement status of an instance |
| report_net_fanout -threshold 50 | foreach 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] height | dbget [dbget top.insts.name I_PRO_FE_PSBC3389_N_ccopt_FE_OFN1804932_CL1_CPU1_HRDATAD_dbg_14_N_bbuf -p1].box_sizeY | Find the width and height of a cell |
| report_corners | report_analysis_views | Get the temperature and delay corners of design |
| get_cells -filter “physical_status == fixed” | dbget [dbget [dbget top.insts.name * -p1 ].pStatus fixed -p1].name | Get the name of all the instance in your design which has fixed placement status |
| report_dont_touch –all | dbget [dbget [dbget top.insts.name * -p1 ].dontTouch true -p1].name | Find the name of all the don’t touch instance |