• 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. what is needed to reinvent pmos1v cell of gpdk045.

Stats

  • Locked Locked
  • Replies 1
  • Subscribers 143
  • Views 13902
  • 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

what is needed to reinvent pmos1v cell of gpdk045.

chaujohnthan
chaujohnthan over 5 years ago

; gpdk045_v_2.0_preRelease

LIBRARY = "gpdk045"
CELL = "nmos1v"

cv = dbOpenCellViewByType(LIBRARY CELL "layout")
pcSkillGen(cv "pcSkillGen_o" t)

; dbDumpPcell_o: Output file which can be reloaded to recreate the pcell.
; dbDumpPcell_pcell: Output file for the SKILL procedure attached to the pcell, ;
; this file will be given to dbDefineProc when reloading outputFile.
dbDumpPcell(cv "dbDumpPcell_o" "dbDumpPcell_pcell")

; cv Must be a parameterized cell.
dbDumpPcDefinePcell(cv "dbDumpPcDefinePcell_o")

; Dumps the CDF description for t_libName and t_cellName into t_fileName.
cdfDump(LIBRARY "cdfDump_o" ?cellName CELL ?level 'base ?edit t)

; reopen cv for write
cv = dbOpenCellViewByType(LIBRARY CELL "layout" "" "w")
; Changes the cellview specified by the d_cellView to be a parameterized cell
; The specified file name should be the name of a file containing un-encrypted SKILL code
; defining procedure pcGenCell. The cellview should have a hierarchical property named parameters,
; which should be a hierarchical property list containing the default values for the parameters.
dbDefineProc(cv "dbDumpPcell_pcell")

can i use part of the above output? what does the real pcDefinePcell code look like?

i am thinking about the structure of pcell library.

btw, i can never be able to select the strech handle of pcell. i read the doc, but did not help any.

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 5 years ago

    These are all debugging aids - none of them entirely reconstructs the pcDefinePCell call that (may) have been used to build the PCell in the first place. Essentially, pcDefinePCell is a special function which creates all the parameters in the cellView, and then constructs a file with a function called pcGenCell and then calls dbDefineProc to reference that file (this reads the contents and stores the definition of pcGenCell within the view). It also calls that function with the default parameters so that the cellView contains the layout with the default parameter values.

    For the various forms you've shown:

    1. pcSkillGen - this won't work because it's intended for graphical pcells generated with Launch->Plugins->Pcell (not recommended these days as it's quite old and limited technology).
    2. dbDumpPcell - this is similar to dbWriteSkill - it writes out the contents of the pcell view (mainly the parameters and the default layout) and separately the pcell function. It omits the call to dbDefineProc for some reason.
    3. dbDumpPcDefinePcell - this writes out a single file which is close (but not quite) in the form of a pcDefinePCell call. It needs a bit of munging to make it work
    4. cdfDump - this just dumps the CDF if you need to reconstruct it. 

    I'm not entirely sure why you'd want to do this. I'd never recommend dumping somebody else's PCell and hacking it because you don't have all the code. Anyway, to reconstruct the output of dbDumpPcDefinePcell you could do this - take this part of the code:

    ("gpdk045" "nmos1v" "layout")
    (
      (l float 4.500000e-08)
      (fingers float 1.000000e+00)
      (connectGates string "None")
      (connectSD string "None")
      (switchSD boolean nil)
      (diffCont boolean  t)
      (dfm string "Minimum")
      (mtlCvg string "")
      (sdMtlWidth float 6.000000e-08)
      (leftAbut int 0)
      (rightAbut int 0)
      (tap string "None")
      (topTap boolean nil)
      (bottomTap boolean nil)
      (leftTap boolean  t)
      (rightTap boolean nil)
      (tapExtension string "")
      (tapCntRows int 1)
      (fw float 1.200000e-07)
    )
    procedure( pcGenCell(pcCellView "d")
        prog( (_pcParameters fw l fingers connectGates
    	connectSD switchSD diffCont dfm mtlCvg
    	sdMtlWidth leftAbut rightAbut tap topTap
    	bottomTap leftTap rightTap tapExtension tapCntRows
        )
    	if( !pcCellView
    	    return()
    	)
    	(_pcParameters = (pcCellView~>parameters))
    	(fw = (_pcParameters~>fw))
    	if( !fw
    	    then
    	    (fw = 0.0)
    	)
    /* all the code down to the let */
    	let((cv tfId mfgGrid grid grid2
    

    and change to this:

    pcDefinePCell(list(ddGetObj("gpdk045") "nmos1v" "layout")
    (
      (l float 4.500000e-08)
      (fingers float 1.000000e+00)
      (connectGates string "None")
      (connectSD string "None")
      (switchSD boolean nil)
      (diffCont boolean  t)
      (dfm string "Minimum")
      (mtlCvg string "")
      (sdMtlWidth float 6.000000e-08)
      (leftAbut int 0)
      (rightAbut int 0)
      (tap string "None")
      (topTap boolean nil)
      (bottomTap boolean nil)
      (leftTap boolean  t)
      (rightTap boolean nil)
      (tapExtension string "")
      (tapCntRows int 1)
      (fw float 1.200000e-07)
    )
    /* remove all the code down to the let */
    	let((cv tfId mfgGrid grid grid2

    You'll also have one extra close parenthesis at the end of the file to remove.

    That should do what you want! (Note I didn't test this, because it seems a bit pointless).

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 5 years ago

    These are all debugging aids - none of them entirely reconstructs the pcDefinePCell call that (may) have been used to build the PCell in the first place. Essentially, pcDefinePCell is a special function which creates all the parameters in the cellView, and then constructs a file with a function called pcGenCell and then calls dbDefineProc to reference that file (this reads the contents and stores the definition of pcGenCell within the view). It also calls that function with the default parameters so that the cellView contains the layout with the default parameter values.

    For the various forms you've shown:

    1. pcSkillGen - this won't work because it's intended for graphical pcells generated with Launch->Plugins->Pcell (not recommended these days as it's quite old and limited technology).
    2. dbDumpPcell - this is similar to dbWriteSkill - it writes out the contents of the pcell view (mainly the parameters and the default layout) and separately the pcell function. It omits the call to dbDefineProc for some reason.
    3. dbDumpPcDefinePcell - this writes out a single file which is close (but not quite) in the form of a pcDefinePCell call. It needs a bit of munging to make it work
    4. cdfDump - this just dumps the CDF if you need to reconstruct it. 

    I'm not entirely sure why you'd want to do this. I'd never recommend dumping somebody else's PCell and hacking it because you don't have all the code. Anyway, to reconstruct the output of dbDumpPcDefinePcell you could do this - take this part of the code:

    ("gpdk045" "nmos1v" "layout")
    (
      (l float 4.500000e-08)
      (fingers float 1.000000e+00)
      (connectGates string "None")
      (connectSD string "None")
      (switchSD boolean nil)
      (diffCont boolean  t)
      (dfm string "Minimum")
      (mtlCvg string "")
      (sdMtlWidth float 6.000000e-08)
      (leftAbut int 0)
      (rightAbut int 0)
      (tap string "None")
      (topTap boolean nil)
      (bottomTap boolean nil)
      (leftTap boolean  t)
      (rightTap boolean nil)
      (tapExtension string "")
      (tapCntRows int 1)
      (fw float 1.200000e-07)
    )
    procedure( pcGenCell(pcCellView "d")
        prog( (_pcParameters fw l fingers connectGates
    	connectSD switchSD diffCont dfm mtlCvg
    	sdMtlWidth leftAbut rightAbut tap topTap
    	bottomTap leftTap rightTap tapExtension tapCntRows
        )
    	if( !pcCellView
    	    return()
    	)
    	(_pcParameters = (pcCellView~>parameters))
    	(fw = (_pcParameters~>fw))
    	if( !fw
    	    then
    	    (fw = 0.0)
    	)
    /* all the code down to the let */
    	let((cv tfId mfgGrid grid grid2
    

    and change to this:

    pcDefinePCell(list(ddGetObj("gpdk045") "nmos1v" "layout")
    (
      (l float 4.500000e-08)
      (fingers float 1.000000e+00)
      (connectGates string "None")
      (connectSD string "None")
      (switchSD boolean nil)
      (diffCont boolean  t)
      (dfm string "Minimum")
      (mtlCvg string "")
      (sdMtlWidth float 6.000000e-08)
      (leftAbut int 0)
      (rightAbut int 0)
      (tap string "None")
      (topTap boolean nil)
      (bottomTap boolean nil)
      (leftTap boolean  t)
      (rightTap boolean nil)
      (tapExtension string "")
      (tapCntRows int 1)
      (fw float 1.200000e-07)
    )
    /* remove all the code down to the let */
    	let((cv tfId mfgGrid grid grid2

    You'll also have one extra close parenthesis at the end of the file to remove.

    That should do what you want! (Note I didn't test this, because it seems a bit pointless).

    Regards,

    Andrew.

    • 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