• 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. Allegro X Capture CIS
  3. DRC on duplicate nets

Stats

  • State Suggested Answer
  • Replies 7
  • Answers 1
  • Subscribers 42
  • Views 3691
  • Members are here 0
More Content

DRC on duplicate nets

WC202409216216
WC202409216216 over 1 year ago

Hi, 

Do we have any DRC checking rules that can flag same net name used in different places except it has off-page connector? see highlighted circles in picture below, would like the DRC tool to catch this.

  • Cancel
  • Sign in to reply
Parents
  • Jeet
    0 Jeet over 1 year ago

    Off-page connectors carry nets (names) between schematic pages within the same schematic folder.

    You can use the signal navigation feature in Capture to navigate the connected signals on a design. This feature allows you to select a signal that you want to trace. Capture then browses for all the connected signals on the design. Finally, you can select and highlight the signals from the browse list.

    To find and navigate the signals on a design
    1. Select the off-page connector, hierarchical port, net or bus to find its connecting signals.
    2. Right-click and choose the Signals option from the pop-up menu.
    3. A browse list appears with all the signals that are connected to the currently selected signal.

    4.Double-click on a signal in this list to navigate to the connected signal.

    Also, I want like to understand if there is some particular requirement due to which you want to use this DRC?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • WC202409216216
    0 WC202409216216 over 1 year ago in reply to Jeet

    I understand the offpage connector but it doesn't solve issue here.

    For example, if I accidentally named two nets the same name. I want to DRC check to be able to find out and warning me. Otherwise two nets will be connected together. 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Jeet
    0 Jeet over 1 year ago in reply to WC202409216216

    When signals with the same aliases (names) are on the same schematic page, OrCAD Capture automatically connects them. In the following illustration, C1 and R1 are connected to Net1.

    Are you giving same net names on same schematic page or on different schematic pages?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • WC202409216216
    0 WC202409216216 over 1 year ago in reply to Jeet

    I am naming the same net name on the same schematic. I want Cadence to capture the same nets during DRC check. To your example, I want Candence DRC check to tell me there is a NET1 that doesn't have off page connector but connected in two different places. I always explicitly use the off-page connector if I want the net name to be the same to avoid error.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Jeet
    0 Jeet over 1 year ago in reply to WC202409216216

    Can you try using the net names in the Find Window in OrCAD Capture?

    I have searched NET1 in Find window as shown below it is highlighting the nets present on the schematic page.

    There is no DRC in OrCAD from GUI to check the nets which have same name connected in some instances and are not connected from off-page. Are you interested in TCL Scripting to generate this DRC?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • WC202409216216
    0 WC202409216216 over 1 year ago in reply to Jeet

    Yes, TCL scripts work for me, can I have one? 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Jeet
    0 Jeet 11 months ago in reply to WC202409216216

    Please perform below steps to run TCL Script >

    1. Copy the attached script in notepad and save the file.
       
    2. Invoke OrCAD Capture and open the schematic design.
       
    3. Select the design file (.dsn) in the Project Manager.
       
    4. Select View > Command Window.
       
    5. Source the script in Capture using the following command: 

    source {path_to_script\tcl_dump_duplicate_net_name.tcl}
     

    Example: 

    source C:\TCL\tcl_dump_duplicate_net_name.tcl} and enter dumpToSessionlog in next line.

    Go to Session Log and see the off page name along with page number is present in the session log.

    Code >

    #Dump duplicate nets with page name info into sessionlog window
    proc dumpWireList {} {
    # global i
    set lSession $::DboSession_s_pDboSession
    DboSession -this $lSession
    set lNullObj NULL
    set lNetNameCString [DboTclHelper_sMakeCString]
    set duplicateNetName {}
    set lStatus [DboState]
    set lDesign [$lSession GetActiveDesign]
    set lSchi_Name [DboTclHelper_sMakeCString]
    set lSchematicIter [$lDesign NewViewsIter $lStatus $::IterDefs_SCHEMATICS]
    #get the first schematic view
    set lView [$lSchematicIter NextView $lStatus]

    set lPage_Name [DboTclHelper_sMakeCString]


    while { $lView != $lNullObj} {
    #dynamic cast from DboView to DboSchematic
    set lSchematic [DboViewToDboSchematic $lView]
    $lSchematic GetName $lSchi_Name
    set lPagesIter [$lSchematic NewPagesIter $lStatus]
    #get the first page
    set lPage [$lPagesIter NextPage $lStatus]

    # puts [DboTclHelper_sGetConstCharPtr $lSchi_Name]

    while {$lPage!=$lNullObj} {
    #placeholder: do your processing on $lPage
    $lPage GetName $lPage_Name
    set lPageName [DboTclHelper_sGetConstCharPtr $lPage_Name]
    set lWiresIter [$lPage NewWiresIter $lStatus]
    #get the first wire
    set lWire [$lWiresIter NextWire $lStatus]
    set lNullObj NULL
    while {$lWire != $lNullObj} {
    set lObjectType [$lWire GetObjectType]
    if {$lObjectType == $::DboBaseObject_WIRE_SCALAR} {
    #placeholder: do your processing on Wire scalar $lWire
    $lWire GetNetName $lNetNameCString
    set lNetName [DboTclHelper_sGetConstCharPtr $lNetNameCString]

    # puts [lsearch $duplicateNetName $lNetName]
    if {[lsearch $duplicateNetName $lNetName] == -1} {
    lappend duplicateNetName $lNetName
    }
    }
    #get the next wire
    set lWire [$lWiresIter NextWire $lStatus]
    }
    delete_DboPageWiresIter $lWiresIter


    set lPage [$lPagesIter NextPage $lStatus]
    }
    #placeholder: do your processing on $lSchematic

    #puts $lSchematic

    #get the next schematic view
    set lView [$lSchematicIter NextView $lStatus]
    }
    delete_DboLibViewsIter $lSchematicIter
    delete_DboSchematicPagesIter $lPagesIter

    return $duplicateNetName
    }


    proc dumpToSessionlog {} {
    # global i
    set lSession $::DboSession_s_pDboSession
    DboSession -this $lSession
    set lNullObj NULL
    set lWirelist [dumpWireList]
    set lNetNameCString [DboTclHelper_sMakeCString]
    set duplicateNetName {}
    set lStatus [DboState]
    set lDesign [$lSession GetActiveDesign]
    set lSchi_Name [DboTclHelper_sMakeCString]
    set lPageNamelist {}
    ClearSessionLog
    foreach wireName $lWirelist {
    set lSchematicIter [$lDesign NewViewsIter $lStatus $::IterDefs_SCHEMATICS]
    #get the first schematic view
    set lView [$lSchematicIter NextView $lStatus]

    set lPage_Name [DboTclHelper_sMakeCString]


    while { $lView != $lNullObj} {
    #dynamic cast from DboView to DboSchematic
    set lSchematic [DboViewToDboSchematic $lView]
    $lSchematic GetName $lSchi_Name
    set lPagesIter [$lSchematic NewPagesIter $lStatus]
    #get the first page
    set lPage [$lPagesIter NextPage $lStatus]

    # puts [DboTclHelper_sGetConstCharPtr $lSchi_Name]
    while {$lPage!=$lNullObj} {
    #placeholder: do your processing on $lPage
    $lPage GetName $lPage_Name
    set lPageName [DboTclHelper_sGetConstCharPtr $lPage_Name]
    set lWiresIter [$lPage NewWiresIter $lStatus]
    #get the first wire
    set lWire [$lWiresIter NextWire $lStatus]
    set lNullObj NULL
    while {$lWire != $lNullObj} {
    set lObjectType [$lWire GetObjectType]
    if {$lObjectType == $::DboBaseObject_WIRE_SCALAR} {
    #placeholder: do your processing on Wire scalar $lWire
    $lWire GetNetName $lNetNameCString
    set lNetName [DboTclHelper_sGetConstCharPtr $lNetNameCString]
    if {$wireName == $lNetName && [lsearch $lPageNamelist $wireName\_$lPageName] == -1 } {

    lappend lPageNamelist $wireName\_$lPageName
    DboState_WriteToSessionLog [DboTclHelper_sMakeCString $wireName\_$lPageName]

    }

    }
    #get the next wire
    set lWire [$lWiresIter NextWire $lStatus]
    }
    delete_DboPageWiresIter $lWiresIter


    set lPage [$lPagesIter NextPage $lStatus]
    }
    #placeholder: do your processing on $lSchematic

    #puts $lSchematic

    #get the next schematic view
    set lView [$lSchematicIter NextView $lStatus]
    }
    delete_DboLibViewsIter $lSchematicIter
    delete_DboSchematicPagesIter $lPagesIter
    }

    # return $lPageNamelist
    }

    Let me know how it goes for you after running the TCL Script.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Reply
  • Jeet
    0 Jeet 11 months ago in reply to WC202409216216

    Please perform below steps to run TCL Script >

    1. Copy the attached script in notepad and save the file.
       
    2. Invoke OrCAD Capture and open the schematic design.
       
    3. Select the design file (.dsn) in the Project Manager.
       
    4. Select View > Command Window.
       
    5. Source the script in Capture using the following command: 

    source {path_to_script\tcl_dump_duplicate_net_name.tcl}
     

    Example: 

    source C:\TCL\tcl_dump_duplicate_net_name.tcl} and enter dumpToSessionlog in next line.

    Go to Session Log and see the off page name along with page number is present in the session log.

    Code >

    #Dump duplicate nets with page name info into sessionlog window
    proc dumpWireList {} {
    # global i
    set lSession $::DboSession_s_pDboSession
    DboSession -this $lSession
    set lNullObj NULL
    set lNetNameCString [DboTclHelper_sMakeCString]
    set duplicateNetName {}
    set lStatus [DboState]
    set lDesign [$lSession GetActiveDesign]
    set lSchi_Name [DboTclHelper_sMakeCString]
    set lSchematicIter [$lDesign NewViewsIter $lStatus $::IterDefs_SCHEMATICS]
    #get the first schematic view
    set lView [$lSchematicIter NextView $lStatus]

    set lPage_Name [DboTclHelper_sMakeCString]


    while { $lView != $lNullObj} {
    #dynamic cast from DboView to DboSchematic
    set lSchematic [DboViewToDboSchematic $lView]
    $lSchematic GetName $lSchi_Name
    set lPagesIter [$lSchematic NewPagesIter $lStatus]
    #get the first page
    set lPage [$lPagesIter NextPage $lStatus]

    # puts [DboTclHelper_sGetConstCharPtr $lSchi_Name]

    while {$lPage!=$lNullObj} {
    #placeholder: do your processing on $lPage
    $lPage GetName $lPage_Name
    set lPageName [DboTclHelper_sGetConstCharPtr $lPage_Name]
    set lWiresIter [$lPage NewWiresIter $lStatus]
    #get the first wire
    set lWire [$lWiresIter NextWire $lStatus]
    set lNullObj NULL
    while {$lWire != $lNullObj} {
    set lObjectType [$lWire GetObjectType]
    if {$lObjectType == $::DboBaseObject_WIRE_SCALAR} {
    #placeholder: do your processing on Wire scalar $lWire
    $lWire GetNetName $lNetNameCString
    set lNetName [DboTclHelper_sGetConstCharPtr $lNetNameCString]

    # puts [lsearch $duplicateNetName $lNetName]
    if {[lsearch $duplicateNetName $lNetName] == -1} {
    lappend duplicateNetName $lNetName
    }
    }
    #get the next wire
    set lWire [$lWiresIter NextWire $lStatus]
    }
    delete_DboPageWiresIter $lWiresIter


    set lPage [$lPagesIter NextPage $lStatus]
    }
    #placeholder: do your processing on $lSchematic

    #puts $lSchematic

    #get the next schematic view
    set lView [$lSchematicIter NextView $lStatus]
    }
    delete_DboLibViewsIter $lSchematicIter
    delete_DboSchematicPagesIter $lPagesIter

    return $duplicateNetName
    }


    proc dumpToSessionlog {} {
    # global i
    set lSession $::DboSession_s_pDboSession
    DboSession -this $lSession
    set lNullObj NULL
    set lWirelist [dumpWireList]
    set lNetNameCString [DboTclHelper_sMakeCString]
    set duplicateNetName {}
    set lStatus [DboState]
    set lDesign [$lSession GetActiveDesign]
    set lSchi_Name [DboTclHelper_sMakeCString]
    set lPageNamelist {}
    ClearSessionLog
    foreach wireName $lWirelist {
    set lSchematicIter [$lDesign NewViewsIter $lStatus $::IterDefs_SCHEMATICS]
    #get the first schematic view
    set lView [$lSchematicIter NextView $lStatus]

    set lPage_Name [DboTclHelper_sMakeCString]


    while { $lView != $lNullObj} {
    #dynamic cast from DboView to DboSchematic
    set lSchematic [DboViewToDboSchematic $lView]
    $lSchematic GetName $lSchi_Name
    set lPagesIter [$lSchematic NewPagesIter $lStatus]
    #get the first page
    set lPage [$lPagesIter NextPage $lStatus]

    # puts [DboTclHelper_sGetConstCharPtr $lSchi_Name]
    while {$lPage!=$lNullObj} {
    #placeholder: do your processing on $lPage
    $lPage GetName $lPage_Name
    set lPageName [DboTclHelper_sGetConstCharPtr $lPage_Name]
    set lWiresIter [$lPage NewWiresIter $lStatus]
    #get the first wire
    set lWire [$lWiresIter NextWire $lStatus]
    set lNullObj NULL
    while {$lWire != $lNullObj} {
    set lObjectType [$lWire GetObjectType]
    if {$lObjectType == $::DboBaseObject_WIRE_SCALAR} {
    #placeholder: do your processing on Wire scalar $lWire
    $lWire GetNetName $lNetNameCString
    set lNetName [DboTclHelper_sGetConstCharPtr $lNetNameCString]
    if {$wireName == $lNetName && [lsearch $lPageNamelist $wireName\_$lPageName] == -1 } {

    lappend lPageNamelist $wireName\_$lPageName
    DboState_WriteToSessionLog [DboTclHelper_sMakeCString $wireName\_$lPageName]

    }

    }
    #get the next wire
    set lWire [$lWiresIter NextWire $lStatus]
    }
    delete_DboPageWiresIter $lWiresIter


    set lPage [$lPagesIter NextPage $lStatus]
    }
    #placeholder: do your processing on $lSchematic

    #puts $lSchematic

    #get the next schematic view
    set lView [$lSchematicIter NextView $lStatus]
    }
    delete_DboLibViewsIter $lSchematicIter
    delete_DboSchematicPagesIter $lPagesIter
    }

    # return $lPageNamelist
    }

    Let me know how it goes for you after running the TCL Script.

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
Children
No Data
Cadence Guidelines

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