Agenda DAY 1 Synopsys 60-I-032-BSG-005 1 Introduction 2 Verilog-A Modules 3 Simulating Variability – Design for Yield © 2007 Synopsys, Inc. All Rights Reserved 2- 1 Unit Objectives After completing this unit, you should be able to: Use Verilog-A modules 2- 2 Introduction to Verilog-A What is Verilog-A Standard analog hardware description language The analog-only subset of Verilog-AMS Verilog-AMS LRM, version 2.2, released in November 2004 Verilog-A applications Multi-level design simulation Compact models Analog test benches Verilog-A in HSPICE Compiled Verilog-A Solution Single kernel simulation 2- 4 3 Feature Overview (1/2) Production since W-2005.03 Compiled-code Solution Supports up-to-date Verilog-A language features Users can use existing Verilog-A code without any changes Provides HSPICE Verilog-A device support with existing syntax Compatible with Verilog-AMS LRM 2.2 Provides industry standard compliant Verilog-A language support High performance with golden accuracy Verilog-A modules are instantiated in the same manner as HSPICE subcircuits All major features available on HSPICE will be supported in Verilog-A based devices Users do not lose any significant simulator functionality when simulating with Verilog-A based devices 2- 6 4 Feature Overview (2/2) All major analysis types available on HSPICE are supported in Verilog-A based devices DC analysis AC analysis (.AC, .LIN, .NET) Transient analysis (.TRAN, .FFT, .FOUR) Noise analysis Pole-Zero analysis Sweeping, Monte Carlo, Optimization Alter analysis 2- 8 5 Verilog-A Usage Overview * Simple Verilog-A amplifier .hdl my_amp.va vs 1 0 1 rs 1 0 1 x1 1 2 my_amp gain=10 rl 2 0 1 module my_amp(in, out); electrical in, out; parameter real gain = 1.0; analog begin V(out) <+ gain * V(in); end endmodule .print tran V(x1.in) I(x1.out) x1:gain Verilog-A modules are loaded into the system via “.hdl” command Modules are instantiated with the same syntax as HSPICE subcircuits Verilog-A device data can be output using conventional output commands 2- 10 6 Loading Verilog-A Files (1/2) Two ways to load Verilog-A files .hdl netlist command Follows the syntax of NanoSim Examples: .hdl “my_amp.va” .hdl “va_res” $$ searching for va_res.va file -hdl command line option Allows simulations to choose whether Verilog-A modules are used or not Verilog-A modules can be changed without netlist modification Each Verilog-A file used needs one –hdl option Examples: hspice test.sp –hdl pll.va –vamodel –o test hspice input.sp –hdl my_amp.va –o va_test hspice pll.sp –hdl chrgp –hdl vco –o pll_test A Verilog-A file is assumed to have the .va extension when only prefix is supplied 2- 12 7 Loading Verilog-A Files (2/2) The .hdl command may be placed anywhere in the top-level circuit Can be placed in .alter blocks Cannot be inside subcircuit definition Cannot be inside if-else statement The -hdl is the command line equivalent to the netlist .hdl command -hdl has higher priority than .hdl netlist command If a Verilog-A module has the same name as a previously loaded module, or the names differ in case only, the later one will be ignored If a Verilog-A module has name conflict with any HSPICE built-in model name, the Verilog-A definition will be ignored Built-in model name: R, C, D, L, N/PMOS, NPN, PNP, etc. 2- 14 8 Defining the Verilog-A Module Path Two methods to define the Verilog-A module search path -hdlpath command line option Example: hspice amp.sp –hdlpath ~/vamodules –hdl amp.va HSP_HDL_PATH environment variable Example: setenv HSP_HDL_PATH ~/shared_libs/veriloga The directory search order for Verilog-A files Current working directory Path defined by –hdlpath Path defined by HSP_HDL_PATH 2- 16 9 Instantiation Syntax Verilog-A devices are X devices in HSPICE netlist Syntax X<inst> <nodes>* moduleName|modelName <param=value>* Verilog-A devices may have zero or more nodes and, zero or more parameters Example: Xva_r plus minus va_r res=100 Verilog-A module may be instantiated directly or instantiated via an associated Verilog-A model card Default HSPICE search order for cell definition for X devices Subcircuit Definition Verilog-A Model Cards Verilog-A Module Definition 2- 18 10 Verilog-A Model Cards Model card is a parameter sharing mechanism When parameter sets are almost the same they can be shared among many instances Advantage to compact model Syntax is the same for Verilog-A devices as for built-in devices Verilog-A model syntax .model modelName modelType param=value modelType - Verilog-A module name, cannot conflict with built-in model types (e.g., R, C, D, etc.) modelName - model name reference used by the instance Example: .model my_bjt_va bjt_va rb=6.5 rc=6.3 re=0.15 2- 20 11 Instantiation Examples (1/2) // Verilog-A module example module va_amp(in, out); electrical in,out; parameter real gain=1.0, fc=100e6; analog begin … endmodule One Verilog-A module can have one or more optional associated model cards Examples: .model myamp_model va_amp gain=2 fc=200e6 .model myamp_model_2 va_amp gain=10 Any module parameter can be specified on its model cards or on the instance Instance parameters override model parameters 2- 22 12 Instantiation Examples (2/2) Instantiations of Verilog-A module ‘va_amp’ x1 n1 n2 myamp x2 n3 n4 myamp gain=2.0 x3 n5 n6 myamp2 fc=150e6 x4 n7 n8 va_amp x1 inherits model ‘myamp’ parameters gain=2, fc=200e6 x2 inherits ‘fc=200e6’ from ‘myamp’ and overrides ‘gain’ x3 inherits parameter “gain=10” from model ‘myamp2’ and overrides parameter ‘fc’ which is an implicit parameter in ‘myamp2’ x4 directly instantiates the Verilog-A module ‘va_amp’ 2- 24 13 Parameter Case Sensitivity Verilog-A is case sensitive HSPICE is case insensitive Module parameters that differ by case only cannot be redefined in its netlist instantiations Example: module my_amp(in, out); electrical in, out; parameter real gain = 1.0; parameter real Gain = 1.0; analog V(out) <+ (Gain+gain)*V(in); endmodule If the user instantiates the module as: x1 n1 n2 my_amp Gain=1 The simulator cannot uniquely define which parameter is to be set A warning message regarding the ambiguity is issued and the definition of the parameter is ignored 2- 26 14 Bus Support Verilog-A supports the concept of bus (vector ports) HSPICE does not When instantiating a module which has vector ports, the individual bus lines need to be specified The Verilog-A module will internally collapse the lines and connect them up to the vector port Example: module d2a(in, out); electrical [1:4] in; electrical out; analog … ** Instantiation of module d2a x1 in1 in2 in3 in4 o1 The lines in1 -> in4 are mapped to ports in[1] -> in[4] Make sure that the instantiation order matches the vector port order defined in the module 2- 28 15 Output Control (1/2) Output for Verilog-A devices: Direct port voltage access Direct port current probing Internal node voltage access Internal named branch probing Module parameter value Module variable value V() and I() access functions Port voltage and internal node voltages are accessed via the V() function Internal node access requires the full hierarchical name Port current and named branch currents are accessed via the I() function 2- 30 16 Output Control (2/2) Reporting Convention for Currents A positive branch current implies that current is flowing into the device terminal or internal branch plus minus Xva_r I(xva_1:plus) I(xva_1:minus) Module Parameter Output Syntax Instance_name:parameter Example: .print xva_r:reff 2- 32 17 Output Control Example (1/2) Verilog Module // Verilog-A module module va_fnc(plus, minus); electrical plus, minus; electrical int1, int2; parameter real r1=0, r2=0; branch (int1, int2) br1; // creates an internal branch br1 between // internal nodes int1 and int2; child_module c1 (plus, int1); child_module c2 (minus, int2); … Endmodule Verilog-A device in netlist x1 1 2 va_fnc r1=1 r2=2 2- 34 18 Output Control Example (2/2) To print the current on Verilog-A device port name plus for the instance x1: .print I(x1.plus) To print the Verilog-A module internal node named int1 for the instance x1: .print V(x1.int1) In this module there is an internal branch name br1 declared then, the branch current can be probed as: .print I(x1.br1) If the module va_fnc is hierarchical and has a child instance called c1 with an internal node c_int1 then the node c_int1 can be output as: .print V(x1.c1.c_int1) Wildcarding can be use to output internal nodes, int1 and int2 for the child c1 in the instance x1: .print v(x1.c1.int*) 2- 36 19 Overriding Subcircuits with Verilog-A Modules If both a subcircuit and a Verilog-A module have the same caseinsensitive name, by default, HSPICE uses the subcircuit definition Vamodel option lets Verilog-A definition take preference Supports cell-base definition only Can be specified as a netlist option or a command line option Netlist option syntax: .option vamodel [=name] Examples: .option vamodel=vco vamodel=chrgpump – Instances of vco and chrgpump will use Verilog-A definition .option vamodel – All cell instantiations will use Verilog-A definition whenever it is available Command line option: –vamodel hspice input.sp –hdl va_models –vamodel chrgpump –vamodel vco 2- 38 20 Disabling .option VAMODEL with .option SPMODEL .option spmodel switches back to HSPICE definition Supports cell-based definitions only Useful for .ALTER blocks Netlist Syntax .option spmodel [=name] Examples: Specific module .option spmodel=vco Global .option spmodel Assuming switched to a Verilog-A module in an earlier .alter block Instantiations of vco will use subckt definition again All cell instantiations will use subckt definitions There is no equivalent command line option for spmodel 2- 40 21 Addition Information – vamodel and spmodel Command line option -vamodel has preference over any netlist vamodel or spmodel options Example: hspice va_opt.sp –hdl va_models –vamodel my_cap Every run uses the Verilog-A definition for cell my_cap Specific vamodel and spmodel options have preference over global options Examples: * va_opt.spi * all will use Verilog-A definition whenever available .option vamodel .alter 1 * all will use subckt definition whenever available .option spmodel .alter 2 .option vamodel=my_cap $$ my_cap will use Verilog-A .option spmodel $$ my_cap will still use Verilog-A … 2- 42 22 Stand-Alone Compiler Verilog-A files can be compiled manually using the hsp-vacomp command Input a Verilog-A file, compiler produces a Compiled Model Library (CML) file A .cml file is a platform and version specific shared library .cml files can be directly loaded Compiler Example: % hsp-vacomp resistor.va Produces resistor.cml in the same directory Load Example: .hdl resistor.cml $$ load resistor.cml 2- 44 23 Verilog-A Examples Examples of typical Verilog-A modules with HSPICE netlists are located at: $installdir/demo/hspice/veriloga/ 2- 46 24 Lab 2: Verilog-A Modules Netlist During this lab, you will: 45 minutes 1. Use Verilog-A modules in a circuit Setup 2. Simulate the circuit 3. View the simulation results Simulation CosmosScope 2- 48 25