このページはSoC Encounter 7.1 を用いて、65nmのプロセスでMUCCRA_TOPを配置配線する方法を示す


  • はじめに
  • 手順
  • 補足
  • はじめに

    本ページは天野研でMuCCRAチップの試作をFujitsu社の65nmプロセスで SOC Encounterを用いて行った際の設計フローについて説明する。

    手順

    必要なファイルを用意する

    Enconunter の起動

    % encounter

    Design の読み込み

    フロアプラン

    チップサイズとコアサイズ

    #
    ##
    ### Floorplanning 
    ##
    #
    
    set CORE CORE1800
    
    fit
    setDrawMode fplan
    floorPlan -fplanOrigin center -site ${CORE} -s 3420 1320 28 28 28 28
    setRoutingStyle -top -style m
    uiSetTool select
    fit
    

    End Capacitanceの追加

    #
    ##
    ### End Tap
    ##
    #
    addEndCap -preCap SC22YUZTAP021 -postCap SC22YUZTAP021 -prefix ENDCAP
    

    ブロックRAMのHaloの追加と配置

    # 
    ##
    ### Edit Halo
    ##
    #
    set top_layer    M6
    set bottom_layer M1
    
    deletehalofromblock  -allBlock
    deleteroutinghalo -allBlocks
    redraw
    
    set size 7.5
    addRoutingHalo -space ${size} -top ${top_layer} -bottom ${bottom_layer} -allBlocks
    
    set size 9.0
    addHaloToBlock ${size} ${size} ${size} ${size} -allBlock
    redraw
    deselectAll
    
    #
    ##
    ### Floorplan
    ##
    #
    clearRelativeFPlan
    deselectAll
    relativeFPlan --relativePlace MUCCRA/COL0/DATA_MEM_BOTTOM_MEM_BANK0_MEM_MACRO TR  BTTOM_CORE_BOUNDARY 
    TL 54 340.555 R90
    relativeFPlan --relativePlace MUCCRA/COL0/DATA_MEM_BOTTOM_MEM_BANK1_MEM_MACRO TR BOTTOM_CORE_BOUNDARY 
    TL 54 610.775 R90
    relativeFPlan --relativePlace BAMMA/COL0/DATA_MEM_BOTTOM_CONTEXT_CONT_MEM_CONTEXT_MEM0_MEM_MACRO 
    TR  BOTTOM_CORE_BOUNDARY TL 54 880.995 R180
    relativeFPlan --relativePlace MUCCRA/COL0/DATA_MEM_TOP_MEM_BANK0_MEM_MACRO TR BOTTOM_CORE_BOUNDARY 
    TL 1192.075 340.555 R270
    relativeFPlan --relativePlace MUCCRA/COL0/DATA_MEM_TOP_MEM_BANK1_MEM_MACRO TR BOTTOM_CORE_BOUNDARY 
    TL 1192.075 610.775 R270
    relativeFPlan --relativePlace MUCCRA/COL0/DATA_MEM_TOP_CONTEXT_CONT_MEM_CONTEXT_MEM0_MEM_MACRO TR BOTTOM_CORE_BOUNDARY 
    TL 1153.805 880.995 R180
     ・
     ・
     ・
    #
    ##
    ### Design Save
    ##
    #
    if { $enable_save_after_floorplan } {
            saveDesign ${top_name}_floorplan.enc
    }

    電源回り 

    電源名とネットの関連付け

    source ./scripts/var.tcl
    #
    ##
    ### Specify Global Net Connection (vdd/vss)
    ##
    #
    
    clearGlobalNets
    globalNetConnect VDD -type pgpin -pin VDD -inst * -verbose
    globalNetConnect VDD -type pgpin -pin VNW -inst * -verbose
    globalNetConnect VDD -type tiehi -inst * -verbose
    globalNetConnect VSS -type pgpin -pin VSS -inst * -verbose
    globalNetConnect VSS -type pgpin -pin VPW -inst * -verbose
    globalNetConnect VSS -type tielo -inst * -verbose
    globalNetConnect VDE -type pgpin -pin VDE -inst * -verbose
    

    コアリング

    テストランのFeedBackにより、RAMへの電源供給はメッシュにより 行うことが推奨


    #
    ##
    ### For VDD/VSS Core Rings (Single)
    ##
    #
    source ./scripts/var.tcl
    
    cutRow
    clearCutRow
    deselectAll
    
    set offset    1.8
    set threshold 0.2
    set jdistance 1.8
    
    set spacing   6.05
    set width     3.0
    set v_layer METG1
    set h_layer METG2
    
    addRing \
        -nets { VSS VDD }\
        -around core     \
        -center 1        \
    \
        -width_top    ${width} \
        -width_right  ${width} \
        -width_bottom ${width} \
        -width_left   ${width} \
    \
        -spacing_top    ${spacing} \
        -spacing_right  ${spacing} \
        -spacing_bottom ${spacing} \
        -spacing_left   ${spacing} \
    \
        -offset_top    ${offset} \
        -offset_right  ${offset} \
        -offset_bottom ${offset} \
        -offset_left   ${offset} \
    \
        -jog_distance ${jdistance} \
        -threshold    ${threshold} \
    \
        -stacked_via_top_layer METTOP  \
        -stacked_via_bottom_layer MET1 \
    \
        -layer_top    ${h_layer} \
        -layer_right  ${v_layer} \
        -layer_bottom ${h_layer} \
        -layer_left   ${v_layer}
    
    deselectAll
    

    RAMマクロリング

    source ./scripts/var.tcl
    #
    ##
    ### For VDD/VSS rings for RAM (Single)
    ##
    #
    deselectAll
    
    set spacing   2.0
    set width     1.6
    set offset    2.0
    set threshold 0.2
    set jdistance 1.8
    
    set wire_group_enable    0
    set wire_bits            2
    set interleaving_enable  1
    
    
    ### Layer
    set vlayer MET4
    set hlayer MET5
    
    addRing \
        -nets { VDD VSS }  \
        -type block_rings  \
        -around each_block \
    \
        -use_wire_group ${wire_group_enable}                \
        -use_wire_group_bits ${wire_bits}                   \
        -use_interleaving_wire_group ${interleaving_enable} \
    \
        -width_top    ${width} \
        -width_right  ${width} \
        -width_bottom ${width} \
        -width_left   ${width} \
    \
        -spacing_top    ${spacing} \
        -spacing_right  ${spacing} \
        -spacing_bottom ${spacing} \
        -spacing_left   ${spacing} \
    \
        -offset_top    ${offset} \
        -offset_right  ${offset} \
        -offset_bottom ${offset} \
        -offset_left   ${offset} \
    \
        -jog_distance ${jdistance} \
        -threshold    ${threshold} \
    \
        -stacked_via_top_layer METTOP  \
        -stacked_via_bottom_layer MET1 \
    \
        -layer_top    ${hlayer} \
        -layer_right  ${vlayer} \
        -layer_bottom ${hlayer} \
        -layer_left   ${vlayer} 
    
    
    deselectAll
    fit
    redraw
    

    スタセルのレール

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Standard Cell PG
    ##
    #
    
    sroute \
        -nets { VSS VDD } \
        -noBlockPins      \
        -noPadRings       \
        -noPadPins        \
        -noStripes        \
        -targetViaTopLayer    11 \
        -crossoverViaTopLayer 11 \
        -layerChangeTopLayer  11 \
        -jogControl { preferWithChanges differentLayer } 
     
    fit
    redraw
    

    電源メッシュを張る(ストライプ)

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Stripe (Go Through Over Macro)
    ##
    #
    
    set width      1.0
    set spacing   2.05
    set distance    30
    set layer     MET6
    set offset      30
    
    addStripe \
        -nets                       { VSS VDD } \
        -layer                       ${layer}   \
        -width                         ${width} \
        -spacing                     ${spacing} \
        -set_to_set_distance        ${distance} \
        -xleft_offset                 ${offset} \
        -merge_stripes_value                0.2 \
        -max_same_layer_jog_length          1.6 \
        -block_ring_top_layer_limit      METTOP \
        -block_ring_bottom_layer_limit     MET1 \
        -padcore_ring_top_layer_limit    METTOP \
        -padcore_ring_bottom_layer_limit   MET1 \
        -stacked_via_top_layer           METTOP \
        -stacked_via_bottom_layer          MET1 \
        -break_stripes_at_block_rings     false
    

    電源IOとコアリングの接続

    #
    ##
    ### For VDD/VSS Pad Pin Connection
    ##
    #
    source ./scripts/var.tcl
    
    cutRow
    clearCutRow
    deselectAll
    
    ### Pad pins
    
    sroute \
        -nets { VDD } \
        -noBlockPins  \
        -noPadRings   \
        -noCorePins   \
        -noStripes    \
        -padPinAllGeomsConnect \
        -padPinMinLayer 11     \
        -padPinWidth 6         \
        -jogControl { preferWithChanges differentLayer }
    
    
    sroute \
        -nets { VSS }\
        -noBlockPins \
        -noPadRings \
        -padPinSkipLeft \
        -noCorePins \
        -padPinSkipRight \
        -noStripes \
        -padPinAllGeomsConnect \
        -padPinMinLayer 12 \
        -padPinWidth 6 \
        -jogControl { preferWithChanges differentLayer } 
    
    sroute \
        -nets { VSS }\
        -noBlockPins \
        -noPadRings \
        -padPinSkipBottom \
        -noCorePins \
        -padPinSkipTop \
        -noStripes \
        -padPinAllGeomsConnect \
        -padPinMinLayer 11 \
        -padPinWidth 6 \
        -jogControl { preferWithChanges differentLayer } 
    
    
    deselectAll
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_padpin } {
            saveDesign ${top_name}_padpin.enc
    }
    

    スタセルの配置と仮配線

    TAP セルの挿入

    source ./scripts/var.tcl
    #
    ##
    ### Add Filler
    ##
    #
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 33.8 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 33.4 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 33.0 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 32.6 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 32.2 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 31.8 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 31.4 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 31.0 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 30.6 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 30.2 -prefix WELLTAP
    addWellTap -cell SC22YUZTAP021 -maxGap 29.6 -fixedGap -inRowOffset 29.8 -prefix WELLTAP
    
    addWellTap -cell SC22YUZCUBAS081 -maxGap 28.4 -fixedGap -inRowOffset 28.2 -prefix WELLTAP
    source ./scripts/pgconn.tcl

    スタセル配置

    source ./scripts/var.tcl
    #
    ##
    ### Standard Cell Placement
    ##
    #
    
    deselectAll
    
    source ./scripts/pgconn.tcl
    
    if { $use_multi_threading } {
    setReleaseMultiCpuLicense true
    setMultiCpuUsage \
        -numThreads             ${num_threads} \
        -numHosts               1 \
        -superThreadsNumThreads ${num_threads} \
        -superThreadsNumHosts   1
    } else {
    setMultiCpuUsage \
        -numThreads             1 \
        -numHosts               1 \
        -superThreadsNumThreads 1 \
        -superThreadsNumHosts   1
    }
    
    setPrerouteAsObs {1 2 3 4 5 6 }
    
    setPlaceMode -reset
    setPlaceMode \
        -congEffort            high \
        -timingDriven             1 \
        -modulePlan               1 \
        -doCongOpt                0 \
        -clkGateAware             0 \
        -powerDriven              0 \
        -reorderScan              1 \
        -ignoreSpare              1 \
        -placeIOPins              1 \
        -moduleAwareSpare         0 \
        -checkPinLayerForAccess  {1}\
        -preserveRouting          0 \
        -rmAffectedRouting        0 \
        -checkRoute               1 \
        -swapEEQ                  0
    
    placeDesign -prePlaceOpt  -inPlaceOpt 
    
    if { $use_multi_threading } {
        releaseMultiCpuLicense
    }
    
    setDrawView place
    
    source ./scripts/pgconn.tcl
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_std } {
            saveDesign ${top_name}_std.enc
    }
    

    仮配線

    source ./scripts/var.tcl
    #
    ##
    ### Trial Route
    ##
    #
    
    set max_layer 6
    set min_layer 1
    
    setTrialRouteMode \
        -floorPlanMode                 false \
        -detour                         true \
        -highEffort                     true \
        -maxRouteLayer          ${max_layer} \
        -minRouteLayer          ${min_layer} \
        -handlePreroute                false \
        -autoSkipTracks                false \
        -handlePartition               false \
        -handlePartitionComplex        false \
        -useM1                         false \
        -keepExistingRoutes            false \
        -ignoreAbutted2TermNet         false \
        -pinGuide                       true \
        -honorPin                      false \
        -selNet                           {} \
        -selNetOnly                       {} \
        -selMarkedNet                  false \
        -selMarkedNetOnly              false \
        -ignoreObstruct                false \
        -PKS                           false \
        -updateRemainTrks              false \
        -ignoreDEFTrack                false \
        -printWiresOnRTBlk             false \
        -usePagedArray                 false \
        -routeObs                       true \
        -routeGuide                       {} \
        -blockageCostMultiple              1 \
        -maxDetourRatio                    0
    
    trialRoute
    setDrawView place
    

    タイミング解析とCTS

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    extractRC 
    delayCal -sdf ${top_name}.sdf -idealclock
    wireload -outfile ${top_name}.wl -percent 1.0 -cellLimit 100

    Pre-CTS

    #
    ##
    ### Static Timing Analsysis for preCTS design
    ##
    #
    clearClockDomains
    setClockDomains -all
    timeDesign \
        -preCTS                    \
        -reportOnly                \
        -idealClock                \
        -pathReports               \
        -drvReports                \
        -slackReports              \
        -numPaths 5                \
        -prefix ${top_name}_preCTS \
        -outDir timingReports
    
    ###
    ### pre-CTS optimization
    ###
    clearClockDomains
    setClockDomains -all
    setOptMode \
        -usefulSkew    false \
        -congOpt       true  \
        -fixDRC        true  \
        -fixFanoutLoad true  \
        -verbose true
    optDesign -preCTS -setup -drv
    
    source ./scripts/pgconn.tcl
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_preCTS } {
            saveDesign ${top_name}_preCTS.enc
    }
    

    CTS

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### CTS
    ##
    #
    
    source ./scripts/pgconn.tcl
    
    createClockTreeSpec \
        -output Clock.ctstch \
        -bufferList  \
        SC22CKBUFBCLXH1\
        SC22CKBUFBCLXL1\
        SC22CKBUFCLXH1 \
        SC22CKBUFCLXL1 \
        SC22CKBUFCLXP1 \
        SC22CKBUFCLXR1 \
        SC22CKBUFCLXT1 \
        SC22CKINVBCLXH1\
        SC22CKINVBCLXL1\
        SC22CKINVBCLXP1\
        SC22CKINVBCLXR1\
        SC22CKINVBCLXT1\
        SC22CKINVCLXH1 \
        SC22CKINVCLXL1 \
        SC22CKINVCLXP1 \
        SC22CKINVCLXR1 \
        SC22CKINVCLXT1
    
    続く
    set top_prefer_layer    8
    set bottom_prefer_layer 3
    
    setCTSMode \
        -traceDPinAsLeaf                      false \
        -traceIoPinAsLeaf                     false \
        -routeClkNet                           true \
        -routeGuide                            true \
        -topPreferredLayer    ${top_prefer_layer}   \
        -bottomPreferredLayer ${bottom_prefer_layer}\
        -routeNonDefaultRule                     {} \
        -useLefACLimit                        false \
        -routePreferredExtraSpace                 1 \
        -opt                                   true \
        -optAddBuffer                          true \
        -moveGate                              true \
        -useHVRC                               true \
        -fixLeafInst                           true \
        -fixNonLeafInst                        true \
        -verbose                              false \
        -reportHTML                           false \
        -addClockRootProp                     false \
        -nameSingleDelim                      false \
        -honorFence                           false \
        -useLibMaxFanout                      true  \
        -useLibMaxCap                         true
    
    
    clockDesign -specFile Clock.ctstch -outDir clock_report -fixedInstBeforeCTS
    
    setLayerPreference net -isVisible 0
    displayClockTree -skew -allLevel -preRoute
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_CTS } {
            saveDesign ${top_name}_CTS.enc
    }
    

    Post-CTS

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    
    redraw
    setLayerPreference net -isVisible 1
    #
    ##
    ### Trial Route after CTS
    ##
    #
    setTrialRouteMode \
        -highEffort            true 
    trialRoute
    
    
    ###
    ### Static Timing Analysis for postCTS design
    ###
    extractRC 
    delayCal -sdf ${top_name}.sdf -idealclock
    wireload -outfile ${top_name}.wl -percent 1.0 -cellLimit 100
    
    # for design rule and setup time violations
    timeDesign \
        -postCTS                          \
        -reportOnly                       \
        -pathReports                      \
        -slackReports                     \
        -numPaths 5                       \
        -prefix ${top_name}_setup_postCTS \
        -outDir timingReports
    
    # for hold time violations
    timeDesign \
        -postCTS                         \
        -hold                            \
        -reportOnly                      \
        -pathReports                     \
        -slackReports                    \
        -numPaths 5                      \
        -prefix ${top_name}_hold_postCTS \
        -outDir timingReports
    
    
    ###
    ### Post CTS Optimization
    ###
    setOptMode \
        -effort             high  \
        -leakagePowerEffort none  \
        -yieldEffort        none  \
        -simplifyNetlist    false \
        -setupTargetSlack   0.5   \
        -holdTargetSlack    0.5   \
        -maxDensity         0.95  \
        -drcMargin          0     \
        -usefulSkew         true
    optDesign -postCTS -hold -setup -drv
    
    fit
    redraw
    
    source ./scripts/pgconn.tcl
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_postCTS } {
            saveDesign ${top_name}_postCTS.enc
    }
    

    本配線

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Routing (Nano Route)
    ##
    #
    
    if { $use_lsf } {
    setDistributeHost \
        -lsf          \
        -queue { normal }
    
    setReleaseMultiCpuLicense true
    setMultiCpuUsage \
        -numThreads             1 \
        -numHosts               1 \
        -superThreadsNumThreads 1 \
        -superThreadsNumHosts   2
    } elseif { $use_ssh } {
    setDistributeHost \
        -ssh                      \
        -add ${host1} ${host2} ${host3}
    
    setReleaseMultiCpuLicense true
    setMultiCpuUsage \
        -numThreads             1 \
        -numHosts               1 \
        -superThreadsNumThreads 1 \
        -superThreadsNumHosts   ${num_hosts}
    } else { # normal
        if { $use_multi_threading } {
            setReleaseMultiCpuLicense true
            setMultiCpuUsage \
                -numThreads             ${num_threads} \
                -numHosts               1 \
                -superThreadsNumThreads ${num_threads} \
                -superThreadsNumHosts   1 
        } else {
            setReleaseMultiCpuLicense true
            setMultiCpuUsage \
                -numThreads             1 \
                -numHosts               1 \
                -superThreadsNumThreads 1 \
                -superThreadsNumHosts   1 
        }
    }
    
    source ./scripts/pgconn.tcl
    
    
    setAttribute -net * -si_post_route_fix true
    
    setNanoRouteMode -drouteAntennaEcoListFile Antenna_list
    setNanoRouteMode -routeWithSiDriven true
    setNanoRouteMode -routeWithSiPostRouteFix true
    setNanoRouteMode -routeSiEffort low
    
    # The router globally routes the design
    setNanoRouteMode -routeWithTimingDriven true
    setNanoRouteMode -routeWithSiDriven true
    routeDesign -global
    
    # The router does the initial detailed routing 
    # (iteration 0 does not include a search-and-repair step), and saves the design as droute0:
    setNanoRouteMode -routeWithTimingDriven true
    setNanoRouteMode -drouteStartIteration 0
    setNanoRouteMode -drouteEndIteration 0
    routeDesign -detail
    saveDesign droute0.enc
    
    # The router does the first search-and-repair iteration 
    # and saves the design for analysis:
    setNanoRouteMode -routeWithTimingDriven true
    setNanoRouteMode -drouteStartIteration 1
    setNanoRouteMode -drouteEndIteration 1
    routeDesign -detail
    saveDesign droute1.enc
    
    # The router does the second to nineteenth search-and-repair iterations and 
    # saves the design for analysis. The switch box grows larger as the iteration number increases.
    setNanoRouteMode -routeWithTimingDriven true
    setNanoRouteMode -drouteStartIteration 2
    setNanoRouteMode -drouteEndIteration 19
    routeDesign -detail
    saveDesign droute19.enc
    
    # The router runs postroute optimization (drouteEndIteration default) 
    # and additional search-and-repair operations and saves the design as droute:
    setNanoRouteMode -routeWithTimingDriven true
    setNanoRouteMode -routeInsertAntennaDiode true
    setNanoRouteMode -drouteUseMultiCutVia true
    setNanoRouteMode -routeStrictlyHonorNonDefaultRule true
    setNanoRouteMode -routeWithSiDriven true
    setNanoRouteMode -drouteStartIteration 20
    setNanoRouteMode -drouteEndIteration default
    routeDesign -detail -viaOpt
    source ./scripts/pgconn.tcl
    
    saveDesign droute.enc
    
    releaseMultiCpuLicense
    
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_groute } {
            saveDesign ${top_name}_route.enc
    }
    
    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Eco Route
    ##
    #
    
    source ./scripts/pgconn.tcl
    
    deleteroutinghalo -allBlocks
    
    if { $use_multi_threading } {
        setReleaseMultiCpuLicense true
        setMultiCpuUsage \
            -numThreads             ${num_threads} \
            -numHosts               1 \
            -superThreadsNumThreads ${num_threads} \
            -superThreadsNumHosts   1 
    } else {
        setReleaseMultiCpuLicense true
        setMultiCpuUsage \
            -numThreads             1 \
            -numHosts               1 \
            -superThreadsNumThreads 1 \
            -superThreadsNumHosts   1 
    }
    
    setNanoRouteMode -reset
    
    setNanoRouteMode -routeTopRoutingLayer 9
    
    setNanoRouteMode -routeInsertAntennaDiode true
    setNanoRouteMode -routeWithEco true
    setNanoRouteMode -drouteStartIteration 0
    globalDetailRoute
    
    source ./scripts/pgconn.tcl
    
    setNanoRouteMode -routeWithEco false
    setNanoRouteMode -reset
    
    releaseMultiCpuLicense
    
    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Post Route 
    ##
    #
    
    #
    ##
    ### Timing Analysis
    ##
    #
    extractRC 
    delayCal -sdf ${top_name}.sdf 
    wireload -outfile ${top_name}.wl -percent 1.0 -cellLimit 100
    
    clearClockDomains
    setClockDomains -all
    
    ###
    ### Post Route Optimization
    ###
    setOptMode \
        -effort             high  \
        -leakagePowerEffort none  \
        -yieldEffort        none  \
        -simplifyNetlist    false \
        -setupTargetSlack   0.5   \
        -holdTargetSlack    0.5   \
        -maxDensity         0.95  \
        -drcMargin          0     \
        -usefulSkew         true
    
    # for design rule and setup time violations
    timeDesign \
        -postRoute                          \
        -reportOnly                         \
        -pathReports                        \
        -slackReports                       \
        -numPaths 5                         \
        -prefix ${top_name}_setup_postRoute \
        -outDir timingReports
    
    optDesign -postRoute -setup -drv
    
    
    # for hold time violations
    timeDesign \
        -postRoute                         \
        -reportOnly                        \
        -hold                              \
        -pathReports                       \
        -slackReports                      \
        -numPaths 5                        \
        -prefix ${top_name}_hold_postRoute \
        -outDir timingReports
    
    optDesign -postRoute -hold  
    
    redraw
    
    source ./scripts/pgconn.tcl
    
    ###
    ### Design Save
    ###
    if { $enable_save_after_postroute } {
            saveDesign ${top_name}_postRoute.enc
    }
    

    Filler セルの挿入

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Add Filler
    ##
    #
    
    source ./scripts/pgconn.tcl
    
    getFillerMode 
    findCoreFillerCells
    addFiller -cell SC22YUZS021 SC22YUZS011 -prefix FILLER -markFixed
    
    source ./scripts/pgconn.tcl

    チェック

    Verify Anntena

    source ./scripts/var.tcl
    source ./scripts/opcond.tcl
    #
    ##
    ### Verify
    ##
    #
    
    clearDrc
    
    ###
    ### Verify Antenna
    ###
    
    verifyProcessAntenna -reportfile ${top_name}.antenna.rpt -leffile ${top_name}.antenna.lef -error 1000
    続く

    Verify Connectivity

    ###
    ### Verify Connectivity
    ###
    verifyConnectivity -type all -error 1000 -warning 50
    続く

    Verify Geometry

    ###
    ### Verify Geometry
    ###
    verifyGeometry -antenna -error 10000 -cpu 3
    続く

    Check Design

    ###
    ### Check Design
    ###
    checkDesign -io -netlist -physicalLibrary -powerGround -tieHilo -timingLibrary -floorplan -place -outdir checkDesign
    続く

    おまけ

    ###
    ### Gate Count
    ###
    reportGateCount -level 5 -limit 100 -outfile ${top_name}.gateCount
    
    ###
    ### Report Summary
    ###
    summaryReport -outdir summaryReport

    GDS / Netilist の生成

    source ./scripts/var.tcl
    #
    ##
    ### Save
    ##
    #
    source ./scripts/pgconn.tcl
    
    # StreamOut setting.
    setStreamOutMode -SEcompatible ON -SEvianames ON
    
    ### GDS out
    streamOut ${top_name}.gds     \
        -mapFile gds2.map   \
        -libName DesignLib        \
        -structureName ${top_name}\
        -stripes               1  \
        -units              1000  \
        -mode                ALL
    
    
    saveNetlist ${top_name}.v
    saveNetlist ${top_name}.v.lvs -includePhysicalInst
    write_sdf -version 3.0 -edges noedge -nonegchecks ${top_name}.sdf
    
    
    ### Save
    saveDesign ${top_name}.enc
    

    補足

    opcond.tcl

    var.tcl

    ###
    ### Technology Settting
    ###
    
    # true: 12-metal false: 7-metal
    
    set use_12tech_file true
    
    
    ###
    ### Global Variables
    ###
    
    
    # Top Module Name
    set top_name  "MUCCRA_TOP"
    
    #set lib_home_dir "/home/vdec/lib/fujitsu65/cs202_sc_io_lib/lib"
    #set lib_ram_dir  "/home/vdec/lib/fujitsu65/memory/muccra/ramcell/dc"
    
    set lib_dir    "./lib"
    set lef_dir    "./lef_file"
    set gds_dir    "./gds"
    set source_dir "./srcNet"
    
    set max_lib_file "      ${lib_dir}/cs202sn_uc_nscan_s_p125_105v.lib 
                            ${lib_dir}/cs202_io_s_p125_m_105v_30v.lib 
                            ${lib_dir}/cs202_cc_s_p100_11v.lib
                            ${lib_dir}/cs202sn_uc_core_s_p125_105v.lib"
    
    
    set min_lib_file "      ${lib_dir}/cs202sn_uc_nscan_f_m40_13v.lib 
                            ${lib_dir}/cs202_io_f_m40_m_13v_36v.lib 
                            ${lib_dir}/cs202_cc_s_m40_11v.lib
                            ${lib_dir}/cs202sn_uc_core_f_m40_13v.lib "
    
    set cap_t "${lib_dir}/basic.capTbl.typ"
    set cap_b "${lib_dir}/basic.capTbl.best"
    set cap_w "${lib_dir}/basic.capTbl.worst"
    
    set lef_file "          ${lef_dir}/tech_12S3G2.lef 
                            ${lef_dir}/uc_CS202SN.lef 
                            ${lef_dir}/io.lef 
                            ${lef_dir}/RAMROM.lef"
    
    ###
    ### Save Point
    ###
    set enable_save_after_floorplan 0
    set enable_save_after_padpin    1
    set enable_save_after_std       1
    set enable_save_after_preCTS    1
    set enable_save_after_CTS       1
    set enable_save_after_postCTS   1
    set enable_save_after_sroute    1
    set enable_save_after_groute    1
    set enable_save_after_postroute 1
    set enable_save_after_filler    1
    set enable_save_after_finish    1
    
    
    ###
    ### Boost Option
    ###
    
    # LSF Distribution
    #
    # <** WARNING **>This option is currently unavailable
    # <** WARNING **>LSF is not working correctly
    #
    # Only Available on Host : hogehoge
    #
    # This option is used in Nanoroute(route.tcl)
    set use_lsf false
    
    # SSH Distribution
    # 
    # This option uses other machines
    # You can identify many machines, but be careful
    # someone uses specified machine
    #
    # If you specified more than 3 machines
    # You need to change route.tcl file also
    #
    # This option is used in Nanoroute(route.tcl)
    set use_ssh     false
    
    set num_hosts      3
    set host1     host1
    set host2     host2
    set host3     host3
    #set host4  
    
    # Multi-Threading
    #
    # <** WARNING **>This option sometime down the Encounter
    #
    # This option is available in Standard Cell Placement(std_cell_place.tcl)
    set use_multi_threading true
    set num_threads 3
    
    ### Nano Route Option
    setNanoRouteMode -reset
    
    setNanoRouteMode -routeTopRoutingLayer 9
    
    ## nanoroute setting. (drc/ant)
    setNanoRouteMode -dbAutoBlockCoverPin true
    setNanoRouteMode -dbSkipAnalog true
    setNanoRouteMode -drouteAllowMergedWireAtPin false
    setNanoRouteMode -drouteConnectTieNetCutNumber 2
    #setNanoRouteMode -drouteConnectTieNetCutNumber 4
    #setNanoRouteMode -drouteConMinimizeViaCount true
    setNanoRouteMode -drouteExpAlignWireEdgeWithPin true
    setNanoRouteMode -drouteHonorStubRuleForBlockPin true
    setNanoRouteMode -drouteUseMinSpacingForBlockage false
    setNanoRouteMode -drouteViaOnGridOnly true
    setNanoRouteMode -routeExtraViaEnclosure "0.250"
    #setNanoRouteMode -routeExpAutoOptimalGgrids true
    setNanoRouteMode -routeAutoGgrid true
    setNanoRouteMode -routeIgnoreAntennaTopCellPin false
    setNanoRouteMode -routeMergeSpecialWire true
    setNanoRouteMode -routeStrictlyHonorNonDefaultRule true
    setNanoRouteMode -routeStripeLayerRange "1:5"
    setNanoRouteMode -routeWithViaInPin true
    setNanoRouteMode -routeWithViaOnlyForStandardCellPin true
    ## nanoroute setting. (dfm)
    setNanoRouteMode -drouteUseMultiCutViaEffort high
    #####################setNanoRouteMode -routeWithLithoDriven true
    
    setAttribute -net * -si_post_route_fix true
    
    setNanoRouteMode -drouteAntennaEcoListFile Antenna_list
    setNanoRouteMode -routeWithSiDriven true
    setNanoRouteMode -routeWithSiPostRouteFix true
    setNanoRouteMode -routeSiEffort low
    

    Making SDC

    set_units -time ps -resistance Ohm -capacitance pF -voltage V -current mA
    ↓
    set_time_unit ps
    set_operating_conditions -max DEFAULT -max_library cs202sn_uc_core_s_p125_105v\
                                                   -min DEFAULT -min_library cs202sn_uc_core_f_m40_13v
    ↓
    setOpCond -maxLibrary  cs202sn_uc_core_s_p125_105v -max DEFAULT -minLibrary cs202sn_uc_core_f_m40_13v -min DEFAULT
    set_driving_cell -lib_cell SC22INVXA1 -library cs202sn_uc_core_s_p125_105v  [get_ports {MUCCRA_ADDR[10]}]
    ↓
    set_driving_cell -lib_cell SC22INVXA1 [get_ports {MUCCRA_ADDR[10]}]
    #set_max_area 0
    #set_ideal_network [get_ports CLK]
    #set_ideal_network [get_ports RST_N]

    Making .IO file

    Orient: R180
    Offset: 0 
    Pad: CORNER_SW SW
    Orient: R180
    Offset: 170
    Pad: F1_0 S
    Orient: R180
    Offset: 171
    Pad: F2_0 S
    Orient: R180
    Offset: 173
    Pad: F5_0 S
    
    Orient: R180
    Offset: 178
    Pad: IO_CLK_B0 S
    Orient: R180
    Offset: 178
    Pad: IO_CLK_B0_TOP S
    
    Orient: R180
    Pad: F20_0 S
    Orient: R180
    Offset: 238
    Pad: IO_RST_N0 S
    Orient: R180
    Offset: 238
    Pad: IO_RST_N0_TOP S
    
    Orient: R180
    Pad: F20_1 S
    Orient: R180
    Offset: 298
    Pad: IO_MUCCRA_ADDR10 S
    Orient: R180
    Offset: 298
    Pad: IO_MUCCRA_ADDR10_TOP S
    
    Orient: R180
    Pad: F20_2 S
    Orient: R180
    Offset: 358
    Pad: IO_MUCCRA_ADDR9 S
    Orient: R180
    Offset: 358
    Pad: IO_MUCCRA_ADDR9_TOP S
    
    Orient: R180
    Pad: F5_1 S
    Orient: R180
    Pad: F10_0 S
    Orient: R180
    Offset: 413
    Pad: VDD_00 S
    Orient: R180
    Offset: 413
    Pad: VDD_00_TOP S
    ・
    ・
    ・