ADE Current Measurements

Discussion in 'Cadence' started by Tony Arkles, Mar 10, 2008.

  1. Tony Arkles

    Tony Arkles Guest

    Hi,

    I'm relatively new to setting up Cadence CDF parameters and mapping
    them to Spectre model files. Things seem to be working well, except
    for one problem: I can't get IDC() to work.

    In my models, nmos and pmos devices are implemented as subckts:

    --snip--

    subckt nfet (d g s b)
    parameters w=0.12e-6 l=0.1e-6 nfing=1 mult=1 ...
    ....
    m1 (d g s b) nmos w=w/nfing l=l ad=ad as=as ps=ps pd=pd m=mult*nfing
    ....
    model nmos bsim4 type=n
    +version = 4.0 binunit = 1 paramchk= 1
    mobmod =

    etc etc.

    --snip--

    I understand that I need to be putting something like:

    nil D ":1" G ":2" S ":3" B ":4"

    into the termMapping field in the Spectre CDF information, but it's
    not really clear to me what exactly needs to be done to properly map
    the terminal currents, so that ADE can read them using IDC()

    I'd really appreciate if someone could point me in the right direction

    Cheers,
    Tony
     
    Tony Arkles, Mar 10, 2008
    #1
  2. Tony Arkles

    S. Badel Guest

    Hi,
    Examples are given in CDF User Guide. Typically it should be

    nil D \:d G \:g S \:s B \:b

    Note that it's important to escape the colons.

    Using \:1 and so on is also correct, but the drawback is your currents might not be saved in the
    simulation results, because no actual terminal with name '1' exists on your subckt.


    Hope this helps,
    Stéphane
     
    S. Badel, Mar 10, 2008
    #2
  3. Tony Arkles

    Tony Arkles Guest

    Hmmm... I just tried that, but still no dice.

    Is there some way to easily tell which currents are being saved in the
    simulation results (say, using OCEAN)? Looking at outputs(), I see a
    lot of devices that appear to be in spectre format (e.g. "I2.MP2:2"),
    but not many that would match the ADE calculator (e.g. "I2/MP2/S"):

    --snip--
    "I2.MP2:2" "I2.MP2:3" "I2.MP2:4" "I2.MP3:1" "I2.MP3:2"
    "I2.MP3:3" "I2.MP3:4" "I2.MP4:1" "I2.MP4:2" "I2.MP4:3"
    "I2.MP4:4" "I2.MP5:1" "I2.MP5:2" "I2.MP5:3" "I2.MP5:4"
    "I2.MP6:1" "I2.MP6:2" "I2.MP6:3" "I2.MP6:4" "/I2/n_nbias2"
    "/I2/n_pbias2" "/I2/nbias" "/I2/net6" "/I2/net8" "/I2/net17"
    "/I2/net22" "/I2/net23" "/I2/net26" "/I2/net30" "/I2/net51"
    --snip--
     
    Tony Arkles, Mar 10, 2008
    #3
  4. Tony Arkles

    S. Badel Guest

    Just a thought...

    Your MOSFETs are inside subckt as you said. So it's actually I2.MP2.m1:d etc. you are trying to get
    access to. So I'd try
    nil D mappedRoot("m1:d") ...
    Or something like this.

    Actually think the best is to make your subckts inline
     
    S. Badel, Mar 10, 2008
    #4
  5. Tony Arkles

    Riad KACED Guest

    Hi Tony,

    In Ocean, you can write something like :
    save( 'i "I2.MP2:2" "I2.MP2:3" "I2.MP2:4" "I2.MP3:1" "I2.MP3:2")
    plot(i("I2.MP2:2") i("I2.MP2:3"))

    A syntax like "I2.MP2:d", "I2.MP2:s" ... (pins d/g/s/b should be in
    lower case) will only work if the models are pure models and not
    subckts, which is not the case.
    Since your transistors are subckt models, then you have to use the
    position instead. So if you save "I2.MP2:3" you'll get the source
    current whether it is a subckt model or a direct instance of a model.
    Try then :1, :2, :3, :4 instead of d, g, s, b (respectively).

    Good luck ;-)

    Riad.
     
    Riad KACED, Mar 10, 2008
    #5
  6. Tony Arkles

    S. Badel Guest

    A syntax like "I2.MP2:d", "I2.MP2:s" ... (pins d/g/s/b should be in
    I tried a few things, indeed that's right. For subckts they need to be accessed by number, only for
    components will the terminal name work.

    so using a subckt you should really set termMapping to

    nil D \:1 G \:2 S \:3 B \:4

    if you inline the mos instance inside your subckt, then you can access the terminals of the mos
    instance as

    nil D \:d G \:g S \:s B \:b

    Note, if you do a save( 'all ) you will also see your mosfet currents as I2.MP2.m1:d and so on, but
    they couldn't be mapped by ADE correctly as far as my experiments taught me...


    Cheers,
    Stéphane
     
    S. Badel, Mar 11, 2008
    #6
  7. Tony Arkles

    Tony Arkles Guest

    I think this is the big question: how does ADE do the mapping, and how
    would I debug it?

    I'm chuckling to myself, this seems like it should be easy, but it is
    still eluding me.

    Cheers,
    Tony
     
    Tony Arkles, Mar 11, 2008
    #7
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.