• 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 SKILL
  3. Change symbol pin array size

Stats

  • Locked Locked
  • Replies 6
  • Subscribers 144
  • Views 16327
  • 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

Change symbol pin array size

psill00
psill00 over 11 years ago

How to change symbol pin terminal array size?

I have tried to find the pin property to change the array size but get errors when i try to change the value.

 I am assuming I have to delete the pin and recreate the pin with the function, schCreateSymbolPin.

 schCreateSymbolPin(
d_cvId  ( cellview ID ) 
d_master ( can I get the master from the old pin? )
t_termName ( new name create )
t_direction ( get from old pin )
l_origin ( get from old pin )
t_orientation ( get from old pin )

If the is another method or function can you point me in the correct direction.

 Do I have to delete or add the new nets/terminals from the symbol view with the new array size?

Thanks

  • Cancel
Parents
  • psill000
    psill000 over 11 years ago

     The Schematic code:

     procedure(genNewSch(cv read write nRead nWrite)
    let(    (rdStr wrStr prefix netPrefix mstr dir netName
        lab xy txt jst ort fnt ht netPre netLab nWire pts termName
        ;(cv geGetWindowCellView())
        )
    rdStr    = sprintf(nil "<%n:0>" read-1)
    wrStr    = sprintf(nil "<%n:0>" write-1)

    foreach(inst cv~>instances
        prefix        = car(parseString(inst~>name "<"))
        cond(    (equal(inst~>numInst read)
                inst~>name = sprintf(nil "%s<%n:0>" prefix nRead-1))
            (equal(inst~>numInst write)
                inst~>name = sprintf(nil "%s<%n:0>" prefix nWrite-1))
            (inst~>pin && rexMatchp(rdStr inst~>pin~>net~>name)
                netPrefix    = car(parseString(inst~>pin~>net~>name "<"))
                mstr    = inst~>master
                dir    = inst~>pin~>term~>direction
                xy    = inst~>xy
                ort    = inst~>orient
                sprintf(termName "%s<%n:0>" netPrefix nRead-1)
                schCreatePin(cv mstr termName dir nil xy ort)
                dbDeleteObject(inst))
            (inst~>pin && rexMatchp(wrStr inst~>pin~>net~>name)
                netPrefix    = car(parseString(inst~>pin~>net~>name "<"))
                mstr    = inst~>master
                dir    = inst~>pin~>term~>direction
                xy    = inst~>xy
                ort    = inst~>orient
                sprintf(termName "%s<%n:0>" netPrefix nWrite-1)
                schCreatePin(cv mstr termName dir nil xy ort)
                dbDeleteObject(inst))
        )
    )

    foreach(shp cv~>shapes
        netName = shp~>net~>name
        when(equal(shp~>objType "line") && netName
            when(rexMatchp(rdStr netName) || rexMatchp(wrStr netName)
                pts    = shp~>points
                txt    = nil
                when(shp~>children
                    lab    = car(shp~>children)
                    xy    = lab~>xy
                    txt    = lab~>theLabel
                    jst    = lab~>justify
                    ort    = lab~>orient
                    fnt    = lab~>font
                    ht    = lab~>height
                    netPre    = car(parseString(txt "<"))
                    if(rexMatchp(rdStr netName) then
                        sprintf(netLab "%s<%n:0>" netPre nRead-1)
                    else    sprintf(netLab "%s<%n:0>" netPre nWrite-1))
                )
                when(pts
                    dbDeleteObject(shp)
                    schCreateWire(cv "route" "full" pts 0.0625 0.0625 0.0)
                    if(txt    schCreateWireLabel(cv nWire xy netLab jst ort fnt ht nil))
                )
            )
        )
    )
    schCheck(cv)
    dbSave(cv)
    dbClose(cv)
    t
    ); end of let
    ); end of genNewSch

     

    The symbol code:

     procedure(symbolPinSzChng(read write nRead nWrite)
    let(    (rdStr wrStr nRdStr nWrStr arrTxt newNet newTerm pinFigLst term
        (cv geGetWindowCellView())
        )
    rdStr    = sprintf(nil "<%n:0>" read-1)
    wrStr    = sprintf(nil "<%n:0>" write-1)
    nRdStr    = sprintf(nil "<%n:0>" nRead-1)
    nWrStr    = sprintf(nil "<%n:0>" nWrite-1)

    foreach(tName setof(x cv~>terminals~>name rexMatchp(rdStr x) || rexMatchp(wrStr x))
        term        = dbFindTermByName(cv tName)
        pinFigLst    = term~>pins~>fig
        dbDeleteObject(term)
        if(rexMatchp(rdStr tName) then
            rexCompile(rdStr)
            arrTxt    = nRdStr
            newTerm    = rexReplace(tName nRdStr 1)
            newNet    = dbMakeNet(cv newTerm)
        else    rexCompile(wrStr)
            arrTxt    = nWrStr
            newTerm    = rexReplace(tName nWrStr 1)
            newNet    = dbMakeNet(cv newTerm))
        foreach(pinFig pinFigLst
            dbCreatePin(newNet pinFig)
            foreach(child pinFig~>children
                when(child~>objType=="label" && rexExecute(child~>theLabel)
                    child~>theLabel = rexReplace(child~>theLabel arrTxt 1)
                )
            )
        )
    )
    t
    ;schCheck(cv)
    ;dbSave(cv)
    ;dbClose(cv)
    ); end of let
    ); end of symbolPinSzChng

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • psill000
    psill000 over 11 years ago

     The Schematic code:

     procedure(genNewSch(cv read write nRead nWrite)
    let(    (rdStr wrStr prefix netPrefix mstr dir netName
        lab xy txt jst ort fnt ht netPre netLab nWire pts termName
        ;(cv geGetWindowCellView())
        )
    rdStr    = sprintf(nil "<%n:0>" read-1)
    wrStr    = sprintf(nil "<%n:0>" write-1)

    foreach(inst cv~>instances
        prefix        = car(parseString(inst~>name "<"))
        cond(    (equal(inst~>numInst read)
                inst~>name = sprintf(nil "%s<%n:0>" prefix nRead-1))
            (equal(inst~>numInst write)
                inst~>name = sprintf(nil "%s<%n:0>" prefix nWrite-1))
            (inst~>pin && rexMatchp(rdStr inst~>pin~>net~>name)
                netPrefix    = car(parseString(inst~>pin~>net~>name "<"))
                mstr    = inst~>master
                dir    = inst~>pin~>term~>direction
                xy    = inst~>xy
                ort    = inst~>orient
                sprintf(termName "%s<%n:0>" netPrefix nRead-1)
                schCreatePin(cv mstr termName dir nil xy ort)
                dbDeleteObject(inst))
            (inst~>pin && rexMatchp(wrStr inst~>pin~>net~>name)
                netPrefix    = car(parseString(inst~>pin~>net~>name "<"))
                mstr    = inst~>master
                dir    = inst~>pin~>term~>direction
                xy    = inst~>xy
                ort    = inst~>orient
                sprintf(termName "%s<%n:0>" netPrefix nWrite-1)
                schCreatePin(cv mstr termName dir nil xy ort)
                dbDeleteObject(inst))
        )
    )

    foreach(shp cv~>shapes
        netName = shp~>net~>name
        when(equal(shp~>objType "line") && netName
            when(rexMatchp(rdStr netName) || rexMatchp(wrStr netName)
                pts    = shp~>points
                txt    = nil
                when(shp~>children
                    lab    = car(shp~>children)
                    xy    = lab~>xy
                    txt    = lab~>theLabel
                    jst    = lab~>justify
                    ort    = lab~>orient
                    fnt    = lab~>font
                    ht    = lab~>height
                    netPre    = car(parseString(txt "<"))
                    if(rexMatchp(rdStr netName) then
                        sprintf(netLab "%s<%n:0>" netPre nRead-1)
                    else    sprintf(netLab "%s<%n:0>" netPre nWrite-1))
                )
                when(pts
                    dbDeleteObject(shp)
                    schCreateWire(cv "route" "full" pts 0.0625 0.0625 0.0)
                    if(txt    schCreateWireLabel(cv nWire xy netLab jst ort fnt ht nil))
                )
            )
        )
    )
    schCheck(cv)
    dbSave(cv)
    dbClose(cv)
    t
    ); end of let
    ); end of genNewSch

     

    The symbol code:

     procedure(symbolPinSzChng(read write nRead nWrite)
    let(    (rdStr wrStr nRdStr nWrStr arrTxt newNet newTerm pinFigLst term
        (cv geGetWindowCellView())
        )
    rdStr    = sprintf(nil "<%n:0>" read-1)
    wrStr    = sprintf(nil "<%n:0>" write-1)
    nRdStr    = sprintf(nil "<%n:0>" nRead-1)
    nWrStr    = sprintf(nil "<%n:0>" nWrite-1)

    foreach(tName setof(x cv~>terminals~>name rexMatchp(rdStr x) || rexMatchp(wrStr x))
        term        = dbFindTermByName(cv tName)
        pinFigLst    = term~>pins~>fig
        dbDeleteObject(term)
        if(rexMatchp(rdStr tName) then
            rexCompile(rdStr)
            arrTxt    = nRdStr
            newTerm    = rexReplace(tName nRdStr 1)
            newNet    = dbMakeNet(cv newTerm)
        else    rexCompile(wrStr)
            arrTxt    = nWrStr
            newTerm    = rexReplace(tName nWrStr 1)
            newNet    = dbMakeNet(cv newTerm))
        foreach(pinFig pinFigLst
            dbCreatePin(newNet pinFig)
            foreach(child pinFig~>children
                when(child~>objType=="label" && rexExecute(child~>theLabel)
                    child~>theLabel = rexReplace(child~>theLabel arrTxt 1)
                )
            )
        )
    )
    t
    ;schCheck(cv)
    ;dbSave(cv)
    ;dbClose(cv)
    ); end of let
    ); end of symbolPinSzChng

    • 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