innovus cmd 파일을 활용하여 Linux환경에서 Setup을 설정하는 방법을 알아보도록 하겠습니다.

먼저 ls로 list를 확인 한 후, vi innovus.cmd로 필요한 파일이 무엇인지 찾아줍니다.

 

필요한 .cmd파일을 찾았다면 

[pnr_108@npit-digital-rnd pnr]$ iv run_spi.scr

run_spi.scr이라는 Script를 만들어 여기에 커맨드를 저장해주겠습니다.


Setup

 

#Design Import

set init_verilog ../syn/outputs/spi_netlist.v
set init_lef_file ../lib/lef/all.lef
set init_pwr_net VDD
set init_gnd_net VSS
set init_mmmc_file Default.view
set_global _enable_mmmc_by_default_flow      $CTE::mmmc_default
init_design

#Floorplan

#Powerplan

#Placement

#CTS & Route

#Filler Insert

#Verify

#GDSII

일단 Design Import 부분만 위처럼 저장해주었습니다.

 

내부에 Setup이 위와같이 지정된 모습을 볼 수 있습니다.


Floor Plan



다음으로 하나씩 Floorplan과 동일한 방식을 진행하며 cmd파일을 확인합니다.

그 후 동작에 맞는 code를 run_spi.scr파일에 추가합니다.

 

Floorplan 단계를 거치고 .cmd파일에 기록된 동작도 run_spi.scr에 추가합니다.

#Floorplan
floorPlan -site tsm3site -s 108 106 10 10 10 10

getPinAssignMode -pinEditInBatch -quiet
setPinAssignMode -pinEditInBatch true
editPin -fixOverlap 1 -unit MICRON -spreadDirection clockwise -side Right -layer 1 -spreadType center -spacing 3 -pin {o_reg30 o_reg0 o_reg1 o_reg2 o_reg3 o_reg4 o_reg5 o_reg6 o_reg7 o_reg8 o_reg9 o_reg10 o_reg11 o_reg12 o_reg13 o_reg14 o_reg15 o_reg16 o_reg17 o_reg18 o_reg19 o_reg20 o_reg21 o_reg22 o_reg23 o_reg24 o_reg25 o_reg26 o_reg27 o_reg28 o_reg29}
setPinAssignMode -pinEditInBatch false
getPinAssignMode -pinEditInBatch -quiet
setPinAssignMode -pinEditInBatch true
editPin -pinWidth 0.23 -pinDepth 0.23 -fixOverlap 1 -unit MICRON -spreadDirection clockwise -side Right -layer 1 -spreadType center -spacing 3.36 -pin {o_reg30 o_reg0 o_reg1 o_reg2 o_reg3 o_reg4 o_reg5 o_reg6 o_reg7 o_reg8 o_reg9 o_reg10 o_reg11 o_reg12 o_reg13 o_reg14 o_reg15 o_reg16 o_reg17 o_reg18 o_reg19 o_reg20 o_reg21 o_reg22 o_reg23 o_reg24 o_reg25 o_reg26 o_reg27 o_reg28 o_reg29}
setPinAssignMode -pinEditInBatch false
getPinAssignMode -pinEditInBatch -quiet
setPinAssignMode -pinEditInBatch true
editPin -fixOverlap 1 -unit MICRON -spreadDirection clockwise -side Left -layer 1 -spreadType center -spacing 4 -pin {cs miso mosi sclk}
setPinAssignMode -pinEditInBatch false
getPinAssignMode -pinEditInBatch -quiet
setPinAssignMode -pinEditInBatch true
editPin -pinWidth 0.23 -pinDepth 0.23 -fixOverlap 1 -unit MICRON -spreadDirection clockwise -side Left -layer 1 -spreadType center -spacing 4.48 -pin {cs miso mosi sclk}
setPinAssignMode -pinEditInBatch false
globalNetConnect VDD -type pgpin -pin VDD -instanceBasename * -hierarchicalInstance {}
globalNetConnect VSS -type pgpin -pin VSS -instanceBasename * -hierarchicalInstance {}

Power Plan

 

setAddRingMode -ring_target default -extend_over_row 0 -ignore_rows 0 -avoid_short 0 -skip_crossing_trunks none -stacked_via_top_layer Metal6 -stacked_via_bottom_layer Metal1 -via_using_exact_crossover_size 1 -orthogonal_only true -skip_via_on_pin {  standardcell } -skip_via_on_wire_shape {  noshape }
addRing -nets {VDD VSS} -type core_rings -follow core -layer {top Metal1 bottom Metal1 left Metal6 right Metal6} -width {top 1.8 bottom 1.8 left 1.8 right 1.8} -spacing {top 1.8 bottom 1.8 left 1.8 right 1.8} -offset {top 1.8 bottom 1.8 left 1.8 right 1.8} -center 0 -threshold 0 -jog_distance 0 -snap_wire_center_to_grid None

Power Route

 

 

#Powerplan
sroute -connect { blockPin padPin padRing corePin floatingStripe } -layerChangeRange { Metal1(1) Metal6(6) } -blockPinTarget { nearestTarget } -padPinPortConnect { allPort oneGeom } -padPinTarget { nearestTarget } -corePinTarget { firstAfterRowEnd } -floatingStripeTarget { blockring padring ring stripe ringpin blockpin followpin } -allowJogging 1 -crossoverViaLayerRange { Metal1(1) Metal6(6) } -allowLayerChange 1 -blockPin useLef -targetViaLayerRange { Metal1(1) Metal6(6) }

Placement

 

#Placement
setPlaceMode -fp false
place_design

 


CTS & Route

 

#CTS & Route

## Pre-CTS
setOptMode -fixCap true -fixTran true -fixFanoutLoad false
optDesign -preCTS
setNanoRouteMode -quiet -drouteFixAntenna 1
setNanoRouteMode -quiet -routeInsertAntennaDiode 0
setNanoRouteMode -quiet -routeWithTimingDriven 0
setNanoRouteMode -quiet -routeWithEco 0
setNanoRouteMode -quiet -routeWithLithoDriven 0
setNanoRouteMode -quiet -droutePostRouteLithoRepair 0
setNanoRouteMode -quiet -routeWithSiDriven 0
setNanoRouteMode -quiet -drouteAutoStop 0
setNanoRouteMode -quiet -routeSelectedNetOnly 0
setNanoRouteMode -quiet -routeTopRoutingLayer 6
setNanoRouteMode -quiet -routeBottomRoutingLayer 1
setNanoRouteMode -quiet -drouteEndIteration 1
setNanoRouteMode -quiet -routeWithTimingDriven false
setNanoRouteMode -quiet -routeWithSiDriven false
routeDesign -globalDetail
## Post-CTS
setOptMode -fixCap true -fixTran true -fixFanoutLoad false
optDesign -postCTS
setNanoRouteMode -quiet -drouteFixAntenna 1
setNanoRouteMode -quiet -routeInsertAntennaDiode 0
setNanoRouteMode -quiet -routeWithTimingDriven 0
setNanoRouteMode -quiet -routeWithEco 0
setNanoRouteMode -quiet -routeWithLithoDriven 0
setNanoRouteMode -quiet -droutePostRouteLithoRepair 0
setNanoRouteMode -quiet -routeWithSiDriven 0
setNanoRouteMode -quiet -drouteAutoStop 0
setNanoRouteMode -quiet -routeSelectedNetOnly 0
setNanoRouteMode -quiet -routeWithTimingDriven false
setNanoRouteMode -quiet -routeWithSiDriven false
routeDesign -globalDetail
## On-Chip-Variation
setAnalysisMode -cppr none -clockGatingCheck true -timeBorrowing true -useOutputPinCap true -sequentialConstProp false -timingSelfLoopsNoSkew false -enableMultipleDriveNet true -clkSrcPath true -warn true -usefulSkew true -analysisType onChipVariation -log true
getNanoRouteMode -quiet -routeWithTimingDriven
## Post-Route
setOptMode -fixCap true -fixTran true -fixFanoutLoad false
setDelayCalMode -engine default -siAware true
optDesign -postRoute

 


Filler Insert

 

#Filler Insert
getFillerMode -quiet
addFiller -cell FILL64 FILL32 FILL16 FILL8 FILL4 FILL2 FILL1 -prefix FILLER

 


Verify

 

#Verify
getMultiCpuUsage -localCpu
get_verify_drc_mode -disable_rules -quiet
get_verify_drc_mode -quiet -area
get_verify_drc_mode -quiet -layer_range
get_verify_drc_mode -check_ndr_spacing -quiet
get_verify_drc_mode -check_only -quiet
get_verify_drc_mode -check_same_via_cell -quiet
get_verify_drc_mode -exclude_pg_net -quiet
get_verify_drc_mode -ignore_trial_route -quiet
get_verify_drc_mode -max_wrong_way_halo -quiet
get_verify_drc_mode -use_min_spacing_on_block_obs -quiet
get_verify_drc_mode -limit -quiet
set_verify_drc_mode -disable_rules {} -check_ndr_spacing auto -check_only default -check_same_via_cell true -exclude_pg_net false -ignore_trial_route false -ignore_cell_blockage false -use_min_spacing_on_block_obs auto -report simple_spi.drc.rpt -limit 1000
verify_drc
set_verify_drc_mode -area {0 0 0 0}

 


Execute

cmd에서 가져온 명령어 Script 실행

[pnr_108@npit-digital-rnd pnr]$ innovus -files run_spi.scr

 

이러면 한 번에 모든과정을 실행한 Innovus를 실행할 수 있습니다.

스크립트 실행 화