ADE Current Measurements

T

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
 
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
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
 
On Mar 10, 10:38 am, "S. Badel" <stephane.ba...@REMOVETHISepfl.ch>
wrote:
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
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--
 
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



Tony Arkles wrote:
On Mar 10, 10:38 am, "S. Badel" <stephane.ba...@REMOVETHISepfl.ch
wrote:
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

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--
 
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.
 
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.
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
 
On Mar 11, 5:55 am, "S. Badel" <stephane.ba...@REMOVETHISepfl.ch>
wrote:

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...
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
 

Welcome to EDABoard.com

Sponsor

Back
Top