1 Effective Current Source Model (ECSM) Noise Specification™ Version 1.1 16 February 2015 Published by Cadence Design Systems 2655 Seely Avenue San Jose, CA 95134 Copyright © 2015 by Cadence Design Systems and Si2, Inc. All Rights Reserved. This document is an update provided by Cadence to the Si2 Effective Current Source Model (ECSM) Noise Specification, version 1.0. The authors, editor, publisher, and contributors specifically disclaim warranties of any kind whether express or implied, with regard to any material contained herein, including, without limitation, any warranties of title, non-infringement, merchantability, or fitness for a particular purpose. In no event shall the authors, editors, publisher, or contributors, be responsible or liable for any loss of profit or damages, direct or indirect, including but not limited to, special, incidental, consequential or any other damages, in connection with or arising out of any use of this material. Where manufacturer or vendor designations claimed as trademarks are used herein, and the publisher or authors were aware of the trademark claim, such designations have been printed in initial caps or all caps. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 2 Table of Contents 1 Introduction ........................................................................................................................... 5 2 ECSM Noise Extensions ...................................................................................................... 7 2.1 Library-Level Attribute ..................................................................................................... 7 2.1.1 Version ..................................................................................................................... 7 2.2 ViVo Current Waveform ................................................................................................ 10 2.2.1 Overview................................................................................................................. 10 2.2.2 Characterization for Vivo current model................................................................... 11 2.2.3 ecsm_vivo_table_template group............................................................................ 13 2.2.4 ecsm_vivo_current_waveform group ...................................................................... 14 2.2.5 Syntax .................................................................................................................... 16 2.2.6 Constraints ............................................................................................................. 18 2.2.7 Example usage ....................................................................................................... 18 2.3 Slew Propagation .......................................................................................................... 20 2.3.1 ecsm_itt_template group ......................................................................................... 21 2.3.2 ecsm_internal_transition group ............................................................................... 23 2.3.3 Constraints ............................................................................................................. 26 2.3.4 Example usage ....................................................................................................... 27 2.4 Additional Noise Analysis Constructs ............................................................................ 30 2.4.1 Pin group attributes ................................................................................................. 30 2.4.2 Syntax .................................................................................................................... 31 2.4.3 Constraints ............................................................................................................. 32 2.4.4 Example usage ....................................................................................................... 32 3 Example.............................................................................................................................. 34 Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 3 Abstract This specification describes the syntax and semantics for Noise extensions to the Si2 ECSM Timing and Power Specification. These extensions provide a mechanism for passing cell behavior information from a characterization system to design tools, enabling them to perform accurate noise analysis. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 4 Document Conventions The monospaced Courier font is used throughout to indicate Liberty™ or ECSM syntax. • “regular” face are keywords that must be used as written • "bold" face highlights ECSM extensions when included with standard Liberty™ syntax • "italic" face identifies value data that must be assigned for each statement instance as listed in Table I-1. Syntax elements appearing in square brackets are optional, required only if certain specified conditions exist. Table I-1 Syntax Representations for Instance-Specific Data Representation float int templateName connectionName Semantics A floating point value An integer value The name of an ecsm_itt_template defined in the library The name of a power rail defined in the power supply group pinName The group name of a pin statement defined in the library transitionType rise or fall Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 5 1 Introduction 1.1 Purpose This specification describes the ECSM (Effective Current Source Model) extensions to Synopsys’ Liberty™ format required to describe library data for noise analysis. 1.2 ECSM requirements ECSM noise extensions requirements are: • They must be compatible with and resemble existing ECSM constructs and Liberty™ formats. • Updates to existing characterization tools to create the additional data needed for ECSM should be quite minor. • They must use the same context as the equivalent Liberty™ construct. For example, units must be consistent. If an extension uses a current value and the current unit is defined as 1 milliampere, the values placed in the attribute must be in milliamperes. • They should be easily extracted by and not cause any change in behavior in any nonECSM enabled tool that reads the Liberty™ format including tools that use compiled library files. 1.3 Overview The models required for noise analysis are similar to the models used for timing analysis, but there are some differences. Noise analysis typically consists of two different types of calculations: the effect of noise on delay, and functional or “glitch” noise. Noise on delay analysis requires an accurate model of the driving stage of each gate. Glitch noise analysis requires a way to model the effective holding resistance of the output stage of the cell, while the “victim” driver is held at either a logic 0 or 1 value. Additionally, glitch noise analysis filters out small, insignificant noise according to parameters set on the inputs of the cell. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 6 Due to the above considerations, noise analysis tools may need detailed models for the different Channel Connected Components (CCCs) within a cell. In the context of a cell, a CCC is often referred to as a stage. Accurate modeling of cells with multiple stages requires references to gate level inputs and outputs inside the cell. In this document these inputs and outputs are referred to as internal pins. A simple cell such as a nand gate consists of a single stage and has no internal pins. A buffer composed of two inverters is an example of a cell with multiple CCCs. The first inverter is the first stage and the second inverter is the second or last stage. The output of the first inverter and the input of the second inverter are considered internal pins. Figure 1 below illustrates a single-stage cell and a two-stage cell. Figure 1 Examples of single-stage and two-stage cells VDD Internal Pin VDD First stage Last stage O A B O A VSS 2-Input Nand Gate Single-Stage Gate VSS Buffer Gate Multi-Stage Gate In cells composed of more than two CCCs, only the first and last stages are modeled. ECSM noise extensions introduced in this document model slew propagation, arc current, tolerance for Vdd and Vss, output pin capacitance and holding resistance. Several of the models rely upon the concept of CCCs. ECSM noise extensions do not support modeling of glitch noise propagation through logic gates. Noise propagation can be supported by SPICE models on the side. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 7 2 ECSM Noise Extensions 2.1 Library-Level Attribute 2.1.1 Version A simple attribute enables identification of the revision of the ECSM specification to which the noise constructs in the enclosing library are compliant. For example, 1.0 is the current ECSM noise version identifier. Each new release of the ECSM noise specification shall increment at least the minor integer. At some arbitrary point, typically based on the accumulated magnitude of changes, the major integer will be incremented and the minor integer reset to zero. 2.1.1.1 Syntax The Liberty extension syntax to create the version attribute is as follows: define( ecsm_noise_version, library, float ); A version statement instance is included using the following form ecsm_noise_version : int.int ; The first int specifies the major version identifier, and the second, the minor revision identifier. 2.1.1.2 Constraints • The ecsm_noise_version must be defined in a library group. • The value of this attribute is a floating point number that shall match the version identifier of a published ECSM noise specification. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 8 • ECSM noise syntax and semantics are guaranteed to be backward compatible across all version identifier changes. Hence, a tool should be able to process any ECSM noise constructs with a version identifier earlier than the one(s) the tool was written to process. • ECSM noise semantics are not guaranteed to be forward compatible across any major or minor version identifier changes. A tool should not attempt to process ECSM with a version identifier greater than those for which the tool was written. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 9 2.1.1.3 Example Use library (lib1) { … define( ecsm_noise_version, library, float ); ecsm_noise_version : 1.0 ; … } Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 10 2.2 ViVo Current Waveform 2.2.1 Overview Each cell in the library needs to be pre-characterized for a set of DC current models that capture the effective I-V characteristics for the first and last stage CCCs of the cell. Each current model is represented by a ViVo (voltage in, voltage out) waveform on an input or output pin of a cell. Figure 1: Vivo Model Capturing the full behavior of these CCCs also requires an effective capacitance between input and output pins (Miller effect), and an effective ground capacitance on the output pin. These capacitances are found through a series of transient simulations. An efficient 2-D lookup table is used to store values of I(Vi, Vo). Since the current table from ViVo is a function of instantaneous voltages on input and output, and not dependent on transition history, it is generated through a series of DC simulations Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 11 using SPICE. In single stage cells, the waveforms model the arc current between the primary input and the primary output and are presented only on the output pin. In multiple stage cells the waveforms are defined for both input pins and output pins with an internal pin identified as the opposite end of each arc. 2.2.2 Characterization for Vivo current model 1. Voltage sources Vi and Vo are connected to the input pin and the output pin of the stage 2. Side inputs are held such that to produce the transition in minimum (min) or maximum (max) time 3. Or as AAE supports multiple arcs with when conditions, this can be extended to do all side-input sensitizations, 4. The voltage sources are DC swept and current through Vo is measured to produce the I(Vi, Vo) data 5. make_cdb characterizes at 10 voltages in steps of VDD/9 (0, vdd/9, 2vdd/9……, vdd). This choice of step has come from experiments which show that closer steps do not improve accuracy significantly 6. Referring to equation in Fig1, second and third term are zero, so the measured current becomes the first term. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 12 Figure 2 : vivo DC current table plot 7. For measuring load_cap, a transient simulation is done with a 10%(R) or 90%(F) vdd bias at the input, the output is swept with a fast slew nominal slew dependent on the process node (around 50ps/100ps) 8. Current through Vo is measured. Referring to equation in Fig1, Since dVi/dt=0, Imeas – I(Vi,Vo) is (Cg+Cm).dVo/dt 9. Cpin = Cg+Cm is found by integrating this current in the middle 1/3 part of the switching wave. This becomes the ecsm_loadcap. 10. Measurement of Miller Cap 11. Cm is found by putting a fast (at the technology slew, maybe around 50ps/100ps) switching wave, with swing on either side of the bias, at input 12. Output still has the same voltage source as for load_cap 13. At the middle (roughly middle 20%, 30% of the swing) of the transition on the output, measure the current through the Vo 14. Component of current coming through Cm is found by subtracting the current at the middle during the simulation for Cpin (in #6 above). 15. Other terms of the equation in Fig 1 cancel out and Cm = (miller_mid_current - mid_cur) * ramp_duration/ ramp_volt_swing Pull-up pulldown tie cells will not have vivo models. Characterization Tool can do the same as done in CCS-n for these cases. Same applies for tri-state of nonswitching vector. Simultaneous input switching (enable of passgate): should be handled by tying them together and apply same stimulus at the common point. If single input switching does not provide valid sensitization, multi-input switching is essential. For others, characterization tool should do what is done for CCS-noise. Multi-rail cells should be handled by applying relevant voltage s on various rails. For accurate characterization, All RC parasitics needs to be included for simulation, including those on supply networks. RC-reduction is allowed. E.g. if it is the case, high resistance on power nets inside the cell needs to be modeled (even if reduced). Pincaps of the second stage should be added to total output parasitics and included into output capacitance of the model. Probe point selection (whether its closer end or the farther) will not matter much, assuming output load is not very resistive. 2.2.2.1 ViVo Current Waveforms on Input Pins In the absence of noise, the delay of a stage is measured from the switching threshold at the input pin of the driving cell to the input pin of the receiving cell. In the presence of noise, non-monotonic waveforms are often seen at the input pin of the receiving cell. It is difficult to make robust delay measurements on such waveforms. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 13 The switching waveform may cross the switching threshold multiple times, and small changes in the circuit may result in delay measurements that are much shorter or longer than expected. The measurement can be made much more robust by measuring the change of delay at the output of the first stage of the receiving cell. ViVo waveforms supplied on input pins facilitate this measurement. 2.2.2.2 ViVo Current Waveforms on Output Pins ViVo current waveforms on output pins model victim driver behavior for glitch and noise- on-delay calculations. 2.2.3 ecsm_vivo_table_template group This template provides the default table for the ecsm_vivo_current_waveform group. The name of the template is the name to which the ecsm_vivo_current_waveform group will refer when it is instantiated. The template is defined either at the library or the cell level. If it is defined in both places, the cell-level definition takes precedence. Many pins may use the same ViVo current waveform. This template allows a single waveform definition to be shared among many pins by storing the table values in addition to the indexes. The ecsm_vivo_table_template group contains the following attributes. variable _1 variable _2 index_1 index_2 values 2.2.3.1 variable_1 and variable_2 The variable_1 and variable_2 attributes describe the indexes for the waveform table. The only valid value for variable_1 is input_voltage and the only valid value for variable_2 is output_voltage. 2.2.3.2 index_1 and index_2 Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 14 The index_1 and index_2 attributes are strings that define a numeric list representing input and output voltages respectively. The format of each string is a series of floating-point numbers separated by commas. These attributes are required in the ecsm_vivo_table_template group and can be overridden in the ecsm_vivo_current_waveform group. 2.2.3.3 values The optional values attribute is a string representing the current values of the waveform. The format of the string is a series of floating-point numbers separated by commas. 2.2.4 ecsm_vivo_current_waveform group The ecsm_vivo_current_waveform group uses the ecsm_vivo_table_template group to save data entry since the indexes and current values could be the same for many cells and pins. The name argument of ecsm_vivo_current_waveform is the name of the ecsm_vivo_table_template to which it refers. The ecsm_vivo_current_waveform group contains the following attributes. index_1 index_2 values ecsm_loadcap ecsm_millerc ap ecsm_arctype when timing_sense related_pin ecsm_stimuli 2.2.4.1 index_1 and index_2 Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 15 The index_1 and index_2 attributes are strings that define a numeric list of input and output voltages respectively. These attributes are optional and override the indexes in the ecsm_vivo_table_template group. 2.2.4.2 values The optional values attribute is a string that lists the floating-point current values of the waveform. If present, this overrides the values in the ecsm_vivo_table_template group. 2.2.4.3 ecsm_loadcap The ecsm_loadcap attribute is a floating-point number specifying the ground capacitance of the output pin of the arc. 2.2.4.4 ecsm_millercap The ecsm_millercap attribute is a floating-point number specifying the effective capacitance between the pin and the related_pin. 2.2.4.5 ecsm_arctype The optional ecsm_arctype attribute is a string with four valid values: max_rise, max_fall, min_rise, and min_fall. max_rise and max_fall represent the ViVo arcs corresponding to the slow transition of the signal on the output, while min_rise and min_fall are for the fast transition. max_rise and max_fall are used to compute slowdown of the signal, while min_rise and min_fall are used to compute speedup of the signal, for cross talk analysis. For better accuracy, tools supports multiple arcs with when conditions. So instead of ecsm_arctype, when attribute will be used to indicate the various arcs, 2.2.4.6 when Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 16 • The optional when attribute is defined in standard Liberty™ and is interpreted the same way. For best accuracy library must model this for all conditionals ( occurring in timing & hidden power) values. Unconditional group is not needed as conditions would be complete. 2.2.4.7 timing_sense The timing_sense attribute is defined in standard Liberty™ and is interpreted the same way. 2.2.4.8 related_pin The related_pin attribute is a string naming the pin that is the other end of the arc described by this waveform. In single stage cells, the name of the related_pin is a primary input. In multiple stage cells, when the ViVo current waveform is present on an input pin, the related_pin is an output of the first stage CCC; otherwise when the ViVo current waveform is present on an output pin, the related_pin is an input to the last stage CCC. This attribute is defined in standard Liberty™, but is interpreted differently since related_pin is an internal pin rather than a primary input. 2.2.4.9 ecsm_stimuli The ecsm_stimuli attribute is a string, and is reserved for future use. It is intended to represent the side input switching condition used for characterization. 2.2.5 Syntax The groups and attributes for modeling ViVo current waveforms are declared as follows: define_group ( ecsm_vivo_table_template, library ); define_group ( ecsm_vivo_table_template, cell ); define ( variable_1, ecsm_vivo_table_template, string ); define ( variable_2, ecsm_vivo_table_template, string ); Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 17 define ( index_1, ecsm_vivo_table_template string ); define ( index_2, ecsm_vivo_table_template, string ); define ( values, ecsm_vivo_table_template, string); define_group ( ecsm_vivo_current_waveform, pin ); define ( ecsm_loadcap, ecsm_vivo_current_waveform, float ); define ( ecsm_millercap, ecsm_vivo_current_waveform, float ); define ( ecsm_arctype, ecsm_vivo_current_waveform, string ); define ( when, ecsm_vivo_current_waveform, string ); define ( timing_sense, define ( related_pin, ecsm_vivo_current_waveform, string ); define ( ecsm_stimuli, ecsm_vivo_current_waveform, string );/*future*/ ecsm_vivo_current_waveform, string ); define ( index_1, ecsm_vivo_current_waveform, string ); define ( index_2, ecsm_vivo_current_waveform, string ); define ( values, ecsm_vivo_current_waveform, string ); The ecsm_vivo_table_template is instantiated at the library or cell level as follows: ecsm_vivo_table_template (ecsm_vivo_table_templateName) { variable_1 : input_voltage; variable_2 : output_voltage; index_1 : "float0, …, floati"; index_2 : "float0, …, floatj"; values : "float0, …, floati*j"; } ecsm_vivo_current_waveform is instantiated at the pin level as follows: ecsm_vivo_current_waveform (ecsm_vivo_table_templateName) { ecsm_loadcap : float ; ecsm_millercap : float ; ecsm_arctype timing_sense related_pin ecsm_stimuli : string; : string ; : “pinName” ; : string ; index_1 : "float0, …, floati"; Cadence ECSM Noise Specification /* optional */ Copyright ©2015. All rights reserved. 18 /* optional */ index_2 : "float0, …, floatj"; values : "float0, …, floati*j"; /* optional */ } 2.2.6 Constraints • Voltage, current and capacitance units are assumed to be those in effect at that point in the library. • When both when and ecsm_arctype are absent, there is a single vivo_current_waveform table for a pair of pins, and for all side input conditions/states, the I-V characteristics are same for that pair of pins. • When when is absent, ecsm_arctype signifies the slow or fast transitions of the signal on the output. The ViVo current waveform tables corresponding to min_rise/min_fall/max_rise/max_fall are derived from all possible side input conditions/states. • When ecsm_arctype is absent, the ViVo current waveform tables correspond to the side input condition/state specified through when. • • When both ecsm_arctype and when are present, the slow or fast transitions of the signal on the output correspond to the side input condition/state specified through when. For best accuracy library must model this for all conditionals ( occurring in timing & hidden power) values. Unconditional group is not needed as conditions would be complete. 2.2.7 Example usage ecsm_vivo_table_template(VIVO_TEMPLATE) { variable_1 : input_voltage; variable_2 : output_voltage; index_1 : "0.0, 0.13 ,0.27 ,0.40 ,0.53 ,0.67 ,0.80 ,0.93 ,1.07 ,1.20"; index_2 : "0.0, 0.13 ,0.27 ,0.40 ,0.53 ,0.67 ,0.80 ,0.93 ,1.07 ,1.20"; values : \ "2.815e-05, 2.733e-05, 2.658e-05, 2.569e-05, 2.454e-05, 2.256e-05, 1.922e-05, 1.435e-05, 7.894e-06, -2.249e-07, \ 2.132e-05, 2.066e-05, 2.012e-05, 1.949e-05, 1.874e-05, 1.765e-05, 1.55e-05, 1.187e-05, 6.637e-06, -2.428e-07, \ 1.51e05, 1.45e-05, 1.41e-05, 1.367e-05, 1.317e-05, 1.256e-05, 1.147e-05, 9.121e-06, 5.176e-06, -4.049e-07, \ 9.638e-06, 8.532e-06, 8.174e-06, 7.828e-06, 7.463e-06, 7.058e-06, 6.551e-06, 5.394e-06, 2.799e-06, -1.436e-06, \ 5.141e-06, Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 19 1.984e-06, 1.264e-06, 8.276e-07, 4.478e-07, 8.537e-08, -2.833e-07, -7.469e-07, -2.045e-06, -4.877e-06, \ 1.977e-06, 4.312e-06, -6.424e-06, -7.226e-06, -7.766e-06, -8.198e-06, -8.576e-06, -8.926e-06, -9.392e-06, -1.084e-05, \ 4.469e-07, -8.692e-06, -1.313e-05, -1.483e-05, -1.571e-05, -1.631e-05, -1.679e-05, -1.718e-05, -1.753e-05, -1.811e-05, \ 5.947e-08, -1.134e-05, -1.811e-05, -2.14e-05, -2.291e-05, -2.381e-05, -2.446e-05, -2.496e-05, -2.538e-05, -2.578e-05, \ 5.756e-09, 1.314e-05, -2.186e-05, -2.698e-05, -2.95e-05, -3.086e-05, -3.174e-05, -3.239e-05, -3.29e-05, -3.333e-05, \ 7.783e-10, 1.452e-05, -2.475e-05, -3.148e-05, -3.534e-05, -3.735e-05, -3.854e-05, -3.935e-05, -3.996e-05, -4.046e-05”; } … pin (Y) { … ecsm_vivo_current_waveform(VIVO_TEMPLATE) { related_pin : "nmin"; ecsm_loadcap : 1.83049e-3; ecsm_millercap : 2.09209e-4; timing_sense : negative_unate; ecsm_arctype : min_rise; } } /* pin */ Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 20 2.3 Slew Propagation Figure 3 : Slew propagation for multi-stage cell Vivo models as described earlier are for one CCC. For single stage cells, they suffice to find the output response given the response at input. But for multi-stage cells, the response at the input of the vivo for last stage (node i) is not known. For this, 1D slew propagation tables are characterized to find the slew at i given the response (slew) at in1, in2. So, slew propagation information is used in conjunction with vivo models of output pin to propagate responses through the design. 1. Objective is to find out slew at input of the last CCC 2. Needed only for cells with more than one CCC 3. Input of last CCC will usually be an internal node and so slew is usually independent of load at out. Characterized data is 1-D table as a function on input slew 4. The range of slew will be same as used for transition tables for timing .lib. It should cover complete range of slews 5. In case the slew at input of last stage is depending upon the load eg. Where the node is tapped to form an output, 2D data can be characterized with load being the second axis. Use of slew propagation Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 21 • • • BFS traverse of whole design One-stage cells: – Driver is modeled using Vivo model Multi-stage cells – Last CCC is modeled using Vivo model – Slew propagation table till last CCC The ecsm_internal_transition and ecsm_itt_template groups model slew propagation from an input pin to an internal pin. These groups are not required for cells with only one stage. The internal pin is typically an input pin of the last stage in the cell. The pin-level ecsm_internal_transition group stores slew values in a table and uses a library-level ecsm_itt_template to store default indexes. There are separate ecsm_internal_transition groups for rising and falling transitions. These groups are present only on input pins. 2.3.1 ecsm_itt_template group This library-level group functions exactly the same as a Liberty™ lu_table_template but is required for ECSM noise extensions to ensure correct parsing. The letters “itt” stand for “internal transition table”. The group contains the following attributes: variable_1 variable_2 Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 22 index_1 index_2 2.3.1.1 variable_1 and variable_2 The valid values for variable_1 and variable_2 are input_net_transition and related_out_total_output_net_capacitance respectively. variable_2 is present only when there is a related_output_pin defined in the ecsm_internal_transition groups that reference this lookup table. 2.3.1.2 index_1 and index_2 The index_1 and optional index_2 attributes are strings that list input transition times for the input pin and output net capacitance for a related_output_pin . The format of each string is a series of floating-point numbers separated by commas. The index_2 attribute is used only when there is a related_output_pin present in the ecsm_internal_transition groups that reference this lookup table. 2.3.1.3 Syntax The ecsm_itt_template group and its attributes are declared as follows: define_group ( ecsm_itt_template, library ); define ( variable_1, ecsm_itt_template, string define ( variable_2, ecsm_itt_template, string define ( index_1, ecsm_itt_template, string define ( index_2, ecsm_itt_template, string ); ); ); ); The ecsm_itt_template is instantiated at the library level as follows: ecsm_itt_template ( templateName ) { variable_1 : input_net_transition ; variable_2 : related_out_total_output_net_capacitance ; /* optional */ index_1 : "float0, …, floati" ; index_2 : "float0, …, floatj" ; /* optional */ } Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 23 2.3.2 ecsm_internal_transition group The name argument of the ecsm_internal_transition group refers to the ecsm_itt_template that holds the default values for index_1 and optional index_2. A pin has separate ecsm_internal_transition groups for the rise and fall transitions. The ecsm_internal_transition group contains the following attributes: ecsm_transition_type related_pin related_output_pin timing_sense when index_1 index_2 values 2.3.2.1 ecsm_transition_type The ecsm_transition_type attribute is a string indicating whether the slew values represent a rising or falling transition. Its valid values are rise and fall. 2.3.2.2 related_pin and related_output_pin The related_pin attribute is a string naming an internal pin within the cell that receives a signal propagated from the primary input pin. If the related_pin drives a primary output, a secondary load may be required; in that instance the related_output_pin attribute is assigned a string naming the associated primary output pin. The related_output_pin allows for the internal transition to be specified as a function of the capacitance at the secondary load. These attributes are defined in standard Liberty™, but related_pin is interpreted differently since it is an internal pin rather than a primary input. 2.3.2.3 timing_sense Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 24 The timing_sense attribute is defined in Liberty™. Its possible values are positive_unate, negative_unate and non_unate. This attribute is optional, and its default specification would correspond to non_unate. For now we deal with inverting arcs only. Attributes is reserved for non-inverting CCC which we we model at later point of time. 2.3.2.4 when The optional when attribute is defined in standard Liberty™ and is interpreted the same way. 2.3.2.5 index_1 and index_2 The index_1 attribute represents input transition times, and index_2 represents output net capacitance for a related_output_pin. When present, these override the defaults in the associated ecsm_itt_template. Usually 1D is sufficient with index_1 representing input transition times since there is no load dependence of slew on internal pin. This is true unless the pin is also a tapped output in which case 2D data with load dependence using both indices is needed. 2.3.2.6 values The values attribute is a string representing the slew values propagated to the internal related_pin. The format of the string is a series of floating-point numbers separated by commas. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 25 2.3.2.7 Syntax The ecsm_internal_transition group and its attributes are declared as follows: define_group ( ecsm_internal_transition, pin ); define ( ecsm_transition_type, ecsm_internal_transition, string ); define ( related_pin, ecsm_internal_transition, string ); define ( related_output_pin, ecsm_internal_transition, string ); define ( timing_sense, define ( when, ecsm_internal_transition, ecsm_internal_transition, string string ); ); define ( index_1, define ( index_2, define ( values, ecsm_internal_transition, string ); ecsm_internal_transition, string ); ecsm_internal_transition, string ); The ecsm_internal_transition group is instantiated within a pin group as follows: ecsm_internal_transition ( templateName ) { ecsm_transition_type : transitionType; related_pin : “pinName”; related_output_pin : “pinName”; timing_sense : string ; /* optional */ when Cadence ECSM Noise Specification : string ; /* optional */ Copyright ©2015. All rights reserved. 26 index_1 : "float0, …, floati" ; /* optional */ index_2 : "float0, …, floatj" ; /* optional */ values : "float0, …, floati*j" ; } 2.3.3 Constraints • These groups are required only for cells with multiple stages. Single stage cells do not require internal transition information. • Timing units are assumed to be those in effect at that point in the library. • Slew measurement points are defined in the library section by the Liberty™ constructs slew_lower_threshold_pct_rise, slew_lower_threshold_pct_fall, slew_upper_threshold_pct_fall, and slew_upper_threshold_pct_rise. • These groups are present only on input pins. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 27 2.3.4 Example usage ecsm_itt_template(INTERNAL_TIMING) { variable_1 : input_net_transition; variable_2 : related_out_total_output_net_capacitance; index_1 : "0.05, 0.1"; index_2 : "0.1, 0.4"; } ... Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 28 cell (SAMPLE) { pin (A) { ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : rise; related_pin : "intPin"; related_output_pin : "Y"; values : "0.1, 0.2, 0.3, 0.4"; } ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : fall; related_pin : "intPin"; related_output_pin : "Y"; index_2 : "0.2, 0.3"; values : "0.15, 0.22, 0.37, 0.42"; } } /* pin A */ pin (B) { ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : rise; related_pin : "intPin"; related_output_pin : "Y"; when : "A"; values : "0.11, 0.21, 0.31, 0.41"; } ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : fall; related_pin : "intPin"; related_output_pin : "Y"; when : "A"; index_2 : "0.22, 0.32"; values : "0.153, 0.223, 0.373, 0.423"; } ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : rise; related_pin : "intPin"; related_output_pin : "Y"; when : "!A"; values : "0.12, 0.22, 0.32, 0.42"; Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 29 } ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : fall; related_pin : "intPin"; related_output_pin : "Y"; when : "!A"; index_2 : "0.23, 0.33"; values : "0.154, 0.224, 0.374, 0.424"; } } /* pin B */ } /* cell */ Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 30 2.4 Additional Noise Analysis Constructs 2.4.1 Pin group attributes The following attributes are added at the pin level for ECSM noise modeling. Each is independent of the groups described earlier in this document. ecsm_vdd_level ecsm_vss_level ecsm_vhtolerance ecsm_vltolerance ecsm_noise_cap ecsm_vddres ecsm_gndres 2.4.1.1 ecsm_vdd_level and ecsm_gnd_level The ecsm_vdd_level and ecsm_gnd_level attributes are strings that identify the appropriate power_rail as defined by standard Liberty™ power supply modeling. They are used to specify the signal levels of the power and ground rails. These constructs enable performing noise analysis when there are voltage fluctuations on both power and ground rails. The value of ecsm_vdd_level is the same as the Liberty™ input_signal_level and output_signal_level attributes. ecsm_gnd_level is used the same way, except that it identifies the ground rail instead of the power rail. 2.4.1.2 ecsm_vhtolerance and ecsm_vltolerance The tolerance attributes are absolute floating-point numbers that specify the variation in voltage that can be considered negligible when the signal is either high or low. Voltage values below ecsm_vdd_level-ecsm_vhtolerance when the signal is high, and values above ecsm_gnd_level+ecsm_vltolerance when the signal is low are considered noise. These attributes apply to input and bidirectional pins only. Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 31 Characterization for tolerance can be done in one of the many ways – DC simulation to see when the output starts switching (like a DC transfer curve) – Real simulation with wide noise pulse to check for slightest of noise propagation – Use the vivo simulation to see when the current starts /stops flowing 2.4.1.3 ecsm_noise_cap The ecsm_noise_cap attribute is a floating-point number representing the capacitance on an output pin. Although characterized the same way as the Liberty™ capacitance attribute, noise modeling should use ecsm_noise_cap because if the capacitance attribute is missing, inserting it for the purposes of noise analysis can inadvertently cause the capacitance to be doubled during timing and power analysis. This is to cater to SI engines need of modeling driver as pin cap for say Ctotal computation. Historically .lib models cap only on input, whereas output pin-cap is zero. Ecsm_noise_cap is non-zero even for output pins. Capacitance values for input pins are available from the timing library. 2.4.1.4 ecsm_vddres and ecsm_gndres ecsm_vddres and ecsm_gndres are floating-point numbers representing the resistance of the highest resistive path to the supply and ground through the “on” transistors. These values are obtained by switching on the transistors that give the highest resistance, and are used to model a driver when it is held at Vdd or Gnd. These attributes apply only to output and bidirectional pins. Characterization for holding resistance can be done alongwith vivo tables. • Using V=IR, we can compute R assuming a small bias (25-30%) • vddres = V/I at Vi=0, Vo = 75 or 70% of vdd • gndres = V/I at Vi = vdd, Vo = 25% or 30% vdd 2.4.2 Syntax Pin-level attributes for modeling noise are declared as follows: Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 32 define ( ecsm_vdd_level, pin, string ); define ( ecsm_gnd_level, pin, string ); define ( ecsm_vhtolerance, pin, float ); define ( ecsm_vltolerance, pin, float pin, ); define ( ecsm_noise_cap, float ); define ( ecsm_vddres, pin, float ); define ( ecsm_gndres, pin, float); Pin-level attributes for modeling noise are instantiated at the pin level as follows: ecsm_vdd_level : connectionName ; ecsm_gnd_level : connectionName ; ecsm_vhtolerance : float ; ecsm_vltolerance : float ; ecsm_noise_cap : float ; ecsm_vddres : float ; ecsm_gndres : float ; 2.4.3 Constraints • Voltage, current and capacitance units are assumed to be those in effect at that point in the library. • The value of ecsm_vdd_level must be the same as the corresponding input_signal_level or output_signal_level attribute used for timing and power analysis for the same pin. • The value of ecsm_gnd_level must be consistent with similar Liberty™ constructs. 2.4.4 Example usage pin (A) { direction : input ; ecsm_vdd_level : VDD ; ecsm_gnd_level : VSS ; ecsm_vhtolerance : Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 33 0.12 ; ecsm_vltolerance : 0.12 ; } pin (Y) { direction : output; ecsm_vdd_level ecsm_gnd_level ecsm_noise_cap ecsm_vddres : VDD ; : VSS ; : 1.0 ; : 500.0 ; ecsm_gndres : 500.0; } Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 34 3 Example library(typ) { voltage_unit : "1V"; current_unit : "1mA"; capacitive_load_unit (1,pf); time_unit : "1ns"; input_threshold_pct_rise : 50; input_threshold_pct_fall : 50; output_threshold_pct_rise : 50; output_threshold_pct_fall : 50; slew_lower_threshold_pct_rise : 20; slew_lower_threshold_pct_fall : 20; slew_upper_threshold_pct_rise : 80; slew_upper_threshold_pct_fall : 80; /* all new Liberty™ group extensions are defined here */ define( ecsm_noise_version, library, float ); ecsm_noise_version : 1.0 ; define_group ( ecsm_vivo_current_waveform, pin ); define_group ( ecsm_internal_transition, pin ); define_group ( ecsm_vivo_table_template, library ); define_group ( ecsm_vivo_table_template, cell ); define_group ( ecsm_itt_template, library ); /* all new Liberty™ simple/complex attributes are defined here */ define ( index_1, ecsm_itt_template, string ); define ( index_2, ecsm_itt_template, string ); define ( variable_1, ecsm_itt_template, string ); define ( variable_2, ecsm_itt_template, string ); define ( ecsm_transition_type, ecsm_internal_transition, string ); Cadence ECSM Noise Specification reserved. Copyright ©2015. All rights 35 define ( timing_sense, ecsm_internal_transition, string ); define ( related_pin, ecsm_internal_transition, string ); define ecsm_internal_transition, ( related_output_pin, define ( when, string ); ecsm_internal_transition, string ); define ( index_1, ecsm_internal_transition, string ); define ( index_2, ecsm_internal_transition, string ); define ( values, ecsm_internal_transition, string ); define ( ecsm_vdd_level, pin, string ); define ( ecsm_gnd_level, pin, string ); Cadence ECSM Noise Specification reserved. Copyright ©2015. All rights 36 define ( ecsm_vhtolerance, pin, float ); define ( ecsm_vltolerance, pin, float ); define ( ecsm_noise_cap, pin, float ); define ( ecsm_vddres, pin, float ); define ( ecsm_gndres, pin, float ); define ( ecsm_loadcap, ecsm_vivo_current_waveform, float ); define ( ecsm_millercap, ecsm_vivo_current_waveform, float ); define ( ecsm_arctype, ecsm_vivo_current_waveform, string ); define ( timing_sense, ecsm_vivo_current_waveform, string ); define ( ecsm_stimuli, ecsm_vivo_current_waveform, string ); define ( when, ecsm_vivo_current_waveform, string ); define ( related_pin, ecsm_vivo_current_waveform, string ); define ( variable_1, ecsm_vivo_table_template, string ); define ( variable_2, ecsm_vivo_table_template, string ); define ( index_1, ecsm_vivo_table_template, string ); define ( index_2, ecsm_vivo_table_template, string ); define ( values, ecsm_vivo_table_template, string); define ( index_1, ecsm_vivo_current_waveform, string ); define ( index_2, ecsm_vivo_current_waveform, string ); define ( values, ecsm_vivo_current_waveform, string ); /* standard Liberty™ power supply modeling */ power_supply() { default_power_rail : VDD_RAIL1; power_rail ( VDD_RAIL1, 2.0 ); power_rail ( VDD_RAIL2, 1.2 ); power_rail ( VSS_RAIL, 0.3 ); } /* new Liberty™ template used for ecsm_internal_transition modeling */ ecsm_itt_template(INTERNAL_TIMING) { variable_1 : input_net_transition; index_1 : "0.05, 0.1, 0.2, 0.3, 0.5"; } /* new Liberty™ template used for ecsm_vivo_current_waveform modeling */ Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 37 ecsm_vivo_table_template(VIVO_TEMPLATE) { variable_1 : input_voltage; variable_2 : output_voltage; index_1 : "0.0, 0.13 ,0.27 ,0.40 ,0.53 ,0.67 ,0.80 ,0.93 ,1.07 ,1.20"; index_2 : "0.0, 0.13 ,0.27 ,0.40 ,0.53 ,0.67 ,0.80 ,0.93 ,1.07 ,1.20"; values : \ "2.815e-02, 2.733e-02, 2.658e-02, 2.569e-02, 2.454e-02, 2.256e-02, 1.922e-02, 1.435e-02, 7.894e-03, -2.249e-04, \ 2.132e-02, 2.066e-02, 2.012e-02, 1.949e-02, 1.874e-02, 1.765e-02, 1.55e-02, 1.187e-02, 6.637e-03, -2.428e-04, \ 1.51e-02, 1.45e-02, 1.41e-02, 1.367e-02, 1.317e-02, 1.256e-02, 1.147e-02, 9.121e-03, 5.176e-03, -4.049e-04, \ 9.638e-03, 8.532e-03, 8.174e-03, 7.828e-03, 7.463e-03, 7.058e-03, 6.551e-03, 5.394e-03, 2.799e-03, -1.436e-03, \ Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 38 5.141e-03, 1.984e-03, 1.264e-03, 8.276e-04, 4.478e-04, 8.537e-05, -2.833e-04, -7.469e-04, -2.045e-03, -4.877e-03, \ 1.977e-03, -4.312e-03, -6.424e-03, -7.226e-03, -7.766e-03, -8.198e-03, -8.576e-03, -8.926e-03, -9.392e-03, -1.084e-02, \ 4.469e-04, -8.692e-03, -1.313e-02, -1.483e-02, -1.571e-02, -1.631e-02, -1.679e-02, -1.718e-02, -1.753e-02, -1.811e-02, \ 5.947e-05, -1.134e-02, -1.811e-02, -2.14e-02, -2.291e-02, -2.381e-02, -2.446e-02, -2.496e-02, -2.538e-02, -2.578e-02, \ 5.756e-06, -1.314e-02, -2.186e-02, -2.698e-02, -2.95e-02, -3.086e-02, -3.174e-02, -3.239e-02, -3.29e-02, -3.333e-02, \ 7.783e-7, -1.452e-02, -2.475e-02, -3.148e-02, -3.534e-02, -3.735e-02, -3.854e-02, -3.935e-02, -3.996e-02, -4.046e-02"; } cell (AND2X1) { /* standard Liberty™ power supply modeling */ rail_connection ( VDD1, VDD_RAIL1 ); rail_connection ( VDD2, VDD_RAIL2 ); rail_connection ( VSS, VSS_RAIL ); pin(A) { direction : input; ecsm_vdd_level : VDD_RAIL2; ecsm_gnd_level : VSS_RAIL; ecsm_vhtolerance : 0.37; ecsm_vltolerance : 0.37; } /* pin A */ pin(B) { direction : input; ecsm_vdd_level : VDD_RAIL2; ecsm_gnd_level : VSS_RAIL; ecsm_vhtolerance : 0.37; ecsm_vltolerance : 0.37; ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : rise; related_pin : "nmin"; /* internal pin reference Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 39 */ timing_sense : negative_unate; when : "A"; values : "8.098e-2, 1.009e-1, 1.377e-1, 1.658e-1, 2.128e-1"; } /* end ecsm_internal_transition */ ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : fall; related_pin : "nmin"; /* internal pin reference */ timing_sense : negative_unate; when : "A"; values : "8.098e-2, 1.009e-1, 1.377e-1, 1.658e-1, 2.128e-1"; } /* end ecsm_internal_transition */ ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : rise; related_pin : "nmin"; /* internal pin reference */ timing_sense : negative_unate; when : "!A"; Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 40 values : "8.198e-2, 1.109e-1, 1.477e-1, 1.758e-1, 2.228e-1"; } /* end ecsm_internal_transition */ ecsm_internal_transition (INTERNAL_TIMING) { ecsm_transition_type : fall; related_pin : "nmin"; /* internal pin reference */ timing_sense : negative_unate; when : "!A"; values : "8.198e-2, 1.109e-1, 1.477e-1, 1.758e-1, 2.228e-1"; } /* end ecsm_internal_transition */ } /* pin B */ pin(Y) { direction : output; ecsm_vdd_level : VDD_RAIL2; ecsm_gnd_level : VSS_RAIL; ecsm_noise_cap : 1.05e-3 ; ecsm_vddres : 560.0e-3; ecsm_gndres : 660.0e-3; ecsm_vivo_current_waveform(VIVO_TEMPLATE) { related_pin : "nmin"; ecsm_loadcap : 1.83049e-3; ecsm_millercap : 2.09209e-4; timing_sense : negative_unate; ecsm_arctype : max_rise; } ecsm_vivo_current_waveform(VIVO_TEMPLATE) { related_pin : "nmin"; ecsm_loadcap : 1.83049e-3; ecsm_millercap : 2.09209e-4; timing_sense : negative_unate; ecsm_arctype : max_fall; } ecsm_vivo_current_waveform(VIVO_TEMPLATE) { related_pin : "nmin"; ecsm_loadcap : 1.83049e-3; ecsm_millercap : 2.09209e-4; timing_sense : negative_unate; ecsm_arctype : min_rise; } ecsm_vivo_current_waveform(VIVO_TEMPLATE) { related_pin : "nmin"; ecsm_loadcap : 1.83049e-3; ecsm_millercap : 2.09209e-4; timing_sense : negative_unate; ecsm_arctype : min_fall; Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 41 } /* ecsm_vivo_current_waveform */ } /* pin Y */ } /* cell AND2X1 */ } /* library typ */ Cadence ECSM Noise Specification Copyright ©2015. All rights reserved. 42 4 Normative References This specification is compatible with and must be conform to the semantics of the following published works. [1] Liberty User Guide, Vol. 1, Version 2005.10. Synopsys, Inc., 2005. Available ( http://www.synopsys.com/partners/tapin/lib_info.html) [2] Liberty User Guide, Vol. 2, Version 2005.10. Synopsys, Inc., 2005. Available (http://www.synopsys.com/partners/tapin/lib_info.html ) [3] liberty_parse v2.0. Synopsys, Inc., 2005 Available (http://www.synopsys.com/partners/tapin/lib_info.html ) [4] ECSM checker. Cadence Design Systems, Inc., 2005. [5] Liberty Reference Manual, Version 2005.10. Synopsys, Available (http://www.synopsys.com/partners/tapin/lib_info.html ) Inc., 2005. [6] Si2 Effective Current Source Model (ECSM) Timing and Power Specification, Version 2.1. Si2, Inc., 2006. Available ( http://openeda.si2.org/project/showfiles.php?group_id=34) Cadence ECSM Noise Specification Copyright ©2015. All rights reserved.