Title: ADMS CMI Project:
1- ADMS CMI Project
- Extensions and
- Spectre/UltraSim Benchmarking
- Sergey Sukharev
09/22/06 Montreux
2This paper presents an approach to implement at
the CMI/XML level most of the critical features -
required by external customers - to implement
device models in Spectre and UltraSim. Also some
interesting data from Spectre and UltraSim with
ADMS device models and benchmarks presented
here. There is no need to change the ADMS
software. Changes are done on the common
properties shared by all simulators instead. The
translation is specified using XML scripts
therefore Cadence intellectual property is
safe. Better support of the latest Verilog-A LRM
(Language Reference Manual) is important. For
example, support of voltage contributions and
time integral operator makes possible the
translation of more complex device models such as
HICUM and PSP, which are now CMC standard models.
3- Support Verilog-A compact models until
SpectreVerilog-A performance has been improved. - Add only critical features on customer demand
basis. - Supporting/Consulting on Verilog-A compact model
requirements common to ADMS and SpectreVerilog-A - We have interesting results to show on the ADMS
performances using Spectre and UltraSim!!
4- Customers / Verilog-A Device Model Developers
- EKV LDMOS (European project RobusPIC)
implemented. - EKV 3.0 planned.
- HiCUM level 0 implemented, level 2 being
implemented by developers. - Philips models (PSP NQS Charge) supported.
- SONY RPI TFT Works well in Spectre and UltraSim.
- Freescale MICA models (moscap3, rbody)
implemented.
5- Most of the critical functionality added to
ADMS/CMI
- NQS support (hidden state)
- Limexp (for Spectre and UltraSim)
- simparam() (for gdev, gmin, )
- analysis() (tran, ac, dc, static)
- M-factor (number of instances used in parallel)
- Analog function (before we had to use macros)
- Voltage contribution ( V(p,n) lt complex
expression ) - Branch alias in the contrib statement (V(branch)
lt expression) - string parameter type. (for n/p type
mosfet) - Compare/CopyState for UltraSim (requested by
Sony) - Switch branch (for parasitic resistors, including
node collapsing) implementation in progress - ddx( ) for table model output parameters in
progress - idt( ) (Needed by PSP NQS Charges)
6- Shifting to common Verilog-A projects
- Performance evaluation in Spectre and UltraSim
using - admsbsim3v3 device model.
- Make sure partitioning works
- Improve convergence in Spectre when gdev is not
specified. - Algorithm for switch-branch/node collapsing.
7- Performance evaluation in Spectre
- 5 tests from CircuitSim90 benchmark suite using
bsim3v3 model - Built-in vs. ADMS CMI vs. Spectre Verilog-A
interpreter - Platform Solaris and Linux
- C language Compilers
- Sun WorkShop v8, CFLAGS -xO5
- Linux gcc, CFLAGS O3 ffast_math
- Added gdev to bsim3v3 Verilog-A model for
better DC convergence. ( can also use
gmethodnode) - ADMS matched built-in performance in Spectre!!
- 0.8x 1.2x
8- sram ( 1,008 transistors 2,373 equations )
Linux ADMS/Built-in CPU time ratio 0.92
Solaris ADMS/Built-in CPU time ratio 0.8
9- sqrt ( 1,188 transistors 2,900 equations )
Linux ADMS/Built-in CPU time ratio 1.0
Solaris ADMS/Built-in CPU time ratio 0.9
10- add32 ( 1,984 transistors 5,092 equations )
Linux ADMS/Built-in CPU time ratio 1.1
Solaris ADMS/Built-in CPU time ratio 0.89
11- mem_plus ( 7,454 transistors 17,788 equations )
Linux ADMS/Built-in CPU time ratio 1.18
Solaris ADMS/Built-in CPU time ratio 1.03
12- ram2k ( 13,880 transistors 32,632 equations )
Linux ADMS CPU time ratio 1.2
Solaris ADMS CPU time ratio 1.02
13- Performance evaluation in UltraSim
- The same benchmarks and the same ADMS CMI device
model code as in Spectre was used. - Matched performance without table models (
Partitioning works!! ) - Built-in is faster because of table models.
- Investigating generic table model.
- Fixing bugs in UltraSim, enhancing ADMS CMI to
support interface - Enhancing ADMS CMI to support ddx(..) to
generate output parameters for representative
models.
14- add32 ( 1,984 transistors 5,092 equations )
Linux ADMS/Built-in CPU time ratio 1.2
ram2k ( 13,880 transistors 32,632 equations )
Linux ADMS/Built-in CPU time ratio 1.7
15- sqrt ( 1,188 transistors 2,900 equations )
Linux ADMS/Built-in CPU time ratio 0.8
sram ( 1,008 transistors 2,373 equations )
Linux ADMS/Built-in CPU time ratio 1.7
16- mem_plus ( 7,454 transistors 17,788 equations )
Linux ADMS/Built-in CPU time ratio 1.09
17- Keys to success and future work
- Pre-compute Model/Instance constants in
initialization stage - Share model parameters and model constants.
- Generate C-code that reflects the handwritten
Verilog-A equations in the module. - Dont generate what is never used in the module.
- Use the highest possible compiler optimization
flags. - ADMS CMI code was sensitive to -xO5, built-in
code was not. - Future work
- to develop algorithm to handle switch-branch
including collapse node - to create algorithm to support ddx(..)
operator.
18