200 likes | 382 Views
ADMS CMI Project: Extensions and Spectre/UltraSim Benchmarking Sergey Sukharev. 09/22/06 Montreux.
E N D
ADMS CMI Project: Extensions and Spectre/UltraSim Benchmarking Sergey Sukharev 09/22/06 Montreux
This 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. Abstract
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!! ADMS CMI project status
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. Customers / Verilog-A Device Model Developers
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) <+ complex expression ) • Branch alias in the contrib statement (V(branch) <+ 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) Most of the critical functionality added to ADMS/CMI
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”. Shifting to common Verilog-A projects
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 “gmethod=node”) • ADMS matched built-in performance in Spectre!! – 0.8x – 1.2x Performance evaluation in Spectre
Linux: ADMS/Built-in CPU time ratio: 0.92 sram ( 1,008 transistors; 2,373 equations ) Solaris: ADMS/Built-in CPU time ratio: 0.8
Linux: ADMS/Built-in CPU time ratio: 1.0 sqrt ( 1,188 transistors; 2,900 equations ) Solaris: ADMS/Built-in CPU time ratio: 0.9
Linux: ADMS/Built-in CPU time ratio: 1.1 add32 ( 1,984 transistors; 5,092 equations ) Solaris: ADMS/Built-in CPU time ratio: 0.89
Linux: ADMS/Built-in CPU time ratio: 1.18 mem_plus ( 7,454 transistors; 17,788 equations ) Solaris: ADMS/Built-in CPU time ratio: 1.03
Linux: ADMS CPU time ratio: 1.2 ram2k ( 13,880 transistors; 32,632 equations ) Solaris: ADMS CPU time ratio: 1.02
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. Performance evaluation in UltraSim
Linux: ADMS/Built-in CPU time ratio: 1.2 add32 ( 1,984 transistors; 5,092 equations ) ram2k ( 13,880 transistors; 32,632 equations ) Linux: ADMS/Built-in CPU time ratio: 1.7
Linux: ADMS/Built-in CPU time ratio: 0.8 sqrt ( 1,188 transistors; 2,900 equations ) sram ( 1,008 transistors; 2,373 equations ) Linux: ADMS/Built-in CPU time ratio: 1.7
Linux: ADMS/Built-in CPU time ratio: 1.09 mem_plus ( 7,454 transistors; 17,788 equations )
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. • Don’t 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. Keys to success and future work