• 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. Custom IC Design
  3. Bulk hierarchy path editing of 50 deepprobes, is it possible...

Stats

  • Replies 1
  • Subscribers 134
  • Views 88
  • Members are here 0

Bulk hierarchy path editing of 50 deepprobes, is it possible at all within Virtuoso?

rod1
rod1 2 days ago

I got 70 deepprobes with paths like "path.to.block1.nodeN", where N=1,...70.

Now, I need to copy the same deepprobes and change all their paths to "path.to.block2.nodeN", where block2 is simply another instance of the cell instantiated by block1 as well, all nodes are equal.
 

Is there a way to do this without changing each deepprobe's path one by one? If somehow Virtuoso allowed VIM-style editing, this could be done in 5 seconds.

  • Sign in to reply
  • Cancel

Top Replies

  • rod1
    rod1 2 days ago +1
    This procedure worked for me in the end. t_find and t_replace are strings. procedure(sge_replaceProbeNode(t_find t_replace) prog((cv win selObjs probes updated cdf p oldVal newVal) ; Validate that both…
Parents
  • rod1
    rod1 2 days ago

    This procedure worked for me in the end. t_find and t_replace are strings.

    procedure(sge_replaceProbeNode(t_find t_replace)
      prog((cv win selObjs probes updated cdf p oldVal newVal)
        ; Validate that both arguments are strings
        unless(stringp(t_find)
          error("sge_replaceProbeNode: argument 'find' must be a string, got: %L" t_find)
        )
        unless(stringp(t_replace)
          error("sge_replaceProbeNode: argument 'replace' must be a string, got: %L" t_replace)
        )
        probes  = list()
        updated = list()
        win = hiGetCurrentWindow()
        unless(win
          error("sge_replaceProbeNode: No active schematic window found.")
        )
        cv = geGetEditCellView()
        unless(cv
          error("sge_replaceProbeNode: No editable cellview found.")
        )
        selObjs = geGetSelSet(win)
        ; Filter to deepprobe instances only
        foreach(obj selObjs
          when(obj~>objType == "inst" && obj~>cellName == "deepprobe"
            probes = cons(obj probes)
          )
        )
        ; Remind user and exit if no deepprobes selected
        unless(probes
          warn("sge_replaceProbeNode: No deepprobe instances are currently selected. Please select at least one deepprobe and run again.")
          return()
        )
        ; Apply replacement
        rexCompile(t_find)
        foreach(inst probes
          cdf = cdfGetInstCDF(inst)
          when(cdf
            p = cdfFindParamByName(cdf "probeNode")
            when(p && p~>value && rexMatchp(t_find p~>value)
              oldVal = p~>value
              newVal = rexReplace(oldVal t_replace 0)
              p~>value = newVal
              updated = cons(list(inst~>name oldVal newVal) updated)
            )
          )
        )
        dbSave(cv)
        if(updated then
          printf("sge_replaceProbeNode: Updated %d deepprobe instance(s):\n" length(updated))
          foreach(entry updated
            printf("  %s: \"%s\" -> \"%s\"\n" car(entry) cadr(entry) caddr(entry))
          )
        else
          warn("sge_replaceProbeNode: %d deepprobe(s) selected but none had \"%s\" in probeNode." length(probes) t_find)
        )
        return(updated)
      )

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
Reply
  • rod1
    rod1 2 days ago

    This procedure worked for me in the end. t_find and t_replace are strings.

    procedure(sge_replaceProbeNode(t_find t_replace)
      prog((cv win selObjs probes updated cdf p oldVal newVal)
        ; Validate that both arguments are strings
        unless(stringp(t_find)
          error("sge_replaceProbeNode: argument 'find' must be a string, got: %L" t_find)
        )
        unless(stringp(t_replace)
          error("sge_replaceProbeNode: argument 'replace' must be a string, got: %L" t_replace)
        )
        probes  = list()
        updated = list()
        win = hiGetCurrentWindow()
        unless(win
          error("sge_replaceProbeNode: No active schematic window found.")
        )
        cv = geGetEditCellView()
        unless(cv
          error("sge_replaceProbeNode: No editable cellview found.")
        )
        selObjs = geGetSelSet(win)
        ; Filter to deepprobe instances only
        foreach(obj selObjs
          when(obj~>objType == "inst" && obj~>cellName == "deepprobe"
            probes = cons(obj probes)
          )
        )
        ; Remind user and exit if no deepprobes selected
        unless(probes
          warn("sge_replaceProbeNode: No deepprobe instances are currently selected. Please select at least one deepprobe and run again.")
          return()
        )
        ; Apply replacement
        rexCompile(t_find)
        foreach(inst probes
          cdf = cdfGetInstCDF(inst)
          when(cdf
            p = cdfFindParamByName(cdf "probeNode")
            when(p && p~>value && rexMatchp(t_find p~>value)
              oldVal = p~>value
              newVal = rexReplace(oldVal t_replace 0)
              p~>value = newVal
              updated = cons(list(inst~>name oldVal newVal) updated)
            )
          )
        )
        dbSave(cv)
        if(updated then
          printf("sge_replaceProbeNode: Updated %d deepprobe instance(s):\n" length(updated))
          foreach(entry updated
            printf("  %s: \"%s\" -> \"%s\"\n" car(entry) cadr(entry) caddr(entry))
          )
        else
          warn("sge_replaceProbeNode: %d deepprobe(s) selected but none had \"%s\" in probeNode." length(probes) t_find)
        )
        return(updated)
      )

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • 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.

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

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