• 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. Netlist creation error

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 142
  • Views 19014
  • 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

Netlist creation error

yongs
yongs over 12 years ago

Hi, I'm trying to use the schematics and simulation setups provided in CMOSedu.com.

When I added IC6.1 library (I'm using virtuoso 6.1.5 version) and other directories and ran the spectre simulation, I got Netlist Error:  

Could not find netlist procedure:ABbnNetlistProc instance "M0" in cell-view "Ch26_IC61" "Fig26_10" "schematic"

for all of the 3-terminal nmos and pmos transistors.

In the CDF editing window, the netlistProcedure field is written as "ABbnNetlistProc". After I deleted 'ABbnNetlistProc' and empty the field, the error message disappeared and netlist could be created, however, there's another error message: Error found by spectre during hierarchy flattening. ERROR (CMI-2116): M0: Too few terminals given (3 < 4) while running simulation. 

Any suggestion to solve this error?

  • Cancel
  • skillUser
    skillUser over 12 years ago

     Hi,

    I don't have time to download and install materials from the site that you mentioned, but the general message seems to be that the netlist procedure ABbnNetlistProc is not defined - this is required to netlist the MOS component's bulk terminal.  Check that your start up procedures are loading SKILL from a .cdsinit file, or perhaps from a library libInit.il file (in the PDK library, for example) - this is most likely where the procedure should be loaded from. If this information does not help, you could look through *.il files and search for the ABbnNetlistProc, it is most likely defined in one of them somewhere but not being loaded, hence the error.

    Good luck.

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    I suspect that the code is as below - this is from a very old solution (11004934) that is no longer on Cadence Online Support because it's obsolete (it was intended to help customers migrate from the old spectreS way of handling programmable bulk nodes, to the new inherited connection method - the old way was not supported when spectre (direct) was introduced back in IC443).

    So the code was to help around 14 years ago... the clue that it was from me was the "AB" in the function name ;-)

    Here's the code from that solution (apologies for the blank lines in the solution; it got munged slightly in a migration of our support system to a new system):

    defun(ABbnNetlistProc (inst)

        let((formatter netlister bulk sigs)

            ;----------------------------------------------------------------

            ; Get hold of the formatter and netlister objects

            ;----------------------------------------------------------------

            formatter=nlGetFormatter(inst)

            netlister=nlGetNetlister(formatter)

     

            nlPrintInstComments(formatter inst)

            nlPrintIndentString(netlister)

            nlPrintInstName(formatter inst)

            ;----------------------------------------------------------------

            ; Print the standard signals. Can't use nlPrintInstSignals

            ; because the parentheses would be around the terminals in

            ; the termOrder, and not include the bulk node

            ;----------------------------------------------------------------

            sigs=nlGetSignalList(inst)

            nlPrintString(netlister " (" car(sigs))

            foreach(sig cdr(sigs)

                nlPrintString(netlister " " sig)

            ) ; foreach

            ;----------------------------------------------------------------

            ; Get the bn parameter and output that as the connection, if

            ; it is set

            ;----------------------------------------------------------------

            bulk=nlGetParamStringValue(inst "bn")

            when(member(bulk '("D" "G" "S"))

                bulk=nlGetTerminalSignalName(inst bulk)

                )

            when(bulk

                nlPrintString(netlister " " bulk)

                )

            ;----------------------------------------------------------------

            ; Write out the close parenthesis, now that the bulk is written

            ;----------------------------------------------------------------

            nlPrintString(netlister ")")

     

            nlPrintModelName(formatter inst)

            nlPrintInstParameters(formatter inst)

            )

        )

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • jshi
    jshi over 11 years ago
    Thanks Andrew. you rocks!
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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