BSIM-CMG conversion

96 views
Skip to first unread message

Mehmet Cirit (Ceridli)

unread,
Sep 17, 2022, 7:06:07 AM9/17/22
to xyce-users
I am trying to simulate with a model file which is level 72 in hspice format. It says
it is version 106.1 of BSIM-CMG.  I used xdm to convert it, and it maps this to  level 108,
and throws away the version number. The reference manual lists level 107 for 107.0.0
and level 110 for 110.0.0. Nothing about version 106.1.0.   xdm is throwing a lot of stuff,
so I did manual conversion. However, with xdm or without it, it does not find the
models:

Netlist error in file  XXXX at or near line YYY
Model is required for device M1 and no valid model card found

Looks like I am not using the correct level number.
Could somebody suggest the proper level number to use? There is no other warnings/errors other than this  issue. I am using Xyce 7.5.

xyce-users

unread,
Sep 17, 2022, 12:06:52 PM9/17/22
to xyce-users
Xyce does not support selecting versions of models within a level using the "version" parameter yet.   It is likely to be this way for some time, although the Xyce team *does* intend to support model version selection via a combination of LEVEL and VERSION parameters in general at some point.  It is not as easy as it sounds given the current design of the Xyce device package. 

We just noticed this week that XDM is incorrectly discarding the "VERSION" parameter when it does conversions  of model cards --- it shouldn't be doing that.  This was never a problem before, because Xyce has always ignored that parameter, since it only supports LEVEL for selecting models.   An issue has already been opened with the XDM team to fix that.

As for your specific problem:  Xyce does not have the BSIM-CMG version 106 implemented, and there is no level 106 MOSFET implemented in Xyce.  If you have made a model card with level 106, it is not a valid model card.

We currently have only the 107, 108, and 110 versions of BSIM-CMG, and it is unlikely we'll add more BSIM-CMG versions in the near future.  Right now, they happen to be selectable only by using the 107, 108, or 110 model levels, and the setting of the "VERSION" parameter in model cards is ignored --- if you ask for level 110, you get version 110.0.0, even if your model card has "VERSION=105.0".

You have two options: 
  - try to use your BSIM-CMG 106 model card using one of the other existing BSIM-CMG models in Xyce (by using level 107, 108, or 110) and see if it give acceptable results.  It is often the case that later versions are backward compatible.
  - try to import the BSIM-CMG 106 Verilog-A source code from the BSIM group's web site into Xyce as a Verilog-A plugin.  This shouldn't be a huge effort, but may require minor tweaks of the Verilog-A source.  Examples of the kinds of tweaks we needed to make to the version 107 code are in the file "README_Xyce" in the Xyce source tree where we have provided our modified source.  You can find that here: https://github.com/Xyce/Xyce/blob/master/utils/ADMS/examples/bsimcmg_107.0.0/README_Xyce.

I apologize that these are the only choices at the moment.

The error message "Model is required for device M1 and no valid model card found" is an annoying one, but it is the best we can do with the design of the device package and the SPICE netlist language we are stuck with at the moment.  If you want to know the details, read on.

The problem is that when parsing an M line, one cannot tell which fields are nodes and which is the model name until trying a bunch of things --- different MOSFET levels have different numbers of nodes and many MOSFET levels have optional nodes.  Worse, it is legal to have node names that are the same as model names.  Once a model name is accepted, all the fields between the "M" field at the beginning and the model name must then be nodes of the device.  This makes figuring out which field is actually the model name difficult and a trial-and-error process.

So what the parser is doing is scanning forward through the line one field at a time and checking to see if the field matches the name of a model corresponding to a ".MODEL" card.  For each field, we have to check:
  - Is there any model card in the netlist with that name?  -- if no, then this field isn't the model field
       -if so, is it a MOSFET model card?                                 -- if no, then this field can't be the model name
          - if so, does the LEVEL specified actually exist in Xyce?   -- if no, then it's not a valid model card and so this field can't be the model name
               - if so, does that LEVEL mosfet support a device with as many nodes specified so far?   
                    -- if so, SUCCESS!  This is the model we'll use, and all fields up to this point are the nodes of the device
                    -- if no, then this model isn't legal in this position on the line, and therefore can't be the model name.

This is repeated for each field on the line until it succeeds or until we run out of fields on the line.

If we get all the way to the end of the line and still haven't found a usable model name, then all we know is that we looked everywhere and couldn't find a valid model card to use for this line.  So that's what we report. 

It is frustrating that this error message is so inexact, but it is the best we can do at this point -- it can only be emitted after every field on the line has been checked.  It is, in fact, saying exactly what has happened:  Xyce has tried to figure out what model goes with this line, and couldn't find a valid model card that could be used.
Reply all
Reply to author
Forward
0 new messages