comparison of Fusion Compiler and Innovus commands
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 |