How to get a Circuit in verilog converted to hspice, connected to the micron package models, and simulating in hspice and hsimplus.

Slides:



Advertisements
Similar presentations
Digital System Design-II (CSEB312)
Advertisements

Stimulus and Response. Simple Stimulus Verifying the Output Self-Checking Testbenches Complex Stimulus Complex Response Predicting the Output.
Chapter 15:Introduction to Verilog Testbenches Objectives In this section,you will learn about designing a testbench: Creating clocks Including files Strategic.
Recap : Always block module and_gate (out, in1, in2); inputin1, in2; outputout; regout; or in2) begin out = in1 & in2; end endmodule zAlways.
FSM and Efficient Synthesizable FSM Design using Verilog
//HDL Example 8-2 // //RTL description of design example (Fig.8-9) module Example_RTL (S,CLK,Clr,E,F,A);
Counters Discussion D8.3.
Traffic light contoller using FSM
1 COMP541 More on State Machines and Video Scanout Montek Singh Feb 13, 2007.
Modulo-N Counters Module M10.4 Section 7.2.
Verilog in transistor level using Microwind
CPSC 321 Computer Architecture Andreas Klappenecker
CDA 3100 Recitation Week 11.
Verilog Overview. University of Jordan Computer Engineering Department CPE 439: Computer Design Lab.
Sequential Logic in Verilog
Synchronous Sequential Logic
Multiplication and Division
Hardware Description Language (HDL)
16/04/20151 Hardware Descriptive Languages these notes are taken from Mano’s book It can represent: Truth Table Boolean Expression Diagrams of gates and.
Anurag Dwivedi.  Verilog- Hardware Description Language  Modules  Combinational circuits  assign statement  Control statements  Sequential circuits.
ECE 551 Digital System Design & Synthesis Lecture 06 Loops Non-synthesizable Constructs File I/O.
CSE 201 Computer Logic Design * * * * * * * Verilog Modeling
//HDL Example 5-1 // //Description of D latch (See Fig.5-6) module D_latch (Q,D,control); output Q; input.
Verilog. 2 Behavioral Description initial:  is executed once at the beginning. always:  is repeated until the end of simulation.
FSM Revisit Synchronous sequential circuit can be drawn like below  These are called FSMs  Super-important in digital circuit design FSM is composed.
 HDLs – Verilog and Very High Speed Integrated Circuit (VHSIC) HDL  „ Widely used in logic design  „ Describe hardware  „ Document logic functions.
FSM examples.
Pulse-Width Modulated DAC
OUTLINE Introduction Basics of the Verilog Language Gate-level modeling Data-flow modeling Behavioral modeling Task and function.
Introduction to Verilog (Behavioral Modeling). Agenda Gate Delays and User-Defined Primitives Behavioral Modeling Design Examples Hands-on Practice.
Communication IC & Signal Processing Lab. Chih-Peng Fan1 PreSim CoreGenerator IP in ISE 5.1i with Verilog HDL.
Verilog Sequential Circuits Ibrahim Korpeoglu. Verilog can be used to describe storage elements and sequential circuits as well. So far continuous assignment.
Arbitrary Waveforms Module M10.5 Section 7.2. CLK DQ !Q CLK DQ !Q CLK DQ !Q Q0Q0.D Q1 Q2 Q1.D Q2.D s s s s3 0 1.
ECE 353 Computer Systems Lab I Verilog Hardware Description Language.
Ring Counter Discussion 11.3 Example 32.
Arbitrary Waveform Discussion 12.2 Example 34. Recall Divide-by-8 Counter Use q2, q1, q0 as inputs to a combinational circuit to produce an arbitrary.
Counters Discussion 12.1 Example 33. Counters 3-Bit, Divide-by-8 Counter 3-Bit Behavioral Counter in Verilog Modulo-5 Counter An N-Bit Counter.
2-to-1 Multiplexer: if Statement Discussion D7.1 Example 4.
A/D Converter Datapaths Discussion D8.4. Analog-to-Digital Converters Converts analog signals to digital signals –8-bit: 0 – 255 –10-bit: 0 – 1023 –12-bit:
Registers and Shift Registers Discussion D8.2. D Flip-Flop X 0 Q 0 ~Q 0 D CLK Q ~Q D gets latched to Q on the rising edge of the clock. Positive.
Generic Multiplexers: Parameters Discussion D7.5 Example 8.
FSMs in Verilog and other random things 9/27/02. FSM structure CLK STATE Next State Logic Inputs Output Logic Outputs.
D Flip-Flops in Verilog Discussion 10.3 Example 27.
Quad 2-to-1 Multiplexer Discussion D7.4 Example 7.
Week Four Design & Simulation Example slides. Agenda Review the tiny example (Minako “logic”)from last week – look at the detailed static timing report.
Micron Technology Clinic Effect of Transistor Number and Hierarchy on Simulation Speed Presented by: Jason Oneida Advisor: Dr. Ken Stevens.
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
Introduction Verilog is a HARDWARE DESCRIPTION LANGUAGE (HDL) A hardware description language is a language or means used to describe or model a digital.
Chapter 11: System Design Methodology Digital System Designs and Practices Using Verilog HDL and 2008, John Wiley11-1 Ders 8: FSM Gerçekleme ve.
Module 2.1 Gate-Level/Structural Modeling UNIT 2: Modeling in Verilog.
ECE/CS 352 Digital System Fundamentals© 2001 C. Kime 1 ECE/CS 352 Digital Systems Fundamentals Spring 2001 Chapters 3 and 4: Verilog – Part 2 Charles R.
TODAY’S OUTLINE Finite State Machine Exercise 1 Exercise 1 Exercise 2 Exercise 2 Exercise 3 Exercise 3 Exercise 4 Exercise 4.
Register Transfer Level & Design with ASM
Traffic Lights Discussion D8.3a. Recall Divide-by-8 Counter Use Q2, Q1, Q0 as inputs to a combinational circuit to produce an arbitrary waveform. s0 0.
Behavioral Modelling - 1. Verilog Behavioral Modelling Behavioral Models represent functionality of the digital hardware. It describes how the circuit.
ECE 274 Digital Logic RTL Design using Verilog Verilog for Digital Design Ch. 5.
Lab for Cell-Based IC Design
Micron Technology Clinic Tool Flow and Comparison of Micron Package Models Presenter: Michael Tomer Advisor: Dr. Ken Stevens.
SYEN 3330 Digital SystemsJung H. Kim Chapter SYEN 3330 Digital Systems Chapters 4 – Part4: Verilog – Part 2.
Exp#7 Finite State Machine Design in Verilog COE203 Digital Logic Laboratory Dr. Ahmad Almulhem KFUPM Spring 2009.
Supplement on Verilog for Algorithm State Machine Chart
Supplement on Verilog Sequential circuit examples: FSM
Pulse-Width Modulation (PWM)
FSM MODELING MOORE FSM MELAY FSM. Introduction to DIGITAL CIRCUITS MODELING & VERIFICATION using VERILOG [Part-2]
Verilog.
ESE 437: Sensors and Instrumentation
Supplement on Verilog Sequential circuit examples: FSM
The Verilog Hardware Description Language
The Verilog Hardware Description Language
Prof. Onur Mutlu ETH Zurich Spring March 2019
Presentation transcript:

How to get a Circuit in verilog converted to hspice, connected to the micron package models, and simulating in hspice and hsimplus.

First we need a verilog file. // mod.v `timescale 1ns / 1ps module mod( a, out, CLK); input [3:0] a; input CLK; output [1:0] out; reg [1:0] out; always@(posedge CLK) begin out <= a % 3; end endmodule These are the names of the internal inputs and outputs This is where you declare the specs of the circuit. The [3:0] syntax means that there are 4 wires contained in the circuit. the output of this circuit is named out. For us to be able to assign to out in the always block below we must also declare a reg of the same type and name. For this circuit, the code in the always block will run every time that the CLK signal goes from low to high.

= vs <= operators reg[15:0] a; reg[15:0] b; always@(posedge CLK) begin a=b; b=a; end The = operator is verilog’s blocking assignment operator Each statement must be evaluated and the value changed before the next. For this circuit, a gets the value of b. b then gets the value of a. Result: both now contain the same value The <= operator is verilog’s non-blocking assignment operator. During the CLK cycle all of these updates take place simultaneously For this circuit, a and b will switch their values at the positive edge of every CLK reg[15:0] a; reg[15:0] b; always@(posedge CLK) begin a<=b; b<=a; end

Simulation of circuit to ensure logic correct. Hspice and Hsimplus are not suited for simple verification of a verilog circuit. Use Xilink or similar program to simulate the circuit and verify functionality.

Xilink demo Todo (maybe) add a xilink demo (but we should aready know how to do this) Please go on to next slide

Environment Setup set path = ($path /uusoc/facility/cad_common/local/bin/S10) set path = ($path /uusoc/facility/cad_common/local/bin/F09/) set path = ($path /uusoc/facility/cad_common/local/bin/S09/) set path = ($path /uusoc/facility/cad_common/local/bin/F08/) set path = ($path /uusoc/facility/cad_common/local/bin/S08/) set path = ($path /uusoc/facility/cad_common/local/bin/F07/) set path = ($path /uusoc/facility/cad_common/local/bin/S07/) set path = ($path /uusoc/facility/cad_common/local/bin/F06/) set path = ($path /uusoc/facility/cad_common/local/bin/S06/) set path = ($path /uusoc/facility/cad_common/local/bin/F05/) set path = ($path /uusoc/facility/cad_common/local/bin/S05/) set path = ($path /uusoc/facility/cad_common/local/setups/) setenv LOCAL_CADSETUP /uusoc/facility/cad_common/local/class/6830/S09 setenv MSIM /uusoc/facility/cad_tools/Mentor/MSIM-F07 setenv FPGADV /uusoc/facility/cad_tools/Mentor/FPGADV-F07 setenv CBRE /uusoc/facility/cad_tools/Mentor/CBRE-F07 setenv FPGADV_BIN /uusoc/facility/cad_tools/Mentor/FPGADV-F07/Fpgadv/bin setenv HDS_BIN /uusoc/facility/cad_tools/Mentor/FPGADV-F07/Hds/bin setenv MODELTECH_BIN /uusoc/facility/cad_tools/Mentor/MSIM-F07/modeltech/bin setenv CALIBRE_BIN /uusoc/facility/cad_tools/Mentor/CBRE-F07/bin setenv MGC_HOME /uusoc/facility/cad_tools/Mentor/ixl_cal_2007.2_26.18/ixl_cal_2007.2_26.18/ set path = ($path /uusoc/facility/cad_tools/Mentor/FPGADV-F07/Fpgadv/bin) set path = ($path /uusoc/facility/cad_tools/Mentor/FPGADV-F07/Hds/bin) set path = ($path /uusoc/facility/cad_tools/Mentor/MSIM-F07/modeltech/bin) set path = ($path /uusoc/facility/cad_tools/Mentor/CBRE-F07/bin) setenv LM_LICENSE_FILE /uusoc/facility/cad_tools/Mentor/common_license In order for the tools in the cade lab to work properly, you must set up the tools. Edit your .cshrc file and include the following items

Conversion from Verilog to Spice Conversion from verilog to spice is done in several step The .v file is ran through a rtl optimization and verification script The now optimized file is ran through the design compiler to get a structural verilog file. The structural verilog file is converted to hspice As an example I will be converting the mod.v file (shown earlier) to spice.

Step 0: Getting Ready Run the following commands to ensure group members can read your files newgrp micron umask 007 Create a working directory and copy the scripts from the /home/micron/design/65nm/dc directory namingrules.dc Node name restriction and modification script mult.cstr.tcl Constraint file that defines the clock period, etc mult.rtlopt.csh A cshell script for launching the design compiler mult.rtlopt.tcl A script for generating the correct rtl optimized file mult.dcopt.csh A shell script for running the synthesis workflow mult.dcopt.tcl A script for running the full compilation These are based off of the scripts from Ken Stevens ECE 6770 Advanced digital VLSI design class webpage They have been modified to use the 65nm design libraries Copy the micron package models into your new directory

Step 0: Getting Ready (continued) mult.rtlopt.csh #!/bin/csh -fb ############################################### # This runs design compiler and creates the constraint files # This is the first of two scripts to be run # This one basically ensures the verilog is correct ### Script variable settings ## design compiler command - may need to run "setup-synopsys" first: set dccmd = "syn-dc" ## design definitions # note that csh variables do not get imported into dc_shell :-( set design = “mult” # this should be the top level name of your design set tool = "rtlopt“ … Need to edit scripts so they are operating on the correct files. Modify 4 files replacing mult with the circuit name mult.rtlopt.tcl ### This is the script for optimizing the verilog #----------------------------------------------------------------------# # DESIGN DEFINITION # set design_name mult set design_dir ".“ … mult.dcopt.csh #!/bin/csh -fb ############################################### # This runs design compiler and creates the constraint files ### Script variable settings ## design compiler command - may need to run "setup-synopsys" first: set dccmd = "syn-dc" ## design definitions # note that csh variables do not get imported into dc_shell :-( set design = “mult“ # this should be the top level name of your design set tool = "dcopt“ … mult.dcopt.tcl ### This is the script for optimizing the verilog #----------------------------------------------------------------------# # DESIGN DEFINITION # set design_name mult set design_dir ".“ …

Step 0: Getting Ready (continued) mult.cstr.csh ################################################ # tcl variable $design_name defined in calling script current_design $design_name # Define operational modes set_operating_conditions "typical" -library $lib_name set_wire_load_mode "segmented" set_max_fanout 64 $design_name # Define frequency parameters set clk_period 0.275 set clk_port "CLK" set clk_name "clock" Adjust this value to define what clock speed we will be using Very important to ensure that circuit is converted correctly (allows enough time for signal propagation) We don’t know what it should be so make best guess We will be able to check the circuit timing later and may have to come back and readjust this. Lastly rename all of the mult.* files to {circuit_name}.*

Step 0: Getting Ready (continued) mod.rtlopt.csh #!/bin/csh -fb ############################################### # This runs design compiler and creates the constraint files # This is the first of two scripts to be run # This one basically ensures the verilog is correct ### Script variable settings ## design compiler command - may need to run "setup-synopsys" first: set dccmd = "syn-dc" ## design definitions # note that csh variables do not get imported into dc_shell :-( set design = “mod” # this should be the top level name of your design set tool = "rtlopt“ … Final state of files after step 0 mod.rtlopt.tcl ### This is the script for optimizing the verilog #--------------------------------------------# # DESIGN DEFINITION # set design_name mod set design_dir ".“ … mod.dcopt.tcl ### This is the script for optimizing the verilog #----------------------------------------------# # DESIGN DEFINITION # set design_name mod set design_dir ".“ … mod.cstr.csh ################################################ # tcl variable $design_name defined in calling script current_design $design_name # Define operational modes set_operating_conditions "typical" -library $lib_name set_wire_load_mode "segmented" set_max_fanout 64 $design_name # Define frequency parameters set clk_period 0.275 set clk_port "CLK" set clk_name "clock" mod.dcopt.csh #!/bin/csh -fb ############################################### # This runs design compiler and creates the constraint files ### Script variable settings ## design compiler command - may need to run "setup-synopsys" first: set dccmd = "syn-dc" ## design definitions # note that csh variables do not get imported into dc_shell :-( set design = “mod“ # this should be the top level name of your design set tool = "dcopt“ …

Step 1: RTL Optimization and Verilog Verification Run the rtl optimization script ./mod.rtlopt.csh This will generate 2 files mod.rtlopt.out Contains a log of the conversion. Check this for errors!! mod.rtlopt.v

Step 1: RTL Optimization and Verilog Verification (continued) Result mod.rtlopt.v is now ready for the design compiler mod.rtlopt.v module mod ( a, out, CLK ); input [3:0] a; output [1:0] out; input CLK; wire N0, N1; REM_UNS_OP rem_13 ( .A(a), .B({1'b1, 1'b1}), .REMAINDER({N1, N0}) ); \**SEQGEN** \out_reg[1] ( .clear(1'b0), .preset(1'b0), .next_state(N1), .clocked_on(CLK), .data_in(1'b0), .enable(1'b0), .Q(out[1]), .synch_clear(1'b0), .synch_preset(1'b0), .synch_toggle(1'b0), .synch_enable(1'b1) ); \**SEQGEN** \out_reg[0] ( .clear(1'b0), .preset(1'b0), .next_state(N0), .clocked_on(CLK), .data_in(1'b0), .enable(1'b0), .Q(out[0]), endmodule mod.v `timescale 1ns / 1ps module mod( a, out, CLK); input [3:0] a; input CLK; output [1:0] out; reg [1:0] out; always@(posedge CLK) begin out <= a % 3; end Endmodule

Step 2: Conversion to Structural Verilog Run the conversion script ./mod.dcopt.csh This will generate many files mod.dcopt.out Contains a log of the conversion. Check this for errors!! mod.dcopt.v The converted structural verilog file. mod.dcopt.fullpaths Contains timing information from the design compiler

Step 2: Conversion to Structural Verilog (continued) Result mod.dcopt.v is now ready for conversion to hspice mod.dcopt.v module mod ( a, out0, CLK ); input [3:0] a; output [1:0] out0; input CLK; wire n22, n23, n1, n2, n3, n5, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20, n21; A2DFFQX1A12TR clock_r_REG2_S1 ( .A(n1), .B(n12), .CK(CLK), .Q(n10) ); DFFQX0P5A12TR clock_r_REG1_S1 ( .D(n18), .CK(CLK), .Q(n9) ); DFFQNX0P5A12TR clock_r_REG0_S1 ( .D(n15), .CK(CLK), .QN(n21) ); DFFQX0P5A12TR clock_r_REG3_S1 ( .D(n2), .CK(CLK), .Q(n8) ); OAI2XB1X1A12TR U3 ( .A1N(n8), .A0(n21), .B0(n19), .Y(n20) ); XOR2X0P7A12TR U4 ( .A(n20), .B(n8), .Y(n23) ); XNOR2X0P7A12TR U5 ( .A(n7), .B(n21), .Y(n22) ); INVX16A12TR U6 ( .A(n3), .Y(out0[0]) ); INVX16A12TR U7 ( .A(n5), .Y(out0[1]) ); BUFHX1P4A12TR U8 ( .A(a[2]), .Y(n1) ); INVX0P5BA12TR U9 ( .A(a[3]), .Y(n12) ); NAND2X0P5BA12TR U10 ( .A(a[1]), .B(n16), .Y(n18) ); BUFHX1P4A12TR U11 ( .A(a[0]), .Y(n2) ); INVX0P5BA12TR U12 ( .A(n23), .Y(n3) ); INVX0P5BA12TR U13 ( .A(n22), .Y(n5) ); OAI22X1A12TR U14 ( .A0(n17), .A1(n14), .B0(n13), .B1(n12), .Y(n16) ); INVX2A12TR U15 ( .A(a[1]), .Y(n14) ); INVX2A12TR U16 ( .A(n11), .Y(n13) ); NAND2X1A12TR U17 ( .A(a[2]), .B(n11), .Y(n17) ); XOR2X0P7A12TR U18 ( .A(n16), .B(a[1]), .Y(n15) ); NAND2X1A12TR U19 ( .A(a[3]), .B(a[2]), .Y(n11) ); AND2X1A12TR U20 ( .A(n8), .B(n20), .Y(n7) ); XOR2X0P7A12TR U21 ( .A(n9), .B(n10), .Y(n19) ); endmodule mod.rtlopt.v module mod ( a, out, CLK ); input [3:0] a; output [1:0] out; input CLK; wire N0, N1; REM_UNS_OP rem_13 ( .A(a), .B({1'b1, 1'b1}), .REMAINDER({N1, N0}) ); \**SEQGEN** \out_reg[1] ( .clear(1'b0), .preset(1'b0), .next_state(N1), .clocked_on(CLK), .data_in(1'b0), .enable(1'b0), .Q(out[1]), .synch_clear(1'b0), .synch_preset(1'b0), .synch_toggle(1'b0), .synch_enable(1'b1) ); \**SEQGEN** \out_reg[0] ( .clear(1'b0), .preset(1'b0), .next_state(N0), .clocked_on(CLK), .data_in(1'b0), .enable(1'b0), .Q(out[0]), endmodule

Step 2: Conversion to Structural Verilog (continued) Excerpt from mod.dcopt.fullpaths Startpoint: a[2] (input port) Endpoint: clock_r_REG0_S1 (rising edge-triggered flip-flop clocked by clock) Path Group: clock Path Type: max Point Incr Path ----------------------------------------------------------- clock (input port clock) (rise edge) 0.00 0.00 input external delay 0.00 0.00 r a[2] (in) 0.00 0.00 r U19/Y (NAND2X1A12TR) 0.02 0.02 f U17/Y (NAND2X1A12TR) 0.02 0.04 r U14/Y (OAI22X1A12TR) 0.03 0.07 f U18/Y (XOR2X0P7A12TR) 0.03 0.10 f clock_r_REG0_S1/D (DFFQNX0P5A12TR) 0.00 0.10 f data arrival time 0.10 clock clock (rise edge) 0.28 0.28 clock network delay (ideal) 0.00 0.28 clock uncertainty -0.01 0.26 clock_r_REG0_S1/CK (DFFQNX0P5A12TR) 0.00 0.26 r library setup time -0.03 0.23 data required time 0.23 data arrival time -0.10 slack (MET) 0.13 Timing verification Look though the fullpaths file to ensure that there is no negative slack If there is any negative slack or too much positive slack edit the clock speed in the mod.cstr.tcl and rerun steps 1 and 2

Step 3: Conversion to Spice Run the v2lvs conversion program v2lvs -v {INPUT FILE} -o {OUTPUT FILE} -lsr {LIBRARY FILE} –i v2lvs -v mod.dcopt.v -o mod.v2lvs.sp -lsr /home/micron/design/65nm/data/cmos10sfrvt_A12.cdl –I Where is power and ground They are there, but we need to run one more script so we can see them. mod.v2lvs.sp $ Spice netlist generated by v2lvs $ v2007.2_26.18 Wed Jun 13 20:11:48 PDT 2007 .SUBCKT mod a[3] a[2] a[1] a[0] out0[1] out0[0] CLK 1013 1015 Xclock_r_REG2_S1 n10 n1 n12 CLK 1013 1015 A2DFFQX1A12TR Xclock_r_REG1_S1 n9 CLK n18 1013 1015 DFFQX0P5A12TR Xclock_r_REG0_S1 n21 CLK n15 1013 1015 DFFQNX0P5A12TR Xclock_r_REG3_S1 n8 CLK n2 1013 1015 DFFQX0P5A12TR XU3 n20 n21 n8 n19 1013 1015 OAI2XB1X1A12TR XU4 n23 n20 n8 1013 1015 XOR2X0P7A12TR XU5 n22 n7 n21 1013 1015 XNOR2X0P7A12TR XU6 out0[0] n3 1013 1015 INVX16A12TR XU7 out0[1] n5 1013 1015 INVX16A12TR XU8 n1 a[2] 1013 1015 BUFHX1P4A12TR XU9 n12 a[3] 1013 1015 INVX0P5BA12TR XU10 n18 a[1] n16 1013 1015 NAND2X0P5BA12TR XU11 n2 a[0] 1013 1015 BUFHX1P4A12TR XU12 n3 n23 1013 1015 INVX0P5BA12TR XU13 n5 n22 1013 1015 INVX0P5BA12TR XU14 n16 n17 n14 n13 n12 1013 1015 OAI22X1A12TR XU15 n14 a[1] 1013 1015 INVX2A12TR XU16 n13 n11 1013 1015 INVX2A12TR XU17 n17 a[2] n11 1013 1015 NAND2X1A12TR XU18 n15 n16 a[1] 1013 1015 XOR2X0P7A12TR XU19 n11 a[3] a[2] 1013 1015 NAND2X1A12TR XU20 n7 n8 n20 1013 1015 AND2X1A12TR XU21 n19 n9 n10 1013 1015 XOR2X0P7A12TR .ENDS

Step 3: Conversion to Spice (continued) Use the emacs script v2lvs-convert.el to convert the spice file and add power and grounds Open the v2lvs-convert.el file in emacs emacs v2lvs-convert.el Press escape and then ‘x’ Type in ‘eval-current-buffer’ and press enter Press ctrl-x and then ctrl-f to open a new file Type in the filename (mod.v2lvs.sp) and press enter Type in ‘convert-v2lvs’ and press enter Press ctrl-x and then ctrl-s to save the file Press ctrl-x and then ctrl-c to exit emacs

Step 3: Conversion to Spice Result Our circuit now has VSS and VDD references to the internal parts. Need to make one more change. The mod circuit does not define VSS or VDD as being accessible from an outside circuit. Add ‘ VDD VSS’ to the line starting with .SUBCKT to make those ports accessible. mod.v2lvs.sp (with VDD,VSS addition) $ Spice netlist generated by v2lvs $ v2007.2_26.18 Wed Jun 13 20:11:48 PDT 2007 .SUBCKT mod a[3] a[2] a[1] a[0] out0[1] out0[0] CLK VDD VSS Xclock_r_REG2_S1 n10 n1 n12 CLK VDD VSS A2DFFQX1A12TR Xclock_r_REG1_S1 n9 CLK n18 VDD VSS DFFQX0P5A12TR Xclock_r_REG0_S1 n21 CLK n15 VDD VSS DFFQNX0P5A12TR Xclock_r_REG3_S1 n8 CLK n2 VDD VSS DFFQX0P5A12TR XU3 n20 n21 n8 n19 VDD VSS OAI2XB1X1A12TR XU4 n23 n20 n8 VDD VSS XOR2X0P7A12TR XU5 n22 n7 n21 VDD VSS XNOR2X0P7A12TR XU6 out0[0] n3 VDD VSS INVX16A12TR XU7 out0[1] n5 VDD VSS INVX16A12TR XU8 n1 a[2] VDD VSS BUFHX1P4A12TR XU9 n12 a[3] VDD VSS INVX0P5BA12TR XU10 n18 a[1] n16 VDD VSS NAND2X0P5BA12TR XU11 n2 a[0] VDD VSS BUFHX1P4A12TR XU12 n3 n23 VDD VSS INVX0P5BA12TR XU13 n5 n22 VDD VSS INVX0P5BA12TR XU14 n16 n17 n14 n13 n12 VDD VSS OAI22X1A12TR XU15 n14 a[1] VDD VSS INVX2A12TR XU16 n13 n11 VDD VSS INVX2A12TR XU17 n17 a[2] n11 VDD VSS NAND2X1A12TR XU18 n15 n16 a[1] VDD VSS XOR2X0P7A12TR XU19 n11 a[3] a[2] VDD VSS NAND2X1A12TR XU20 n7 n8 n20 VDD VSS AND2X1A12TR XU21 n19 n9 n10 VDD VSS XOR2X0P7A12TR .ENDS mod.v2lvs.sp $ Spice netlist generated by v2lvs $ v2007.2_26.18 Wed Jun 13 20:11:48 PDT 2007 .SUBCKT mod a[3] a[2] a[1] a[0] out0[1] out0[0] CLK Xclock_r_REG2_S1 n10 n1 n12 CLK 1013 1015 A2DFFQX1A12TR Xclock_r_REG1_S1 n9 CLK n18 1013 1015 DFFQX0P5A12TR Xclock_r_REG0_S1 n21 CLK n15 1013 1015 DFFQNX0P5A12TR Xclock_r_REG3_S1 n8 CLK n2 1013 1015 DFFQX0P5A12TR XU3 n20 n21 n8 n19 1013 1015 OAI2XB1X1A12TR XU4 n23 n20 n8 1013 1015 XOR2X0P7A12TR XU5 n22 n7 n21 1013 1015 XNOR2X0P7A12TR XU6 out0[0] n3 1013 1015 INVX16A12TR XU7 out0[1] n5 1013 1015 INVX16A12TR XU8 n1 a[2] 1013 1015 BUFHX1P4A12TR XU9 n12 a[3] 1013 1015 INVX0P5BA12TR XU10 n18 a[1] n16 1013 1015 NAND2X0P5BA12TR XU11 n2 a[0] 1013 1015 BUFHX1P4A12TR XU12 n3 n23 1013 1015 INVX0P5BA12TR XU13 n5 n22 1013 1015 INVX0P5BA12TR XU14 n16 n17 n14 n13 n12 1013 1015 OAI22X1A12TR XU15 n14 a[1] 1013 1015 INVX2A12TR XU16 n13 n11 1013 1015 INVX2A12TR XU17 n17 a[2] n11 1013 1015 NAND2X1A12TR XU18 n15 n16 a[1] 1013 1015 XOR2X0P7A12TR XU19 n11 a[3] a[2] 1013 1015 NAND2X1A12TR XU20 n7 n8 n20 1013 1015 AND2X1A12TR XU21 n19 n9 n10 1013 1015 XOR2X0P7A12TR .ENDS mod.v2lvs.sp (after emacs) $ Spice netlist generated by v2lvs $ v2007.2_26.18 Wed Jun 13 20:11:48 PDT 2007 .SUBCKT mod a[3] a[2] a[1] a[0] out0[1] out0[0] CLK Xclock_r_REG2_S1 n10 n1 n12 CLK VDD VSS A2DFFQX1A12TR Xclock_r_REG1_S1 n9 CLK n18 VDD VSS DFFQX0P5A12TR Xclock_r_REG0_S1 n21 CLK n15 VDD VSS DFFQNX0P5A12TR Xclock_r_REG3_S1 n8 CLK n2 VDD VSS DFFQX0P5A12TR XU3 n20 n21 n8 n19 VDD VSS OAI2XB1X1A12TR XU4 n23 n20 n8 VDD VSS XOR2X0P7A12TR XU5 n22 n7 n21 VDD VSS XNOR2X0P7A12TR XU6 out0[0] n3 VDD VSS INVX16A12TR XU7 out0[1] n5 VDD VSS INVX16A12TR XU8 n1 a[2] VDD VSS BUFHX1P4A12TR XU9 n12 a[3] VDD VSS INVX0P5BA12TR XU10 n18 a[1] n16 VDD VSS NAND2X0P5BA12TR XU11 n2 a[0] VDD VSS BUFHX1P4A12TR XU12 n3 n23 VDD VSS INVX0P5BA12TR XU13 n5 n22 VDD VSS INVX0P5BA12TR XU14 n16 n17 n14 n13 n12 VDD VSS OAI22X1A12TR XU15 n14 a[1] VDD VSS INVX2A12TR XU16 n13 n11 VDD VSS INVX2A12TR XU17 n17 a[2] n11 VDD VSS NAND2X1A12TR XU18 n15 n16 a[1] VDD VSS XOR2X0P7A12TR XU19 n11 a[3] a[2] VDD VSS NAND2X1A12TR XU20 n7 n8 n20 VDD VSS AND2X1A12TR XU21 n19 n9 n10 VDD VSS XOR2X0P7A12TR .ENDS

Spice File Simulation We now have the a spice file of our verilog circuit Now we need a control file for simulation Simpler to do it without the micron package models at first Hard to program from scratch without example

Control Files .include and .lib tell the simulator what files to use. mod.wop.sp SPICE simulation of our simple inverter * SPICE simulation of our simple inverter * include our circuit .include 'mod.v2lvs.sp' * include the library .include '/home/micron/design/65nm/data/cmos10sfrvt_a12.cdl' * include the transistor models .lib '/home/micron/design/65nm/data/skew.file' stats .include '/home/micron/design/65nm/data/fixed_corner' .include '/home/micron/design/65nm/data/hspice_example.param' .lib '/home/micron/design/65nm/data/lib.models.10sf' 10sf_models **.include '/home/micron/design/65nm/data/nfet.inc' **.include '/home/micron/design/65nm/data/pfet.inc' *** define usage of the subcircuits x1 DIE_DQ3 DIE_DQ2 DIE_DQ1 DIE_DQ0 DIE_DQ5 DIE_DQ4 DIE_DQ6 pwr1 gnd mod * ".option post" generates the outputs for cscope .option acct=1 post *Give initial Voltage and ground powers .nodeset v(pwr1) = 1.2 v(gnd) = 0.0 *Give Initial signal voltages .nodeset v(DIE_DQ0) = 1.2 v(DIE_DQ2) = 1.2 v(DIE_DQ4) = 1.2 + v(DIE_DQ6) = 1.2 * set up our power and ground sources VCC1 pwr1 0 DC 1.2 VSS1 gnd 0 DC 0.0 (continued on next slide) .include and .lib tell the simulator what files to use. We include our mod.v2lvs.sp which contains our circuit Instantiates and defines use of sub-circuits (more on this later) Makes the simulator generate waveform outputs Defines initial voltages (helps hsimplus and hspice) Defines the voltage and ground pins

Control Files (continued) mod.wop.sp (continued) * define input waves for first gate. * these are switching simultaneously. * PULSE commands are initial-voltage pulse-voltage, time-offset, * rise-time fall-time high-delay cycle-time VA3 DIE_DQ3 0 PULSE(0 1.2 0p 100p 100p 10000p 20000p) VA2 DIE_DQ2 0 PULSE(0 1.2 2500p 100p 100p 10000p 20000p) VA1 DIE_DQ1 0 PULSE(0 1.2 5000p 100p 100p 10000p 20000p) VA0 DIE_DQ0 0 PULSE(0 1.2 7500p 100p 100p 10000p 20000p) VA6 DIE_DQ6 0 PULSE(0 1.2 0p 100p 100p 1000p 2000p) .save type=nodeset level=all *** This lowers precision - 1 is default (up to 4) .param hsimparprecision = 0 * run a transitent analysis for two clock cycles .TRAN 1p 40000p START=0ps * plot transient voltages .PLOT TRAN V(DIE_DQ0) V(0) (0,1.2) .PLOT TRAN V(DIE_DQ1) V(0) (0,1.2) .PLOT TRAN V(DIE_DQ2) V(0) (0,1.2) .PLOT TRAN V(DIE_DQ3) V(0) (0,1.2) .PLOT TRAN V(DIE_DQ4) V(0) (0,1.2) .PLOT TRAN V(DIE_DQ5) V(0) (0,1.2) .PLOT TRAN V(DIE_DQ6) V(0) (0,1.2) .PLOT TRAN V(pwr1) V(0) (0,1.2) .PLOT TRAN V(gnd) V(0) (0,1.2) * measure the power .MEAS rmsen rms I(VCC) from = 0ps to 40000ps .end Define inputs for the circuits Here we are doing a 10000ps pulse with various offsets for DIE_DQ0-DIE_DQ3 DIE_DQ6 here is a clock signal Sets hsim’s precision factor. (lower is slower) Instructs the simulator to simulate for a specific amount of time. (40000 pico-seconds) Instructs the simulator to plot the output waveforms of signals from 0 to 1.2 volts Measures the average (rms) power of VCC from 0ps to 40000ps

Control Files (continued) *** define usage of the subcircuits x1 DIE_DQ3 DIE_DQ2 DIE_DQ1 DIE_DQ0 DIE_DQ5 DIE_DQ4 DIE_DQ6 pwr1 gnd mod Where do we get all of this info x# at the start gives it a unique identifier for this instantiation of this circuit mod at the end tells us what circuit it is The rest of them are arbitrary names chosen by whatever naming scheme you see fit. So what should I put here and how many of them should I put? First look at the spice file .SUBCKT mod a[3] a[2] a[1] a[0] out0[1] out0[0] CLK VDD VSS x1 DIE_DQ3 DIE_DQ2 DIE_DQ1 DIE_DQ0 DIE_DQ5 DIE_DQ4 DIE_DQ6 pwr1 gnd mod Remember these names have been arbitrary chosen

Control Files (continued) To connect circuits Set the name of the outputs of one to be the inputs of another In this example the outputs of mod circuit x1 used as some of the inputs to x2 x1 DIE_DQ3 DIE_DQ2 DIE_DQ1 DIE_DQ0 DIE_DQ5 DIE_DQ4 DIE_DQ6 pwr1 gnd mod x2 DIE_DQ7 DIE_DQ8 DIE_DQ5 DIE_DQ4 DIE_DQ9 DIE_DQ10 DIE_DQ6 pwr1 gnd mod

Control Files (continued) The same principals apply to using the micron control files Only much more complicated Use example code

Micron Single Layer Model Add the following to the control file *** include the single layer package .include 'v48c_x8_production_11704_DQs_pkg.inc' ***using the single layer power delivery package x0 DIE_DQ0_PKG001 DIE_DQ1_PKG001 DIE_DQ2_PKG001 DIE_DQ3_PKG001 + DIE_DQ4_PKG001 DIE_DQ5_PKG001 DIE_DQ6_PKG001 DIE_DQ7_PKG001 DIE_DQS_PKG001 + DIE_DQS#_PKG001 DIE_DM_PKG001 DIE_TDQS#_PKG001 gnd gnd gnd gnd gnd gnd + gnd gnd gnd gnd gnd gnd pwrQ pwrQ pwrQ1 pwrQ2 pwrQ3 pwrQ3 pwrQ3 gnd gnd + gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd gnd pwr pwr pwr1 pwr2 pwr3 pwr + pwr pwr pwr pwr pwr pwr pwr BGA_VSSA_PKG001 BGA_VSSB_PKG001 BGA_VSSC_PKG001 + BGA_VSSD_PKG001 BGA_VSSE_PKG001 BGA_VSSF_PKG001 BGA_VCCA_PKG001 + BGA_VCCB_PKG001 BGA_VCCC_PKG001 BGA_VCCD_PKG001 BGA_VSSQ1_PKG001 + BGA_VSSQ2_PKG001 BGA_VSSQ3_PKG001 BGA_VSSQ4_PKG001 BGA_VSSQ_PKG001 + BGA_VCCQ2_PKG001 BGA_VCCQ3_PKG001 BGA_VCCQ_PKG001 BGA_VCCQ1_PKG001 + BGA_VSS1_PKG001 BGA_VSS2_PKG001 BGA_VSS3_PKG001 BGA_VSS4_PKG001 + BGA_VSS_PKG001 BGA_VCC3_PKG001 BGA_VCC_PKG001 BGA_VCC1_PKG001 + BGA_VCC2_PKG001 BGA_TDQS#_PKG001 BGA_DM_PKG001 BGA_DQS#_PKG001 + BGA_DQS_PKG001 BGA_DQ7_PKG001 BGA_DQ6_PKG001 BGA_DQ5_PKG001 BGA_DQ4_PKG001 + BGA_DQ3_PKG001 BGA_DQ2_PKG001 BGA_DQ1_PKG001 BGA_DQ0_PKG001 + v48c-11704-dq-str-pwrs-unmer_wrapper

Micron 2 Layer Model Add the following to the control file *** include the 2 layer package .include 'v48c_x8_2metal_layer_0523_DQs_pkg.inc' ***using the 2 layer power delivery package x0 DIE_DQ0_PKG001 DIE_DQ1_PKG001 DIE_DQ2_PKG001 DIE_DQ3_PKG001 + DIE_DQ4_PKG001 DIE_DQ5_PKG001 DIE_DQ6_PKG001 DIE_DQ7_PKG001 DIE_DQS_PKG001 + DIE_DQS#_PKG001 DIE_DM_PKG001 DIE_TDQS#_PKG001 gnd gnd gnd gnd gnd gnd gnd + gnd gnd gnd gnd gnd pwrQ1 pwrQ1 pwrQ pwrQ pwrQ pwrQ pwrQ1 gnd gnd gnd gnd + gnd gnd gnd gnd gnd gnd gnd gnd gnd pwr pwr pwr pwr pwr pwr pwr1 pwr pwr + pwr pwr pwr pwr BGA_VSSQ1A_PKG001 BGA_VSSQ1B_PKG001 BGA_VSSQC_PKG001 + BGA_VCCQ_PKG001 BGA_VCCQ1_PKG001 BGA_VSSA_PKG001 BGA_VSSB_PKG001 + BGA_VSSC_PKG001 BGA_VSSD_PKG001 BGA_VSSE_PKG001 BGA_VSSF_PKG001 + BGA_VSSG_PKG001 BGA_VSSH_PKG001 BGA_VSSI_PKG001 BGA_VCCA_PKG001 + BGA_VCCB_PKG001 BGA_VCCC_PKG001 BGA_VCCD_PKG001 BGA_VCCE_PKG001 + BGA_VCCF_PKG001 BGA_VSSQ1_PKG001 BGA_VSSQ_PKG001 BGA_VCCQ3_PKG001 + BGA_VCCQ2_PKG001 BGA_VSS1_PKG001 BGA_VSS_PKG001 BGA_VCC1_PKG001 + BGA_VCC_PKG001 BGA_TDQS#_PKG001 BGA_DM_PKG001 BGA_DQS#_PKG001 + BGA_DQS_PKG001 BGA_DQ7_PKG001 BGA_DQ6_PKG001 BGA_DQ5_PKG001 + BGA_DQ4_PKG001 BGA_DQ3_PKG001 BGA_DQ2_PKG001 BGA_DQ1_PKG001 BGA_DQ0_PKG001 + sol_v48c_523_dq_dm_str_pwr_unmergedSnks_wrapper

Connecting Circuits to Packages To connect the mod circuit to the package we use the following format Give mod’s inputs the same name as the DIE side inputs of the package DIE_DQ#_PCG001 BGA_DQ#_PKG001 MOD Input Stimulus (CLK,RESET,etc)

Connecting Circuits to Packages (continued) To connect the two mod circuits internally in a single package we use the following format Give mod’s inputs the same name as the DIE side inputs of the package and /or inputs from the other mod circuit DIE_DQ#_PCG001 BGA_DQ#_PKG001 MOD x1 Input Stimulus (CLK,RESET,etc) MOD x2

Connecting Circuits to Packages (continued) To connect the 2 mod circuits that are in different packages we do the following Give mod’s inputs the same name as the DIE side inputs of the package DIE_DQ#_PCG001 BGA_DQ#_PKG001 MOD x1 DIE_DQ#_PCG002 BGA_DQ#_PKG002 MOD x2 Input Stimulus (CLK,RESET,etc)

Simulation in Hspice and Hsimplus The commands to simulate have similar formats hspice -i mod.singlelayer.control -o mod.singlelayer.hspice.out syn-hsimplus –I mod.singlelayer.control -o mod.singlelayer.hsimplus.out These commands may take a while. (especially hspice) When finished we should be able to open the results and view waveforms in c-scope Command is syn-cscope Modelsim output files are of in the .fsdb format

C-Scope output