• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Digital Implementation
  3. No. of Single Cut Vias

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 91
  • Views 13773
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

No. of Single Cut Vias

archive
archive over 13 years ago

Hi All

Can any one tell how can i find No. of single cut vias in the design.

  • Cancel
  • wally1
    wally1 over 13 years ago

    You can use the following command to report the number of single cut and multi-cut vias in the design:

        pdi report_design -wire

    Regards,

    Brian

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • kazad
    kazad over 13 years ago

    Following procedure may help a bit - it reports only multi-cut via info. Single-cut via numbers can be extracted from there.

    Usage: reportMultiCutVia   ==> to get the mult-cut via%

    reportMultiCutVia -verbose  ==> to get detail via info

     

    proc reportMultiCutVia {args} {

        # Defaults
        set verboseMode "no"


        # Get verbose mode
        if {[regexp {\-verbose} $args]} {
            set verboseMode "yes"
        }

        # Help
        set helpString "Usage : reportMultiCutVia -verbose -help"


        if {[regexp {\-help} $args]} {
            puts $helpString
            return 0
        }

        # Main code
        ################################################

        # Get a list of all via cells
        set allUniqueViaCells [dbGet -u top.nets.vias.via.name *]

        # Get total via count
        set totViaCount [llength [dbGet top.nets.vias.via.name *]]


        # Get multi-cut via count
        set totMultiCutVia 0


        foreach viaCell $allUniqueViaCells {
            if {[llength [exl [dbGet [dbGetViaCellByName $viaCell].cutRects]]] > 1} {
                set viaCount [llength [dbGet top.nets.vias.via.name $viaCell]]
                set viaArray($viaCell) $viaCount
                set totMultiCutVia [expr $totMultiCutVia + $viaCount]
            }
        }

    #    foreach viaCell $allUniqueViaCells {
    #       set viaCellPtr [dbGetViaCellByName $viaCell]
    #       set cutinfo [dbInfoViaCellRegularCuts $viaCellPtr]
    #       set cutNumx [lindex $cutinfo 4]
    #       set cutNumy [lindex $cutinfo 5]
    #
    #       if {$cutNumx > 1 || $cutNumy > 1} {
    #           lappend multiCutViaCells $viaCell
    #           set viaCount [llength [dbGet top.nets.vias.via.name $viaCell]]
    #           set viaArray($viaCell) $viaCount
    #           set totMultiCutVia [expr $totMultiCutVia + $viaCount]
    #       }
    #    }

        # Calculate multi-cut via%
        set multiCutVia_p [format %2.2f [expr ($totMultiCutVia*1.0/$totViaCount)*100]]
         # Report via info
        if {$verboseMode =="yes"} {

            Puts [genLine -width 15 -char "="]
            Puts [format "%-15s %15s" "Multi-cut via" "Count"]
            Puts [genLine -width 15 -char "="]

            foreach viaCell [array names viaArray] {
                Puts [format "%-15s %15s" $viaCell $viaArray($viaCell)]
            }
            Puts [genLine -width 15 -char "-"]
            Puts [format "%-15s %15s" "Total" $totMultiCutVia]

            Puts "\nTotal via count        : $totViaCount"
            Puts "Multi-cut via          : $multiCutVia_p%\n"

        } else {
            return "$multiCutVia_p%"
        }


    }

     

    proc genLine {args} {

        # Default
        set char "-"

        # Get width
        if {[regexp {\-width} $args]} {
            set width [lindex $args [expr [lsearch $args -width] + 1]]
        }

        # Get char
        if {[regexp {\-char} $args]} {
            set char [lindex $args [expr [lsearch $args -char] + 1]]
        }


        # Help
        set helpString "Usage : genLine -width <width> -char <character>"

        if {[regexp {\-help} $args] || $args == ""} {
            puts $helpString
            return 0
        }

        # Main code
        #########################################################################


        for {set i 0} {$i <= $width} {incr i} {
            lappend print_list $char
        }

        return "[join $print_list $char]"
    }

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • kazad
    kazad over 13 years ago

    Forgot to include the following procedure:

     ################################################################################
    # Procedure to split the list
    ################################################################################
    proc exl {singleList} {
            set mylist {}
            foreach item $singleList {
                    set mylist [concat $mylist $item]
            }
            return $mylist
    }

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information