• 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. How to make a iteration of all the VIAs in SOC Encounter...

Stats

  • Locked Locked
  • Replies 7
  • Subscribers 90
  • Views 15813
  • 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

How to make a iteration of all the VIAs in SOC Encounter database?

archive
archive over 17 years ago

Hi, all:

I am Roc Sun. Recently, I got a few problems.

One is how can I iterate all the via instances in SoC Encounter. I can find the command 'dbViaCellName' or something, but I can not find the way to get via instances. As you know, in SoC52, it 'split via' utility is not working. So, I want write my own version using database command.

The other is that, how can I get all the drc box coordinates, I mean the white boxes after we made a DRC check in SOC Encounter. I want to write this script in db commands.

Best Regard!


Originally posted in cdnusers.org by eminemshow
  • Cancel
Parents
  • archive
    archive over 17 years ago

    Thanks for the clarifying information. It really helps narrow the scope of the solutions we might suggest. Also, I'm glad to hear that you're in contact with your local Cadence support. I trust you're in good hands, and that the issue you've come across with sroute's via splitting capabilities will be addressed in a future release. I think I understand now what you're trying to accomplish. Before I go into a script sample using FE-TCL commands, I thought I'd mention a couple of other pieces of native functionality in case they might be useful now or in the future... First, SoC-E offers several levels of automation in terms of building up power routing. Listed from most automated to most manual, ones that come to mind are:
    1) Commands like "addStripe" and "addRing" -These commands create specific types of power structure and (optionally) create vias
    2) "sroute" -I think of sroute in terms of 2 pieces of functionality: -sroute connects power pins on instances to the power structure -and- -sroute creates so-called "m1 follow pins" on standard cell rails -sroute can (optionally) create power vias while doing either of these operations
    3) "editPowerVia" -I mention editPowerVia because sometimes users prefer to run sroute *without* letting it create vias and then use editPowerVia to go in and create them after all of the power structure has been created -I've run into cases in the past where this technique has circumvented problems with sroute's via creation
    4) "editAddVia" -editAddVia (along with "setEdit" that influences what editAddVia does) corresponds to the GUI-driven interactive wire editing capabilities in Encounter
    5) "dbCreateVia" -An FE-TCL "db" command that creates vias -dbCreateVia [shape] I mention them in this order because I think it makes sense to work from the most automated commands down to the most manual only as the need arises to have full control over an operation.

    In your situation, sroute's via splitting isn't behaving the way you'd like it to, and while that mechanism is being repaired, you could try "editPowerVia" to see if it does what you're looking for. If that doesn't work, then I agree that taking to the solution with lower-level commands is needed. Below is an example solution that would replace all of the VDD and VSS wide vias with 2 discrete instatiations of vias. I don't know the exact scenario you're faced with, but I hope (as always) that you'll be able to draw some building blocks from this example to get the desired results you're looking for:

    deselectAll
    editSelectVia -nets {VDD VSS} -cut_layers V12
    Puts "Found [dbHeadNrSel] VDD/VSS vias on between M1 and M2"
    set newViaList {}
    dbForEachHeadSelPtr [dbgHead] ptr {
      if {[dbIsStripBoxVia $ptr]} {
        set box [dbStripBoxBox $ptr]
        set net [dbStripBoxNet $ptr]
        set viaCell [lindex [dbInfoVia $ptr] 1]
        set viaLayer [dbViaCellZ $viaCell]
        if {$viaLayer == 2} {
          set y [expr ([dbBoxURY $box] + [dbBoxLLY $box])/2]
          set height [dbBoxDimY $box]
          set newViaPtr [dbCreateVia $net [dbGetViaCellByName via1] [dbDBUToMicrons [expr [dbBoxLLX $box] + [expr $height/2]]] [dbDBUToMicrons $y]]
          lappend newViaList $newViaPtr
          dbCreateVia $net [dbGetViaCellByName via1] [dbDBUToMicrons [expr [dbBoxURX $box] - [expr $height/2]]] [dbDBUToMicrons $y]
          lappend newViaList $newViaPtr
        }
      }
    }
    Puts "Deleting [dbHeadNrSel] unsplit vias."
    editDelete -selected
    Puts "Done.  Created [llength $newViaList] new split vias."


    Please do post back if you have additional questions. Your questions are very good and I hope others might benefit from detailed discussions like this one. -Bob


    Originally posted in cdnusers.org by BobD
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • archive
    archive over 17 years ago

    Thanks for the clarifying information. It really helps narrow the scope of the solutions we might suggest. Also, I'm glad to hear that you're in contact with your local Cadence support. I trust you're in good hands, and that the issue you've come across with sroute's via splitting capabilities will be addressed in a future release. I think I understand now what you're trying to accomplish. Before I go into a script sample using FE-TCL commands, I thought I'd mention a couple of other pieces of native functionality in case they might be useful now or in the future... First, SoC-E offers several levels of automation in terms of building up power routing. Listed from most automated to most manual, ones that come to mind are:
    1) Commands like "addStripe" and "addRing" -These commands create specific types of power structure and (optionally) create vias
    2) "sroute" -I think of sroute in terms of 2 pieces of functionality: -sroute connects power pins on instances to the power structure -and- -sroute creates so-called "m1 follow pins" on standard cell rails -sroute can (optionally) create power vias while doing either of these operations
    3) "editPowerVia" -I mention editPowerVia because sometimes users prefer to run sroute *without* letting it create vias and then use editPowerVia to go in and create them after all of the power structure has been created -I've run into cases in the past where this technique has circumvented problems with sroute's via creation
    4) "editAddVia" -editAddVia (along with "setEdit" that influences what editAddVia does) corresponds to the GUI-driven interactive wire editing capabilities in Encounter
    5) "dbCreateVia" -An FE-TCL "db" command that creates vias -dbCreateVia [shape] I mention them in this order because I think it makes sense to work from the most automated commands down to the most manual only as the need arises to have full control over an operation.

    In your situation, sroute's via splitting isn't behaving the way you'd like it to, and while that mechanism is being repaired, you could try "editPowerVia" to see if it does what you're looking for. If that doesn't work, then I agree that taking to the solution with lower-level commands is needed. Below is an example solution that would replace all of the VDD and VSS wide vias with 2 discrete instatiations of vias. I don't know the exact scenario you're faced with, but I hope (as always) that you'll be able to draw some building blocks from this example to get the desired results you're looking for:

    deselectAll
    editSelectVia -nets {VDD VSS} -cut_layers V12
    Puts "Found [dbHeadNrSel] VDD/VSS vias on between M1 and M2"
    set newViaList {}
    dbForEachHeadSelPtr [dbgHead] ptr {
      if {[dbIsStripBoxVia $ptr]} {
        set box [dbStripBoxBox $ptr]
        set net [dbStripBoxNet $ptr]
        set viaCell [lindex [dbInfoVia $ptr] 1]
        set viaLayer [dbViaCellZ $viaCell]
        if {$viaLayer == 2} {
          set y [expr ([dbBoxURY $box] + [dbBoxLLY $box])/2]
          set height [dbBoxDimY $box]
          set newViaPtr [dbCreateVia $net [dbGetViaCellByName via1] [dbDBUToMicrons [expr [dbBoxLLX $box] + [expr $height/2]]] [dbDBUToMicrons $y]]
          lappend newViaList $newViaPtr
          dbCreateVia $net [dbGetViaCellByName via1] [dbDBUToMicrons [expr [dbBoxURX $box] - [expr $height/2]]] [dbDBUToMicrons $y]
          lappend newViaList $newViaPtr
        }
      }
    }
    Puts "Deleting [dbHeadNrSel] unsplit vias."
    editDelete -selected
    Puts "Done.  Created [llength $newViaList] new split vias."


    Please do post back if you have additional questions. Your questions are very good and I hope others might benefit from detailed discussions like this one. -Bob


    Originally posted in cdnusers.org by BobD
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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