ABHYASA

SEMICON TECHNOLOGIES

FC(Fusion Compiler) to Innovus command mapping

FC(Fusion Compiler) to Innovus command mapping

9 min read

comparison of Fusion Compiler and Innovus commands

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

VLSI
Physical Design
Nanotechnology