23.02.2013 Views

EPIC Tools Reference Guide

EPIC Tools Reference Guide

EPIC Tools Reference Guide

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>EPIC</strong> <strong>Tools</strong><br />

<strong>Reference</strong> <strong>Guide</strong><br />

Release 5.4, January 2000<br />

Comments?<br />

E-mail your comments about Synopsys<br />

documentation to doc@synopsys.com


Copyright Notice and Proprietary Information<br />

Copyright © 2000 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary<br />

information that is the property of Synopsys, Inc. The software and documentation are furnished under a license agreement and may<br />

be used or copied only in accordance with the terms of the license agreement. No part of the software and documentation may be<br />

reproduced, transmitted, or translated, in any form or by any means, electronic, mechanical, manual, optical, or otherwise, without<br />

prior written permission of Synopsys, Inc., or as expressly provided by the license agreement.<br />

Right to Copy Documentation<br />

The license agreement with Synopsys permits licensee to make copies of the documentation for its internal use only. Each copy shall<br />

include all copyrights, trademarks, service marks, and proprietary rights notices, if any. Licensee must assign sequential numbers to<br />

all copies. These copies shall contain the following legend on the cover page:<br />

“This document is duplicated with the permission of Synopsys, Inc., for the exclusive use of<br />

__________________________________________ and its employees. This is copy number __________.”<br />

Destination Control Statement<br />

All technical data contained in this publication is subject to the export control laws of the United States of America. Disclosure to<br />

nationals of other countries contrary to United States law is prohibited. It is the reader’s responsibility to determine the applicable<br />

regulations and to comply with them.<br />

Disclaimer<br />

SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO<br />

THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR<br />

A PARTICULAR PURPOSE.<br />

Registered Trademarks<br />

Synopsys, the Synopsys logo, AMPS, Arcadia, CMOS-CBA, COSSAP, Cyclone, DelayMill, DesignPower, DesignSource, DesignWare,<br />

dont_use, Eagle Design Automation, Eaglei, <strong>EPIC</strong>, ExpressModel, Formality, in-Sync, Logic Automation, Logic Modeling, Memory<br />

Architect, ModelAccess, Model<strong>Tools</strong>, PathBlazer, PathMill, PowerArc, PowerMill, PrimeTime, RailMill, SmartLicense, SmartModel,<br />

SmartModels, SNUG, SOLV-IT!, SolvNET, Stream Driven Simulator, Synthetic Designs, TestBench Manager, and TimeMill are<br />

registered trademarks of Synopsys, Inc.<br />

Trademarks<br />

ACE, Behavioral Compiler, BOA, BRT, CBA, CBAII, CBA Design System, CBA-Frame, Cedar, Chip Architect, Chronologic, CoreMill,<br />

DAVIS, DC Expert, DC Expert Plus, DC Professional, DC Ultra, DC Ultra Plus, Design Advisor, Design Analyzer, DESIGN (ARROWS),<br />

Design Compiler, DesignTime, DesignWare Developer, Direct RTL, Direct Silicon Access, dont_touch, dont_touch_network, DW 8051,<br />

DWPCI, Eagle, EagleV, ECL Compiler, ECO Compiler, Falcon Interfaces, Floorplan Manager, Foundation, FoundryModel, FPGA<br />

Compiler, FPGA Compiler II, FPGA Express, Frame Compiler, Fridge, General Purpose Post-Processor, GPP, HDL Advisor, HDL<br />

Compiler, Integrator, Interactive Waveform Viewer, Liberty, Library Compiler, Logic Model, MAX, ModelSource, Module Compiler, MS-<br />

3200, MS-3400, Nanometer Design Experts, Nanometer IC Design, Nanometer Ready, Odyssey, PowerCODE, PowerGate, Power<br />

Compiler, ProFPGA, ProMA, Protocol Compiler, RMM, RoadRunner, RTL Analyzer, Schematic Compiler, Shadow Debugger, Silicon<br />

Architects, SmartModel Library, Source-Level Design, SWIFT, Synopsys Graphical Environment, Synopsys ModelFactory, Test<br />

Compiler, Test Compiler Plus, Test Manager, TestGen, TestSim, TetraMAX, TimeTracker, Timing Annotator, Trace-On-Demand, VCS,<br />

VCS Express, VCSi, VERA, VHDL Compiler, VHDL System Simulator, Visualyze, VMC, and VSS are trademarks of Synopsys, Inc.<br />

Service Marks<br />

TAP-in is a service mark of Synopsys, Inc.<br />

All other product or company names may be trademarks of their respective owners.<br />

Printed in the U.S.A.<br />

Document Order Number: 32669-014 HB<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>, Release 5.4


<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong><br />

Table of Contents<br />

About This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi<br />

1 Introduction<br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />

2 <strong>EPIC</strong> Netlist Format<br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

Syntax Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

Buses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />

Characters Not Permitted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />

Element and Attribute Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

Using Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />

Port Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

Circuit Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />

Floating Capacitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

Inductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

Bipolar Junction Transistors and Junction Diodes. . . . . . . . . . . . . 17<br />

BJT Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17


iv Table of Contents<br />

Diode Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

Reading Diodes as Capacitors . . . . . . . . . . . . . . . . . . . . . . 20<br />

CMOS Transistor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

Resistor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

Voltage Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />

SIN Voltage Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

EXP Voltage Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

AM Voltage Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />

SFFM Voltage Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

Voltage Controlled Voltage Sources . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

Subcircuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

Hierarchical Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

Gate-level Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

Timing Checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

SETUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

HOLD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />

Edge to Edge (ETOE). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />

Pulse Width (PULSEW). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

Global Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

Global Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

Global Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />

Power and Ground Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

Netlist Control Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />

Control Option Syntax. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

Option Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />

Parameter Passing in Netlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />

Parameter Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70<br />

Parameter Passing Using HSPICE Rules . . . . . . . . . . . . . . . . . . . . 71<br />

General Usage Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

Functions and Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73<br />

Other Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

Initial Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

PWL Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

Sense Pair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />

Include Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76


3 Netlist Compiler and Translators<br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

Compiled Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

LSIM Netlist Features and Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

SPICE Netlist Characteristics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82<br />

HSPICE Netlist Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

General Control Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

Input File Control Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />

Analysis Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

Output Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84<br />

Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />

Cadence SPF File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />

SPF Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />

SPF Control Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />

SPF Netlist Reader Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />

Source-to-Drain Checking . . . . . . . . . . . . . . . . . . . . . . . . . 92<br />

Common SPF Warnings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<br />

Connectivity Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93<br />

Duplicate Global Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94<br />

Net Does Not Exist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94<br />

Hierarchical SPF Back-Annotation. . . . . . . . . . . . . . . . . . . . . . . . . 94<br />

Device Parameter Format File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96<br />

<strong>EPIC</strong> Binary File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />

Control Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

SPICE Netlist Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99<br />

Model File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />

Alias File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101<br />

Default File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />

Diodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />

Resistors and Capacitors . . . . . . . . . . . . . . . . . . . . . . . . . 107<br />

Default File Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108<br />

spice2e Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />

Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 109<br />

Supported SPICE Netlist Syntax . . . . . . . . . . . . . . . . . . . . . . . . . 114<br />

v<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


vi Table of Contents<br />

Ignored SPICE Netlist Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 115<br />

SPICE Netlist Syntax to Avoid . . . . . . . . . . . . . . . . . . . . . . . . . . . 116<br />

Substrate Terminal Bias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117<br />

EDIF Netlist Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118<br />

Supported EDIF Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118<br />

Unsupported EDIF Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . 119<br />

edif2e Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 120<br />

Verilog Netlist Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124<br />

vlog2e Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 129<br />

The Ecrypt Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131<br />

Level-One Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />

Command Syntax for Level-One Encryption. . . . . . . . . . . . . . . . . 132<br />

Level-Two Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132<br />

Command Syntax for Two-Level Encryption . . . . . . . . . . . . . . . . 132<br />

Tutorial: Performing a Level-Two Encryption . . . . . . . . . . . . . . . 133<br />

Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133<br />

4 <strong>EPIC</strong> Technology File<br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139<br />

Automatic Technology File Generation . . . . . . . . . . . . . . . . . . . . . . . . . . 140<br />

Specifying Automatic Technology File Generation . . . . . . . . . . . . 140<br />

Modifying the Netlist. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141<br />

Running a Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />

Creating a Runscript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152<br />

Gentech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153<br />

Sample Control Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />

HSPICE Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154<br />

Example of Other SPICE Types . . . . . . . . . . . . . . . . . . . . 156<br />

Gentech Control File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />

Section 1 - %lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158<br />

Section 2 - %model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159<br />

Section 3 - %parameters . . . . . . . . . . . . . . . . . . . . . . . . . . 160


Section 4 - %corner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />

Section 5 - %invoke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195<br />

Section 6 - %options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197<br />

Section 7 - %diode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

Running Gentech. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

Gentech Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198<br />

Single-Step and Multiple Step (Batch) Modes . . . . . . . . . 201<br />

Using Multiple Technology Files. . . . . . . . . . . . . . . . . . . . . . . . . . 204<br />

Temperatures and Voltages . . . . . . . . . . . . . . . . . . . . . . . 204<br />

PrintWL Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205<br />

The Technology File Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209<br />

Veritech Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210<br />

Running Veritech. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211<br />

After Running Veritech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />

If Veritech Aborts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214<br />

5 Stimuli and State Checking<br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219<br />

Stimulus Functions and Vector Functions . . . . . . . . . . . . . . . . . . . . . . . . 219<br />

Function Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220<br />

Output State Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238<br />

Vector File Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239<br />

Time Value. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245<br />

Data Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

Continuing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

Valid States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246<br />

Running the Vector File Using type and signal Commands. . . . . 247<br />

State Characters Used by <strong>EPIC</strong> <strong>Tools</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />

Logic States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248<br />

Input Stimulus Characters in Vector Files . . . . . . . . . . . . . . . . . . 251<br />

Expected Output Characters in Vector Files . . . . . . . . . . . . . . . . 252<br />

vii<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


viii Table of Contents<br />

6 batchrun Program<br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259<br />

Distributed Computing Capability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259<br />

Batchfile Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261<br />

Batchfile Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264<br />

7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />

Meas Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />

Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268<br />

Edisplay Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269<br />

Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270<br />

Edisplay Control File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275<br />

Eview Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276<br />

Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277<br />

Window Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

Menu Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278<br />

Text Display Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284<br />

Message Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284<br />

Eview Control File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284<br />

Waveform Display Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285<br />

SimWave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286<br />

turboWave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286<br />

Vector Translation Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287<br />

Vcd2e Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287<br />

Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />

Vcd2e Window Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . 289<br />

Signal Save File Format . . . . . . . . . . . . . . . . . . . . . . . . . . 294<br />

Translating a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296


Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298<br />

Appendix A: Customization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299<br />

Customizing <strong>EPIC</strong> <strong>Tools</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299<br />

Customizing Wire Capacitance Estimate . . . . . . . . . . . . . . . . . . . . . . . . 302<br />

Appendix B: Output Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311<br />

The .out File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311<br />

The .act File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324<br />

The .nact File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326<br />

The .nodealias File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328<br />

Warning Messages and the .log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330<br />

Appendix C: Error Output File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331<br />

The .err File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331<br />

The Viewerror Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349<br />

Command Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349<br />

Command-line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349<br />

Appendix D: SPICE-independent Voltage Source Syntax . . 351<br />

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359<br />

ix<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


x Table of Contents


About This Manual<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong> describes <strong>EPIC</strong> utilities and<br />

features common to <strong>EPIC</strong> <strong>Tools</strong>.<br />

For information on: See:<br />

A general overview of the<br />

utilities and features<br />

The content, format and<br />

syntax of commands that are<br />

used in the <strong>EPIC</strong> circuit<br />

description file.<br />

Compiled files, SPICE netlist<br />

and translator, EDIF netlist<br />

translator, Verilog netlist<br />

translator, and the Ecrypt<br />

utility<br />

Generating, verifying, and<br />

viewing technology files<br />

Stimulus functions; output<br />

state comparison, and state<br />

characters used by <strong>EPIC</strong><br />

<strong>Tools</strong><br />

Running TimeMill, PathMill,<br />

PowerMill, or AMPS in batch<br />

mode<br />

Chapter 1, “Introduction”<br />

Chapter 2, “<strong>EPIC</strong> Netlist<br />

Format”<br />

Chapter 3, “Netlist Compiler<br />

and Translators”<br />

Chapter 4, “<strong>EPIC</strong> Technology<br />

File”<br />

Chapter 5, “Stimuli and State<br />

Checking”<br />

Chapter 6, “batchrun<br />

Program”


xii About This Manual<br />

Audience<br />

Related Manuals<br />

For information on: See:<br />

PowerMill and TimeMill<br />

simulation output utilities<br />

This manual is for users of <strong>EPIC</strong> <strong>Tools</strong>.<br />

The following Synopsys manuals in the <strong>EPIC</strong> tool set provide<br />

information specific to each <strong>EPIC</strong> Tool:<br />

■ PathMill <strong>Reference</strong> <strong>Guide</strong><br />

■ PathMill User <strong>Guide</strong><br />

■ PowerMill <strong>Reference</strong> <strong>Guide</strong><br />

■ PowerMill User <strong>Guide</strong><br />

■ RailMill <strong>Reference</strong> <strong>Guide</strong><br />

■ RailMill User <strong>Guide</strong><br />

■ TimeMill <strong>Reference</strong> <strong>Guide</strong><br />

■ TimeMill User <strong>Guide</strong><br />

■ AMPS <strong>Reference</strong> <strong>Guide</strong><br />

■ AMPS User <strong>Guide</strong><br />

The following Synopsys manuals provide further information<br />

about some of the utilities described in this manual:<br />

■ turboWave Manual<br />

Chapter 7, “Utilities for<br />

Dynamic <strong>EPIC</strong> <strong>Tools</strong>”<br />

Customizing <strong>EPIC</strong> <strong>Tools</strong> Appendix A, “Customization”<br />

Samples of different output<br />

files.<br />

Appendix B, “Output Files”<br />

Sample output error file and<br />

Viewerror utility<br />

SPICE-independent voltage<br />

source syntax supported by<br />

PowerMill, TimeMill, and<br />

AMPS<br />

Appendix C, “Error Output<br />

File”<br />

Appendix D, “SPICEindependent<br />

Voltage Source<br />

Syntax”


Conventions<br />

Commands<br />

■ SimWave Manual<br />

■ VTRAN Manual<br />

This manual uses certain style conventions to indicate<br />

commands, menus, examples, and filenames.<br />

SYNTAX:<br />

command_name [argument(s)]<br />

argument types: keyword | value | tag=value | tag=keyword<br />

Command Argument Definition<br />

keyword Keywords are identifiers that must be<br />

used as they appear. They are shown in<br />

base font.<br />

value Values are user-determined. They are<br />

shown in italic text to distinguish them<br />

from commands and keywords.<br />

tag=<br />

value<br />

keyword<br />

Tags can be followed by either a value or a<br />

keyword. Tags and keywords are in the<br />

base font. Argument values are in italics<br />

to distinguish them from commands,<br />

keywords, and tags.<br />

xiii<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


xiv About This Manual<br />

Symbol Definition<br />

| A pipe symbol (|) represents the word “or” and separates choices<br />

between two or more arguments.<br />

[ ] Square brackets show that an argument is optional. Nested brackets<br />

(e.g.]]]]) indicate that if a value is assigned to a given parameter,<br />

values must also be assigned to preceding parameters. (Nested<br />

brackets are used only for SPICE-independent voltage source<br />

functions.)<br />

... An ellipsis (...) indicates that more than one argument can be<br />

specified. Ellipsis are used only for multiple arguments with tags.<br />

SYNTAX:<br />

report_node_i a[vg] | r[ms] | p[eak] | h[ist] node_name(s)<br />

For this command, a[vg], r[ms], p[eak], and h[ist] are keywords–<br />

choose one of these. The node_name(s) are user-determined.<br />

EXAMPLE 1:<br />

report_node_i a VDD GND<br />

In this example, a is a keyword, and VDD and GND are values.<br />

SYNTAX:<br />

report_node_ic [a[ll]] [q[uoted]] [for=epic | spice] [time(s)]<br />

For this command, a[ll] and q[uoted] are optional keywords. The<br />

tag for= is part of an optional argument for which you can choose<br />

the keyword epic or spice. The time(s) are user-determined and,<br />

in this case, optional.<br />

EXAMPLE 2:<br />

report_node_ic all for=spice 1u<br />

In this example, all is a keyword, for= is a tag, spice is a<br />

keyword, and 1u is a value.


Menu Text, Filenames, and Examples<br />

Menu text appears in bold, as shown in the following example.<br />

EXAMPLE 1:<br />

To start setting up a run, select File→Design Data<br />

Setup.<br />

Filenames are shown in the same font as the surrounding text,<br />

but in italics.<br />

EXAMPLE 2:<br />

This is an example of a filename.out being shown in<br />

text.<br />

Examples are shown in a courier font as they might appear on<br />

your screen. Sometimes explanations follow examples, and in<br />

such cases, anything shown in the example that appears in the<br />

explanation is shown in the same courier font used in the<br />

example.<br />

EXAMPLE 3:<br />

add_node_cap RS100 275<br />

In the example, the capacitance value of node RS100 is increased<br />

by 275 femtofarads.<br />

xv<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


xvi About This Manual


Chapter 1<br />

Introduction


2 Chapter 1 Introduction


Overview<br />

Overview 3<br />

The <strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong> provides detailed information<br />

about the <strong>EPIC</strong> technology underlying the operations performed<br />

by <strong>EPIC</strong> tools. It also contains information about how to use<br />

various <strong>EPIC</strong> utilities to generate, interpret, and evaluate<br />

simulations. Some of the information contained in this guide<br />

pertains to the full set of <strong>EPIC</strong> tools, while other material is<br />

relevant to specific products.<br />

The <strong>EPIC</strong> circuit description, or netlist, is one of several netlists<br />

supported by <strong>EPIC</strong> that can be used as input to the simulation<br />

and analysis tools. An entire chapter is dedicated to providing<br />

detailed information about <strong>EPIC</strong> circuit elements, timing checks,<br />

parameter passing, and other components and factors involved<br />

in setting up the <strong>EPIC</strong> netlist. Information about the <strong>EPIC</strong><br />

netlist is found in Chapter 2.<br />

The <strong>EPIC</strong> netlist compiler supports LSIM, SPICE, Verilog, EDIF,<br />

and Cadence SPF netlist formats, in addition to its own. It reads<br />

LSIM and SPICE netlists directly and can translate Verilog and<br />

EDIF netlists to <strong>EPIC</strong> format for reading. You can use the Ecrypt<br />

utility to produce encrypted files. Detailed information about<br />

how the compiler processes these netlists when working with<br />

<strong>EPIC</strong> tools is provided. The netlist compiler is documented in<br />

Chapter 3.<br />

<strong>EPIC</strong> tools use the <strong>EPIC</strong> technology files to calculate timing and<br />

power behaviors. These files are created by the Gentech utility,<br />

which either generates them automatically or extracts them<br />

from your SPICE. <strong>EPIC</strong> also provides a utility for verifying the<br />

accuracy of the generated technology files. The Veritech utility<br />

runs both your SPICE and an <strong>EPIC</strong> tool for purposes of<br />

comparison. Another utility, TechViewer, lets you view an <strong>EPIC</strong><br />

technology file in a graphical format. See Chapter 4 for<br />

information about these utilities.<br />

Stimulus and monitoring functions for the dynamic <strong>EPIC</strong> tools<br />

(such as PowerMill and TimeMill) are documented in Chapter 5.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


4 Chapter 1 Introduction<br />

These functions generate input signals to stimulate a circuit,<br />

and output vectors used to compare simulated to expected<br />

results.<br />

Four <strong>EPIC</strong> tools (TimeMill, PathMill, PowerMill, and AMPS) can<br />

be run in batch mode. Information about how to use the batchrun<br />

program is presented in Chapter 6.<br />

<strong>EPIC</strong> provides utilities to measure and display simulation<br />

results. The Meas utility computes the results of .measure<br />

statements. The Edisplay and Eview utilities measure timing<br />

results. The waveform display utilities, SimWave and<br />

turboWave, are also available for your use. <strong>EPIC</strong> also provides<br />

two vector translation utilities to translate different types of<br />

vector formats into <strong>EPIC</strong> vector format. Information about how<br />

to use these utilities is described in Chapter 7.<br />

Appendix A presents detailed information about customizing<br />

<strong>EPIC</strong> tools.<br />

Appendix B explains the formats of the different output files<br />

generated by <strong>EPIC</strong> tools.<br />

Errors encountered during simulation return very detailed<br />

messages, giving you all the information you need to correct the<br />

problem. The Viewerror utility is available as an alternate<br />

method of viewing simulation errors and generating error<br />

reports. Information about error messages and formats is<br />

presented in Appendix C.<br />

Appendix D provides the SPICE-independent voltage source<br />

syntax supported by PowerMill, TimeMill, and AMPS.


Chapter 2<br />

<strong>EPIC</strong> Netlist Format


6 Chapter 2 <strong>EPIC</strong> Netlist Format


Overview<br />

Syntax Conventions<br />

Overview 7<br />

<strong>EPIC</strong> uses a unique circuit description to describe circuits. This<br />

format, the <strong>EPIC</strong> netlist, is one of several possible netlists that<br />

can be used as input to <strong>EPIC</strong> simulation and analysis tools.<br />

The netlist lists system elements, including single transistors,<br />

gates, resistors, instantiations of subcircuits, functional models,<br />

and output probing functions. These elements can be connected<br />

by input or output nodes to form a network.<br />

System connectivity is established through the common input,<br />

output, and biput I/O nodes between the circuit elements.<br />

This chapter describes the content and of the <strong>EPIC</strong> netlist, as<br />

well as the commands and control options you can use.<br />

You must follow these syntax rules and conventions when<br />

creating an <strong>EPIC</strong> netlist:<br />

■ The maximum length of a name in a netlist (including an<br />

explicit or implicit hierarchical name) is 1023 characters. An<br />

error message is generated if you exceed this limit.<br />

■ A line can be broken at any point, but the break is treated<br />

like a blank space. You cannot break a line in the middle of a<br />

name. The backslash (\) is not recognized as a continuation<br />

character.<br />

■ Parameter names must start with a letter and can contain<br />

only letters, digits, underscores (_), and percent signs (%).<br />

■ Each circuit element is defined by an element identifier<br />

followed by a list of attributes, and ends with a semicolon (;).<br />

■ Each attribute consists of an identifier followed by an equal<br />

sign (=) and the assigned circuit description, all enclosed in a<br />

pair of parentheses (()).<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


8 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Buses<br />

■ All the items in a statement are case-sensitive.<br />

■ Spaces are allowed between items.<br />

■ Comments use the C language syntax. They begin with /* and<br />

close with */.<br />

Buses are specified with the sig_name command followed by an<br />

argument in square brackets ([ ]) giving the range.<br />

EXAMPLE:<br />

sig_name[15-0]<br />

The square brackets following sig_name indicate it is a bus. The<br />

value 15-0 specifies the width, with the most significant bit first<br />

and least significant bit last. Bus notation can be modified with<br />

the ctrl_opt statement. See “Control Option Syntax” on page 46.<br />

A negative index is allowed in a bus, as shown in the following<br />

example.<br />

EXAMPLE:<br />

bus[-1-7] => bus[-1], bus[0], .., bus[7]<br />

bus[0--3] => bus[0], bus[-1], bus[-2], bus[-3]


Characters Not Permitted<br />

Syntax Conventions 9<br />

The following characters are not permitted in any name:<br />

; (semicolon) : (colon)<br />

, (comma) ‘ (single quotation mark)<br />

{ } (curly brackets) “ (double quotation marks)<br />

= (equal sign) ( ) (parentheses)<br />

The following characters are not permitted in node or element<br />

names:<br />

- (minus sign) . (period)<br />

Transistor names cannot begin with the following characters:<br />

C c<br />

E e<br />

L l<br />

R r<br />

V v<br />

These characters causes the transistor to be recognized as a<br />

voltage-controlled voltage source.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


10 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Element and Attribute Identifiers<br />

This section contains a list of <strong>EPIC</strong> element and attribute<br />

identifiers. The element identifiers specify the type of function<br />

being defined.<br />

Element<br />

Definition<br />

Identifier<br />

b Bipolar junction transistor (BJT) or junction diode.<br />

ef Element function that starts a library function or a<br />

transistor-level subcircuit.<br />

is Input stimulus signal.<br />

os Output signal for display.<br />

t Transistor, resistor, floating capacitor, or inductor.<br />

c Capacitor.<br />

The attribute identifiers indicate input and output pins, the<br />

internal state information, and any properties associated with<br />

the element.<br />

Attribute<br />

Identifier Definition<br />

en Element name or instance name of an element in a<br />

system. Each (en=element_name) must be unique for<br />

a given level. Do not use a period in the element<br />

name.<br />

it Input terminals or nodes of the element.<br />

ot Output terminals or nodes of the element.<br />

bt Specifies biput terminals or nodes of the element.<br />

This identifier can be an input or output terminal,<br />

depending on the circuit response.


Using Identifiers<br />

Attribute<br />

Identifier Definition<br />

Element and Attribute Identifiers 11<br />

st Number of states for an element. This identifier<br />

represents the number of memory words allocated<br />

when you include the element as an instance. It<br />

corresponds to the number of internal states in a<br />

functional model, and the number of entities or<br />

variables used in the sv field of a library function<br />

input stimulus signal.<br />

nn Node name. This identifier is used with the<br />

capacitance or node specification.<br />

ov Initial element output value.<br />

bv Initial element biput value.<br />

sv Element state value, or element parameter value,<br />

using the following syntax:<br />

% (sv=value{,value})<br />

m Multiplier for the element:<br />

% (m=5)<br />

attr Optional attribute for an element. Currently, it is<br />

used only for controlling the driving impedance of<br />

functional models. See netlist_suffix for details.<br />

The following rules apply to using identifiers:<br />

■ (st=value) is optional.<br />

■ (st value) and (sv= ...) can be used only for (ef=...) and<br />

(is = ...). If used elsewhere, you will get an error message.<br />

■ If (sv=n_items) is specified and no (st=...) is given, n states<br />

are assigned in the .elm file.<br />

■ If (st=m) is specified and no (sv=...) is given, the number of<br />

states is equal to m states.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


12 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Port Mapping<br />

■ If both (st=m) and (sv= n_items) are specified, max (m,n)<br />

states are assigned. If (m>n) then the state values for<br />

(state[i] | i>n) is assigned a default value of 0.<br />

■ The parameter names can be specified in any order.<br />

■ Error messages are returned when:<br />

◆ Keywords are misspelled or used incorrectly.<br />

◆ Connectivity errors are encountered.<br />

There are two methods of port mapping between an ADFMI<br />

model and the corresponding netlist: position-based port<br />

mapping (implicit) and name-based port mapping (explicit).<br />

When using implicit port mapping, the order in which you define<br />

the ports in your model establishes the port order in the circuit.<br />

In explicit port mapping, specific names identify which ports are<br />

to be mapped to which terminals. Figure 1 shows two excerpts<br />

from sample <strong>EPIC</strong> netlists. One uses implicit port mapping, the<br />

other uses explicit port mapping. An excerpt from the<br />

corresponding model file is also shown.


(ef=DFF)(en=dff_fun)(it=i1,i2,i3)<br />

Excerpt from <strong>EPIC</strong> netlist using<br />

implicit port mapping<br />

(ef=DFF)(en=dff_fun)(it=IN1(i1), IN2(i2), IN3(i3));<br />

Excerpt from <strong>EPIC</strong> netlist using<br />

explicit port mapping<br />

Figure 1 Explicit and implicit port mapping in an <strong>EPIC</strong> netlist<br />

Element and Attribute Identifiers 13<br />

...<br />

RegisterUserModel()<br />

{<br />

fmDefineModel(“DFF”, dff_<br />

fmDefinePort(body,”IN1”,<br />

fmDefinePort(body,”IN2”,<br />

fmDefinePort(body,”IN3”,<br />

...<br />

}<br />

Excerpt from ADFMI model file<br />

For implicit port mapping to work correctly, the order in which<br />

the ports are listed in the <strong>EPIC</strong> netlist must be the same as the<br />

order in which they are defined in the model file. Conversely,<br />

explicit port mapping is not dependent on the port order, but<br />

instead identifies the correct mapping using names (IN1 always<br />

corresponds to i1 regardless of the order in which the ports are<br />

listed in the netlist). Therefore, using explicit port mapping can<br />

reduce the occurrence of errors in port mapping.<br />

NOTE: If you are using SPICE netlists, you can use only implicit port<br />

mapping.<br />

If you are using ADFMI modeling with a variable bus (that is, if<br />

your model file contains an fmDefineVBusPort() function) you<br />

must always use explicit port mapping.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


14 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Circuit Elements<br />

Capacitor<br />

This section explains the <strong>EPIC</strong> netlist format for the following<br />

kinds of circuit elements:<br />

Capacitor<br />

Floating Capacitor<br />

Inductor<br />

Bipolar Junction Transistors and Junction Diodes<br />

CMOS Transistor<br />

Resistor<br />

Voltage Source<br />

Voltage Controlled Voltage Sources<br />

Subcircuit<br />

Net<br />

Gate-level Element<br />

SYNTAX:<br />

(c=cap_value) (nn=node_name) (m=mult_value);<br />

EXAMPLE:<br />

(c=100)(nn=APLL);<br />

In the example, 0.1 pF capacitance is loading node APLL.<br />

DESCRIPTION:<br />

You can specify capacitance value inside a subcircuit or in a toplevel<br />

definition. When specified in the top level, you can use the<br />

hierarchical node name.<br />

You can also specify capacitance with configuration file<br />

commands. You can use the node_capacitance command to add<br />

the extracted capacitances from layout data. See the


Floating Capacitor<br />

Circuit Elements 15<br />

configuration file command reference for the <strong>EPIC</strong> tool you are<br />

using.<br />

Command Argument Definition<br />

c=<br />

SYNTAX:<br />

cap_value<br />

nn=<br />

node_name<br />

m=<br />

mult_value<br />

(t=C|c) (en=instance_name) (so=node1) (dr=node2) (fc=value);<br />

EXAMPLE:<br />

(t=c)(en=cap1)(so=N1)(dr=N2)(fc=10);<br />

This example describes a 0.01 pF capacitor between nodes N1<br />

and N2.<br />

DESCRIPTION:<br />

Specifies the value in femtofarads<br />

that represents the capacitance to<br />

power or ground. The value can be<br />

an expression.<br />

Names the node to which the<br />

capacitance is attached.<br />

Specifies a multiplier that causes<br />

the capacitor to be treated as<br />

multiple value capacitors connected<br />

in parallel.<br />

A floating capacitor is a capacitor that is not connected to a<br />

voltage or ground node. Floating capacitors are described in the<br />

<strong>EPIC</strong> netlist as a different element type with specific netlist<br />

syntax.<br />

Although you can simulate the coupling effect for every floating<br />

capacitor in the circuit, this is not recommended for large<br />

circuits because it will severely slow the simulation. A more<br />

practical approach is to model and simulate the coupling effect<br />

for floating capacitors critical to circuit functionality. Examples<br />

occur in charge-pump operation or in critical paths where the<br />

associated Miller effect is critical to path delay. Features and<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


16 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Inductor<br />

commands are provided for you to selectively model and simulate<br />

the coupling effect of floating capacitors.<br />

NOTE: PathMill does not accept floating capacitors. Floating capacitors<br />

need to be split using the ctrl_opt split_floating_cap control<br />

command. However, PathMill with the Crosstalk Extension<br />

(CTX) accepts floating capacitors.<br />

Command Argument Definition<br />

t=<br />

C | c<br />

en=<br />

instance_name<br />

so=<br />

node1<br />

dr=<br />

node2<br />

fc=<br />

value<br />

SYNTAX:<br />

Element type. Use either C or c for a<br />

floating capacitor.<br />

Capacitor instance name.<br />

First terminal name.<br />

Second terminal name.<br />

Capacitance value in femtofarads.<br />

(t=L)(en=element_name)(so=node_1)(dr=node_2)(l=ind_value)<br />

(m=mult_value);<br />

EXAMPLE:<br />

(t=L)(en=l12)(so=141)(dr=out)(l=13);<br />

The example describes an inductor called 112, with nodes 141<br />

and out, and a capacitance value of 13 nanoHenrys.


DESCRIPTION:<br />

Circuit Elements 17<br />

You use this syntax when specifying an inductor in an <strong>EPIC</strong><br />

netlist.<br />

Bipolar Junction Transistors and Junction Diodes<br />

BJT Element<br />

Command Argument Definition<br />

en=<br />

element_name<br />

so=<br />

node_1<br />

dr=<br />

node_2<br />

l=<br />

ind_value<br />

m=<br />

mult_value<br />

This section explains the syntax used for bipolar junction<br />

transistors and diodes.<br />

SYNTAX:<br />

Inductor name.<br />

Node that connects the inductor.<br />

Second node that connects the<br />

inductor.<br />

Inductance value (nH).<br />

Multiplier value (default =1).<br />

(b = model_name)(en = tran_name)(ba = base_nodename)<br />

(co=collector_nodename)(em=emitter_nodename)<br />

[(bu=bulk_name)] (ar = value);<br />

EXAMPLE:<br />

(b=pnp)(en=q1)(co=c)(ba=b)(em=e)(ar=2.5);<br />

This example describes a bipolar transistor q1 with an area<br />

factor of 2.5.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


18 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

DESCRIPTION:<br />

Diode Element<br />

This syntax specifies a bipolar transistor.<br />

Command Argument Definition<br />

b=<br />

model_name<br />

en=<br />

tran_name<br />

ba=<br />

base_nodename<br />

co=<br />

collector_nodename<br />

em=<br />

emitter_nodename<br />

bu=<br />

bulk_name<br />

ar=<br />

value<br />

SYNTAX:<br />

Specifies the name of the Bipolar<br />

model matching the name in the<br />

model file<br />

Transistor instance name<br />

Base node name<br />

Collector node name<br />

Emitter node name<br />

Bulk node name<br />

Area factor of the transistor<br />

(default = 1)<br />

(b=model_name)(en=diode_name)(ba=anode_node)<br />

(co=cathode_node)(ar=value)(pj=value);<br />

or<br />

(b=model_name)(en=diode_name)(ba=anode_node)<br />

(em=cathode_node)(ar=value)(pj=value);


DESCRIPTION:<br />

Circuit Elements 19<br />

The syntax specifies a junction diode. The diode levels are:<br />

■ Level 1: non-geometric diode. ar and pj are unit-less factors;<br />

cjo and cjswo in the diode models are F/unit-area and<br />

F/unit-periphery.<br />

■ Level 3: geometric diode. ar and pj are area and periphery<br />

with units.<br />

Command Argument Definition<br />

b=<br />

model_name<br />

en=<br />

diode_name<br />

ba=<br />

anode_node<br />

co=<br />

cathode_node<br />

em=<br />

cathode_node<br />

ar=<br />

value<br />

pj=<br />

value<br />

Diode model name, which matches<br />

the name in the model file.<br />

Diode instance name.<br />

Anode (base) node name.<br />

Cathode (collector) node name.<br />

Cathode (emitter) node name.<br />

Area factor of the diode (default = 1).<br />

If a Level 3 diode model is used, this<br />

value is in units of 10 -16m2 .<br />

Periphery junction of the diode<br />

(default = 0). If a Level 3 diode<br />

model is used, this value is in units<br />

of 10-8 meters.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


20 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

The <strong>EPIC</strong> netlist compiler reads the SPICE diode model<br />

statement from the netlist. This model must precede diode<br />

instances.<br />

If you assign the model statement: The <strong>EPIC</strong> netlist compiler:<br />

Level 1 Identifies the diode as a<br />

junction diode.<br />

Level 2 Discards the diode.<br />

Level 3 Converts the diode to a<br />

capacitor.<br />

Reading Diodes as Capacitors<br />

By default, the <strong>EPIC</strong> netlist compiler converts all diodes to<br />

capacitors, using the diode model to calculate values. However,<br />

the control option keep_junc_diode assigns a Level 1 value to<br />

the diodes. The ACE option can simulate these diodes using the<br />

bjt.mod diode model.<br />

The <strong>EPIC</strong> netlist compiler looks for a .model card for the<br />

specified diode before instantiating the diode. If you use an <strong>EPIC</strong><br />

format netlist, the .model card must be in a separate HSPICE<br />

netlist with a filename extension of .spi because the compiler<br />

accepts only a .model card in an HSPICE netlist.<br />

For example, to simulate in TimeMill the circuit PLL with an<br />

<strong>EPIC</strong> format netlist, the diode model can be specified in a file<br />

named diode.spi. TimeMill then starts with the following<br />

command line:<br />

timemill -n diode.spi PLL -p tech.file<br />

If there is no .model card, all diodes are assumed to be diodes<br />

because there is no way to tell if the diode is level 1 or 3. You<br />

must have an ACE license to simulate these diodes. ar and pj<br />

are assumed to be unit-less values.


CMOS Transistor<br />

Circuit Elements 21<br />

Level 1 diode<br />

If a level 1 model card is provided, the diode is converted to a<br />

capacitor with a value determined by the formula<br />

(cjo)(ar)+(cjswo)(pj), where ar and pj are the unit-less area<br />

and periphery factors, respectively.<br />

Level 3 diode<br />

If the .model card specifies a level 3 diode, the conversion to a<br />

capacitor will use the same equation, except that ar and pj are<br />

in units of 10-16m2 and 10-8m, since the cjo and cjswo units in<br />

the model file will be in terms of capacitance/area and<br />

capacitance/length.<br />

SYNTAX:<br />

(t=tran_model_name|$para_model_name$)<br />

(en=tran_instance_name)(ga=gate_name)<br />

(so=source_name) (dr=drain_name)[(bu=bulk_name)]<br />

(w=wvalue)(l=lvalue)<br />

[(di=s2d|d2s|bid|value)]<br />

[(as=asvalue)][(ad=advalue)]<br />

[(geo=geovalue)]<br />

[(ps=psvalue)][(pd=pdvalue)]<br />

[(nrd=num_drain_sqs)]<br />

[(nrs=num_source_sqs)]<br />

[(m=mult_value]<br />

EXAMPLE 1:<br />

(t=N)(en=n12)(ga=bus5)(so=out2)(dr=gnd)<br />

(w=2000)(l=200);<br />

(t=P)(en=p105)(ga=bus5)(so=out2)(dr=vdd)<br />

(w=500)(l=200)(di=d2s);<br />

These statements define a 20μ/2μ N-type transistor as n12 and a<br />

5μ/2μ P-type transistor as p105. For the p105 transistor, the<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


22 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

direction of the path search has been set from drain to source,<br />

node vdd to out2. In this example, as, ad, ps and pd are not<br />

specified, thus requiring the simulator to use the diffusion<br />

extension in the technology file to estimate these values.<br />

EXAMPLE 2:<br />

(t=P)(en=p1)(ga=A)(so=vdd)(dr=Z)(w=2000)(l=200)<br />

(as=1000000)(ad=1000000)(ps=3000)(pd=3000);<br />

(t=N)(en=n1)(ga=A)(so=gnd)(dr=Z)(w=200)(l=200)<br />

(as=100000)(ad=100000)(ps=1200)(pd=1200);<br />

These statements define a 20μ/2μ P-type transistor as p1 and a<br />

2μ/2μ N-type transistor as n1, both with areas and perimeters as<br />

specified.<br />

DESCRIPTION:<br />

The syntax defines N-type and P-type transistors. Depletion Ntype<br />

and P-type transistors are defined using the same syntax.<br />

NOTE: Depletion mode transistors are not supported by PathMill.<br />

Command Argument Definition<br />

t=<br />

t=<br />

tran_model_name<br />

$para_model_name$<br />

en=<br />

tran_instance_name<br />

ga=<br />

gate_name<br />

Specifies the transistor model<br />

name defined in the technology<br />

file. The name cannot begin with<br />

the following characters, in<br />

either upper- or lowercase: C, E,<br />

L, R, or V.<br />

If the name starts and ends with<br />

$, it is a parametric model name.<br />

The parametric model name is<br />

resolved in the same way as an<br />

ordinary parameter except that<br />

its final value is a model name.<br />

Transistor instance name.<br />

Gate node name.


Command Argument Definition<br />

so=<br />

source_name<br />

dr=<br />

drain_name<br />

bu=<br />

bulk_name<br />

w=<br />

wvalue<br />

l=<br />

lvalue<br />

Source node name.<br />

Drain node name.<br />

Bulk node name.<br />

Circuit Elements 23<br />

Specifies values for channel<br />

width and length of transistors<br />

in .01 micron units. The defaults<br />

are w=1000 if the width is not<br />

specified, and l=200 if the length<br />

is not specified. Both values can<br />

be expressions.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


24 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Command Argument Definition<br />

di=<br />

s2d | d2s|bid|value<br />

Specifies the direction for path<br />

searches.<br />

The value d2s is used if the<br />

signal flow direction is from the<br />

drain to the source; s2d is used<br />

if the direction is from source to<br />

drain; bid is used if the<br />

direction is bi-directional.<br />

The value can also be a number.<br />

The values can be 0<br />

(bidirectional), 1 (drain to<br />

source), or 2 (source to drain).<br />

This parameter is ignored if<br />

specified for TimeMill or<br />

PowerMill.<br />

Signal direction is not always<br />

required for PathMill because<br />

PathMill handles bidirectional<br />

signal flow. However, for certain<br />

kinds of circuits, such as barrel<br />

shifters, which have a large<br />

number of pass transistors and<br />

circuit branches, the direction<br />

settings are required for<br />

PathMill. If you know the signal<br />

flow direction, specifying it can<br />

speed up the path search process<br />

considerably.


Command Argument Definition<br />

as=<br />

asvalue<br />

ad=<br />

advalue<br />

geo=<br />

geovalue<br />

Circuit Elements 25<br />

Specifies the area of the source<br />

diffusion in units of 10-16m2 .<br />

The value is used for calculating<br />

diffusion capacitance. If not<br />

specified, the default is the<br />

effective width times the<br />

effective diffusion extension,<br />

which is defined in the<br />

technology file. The default<br />

equation can be edited in the<br />

customize.c module. See<br />

Appendix A.<br />

Specifies the area of the drain<br />

diffusion in units of 10-16m2 .<br />

The value is used for calculating<br />

diffusion capacitance. If not<br />

specified, the default is the<br />

effective width times the<br />

effective diffusion extension,<br />

which is defined in the<br />

technology file. The default<br />

equation can be edited in the<br />

customize.c module. See<br />

Appendix A.<br />

Modifies the value of as and ad<br />

parameters. The values can be 0,<br />

1, or 2. You cannot apply<br />

parameters to this value.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


26 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Command Argument Definition<br />

ps=<br />

psvalue<br />

pd=<br />

pdvalue<br />

nrd=<br />

num_drain_sqs<br />

nrs=<br />

num_source_sqs<br />

m=<br />

mult_value<br />

Defines the perimeter of the<br />

source diffusion in 10 -8m units.<br />

The value is used for calculating<br />

diffusion capacitance. If not<br />

specified, the default is two<br />

times the effective width plus<br />

two times the effective diffusion<br />

extension, which is defined in<br />

the technology file. You can edit<br />

the default equation in the<br />

customize.c module. See<br />

Appendix A.<br />

Defines the perimeter of the<br />

drain diffusion in 10-8m units.<br />

The value is used for calculating<br />

diffusion capacitance. If not<br />

specified, the default is two<br />

times the effective width plus<br />

two times effective diffusion<br />

extension, which is defined in<br />

the technology file. You can edit<br />

the default equation in the<br />

customize.c module. See<br />

Appendix A.<br />

Specifies the number of drain<br />

resistance squares. The value<br />

(float) is used for calculating<br />

delays (default = 0).<br />

Specifies the number (float) of<br />

source resistance squares.<br />

Specifies the number of<br />

transistors with terminals<br />

connected in parallel.


Resistor<br />

Voltage Source<br />

SYNTAX:<br />

Circuit Elements 27<br />

(t=R) (en=element_name) (so=source_node) (dr=drain_node)<br />

(r=value) (m=mult_value);<br />

EXAMPLE:<br />

(t=R)(en=R15)(so=INA0)(dr=PX)(r=1500);<br />

The example defines a 1500 ohm resistor between nodes INA0<br />

and PX.<br />

Command Argument Definition<br />

en=<br />

element_name<br />

so=<br />

source_node<br />

dr=<br />

drain_node<br />

r=<br />

value<br />

m=<br />

mult_value<br />

SYNTAX:<br />

Element name.<br />

Source node.<br />

Drain node.<br />

Specifies the resistance value<br />

(integer or real) in ohms. It can<br />

be an expression.<br />

Specifies a multiplier that<br />

causes the resistor to be treated<br />

as multiple value resistors<br />

connected in parallel.<br />

(t=V) (en=element_name) (so=n+) (dr=n-) (v=value);<br />

EXAMPLE:<br />

(t=V)(en=vs2ci)(so=10)(dr=25)(v=4.5);<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


28 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

DESCRIPTION:<br />

Each node in the circuit can connect to only one voltage source.<br />

If a node needs more than one voltage source, you must split the<br />

node into two (for example, by using a resistor).<br />

SPICE equivalent:<br />

Vname n+ n- value<br />

EXAMPLE:<br />

V1 1 gnd 3.3<br />

Command Argument Definition<br />

en=<br />

element_name<br />

so=<br />

n+<br />

dr=<br />

n-<br />

v=<br />

value<br />

SIN Voltage Source<br />

SYNTAX:<br />

(t=VSIN) (en=element_name) (so=n+) (dr=n-)<br />

(v=dc,pa,);<br />

EXAMPLE:<br />

(t=VSIN)(en=v12)(so=12)(dr=0)(v=0,0.1,1e6,2n,1e8);<br />

SPICE equivalent:<br />

Element name.<br />

Positive node of the voltage<br />

source.<br />

Negative node of the voltage<br />

source.<br />

Source value.<br />

Vname n+ n- dc SIN(dc pa )


DESCRIPTION:<br />

Command Argument Definition<br />

en=<br />

element_name<br />

so=<br />

n+<br />

dr=<br />

n-<br />

v=<br />

dc<br />

pa<br />

freq<br />

td<br />

df<br />

pd<br />

EXP Voltage Source<br />

SYNTAX:<br />

(t=VEXP)(en=element_name)(so=n+)(dr=n-)<br />

(v=v1,v2,);<br />

Circuit Elements 29<br />

EXAMPLE:<br />

(v=VEXP)(en=v12)(so=12)(dr=0)(v=0,5,1n,5n,10n,5n);<br />

SPICE equivalent:<br />

Element name.<br />

Positive node of the voltage source.<br />

Negative node of the voltage source.<br />

Vname n+ n- EXP(v1 v2 >)<br />

Command Argument Definition<br />

en=<br />

element_name<br />

so=<br />

n+<br />

Source value:<br />

dc offset voltage (volt)<br />

peak amplitude (volt)<br />

frequency (Hz)<br />

time delay (sec)<br />

damping factor (1/sec)<br />

phase delay (degrees)<br />

Element name.<br />

Positive node of the voltage source.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


30 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Command Argument Definition<br />

dr=<br />

n-<br />

v=<br />

v1<br />

v2<br />

td1<br />

tau1<br />

td2<br />

tau2<br />

AM Voltage Source<br />

SYNTAX:<br />

(t=VAM)(en=element_name)(so=n+)(dr=n)(v=sa,);<br />

EXAMPLE:<br />

(v=VAM)(en=v12)(so=12)(dr=0)(v=2.5,0,1000,1e6,0);<br />

DESCRIPTION:<br />

AM voltage sources have a floating terminal and a terminal<br />

constant. This constant is connected to VDD, GND, or another<br />

voltage source.<br />

SPICE equivalent:<br />

Vname n+ n- AM (sa oc fm fc td)<br />

Command Argument Definition<br />

en=<br />

element_name<br />

so=<br />

n+<br />

Negative node of the voltage source.<br />

initial value of voltage (volt)<br />

pulsed value of voltage (volt)<br />

rise delay (sec)<br />

rise time const. (sec)<br />

fall delay (sec)<br />

fall time const. (sec)<br />

Element name.<br />

Positive node of the voltage source.


Command Argument Definition<br />

dr=<br />

n-<br />

v=<br />

sa<br />

oc<br />

fm<br />

fc<br />

td<br />

SFFM Voltage Source<br />

SYNTAX:<br />

(t=VSFFM)(en=element_name)(so=n+)(dr=n)<br />

(v=dc,ac,);<br />

Circuit Elements 31<br />

EXAMPLE:<br />

(v=VSFFM)(en=v12)(so=12)(dr=0)(v=0,2,20e7,5,1000);<br />

SPICE equivalent:<br />

Vname n+ n- SFFM(dc ac >)<br />

Command Argument Description<br />

en=<br />

element_name<br />

so=<br />

n+<br />

Negative node of the voltage source.<br />

Source value:<br />

signal amplitude (volt)<br />

offset constant<br />

modulation frequency (Hz)<br />

carrier frequency (Hz)<br />

delay time (sec)<br />

Element name.<br />

Positive node of the voltage source.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


32 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Command Argument Description<br />

dr=<br />

n-<br />

v=<br />

dc<br />

ac<br />

fac<br />

km<br />

fs<br />

Voltage Controlled Voltage Sources<br />

Negative node of the voltage source.<br />

Source value:<br />

dc offset voltage (volt)<br />

carrier amplitude (volt)<br />

carrier frequency (Hz)<br />

modulation index (radian)<br />

signal frequency (Hz)<br />

(t=E) (en=element_name) (dr=n+) (bu=n-) (so=in+) (ga=in-)<br />

(a=value);<br />

EXAMPLE:<br />

(t=E)(en=esource1)(dr=1)(bu=100)(so=5)<br />

(ga=18)(a=7 5);<br />

DESCRIPTION:<br />

Each node in the circuit can connect to only one voltage source.<br />

If a node needs more than one voltage source, you must split the<br />

node into two, for example, by using a resistor.<br />

Command Argument Definition<br />

en=<br />

element_name<br />

dr=<br />

n+<br />

bu=<br />

n-<br />

so=<br />

in+<br />

Element name.<br />

Positive node of the voltage source.<br />

Negative node of the voltage source.<br />

Positive controlling node.


Subcircuit<br />

Command Argument Definition<br />

ga=<br />

in-<br />

a=<br />

value<br />

SYNTAX:<br />

Negative controlling node.<br />

Voltage gain.<br />

(subckt=sub_name) (it=...) (ot=...) (bt=...)<br />

[(pr=prname1:prvalue1, prname2:prvalue2...]<br />

(m=mult_value);<br />

{<br />

<strong>EPIC</strong> netlist<br />

}<br />

Circuit Elements 33<br />

EXAMPLE:<br />

(subckt=AK)(it=a1,k1)(ot=b)(pr=rval:100, wp:4.6)<br />

{<br />

(ef=OR)(en=or)(it=a1,k1)(ot=x1);<br />

(ef=INV)(en=inv)(it=x2)(ot=b);<br />

(t=R)(en=r1)(so=x1)(dr=x2)(r=rval);<br />

(t=p)(en=p1)(ga=x2)(dr=vdd)(so=x1)(w=wp)(1=100);<br />

}<br />

After you define the subcircuit AK in the example, you can place<br />

it in the subcircuit definition using statements similar to these:<br />

(ef=AK)(en=myak)(it=c1,c2)(ot=c3)<br />

(pr=rval:100, wp:4.6);<br />

(ef=AK)(en=yourak)(it=d1,d2)(ot=d3)<br />

(pr=rval:200, wp:5.2);<br />

These examples show the AK subcircuit placed twice. The first is<br />

named myak, with signals c1 and c2 connected as inputs, signal<br />

c3 connected as the output, resistor value set to 100 ohms, and<br />

the width of transistor set to P1=4.6μm. The second is named<br />

yourak, with signals d1 and d2 connected as inputs, signal d3<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


34 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

connected as the output, resistor value set to 200 ohms, and the<br />

width of transistor P1 set to 5.2μ.<br />

DESCRIPTION:<br />

You can group elements together and define them as a subcircuit.<br />

After the subcircuit is defined, you can place it in a circuit one or<br />

more times. You can also nest it in other subcircuits.<br />

Subcircuit definitions can be placed anywhere in the netlist. For<br />

example, you can call for subcircuits at the top of a netlist and<br />

place the definitions at the end. However, to improve<br />

performance, a subcircuit definition should be placed before it is<br />

used in the netlist.<br />

A circuit description can contain any recognizable circuit<br />

element, including transistors, resistors, instances of a<br />

subcircuit, or functional level elements. However, a description<br />

cannot contain a nested subcircuit definition. It must be defined<br />

in the circuit description somewhere other than where it is<br />

called.<br />

Command Argument Definition<br />

subckt=<br />

sub_name<br />

pr=<br />

prname1:prvalue1. . .<br />

m=<br />

mult_value<br />

Defines the subcircuit name,<br />

which is called to place an<br />

instance of the subcircuit using<br />

the element function (ef).<br />

prname1 names a parameter in<br />

the subcircuit. prvalue1 is the<br />

assigned value if the parameter<br />

is not redefined elsewhere in the<br />

netlist. Dimension parameters<br />

are expressed in microns if the<br />

HSPICE keyword is included at<br />

the beginning of the netlist. See<br />

“Parameter Passing in Netlists”<br />

on page 69 for more details.<br />

Specifies a multiplier that<br />

causes the subcircuit to be<br />

treated as multiple value<br />

subcircuits connected in parallel.


Net<br />

Hierarchical Syntax<br />

Circuit Elements 35<br />

<strong>EPIC</strong> tools use periods (.) to hierarchically link names. The<br />

result is unique names. You can combine names in the following<br />

ways:<br />

■ InternalNodeName.ElementName=UniqueNodeName<br />

■ ElementName.SubcircuitElementName=NewElementName<br />

You can use a hierarchical node name only in configuration and<br />

interactive commands.<br />

The instance name myak in the example of subcircuit syntax<br />

becomes a qualifier for lower nesting-level entities. At the same<br />

time, the new name establishes the hierarchical structure of the<br />

element and node names. The following example shows a<br />

hierarchical node name:<br />

ALU.multip.reg1.loga.t4.aAM2910.bit5.INP3.t12.PA<br />

For example, to apply 500 fF of capacitance to the internal node<br />

x of the myak instance of subcircuit AK, you need the following<br />

statement in the configuration file:<br />

node_capacitance myak.x 500<br />

SYNTAX:<br />

(net=node1) (nn=node2, node3,...);<br />

EXAMPLE:<br />

(subckt=CKT)(it=A1,A2,B1,B2)(ot=D)<br />

{<br />

(t=R)(en=R1)(so=A)(dr=C1)(r=400);<br />

(t=R)(en=R2)(so=B2)(dr=C2)(r=500);<br />

(t=R)(en=R3)(so=C)(dr=D)(r=600);<br />

(net=A)(nn=A1,A2);<br />

(net=B1)(nn=B2);<br />

(net=C)(nn=C1,C2);<br />

}<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


36 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

The first net statement specifies that ports A1 and A2 are<br />

connected to node A.<br />

The second net statement specifies that port B1 is connected to<br />

port B2.<br />

The third net statement specifies that internal nodes C, C1, and<br />

C2 are all connected together.<br />

This subcircuit definition describes the circuit shown in<br />

Figure 2.<br />

B1<br />

A1<br />

A2<br />

B2<br />

A<br />

Instance<br />

R1=400<br />

R2=500<br />

C1<br />

C2<br />

Figure 2 Net statement example<br />

C<br />

CKT<br />

R3=600<br />

D


Gate-level Element<br />

Timing Checks<br />

SETUP<br />

DESCRIPTION:<br />

The syntax defines nodes connected by a net.<br />

Command Argument Definition<br />

net=<br />

node1, node2,...<br />

nn=<br />

node1, node2,...<br />

Timing Checks 37<br />

<strong>EPIC</strong> provides generic gate-level logic models. For details about<br />

how to write and use models, see the ADFMI Manual.<br />

This section provides the syntax, examples and description of<br />

various timing checks.<br />

SYNTAX:<br />

(ef=SETUP) (en=element_name) (it=node1,...noden,refnode)<br />

(sv=data_edge,ref_edge,constraint);<br />

EXAMPLE:<br />

(ef=SETUP)(en=su_check)(it=edge0,edge1,CLK)<br />

(sv=1,0,220);<br />

This example requires that the falling edges of signals at edge0<br />

and edge1 occur at least 2.2 nanoseconds before the rising edge<br />

of the reference node CLK. If the circuit does not meet this<br />

requirement, an error is reported in the .err file.<br />

DESCRIPTION:<br />

The node specified in (net=...)<br />

can be a port, a node inside a<br />

subcircuit, or a global node.<br />

The node specified in (nn=...)can<br />

be a port, a node inside a<br />

subcircuit, or a global node.<br />

This command specifies a setup time requirement between the<br />

edges of specified data signals and the edge of a reference signal.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


38 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

HOLD<br />

This measurement is performed by TimeMill and PathMill. An<br />

error message is returned in the .err file if the measured setup<br />

time is less than the constraint. The phase relationships are<br />

defined in the sv field.<br />

Command Argument Definition<br />

en=<br />

element_name<br />

it=<br />

SYNTAX:<br />

node1,... noden,<br />

refnode)<br />

sv=<br />

data_edge<br />

sv=<br />

ref_edge<br />

sv=<br />

constraint<br />

Element name<br />

Input terminals or nodes of the<br />

element<br />

Defines the edge of the data signal<br />

to check for verifying the setup<br />

time requirement. Use one of the<br />

following values:<br />

0 = rising edge<br />

1 = falling edge<br />

2 = both rising and falling edges<br />

Specifies the edge of the reference<br />

signal to check for verifying the<br />

setup time requirement. Use one<br />

of the following values:<br />

0 = rising edge<br />

1 = falling edge<br />

Specifies the setup time<br />

requirement in 0.01 nanoseconds<br />

(ef=HOLD)(en=element_name)(it=node1,...noden,refnode)<br />

(sv=data_edge,ref_edge,constraint);<br />

EXAMPLE:<br />

(ef=HOLD)(en=holdchk)(it=AD0,BD0,TT,clk1)<br />

(sv=2,1,540);


Timing Checks 39<br />

Here, both the rising and falling edges of signals at AD0, BD0 and<br />

TT must be held for at least 5.4 nanoseconds after the falling<br />

edge of the reference signal at node clk1.If the circuit does not<br />

meet this requirement, an error is reported in the .err file.<br />

DESCRIPTION:<br />

This command specifies a hold time requirement from the edge of<br />

a reference signal to the edges of specified data signals. This<br />

measurement is performed by TimeMill and PathMill. An error<br />

message is issued in the .err file if the measured hold time is less<br />

than the constraint. The phase relationships are defined in the<br />

sv field.<br />

Command Argument Definition<br />

en=<br />

element_name<br />

it=<br />

node1,... noden,<br />

refnode)<br />

sv=<br />

data_edge<br />

sv=<br />

ref_edge<br />

sv=<br />

constraint<br />

Element name.<br />

Input terminals or nodes of the<br />

element.<br />

Defines the edge of the data signal<br />

to check for verifying the hold time<br />

requirement. Use one of the<br />

following values:<br />

0 = rising edge<br />

1 = falling edge<br />

2 = both rising and falling edges<br />

Specifies the edge of the reference<br />

signal to check for verifying the<br />

hold time requirement. Use one of<br />

the following values:<br />

0 = rising edge<br />

1 = falling edge<br />

Specifies the hold time<br />

requirement in 0.01 nanoseconds.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


40 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Edge to Edge (ETOE)<br />

SYNTAX:<br />

(ef=ETOE)(en=element_name)(it=node1,...noden,refnode)<br />

(sv=data_edge,ref_edge, min_constraint, max_constraint);<br />

EXAMPLE:<br />

(ef=ETOE)(en=etoechk)(it=P10,P20,CLK)<br />

(sv=1,2,150,200);<br />

Here, the falling edges of signals at P10 and P20 are checked to<br />

ensure they are within a 1.5-2 nanosecond delay time, compared<br />

to the rising or falling edge of the reference signal (node CLK).<br />

DESCRIPTION:<br />

This command specifies an edge-to-edge requirement among<br />

specified signals. This check is performed only by TimeMill.<br />

The edge-to-edge time requirement is specified between signals<br />

at node1, node2 and so forth with respect to the signal at<br />

refnode. The phase relationships are defined in the sv field.<br />

Command Argument Definition<br />

en=<br />

element_name<br />

it=<br />

node1,... noden,<br />

refnode)<br />

sv=<br />

data_edge<br />

Element name.<br />

The input terminals or nodes of<br />

the element.<br />

Defines the edge of the data signal<br />

to check for verifying the hold time<br />

requirement. Use one of the<br />

following values:<br />

0 = rising edge<br />

1 = falling edge<br />

2 = both rising and falling edges


Pulse Width (PULSEW)<br />

Command Argument Definition<br />

sv=<br />

ref_edge<br />

sv=<br />

min_constraint<br />

sv=<br />

max_constraint<br />

SYNTAX:<br />

(ef=PULSEW) (en=element_name) (it=node1,...node_n)<br />

(sv=low_min, low_max, hi_min, hi_max);<br />

Timing Checks 41<br />

Specifies the edge of the reference<br />

signal to check for verifying the<br />

hold time requirement. Use one of<br />

the following values:<br />

0 = rising edge<br />

1 = falling edge<br />

2 = both rising and falling edges<br />

Specifies the minimum hold time<br />

requirement in 0.01 nanoseconds.<br />

Specifies the maximum hold time<br />

requirement in 0.01 nanoseconds.<br />

EXAMPLE:<br />

(ef=PULSEW)(en=pwchk)(it=clk1,clk2)<br />

(sv=150,250,450,550);<br />

Here, signals clk1 and clk2 are checked for their low pulse<br />

width between 1.5 and 2.5 ns, and their high pulse width<br />

between 4.5 and 5.5 ns.<br />

DESCRIPTION:<br />

PULSEW specifies a pulse width requirement among specified<br />

signals. This check is performed only by TimeMill.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


42 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Global Commands<br />

Global Node<br />

Pulse widths are specified for signals at node1, node2 and so<br />

forth. The pulse widths are defined in the sv field.<br />

Command Argument Definition<br />

en=<br />

element_name<br />

it=<br />

node1, ...node_n<br />

sv=<br />

low_min<br />

sv=<br />

low_max<br />

sv=<br />

hi_min<br />

sv=<br />

hi_max<br />

Some commands work globally. They affect all the data in the<br />

<strong>EPIC</strong> netlist file. The global commands are global, param and<br />

pgalias.<br />

SYNTAX:<br />

global node_name1 node_name2 ... node_name_n;<br />

EXAMPLE:<br />

global AA DSP BW;<br />

global X NN YQ BBX a vc vd;<br />

Element name.<br />

Input terminals or nodes of the<br />

element.<br />

Defines the minimum low pulse<br />

width in 0.01 nanoseconds.<br />

Defines the maximum low pulse<br />

width in 0.01 nanoseconds.<br />

Defines the minimum high pulse<br />

width in 0.01 nanoseconds.<br />

Defines the maximum high pulse<br />

width in 0.01 nanoseconds.<br />

DESCRIPTION:<br />

A global node is a node that you can refer to at any level by using<br />

a single node name. You can make nodes global if you want to


Global Parameters<br />

Global Commands 43<br />

access them across subcircuit levels. For instance, you might<br />

want to designate VDD and GND as global nodes.<br />

Including a global name as a port in a subcircuit definition<br />

cancels the global nature of that node for that particular<br />

subcircuit. For example, if a subcircuit includes the global signal<br />

VDD in the port definition, you need to specifically connect VDD<br />

when you instantiate that subcircuit.<br />

You can include more than one global statement in a netlist file.<br />

You can place global statements anywhere in the netlist file.<br />

Command Argument Definition<br />

node_name Specifies the name of a node<br />

defined as global.<br />

SYNTAX:<br />

param name1:value1 name2:value2 ... name_n:value_n;<br />

EXAMPLE:<br />

param scalep:10 cjprm:1;<br />

DESCRIPTION:<br />

Parameter values set in a global param statement are available<br />

through the entire netlist. If a local parameter has the same<br />

name as the global one, the parameter passing rule will dictate<br />

which value is in effect. For more information, see the control<br />

option param_passing_rule on page 59.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


44 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Power and Ground Aliases<br />

SYNTAX:<br />

pgalias node_name pg_name;<br />

EXAMPLE:<br />

pgalias VSS GND;<br />

pgalias VCC VDD;<br />

These examples show how to alias VSS to GND and VCC to VDD in<br />

the netlist. VSS, GND, VCC, and VDD are used as power node names<br />

in the netlist.<br />

DESCRIPTION:<br />

<strong>EPIC</strong> tools assume that global supply and ground are named VDD<br />

and GND, unless otherwise specified in the configuration file or by<br />

the pgalias command. You can use either uppercase or lowercase<br />

characters, but the cases cannot be mixed. Supply and ground<br />

signals must be defined in the circuit netlist description for<br />

proper transistor-level simulation.<br />

You can specify more than one power-ground alias<br />

simultaneously in two different pgalias statements. The<br />

pgalias command can be placed anywhere in the netlist. The<br />

pgalias command does not assume only one power signal and<br />

one ground signal are being used.<br />

Command Argument Definition<br />

node_name Any node name to be aliased.<br />

pg_name Either VDD or GND.


Netlist Control Options<br />

Netlist Control Options 45<br />

The following alphabetical listing shows all of the netlist control<br />

options. They are defined in this section.<br />

bus_notation<br />

case<br />

cspf_cap_select<br />

cspf_disable_net<br />

cspf_name_map_proc<br />

cspf_net<br />

cspf_process_ccap<br />

db_file<br />

dont_compress_db<br />

dpf_name_map_proc<br />

edif2e_args<br />

edif2e_output_file<br />

epic_cell_lib_path<br />

error_undefined_param<br />

find_top_mod<br />

floating_nodes_ok<br />

force_global_model<br />

global_override_port<br />

hier_separator<br />

ignore_excess_pin<br />

ignore_meas<br />

keep_0v_dcvs<br />

keep_distinct_cap<br />

keep_junc_diode<br />

keep_unc_node<br />

max_res_value<br />

min_cap_value<br />

min_fcap_value<br />

min_ind_value<br />

min_res_value<br />

netlist_suffix<br />

nf_expand_inst<br />

nf_flatten_inst<br />

param_passing_rule<br />

parse_error_limit<br />

prefer_model<br />

prefer_model_inst<br />

prefer_model_port_map<br />

prefer_model_port_map_inst<br />

print_hir_to_file<br />

rcr<br />

rcr_preserve_name<br />

report_missing_subckt<br />

report_unused_port<br />

scale_cap<br />

scale_cmos_length<br />

scale_cmos_width<br />

scale_res<br />

set_message_limit<br />

split_floating_cap<br />

top_module<br />

user_lib<br />

vlog2e_args<br />

vlog2e_output_file<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


46 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Control Option Syntax<br />

You specify all netlist control options in the SPICE netlist using<br />

the .options statements. You define .options statements at the<br />

beginning of the SPICE netlist.<br />

SYNTAX:<br />

.options ctrl_opt_name=value ...<br />

If you specify non-alphanumeric characters in a variable, or<br />

more than one variable as values for a control option, enclose<br />

each value in double quotation marks.<br />

The following syntax shows the control options syntax in <strong>EPIC</strong><br />

netlist format:<br />

SYNTAX:<br />

Option Definitions<br />

bus_notation<br />

ctrl_opt option1[:value1] option2 [:value2 ...];<br />

This section shows you how to use the control options. They are<br />

presented alphabetically.<br />

SYNTAX:<br />

ctrl_opt bus_notation:“value”;<br />

EXAMPLE:<br />

ctrl_opt bus_notation:“”;<br />

DESCRIPTION:<br />

This option modifies bus notation. The value is a three-character<br />

string specifying the three characters used in bus notation. The<br />

default value is “[-]”.<br />

NOTE: This control option does not apply to ADFMI models where the<br />

only bus notation allowed is the [-] default notation. Also,<br />

the -b option of the vlog2e command is ignored if used with this<br />

option. (See the section “vlog2e Command” on page 129.)


case<br />

cspf_cap_select<br />

SYNTAX:<br />

ctrl_opt case: l |L|u|U;<br />

DESCRIPTION:<br />

Netlist Control Options 47<br />

This option converts the input netlist to the specified case: l or L<br />

for lowercase; u or U for uppercase.<br />

SYNTAX:<br />

ctrl_opt cspf_cap_select: netline | sum | warning;<br />

EXAMPLE:<br />

*|NET x1.out 20fF<br />

*|GROUND_NET vss<br />

C1 x1.out vss 2FF<br />

C2 x1.out vss 2FF<br />

C3 x1.out vss 2FF<br />

C4 x1.out vss 2FF<br />

If the control option is set to sum, 8fF will be added to net<br />

x1.out. If netline is used, then 20fF will be added to the net. If<br />

warning is used, then a warning will be printed because the two<br />

values differ by more than 1%. In this case the sum of the cap<br />

values will be used.<br />

DESCRIPTION:<br />

This option can be used in an SPF file. It affects only those nets<br />

in which the capacitance can be represented as a single value. It<br />

lets you set one of three settings for SPF back-annotation of<br />

capacitance values.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


48 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

cspf_disable_net<br />

cspf_name_map_proc<br />

Argument Definition<br />

netline Selects the capacitance number on the<br />

netline (the line that starts with *|Net).<br />

sum Sums all the capacitance values<br />

associated with the net.<br />

warning Issues a warning if the netline and sum<br />

values differ.<br />

For more information about SPF files, see the section “Cadence<br />

SPF File” on page 87.<br />

SYNTAX:<br />

ctrl_opt cspf_disable_net:“value”;<br />

EXAMPLE:<br />

ctrl_opt cspf_disable_net:“a b c*”;<br />

DESCRIPTION:<br />

This option is used with SPF files. It specifies nets in the SPF file<br />

to be ignored during back-annotation. Wildcards are allowed in<br />

the net name.<br />

The cspf_net and cspf_disable_net options can be used<br />

together. When you use both options, all nets that match those<br />

specified in cspf_net will be back-annotated, and those specified<br />

in cspf_disable_net will not.<br />

NOTE: If a net is specified in both cspf_net and cspf_disable_net, it<br />

will not be back-annotated.<br />

SYNTAX:<br />

ctrl_opt cspf_name_map_proc:“value”;<br />

EXAMPLE:<br />

ctrl_opt cspf_name_map_proc:“nm.tcl”;


cspf_net<br />

cspf_process_ccap<br />

DESCRIPTION:<br />

Netlist Control Options 49<br />

This option corrects name mismatches between the netlist and<br />

the Cadence SPF file. For details, see the section “Cadence SPF<br />

File” on page 87.<br />

SYNTAX:<br />

ctrl_opt cspf_net:“value”;<br />

EXAMPLE 1:<br />

ctrl_opt cspf_net:“A[*]”;<br />

This example back-annotates SPF for nets matching A[*].<br />

EXAMPLE 2:<br />

ctrl_opt cspf_net:“B C D”;<br />

This example back-annotates SPF for nets B, C & D.<br />

DESCRIPTION:<br />

This option specifies the nets to which you want parasitic<br />

information back-annotated in the original netlist. If you don’t<br />

specify this option, all nets found in the SPF file will be<br />

processed. You can use this option more than once. Wildcards are<br />

allowed in the net name.<br />

SYNTAX:<br />

ctrl_opt cspf_process_ccap;<br />

DESCRIPTION:<br />

This option activates netlist compiler routines that process all<br />

coupling capacitors in SPF nets. By default, the compiler ignores<br />

all coupling capacitors in SPF nets.<br />

The split_floating_cap option affects the coupling capacitors in<br />

SPF nets if cspf_process_ccap is also specified.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


50 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

db_file<br />

dont_compress_db<br />

SYNTAX:<br />

ctrl_opt db_file:filename;<br />

EXAMPLE:<br />

ctrl_opt db_file:example;<br />

This example causes the netlist compiler to generate the header<br />

file hd_example.edb and the data file example.edb.<br />

DESCRIPTION:<br />

This control option is used with the <strong>EPIC</strong> binary file. It specifies<br />

the binary file prefix and triggers the generation of the file.<br />

For further information, see “Device Parameter Format File” on<br />

page 96.<br />

SYNTAX:<br />

ctrl_opt dont_compress_db [: 0|: 1];<br />

EXAMPLE 1:<br />

ctrl_opt dont_compress_db:1;<br />

This example causes the netlist compiler to generate the<br />

uncompressed header file hd_example.edb and uncompressed<br />

data file example.edb.<br />

EXAMPLE 2:<br />

ctrl_opt dont_compress_db;<br />

This example forces the netlist compiler not to compress the<br />

binary file. The header file and data file are not generated.<br />

DESCRIPTION:<br />

This control option is used with the <strong>EPIC</strong> binary file. It controls<br />

the compression of the netlist database file. By default, netlist<br />

database files (.edb) are compressed by gzip.<br />

For further information, see “<strong>EPIC</strong> Binary File” on page 98.


dpf_name_map_proc<br />

edif2e_args<br />

SYNTAX:<br />

ctrl_opt dpf_name_map_proc:filename.tcl;<br />

Netlist Control Options 51<br />

EXAMPLE:<br />

ctrl_opt dpf_name_map_proc:map.tcl;<br />

The map.tcl file is the tcl script containing the tcl name mapping<br />

procedures.<br />

DESCRIPTION:<br />

This control option is used with the device parameter format file<br />

to convert the element or node names in the file to the format<br />

used in the original netlist file.<br />

For further information, see “Device Parameter Format File” on<br />

page 96.<br />

SYNTAX:<br />

ctrl_opt edif2e_args:“value”;<br />

EXAMPLE:<br />

ctrl_opt edif2e_args:"-p -r";<br />

This example starts the <strong>EPIC</strong> netlist translator, edif2e, with the<br />

options -p and -r.<br />

DESCRIPTION:<br />

This option specifies the command-line options to run the Edif2e<br />

utility if an input netlist is in EDIF format. It uses multiple<br />

command lines; you can specify options enclosed in quotes.<br />

For information about the Edif2e utility, see “EDIF Netlist<br />

Translator” on page 118.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


52 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

edif2e_output_file<br />

epic_cell_lib_path<br />

SYNTAX:<br />

error_undefined_param<br />

ctrl_opt edif2e_output_file:filename;<br />

DESCRIPTION:<br />

The <strong>EPIC</strong> netlist compiler reads in an EDIF netlist through the<br />

<strong>EPIC</strong> netlist translator edif2e. The translated <strong>EPIC</strong> format<br />

netlist is stored in the specified file.<br />

For information about the Edif2e utility, see “EDIF Netlist<br />

Translator” on page 118.<br />

SYNTAX:<br />

ctrl_opt epic_cell_lib_path:“path_list”;<br />

EXAMPLE:<br />

ctrl_opt epic_cell_lib_path:”/cell1:/usr/cell2”;<br />

This syntax example adds two directories /cell1 and /usr/<br />

cell2 to the cell library search path.<br />

DESCRIPTION:<br />

This option specifies the path to cell libraries. You can specify<br />

multiple paths separated by a colon.<br />

SYNTAX:<br />

ctrl_opt error_undefined_param;<br />

DESCRIPTION:<br />

By default, the netlist compiler assumes the value of an<br />

undefined parameter to be 0. It issues a warning message but<br />

continues to run. This option specifies that the undefined<br />

parameter is to be treated as an error. The netlist compiler<br />

aborts processing after reporting the error.


find_top_mod<br />

floating_nodes_ok<br />

force_global_model<br />

global_override_port<br />

SYNTAX:<br />

ctrl_opt find_top_mod;<br />

DESCRIPTION:<br />

Netlist Control Options 53<br />

This option directs the netlist compiler to find the subcircuit<br />

definition that has no instantiation and to use it as the top<br />

module. No value is required.<br />

SYNTAX:<br />

ctrl_opt floating_nodes_ok;<br />

DESCRIPTION:<br />

By default, floating nodes in a circuit are treated like errors, and<br />

simulation aborts. This control option forces simulation to<br />

continue even though floating nodes are encountered.<br />

SYNTAX:<br />

ctrl_opt force_global_model;<br />

DESCRIPTION:<br />

This control option forces the netlist compiler to treat all SPICE<br />

models as top-level models. Therefore, the compiler doesn’t<br />

recognize subcircuit definition static scoping in the netlist. The<br />

default behavior is such that all models defined in a subcircuit<br />

definition are associated with the subcircuit scope.<br />

SYNTAX:<br />

ctrl_opt global_override_port;<br />

DESCRIPTION:<br />

By default, if a node name is defined both as a global node and a<br />

port of a subcircuit definition, it is used as a port inside the<br />

subcircuit. If the global_override_port option is set, the node<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


54 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

hier_separator<br />

ignore_excess_pin<br />

ignore_meas<br />

is treated as a global node inside the subcircuit. However, the<br />

port will not be connected to anything inside the subcircuit.<br />

SYNTAX:<br />

ctrl_opt hier_separator:“value”;<br />

EXAMPLE:<br />

ctrl_opt hier_separator:"/";<br />

DESCRIPTION:<br />

This option designates a single character as a hierarchical<br />

separator.<br />

SYNTAX:<br />

ctrl_opt ignore_excess_pin;<br />

DESCRIPTION:<br />

By default, the <strong>EPIC</strong> netlist compiler does not allow instances<br />

with more pins than the number of ports in the subckt definition<br />

or functional models. Also, it does not allow any pin to be<br />

connected to a port that does not exist in the subckt or<br />

functional models. When you specify the ignore_excess_pin<br />

option, the netlist compiler issues warnings only for those<br />

instances. Using this option slows the compilation process.<br />

SYNTAX:<br />

ctrl_opt ignore_meas [:0|1];<br />

EXAMPLE 1:<br />

ctrl_opt ignore_meas; /* ignore */<br />

This example specifies that .measure statements will not be<br />

processed in the SPICE netlist.<br />

EXAMPLE 2:<br />

ctrl_opt ignore_meas:1; /* ignore */


keep_0v_dcvs<br />

keep_distinct_cap<br />

keep_junc_diode<br />

Netlist Control Options 55<br />

This example also specifies that .measure statements will not<br />

be processed in the SPICE netlist.<br />

EXAMPLE 3:<br />

ctrl_opt ignore_meas:0; /* don’t ignore */<br />

This example specifies that .measure statements will be<br />

processed.<br />

DESCRIPTION:<br />

This option specifies whether or not to process .measure<br />

statements in the SPICE netlist.<br />

SYNTAX:<br />

ctrl_opt keep_0v_dcvs;<br />

DESCRIPTION:<br />

This control option forces the netlist compiler to retain a zero<br />

volt DC voltage source. If the netlist doesn’t contain any currentcontrolled<br />

dependent sources, by default the netlist compiler<br />

removes a zero volt DC voltage source, and the two terminals are<br />

connected together.<br />

SYNTAX:<br />

ctrl_opt keep_distinct_cap;<br />

DESCRIPTION:<br />

By default, when one terminal is connected to a constant voltage<br />

node, it is treated as node capacitance. This option causes the<br />

netlist compiler to treat it as a capacitor element.<br />

SYNTAX:<br />

ctrl_opt keep_junc_diode;<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


56 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

keep_unc_node<br />

max_res_value<br />

min_cap_value<br />

DESCRIPTION:<br />

By default, the netlist compiler converts junction diodes to<br />

capacitors. This option retains the junction diodes, overriding<br />

such a conversion. No value is required.<br />

SYNTAX:<br />

ctrl_opt keep_unc_node;<br />

DESCRIPTION:<br />

By default, the netlist compiler removes all unconnected nodes<br />

when they constitute more than ten percent of the total number<br />

of nodes. This option disables this default for situations when<br />

you want to retain all unconnected nodes. No value is required.<br />

SYNTAX:<br />

ctrl_opt max_res_value:”value”;<br />

DESCRIPTION:<br />

This option specifies the maximum resistance of a resistor.<br />

Resistors with values greater than or equal to the maximum<br />

value are removed as open circuit. The default value is 1e12<br />

ohms.<br />

SYNTAX:<br />

ctrl_opt min_cap_value:”value”;<br />

DESCRIPTION:<br />

This option specifies the minimum value of a grounded capacitor.<br />

Grounded capacitors with a capacitance of less than or equal to<br />

the specified minimum value are removed from the netlist. The<br />

default value is 0. Values specified without units are assumed to<br />

be femtofarads.


min_fcap_value<br />

min_ind_value<br />

min_res_value<br />

SYNTAX:<br />

ctrl_opt min_fcap_value:value;<br />

DESCRIPTION:<br />

Netlist Control Options 57<br />

This option specifies the minimum value of a floating capacitor.<br />

Floating capacitors with a capacitance of less than or equal to<br />

the specified minimum value are removed from the netlist. The<br />

default value is 0. Values specified without units are assumed to<br />

be femtofarads.<br />

SYNTAX:<br />

ctrl_opt min_ind_value:value;<br />

EXAMPLE:<br />

ctrl_opt min_ind_value:0.5;<br />

This example removes all inductors smaller than 0.5<br />

nanoHenrys.<br />

DESCRIPTION:<br />

This option specifies a minimum value for inductors. Inductors<br />

with an inductance of less than or equal to the specified<br />

minimum value are removed from the netlist. The value is in<br />

nanoHenrys.<br />

SYNTAX:<br />

ctrl_opt min_res_value:value;<br />

DESCRIPTION:<br />

This option specifies the minimum resistance of a resistor, in<br />

ohms. Resistors with a value less than or equal to the specified<br />

minimum value are removed from the netlist and are replaced by<br />

short circuit. Resistors with parameterized resistance values<br />

will also be checked against min_res_value. For RailMill the<br />

default value is 0.01 ohm, otherwise the default is 0.1 ohm.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


58 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

netlist_suffix<br />

nf_expand_inst<br />

NOTE: When the ctrl_opt rcr command is used, only zero value<br />

resistors are removed prior to submission to the RC reduction<br />

algorithm.<br />

SYNTAX:<br />

ctrl_opt netlist_suffix:“value”;<br />

EXAMPLE 1:<br />

ctrl_opt netlist_suffix:”spice .spic”;<br />

This example specifies files ending in .spic as SPICE format.<br />

EXAMPLE 2:<br />

ctrl_opt netlist_suffix:”edif .ed”;<br />

This example specifies files ending in .ed as EDIF format.<br />

EXAMPLE 3:<br />

ctrl_opt netlist_suffix:”vlog .v”;<br />

This example specifies files ending in .v as Verilog format.<br />

EXAMPLE 4:<br />

ctrl_opt netlist_suffix:”epic”;<br />

This example specifies files without suffixes as <strong>EPIC</strong> format.<br />

DESCRIPTION:<br />

This option specifies the filename suffix for identifying a netlist<br />

during a search of cell library directories. The value is a<br />

character string containing the netlist format and optional<br />

suffix. The netlist format name is one of the valid keywords used<br />

with the -n command-line option. If you don’t specify a suffix, a<br />

file without a suffix will be identified as the specified netlist<br />

format. For a list of supported formats and corresponding<br />

suffixes, see the section “Compiled Files” on page 79.<br />

SYNTAX:<br />

ctrl_opt nf_expand_inst:”instance [instance] ...”;


nf_flatten_inst<br />

param_passing_rule<br />

EXAMPLE:<br />

ctrl_opt nf_expand_inst:”i1.i2.i4”;<br />

DESCRIPTION:<br />

Netlist Control Options 59<br />

This option lets you control the net flattening hierarchy. During<br />

the process of hierarchical design flattening, each node has its<br />

unique name and index throughout the connection hierarchy.<br />

This option introduces an instance-based boundary to a node so<br />

that each net connected to the instance is treated as a unique<br />

node through the hierarchy. The higher instantiations in the<br />

hierarchy carry the setup from the higher level. instance<br />

specifies the instance boundary.<br />

NOTE: If you use both the nf_flatten_inst and the nf_expand_inst<br />

control options, nf_expand_inst takes precedence.<br />

SYNTAX:<br />

ctrl_opt nf_flatten_inst:”instance [instance] ...”;<br />

EXAMPLE:<br />

ctrl_opt_nf_flatten_inst:”i1.i2.i4”;<br />

DESCRIPTION:<br />

This option lets you control the net flattening hierarchy. During<br />

the process of hierarchical design flattening, each node has its<br />

unique name and index throughout the connection hierarchy.<br />

This option introduces an instance-based boundary to a node so<br />

that the net connected to the instance is treated as one node. The<br />

higher instantiations in the hierarchy carry the setup from the<br />

higher level. instance specifies the instance boundary.<br />

NOTE: If you use both the nf_flatten_inst and the nf_expand_inst<br />

control options, nf_expand_inst takes precedence.<br />

SYNTAX:<br />

ctrl_opt param_passing_rule:top_down|bottom_up;<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


60 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

parse_error_limit<br />

EXAMPLE:<br />

ctrl_opt param_passing_rule:top_down;<br />

ctrl_opt param_passing_rule:bottom_up;<br />

DESCRIPTION:<br />

This option specifies the parameter passing rule. By default,<br />

higher level definitions override lower levels (top_down).<br />

SYNTAX:<br />

ctrl_opt parse_error_limit:value;<br />

EXAMPLE:<br />

ctrl_opt parse_error_limit:5;<br />

This example causes the compilation to halt after encountering<br />

five errors.<br />

DESCRIPTION:<br />

Without this option, the compiler does not abort due to errors<br />

until the error count exceeds the default count of 20 errors. Use<br />

this option to override the default count.<br />

NOTE: The netlist compiler aborts at fatal errors regardless of the error<br />

limit specified by this option.<br />

prefer_model<br />

prefer_model_port_map<br />

ctrl_opt prefer_model:“value”;<br />

ctrl_opt prefer_model_port_map:“value”;<br />

EXAMPLE:<br />

ctrl_opt prefer_model:”INV NAND”;<br />

ctrl_opt prefer_model_port_map:”*”;<br />

DESCRIPTION:<br />

These options specify the subcircuit definition names, so that if<br />

a functional model exists, it will be used instead of the subcircuit<br />

definition. Wildcards are allowed in the name.


prefer_model_inst<br />

prefer_model_port_map_inst<br />

print_hir_to_file<br />

Netlist Control Options 61<br />

The difference between prefer_model_port_map and<br />

prefer_model is the port mapping: prefer_model uses a<br />

position-based port map, while prefer_model_port_map uses a<br />

name-based port map.<br />

The prefer_model_port_map option performs name-based port<br />

mapping in two steps:<br />

1 The subcircuit port name is found using position-based port<br />

mapping.<br />

2 The port name is used to locate the port of the functional<br />

model.<br />

SYNTAX:<br />

ctrl_opt prefer_model_inst:“instance_model<br />

[instance_model]...”;<br />

ctrl_opt prefer_model_port_map_inst: “instance_model<br />

[instance_model]...”;<br />

EXAMPLE:<br />

ctrl_opt prefer_model_inst:i1.i2 mod”;<br />

ctrl_opt prefer_model_port_map_inst:”i1.i2 mod”;<br />

DESCRIPTION:<br />

These control options are instance-based versions of<br />

prefer_model and prefer_model_port_map. The instance<br />

model replaces the subcircuit instantiation for the “instance.”<br />

instance_model must be the full hierarchical instance name.<br />

The difference between the two control options is port mapping.<br />

prefer_model_inst uses a position-based port map, while<br />

prefer_model_port_map_inst uses a name-based port map.<br />

SYNTAX:<br />

ctrl_opt print_hir_to_file:filename;<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


62 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

rcr<br />

EXAMPLE:<br />

ctrl_opt print_hir_to_file:hierfile;<br />

DESCRIPTION:<br />

The compiler generates a .hir file. Use this option to specify a<br />

filename to which hierarchical information will be printed. The<br />

file format is one record per line, and each record has two fields:<br />

instance hierarchical name and subcircuit name.<br />

SYNTAX:<br />

ctrl_opt rcr [:awe];<br />

EXAMPLE 1:<br />

ctrl_opt rcr;<br />

This example shows that a parallel/series reduction is<br />

performed.<br />

EXAMPLE 2:<br />

ctrl_opt rcr:awe;<br />

This example shows that awe reduction is performed. Specifying<br />

awe as the netlist control option value results in a more accurate<br />

calculation.<br />

DESCRIPTION:<br />

Without the rcr option, the default for min_res_value is 0.01<br />

ohms and the default for the min_cap_value is 0. With the rcr<br />

option, the tool performs RC reduction, thereby looking for<br />

parallel and series combinations. The default for min_res_value<br />

becomes 5 ohms, and the default for min_cap_value becomes<br />

1fF. RC reduction affects resistors and capacitors with values<br />

greater than the minimum. You can change the min_res_value<br />

and min_cap_value defaults.


cr_preserve_name<br />

SYNTAX:<br />

Netlist Control Options 63<br />

ctrl_opt rcr_preserve_name[:“subckt_name [node_name ...]”];<br />

EXAMPLE 1:<br />

ctrl_opt rcr_preserve_name:“INV1 invin invout”;<br />

This example preserves the names of nodes invin and invout<br />

in subcircuit INV1.<br />

EXAMPLE 2:<br />

ctrl_opt rcr_preserve_name:“XOR2A xor*”;<br />

This example preserves names for all nodes with names<br />

beginning with “XOR” in the subcircuit named XOR2A.<br />

EXAMPLE 3:<br />

ctrl_opt rcr_preserve_name:“INV1”;<br />

This example preserves the names of all nodes in the subcircuit<br />

named INV1.<br />

EXAMPLE 4:<br />

ctrl_opt rcr_preserve_name:“/ in out”;<br />

This example preserves names for the in and out nodes at the<br />

top-most level.<br />

DESCRIPTION:<br />

This control option specifies the name of the subcircuit in which<br />

nodes are to be preserved during RC reduction. subckt_name can<br />

contain the wildcard character “*”, as well as hierarchical<br />

dividers. For the top-most level subcircuit name, use “/”.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


64 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

report_missing_subckt<br />

report_unused_port<br />

scale_cap<br />

node_name can also contain the wildcard character “*”. If you<br />

don’t specify an argument, all node names in the specified<br />

subcircuit are preserved.<br />

Command Argument Definition<br />

subckt_name The name of the subcircuit in which<br />

nodes are to be preserved during<br />

RC reduction.<br />

node_name One or more nodes to be preserved<br />

during RC reduction.<br />

SYNTAX:<br />

ctrl_opt report_missing_subckt;<br />

DESCRIPTION:<br />

This option directs the netlist compiler to check if all subcircuit<br />

definitions being called exist after parsing. If they don’t exist,<br />

the compiler aborts the process.<br />

SYNTAX:<br />

ctrl_opt report_unused_port;<br />

DESCRIPTION:<br />

This option directs the netlist compiler to report all unused ports<br />

during subckt instantiation.<br />

SYNTAX:<br />

ctrl_opt scale_cap:value;<br />

EXAMPLE:<br />

ctrl_opt scale_cap:0.5;


scale_cmos_length<br />

scale_cmos_width<br />

scale_res<br />

DESCRIPTION:<br />

Netlist Control Options 65<br />

This option specifies a value for scaling the value of capacitors in<br />

the design. The value argument is used as a multiplier to the<br />

values of all capacitors in the design.<br />

SYNTAX:<br />

ctrl_opt scale_cmos_width:value;<br />

ctrl_opt scale_cmos_length:value;<br />

DESCRIPTION:<br />

These options specify scale factors for the width or length of<br />

MOS devices. The options affect only width and length, not area<br />

and perimeter. The default value is 1.<br />

EXAMPLE:<br />

ctrl_opt scale_cmos_width:0.8;<br />

scale_cmos_length:1.2;<br />

This example scales the width of each MOS device by 0.8 and the<br />

length by 1.2.<br />

SYNTAX:<br />

ctrl_opt scale_res:value;<br />

EXAMPLE:<br />

ctrl_opt scale_res:0.5;<br />

This example specifies a scale factor of 0.5 for resistance.<br />

DESCRIPTION:<br />

This option specifies a scale factor for resistance. The resistance<br />

value of every resistor is multiplied by this scale factor. The<br />

default value is 1.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


66 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

set_message_limit<br />

split_floating_cap<br />

SYNTAX:<br />

ctrl_opt set_message_limit:”message_id limit”;<br />

ctrl_opt set_message_limit:”message_type limit”;<br />

EXAMPLE 1:<br />

ctrl_opt set_message_limit:”warning 5”;<br />

This example shows that only 5 warning messages will be<br />

displayed.<br />

EXAMPLE 2:<br />

ctrl_opt set_message_limit:”20201087 0”<br />

This example shows that all messages with an id equal to<br />

20201087 will not be displayed.<br />

DESCRIPTION:<br />

This control option specifies the output limit for a message ID or<br />

type.<br />

Command Argument Definition<br />

message_id An 8-digit message identification<br />

number, which can be copied from<br />

the simulation tools log.<br />

message_type Must be one of the following types<br />

of messages: ERROR (for error<br />

messages), WARNING (for warning<br />

messages), or NORMAL (for<br />

informational messages.<br />

limit Specifies the output limit.<br />

SYNTAX:<br />

ctrl_opt split_floating_cap [:value];<br />

EXAMPLE:<br />

ctrl_opt split_floating_cap:2.0;


top_module<br />

user_lib<br />

Netlist Control Options 67<br />

This example splits the floating capacitor and doubles the<br />

capacitance on both nodes.<br />

DESCRIPTION:<br />

This option causes the netlist compiler to split all floating<br />

capacitors in a netlist into two separate capacitors (one at each<br />

node) connected to ground. The value specifies the splitting ratio<br />

of the capacitance. Thus, the split node capacitance on each node<br />

would be the original floating capacitance multiplied by value.<br />

If you don’t use this option, the netlist compiler reads the<br />

floating capacitors as unconnected to power or ground. Floating<br />

capacitors can be processed by TimeMill and PowerMill, but<br />

PathMill will display a warning and terminate.<br />

For information about floating capacitors, see “Floating<br />

Capacitor” on page 15.<br />

SYNTAX:<br />

ctrl_opt top_module:cell_name;<br />

EXAMPLE:<br />

ctrl_opt top_module:my_top_cell;<br />

This example specifies my_top_cell as the top cell.<br />

DESCRIPTION:<br />

This option specifies the cell to be used as the top module for<br />

simulation. This option performs the same function as the -m<br />

command-line option in <strong>EPIC</strong> tools.<br />

SYNTAX:<br />

ctrl_opt user_lib:”library_1 [library_2 ...]”;<br />

EXAMPLE:<br />

ctrl_opt user_lib:"get_w.so";<br />

param w1:4.5;<br />

(t=p)(en=m1)(so=1)(dr=2)(ga=3)(w=get_w(1.0, w1));<br />

double<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


68 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

vlog2e_args<br />

get_w(d1, d2)<br />

double d1, d2;<br />

{<br />

return d1 * d2;<br />

}<br />

This example shows that the width of the transistor m1 is<br />

calculated by a C function called get_w() which has two<br />

arguments. The function get_w() is compiled into a dynamic<br />

linkable library called get_w.so.<br />

DESCRIPTION:<br />

This option lets you specify a list of dynamic linked libraries that<br />

contain functions called by the netlist. All the functions used by<br />

the netlist are assumed to return a type double and all the<br />

arguments that are of type double. The maximum number of<br />

arguments in a function is 20.<br />

NOTE: Make sure the function in the netlist is consistent with the<br />

actual C function declaration.<br />

SYNTAX:<br />

ctrl_opt vlog2e_args:“value”;<br />

EXAMPLE:<br />

ctrl_opt vlog2e_args:"-t";<br />

This syntax starts the vlog2e netlist translator with the -t<br />

option.<br />

DESCRIPTION:<br />

This option specifies the command line options to run vlog2e for<br />

input netlists in Verilog format. Multiple command-line options<br />

can be specified inside double quotation marks.<br />

You can use the VLOG2E_ARGS environment variable to control<br />

how vlog2e is started. If VLOG2E_ARGS is set, it will take<br />

precedence over the vlog2e control option.<br />

For information about vlog2e, see “Verilog Netlist Translator” on<br />

page 124.


vlog2e_output_file<br />

SYNTAX:<br />

ctrl_opt vlog2e_output_file:filename;<br />

DESCRIPTION:<br />

Parameter Passing in Netlists 69<br />

The <strong>EPIC</strong> netlist compiler reads in a Verilog netlist through the<br />

<strong>EPIC</strong> netlist translator vlog2e. The translated <strong>EPIC</strong> format<br />

netlist is stored in the specified file.<br />

For information about vlog2e, see “Verilog Netlist Translator” on<br />

page 124.<br />

Parameter Passing in Netlists<br />

Parameters can be defined at four different levels in the <strong>EPIC</strong><br />

netlist:<br />

■ globally<br />

■ within a subcircuit<br />

■ in a subcircuit call<br />

■ as a subcircuit definition heading<br />

The rules governing parameter passing allow you to use<br />

parameters that are defined inside subcircuits and can conform<br />

to the parameter passing rules used by HSPICE.<br />

If you want to follow the HSPICE parameter passing convention,<br />

enter the keyword HSPICE at the beginning of the <strong>EPIC</strong> netlist.<br />

For details, see the section “Parameter Passing Using HSPICE<br />

Rules” on page 71.<br />

NOTE: When you use the HSPICE keyword, specify the parameters in<br />

microns, but specify actual device sizes in units of 0.01 microns.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


70 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Parameter Definitions<br />

The following table shows the four levels at which you can define<br />

parameters.<br />

Level Relative Position Definition<br />

1 Highest level Parameters defined at the global<br />

level using param statements. See<br />

Example 1.<br />

2 Second highest level Parameters defined in a subcircuit<br />

using param statements that are<br />

local to the subcircuit. See Example<br />

2.<br />

3 Second lowest level Parameters defined in a subcircuit<br />

call using the (pr=...) statement. See<br />

Example 3.<br />

4 Lowest level Parameters defined in a subcircuit<br />

definition heading using the (pr=...)<br />

statement. See Example 4.<br />

EXAMPLE 1:(highest level)<br />

param global_param: 0;<br />

EXAMPLE 2:(second highest level)<br />

(subckt=inv)(it=A)(ot=Z){<br />

param n_width: 10 len: 1.0;<br />

param p_width: 20;<br />

(t=p)(en=t1)(dr=Z)(ga=A)(so=vdd)(w=p_width)<br />

(l=len);<br />

(t=n)(en=t2)(dr=Z)(ga=A)(so=gnd)(w=n_width)<br />

(l=len);<br />

}<br />

EXAMPLE 3:(second lowest level)<br />

(ef=inv)(en=e1)(ot=x)(it=A)(pr=dl:1.20);<br />

EXAMPLE 4:(lowest level)<br />

(subckt=inv)(it=A)(ot=Z)(pr=dl:2){<br />

(t=p)(en=t1)(dr=Z)(ga=A)(so=vdd)(w=2000)(l=dl);<br />

(t=n)(en=t2)(dr=Z)(ga=A)(so=gnd)(w=1000)(l=dl);<br />

}


Parameter Passing Using HSPICE Rules<br />

Parameter Passing in Netlists 71<br />

In addition to the default <strong>EPIC</strong> parameter passing rules, you can<br />

specify the HSPICE command in <strong>EPIC</strong> netlists to use HSPICE<br />

parameter passing rules. The HSPICE convention specifies that<br />

parameters defined at higher levels override parameters defined<br />

at lower levels.<br />

The following two examples illustrate HSPICE parameter<br />

passing rules.<br />

EXAMPLE 1:<br />

HSPICE;<br />

(subckt=inv)(it=A)(ot=Z)(pr=dl:2){<br />

(t=p)(en=t1)(dr=Z)(ga=A)(so=vdd)(w=2000)(l=dl);<br />

(t=n)(en=t2)(dr=Z)(ga=A)(so=gnd)(w=1000)(l=dl);<br />

(subckt=buf)(it=A)(ot=Z)(pr=dl:1){<br />

(ef=inv)(en=e1)(ot=x)(it=A);<br />

(ef=inv)(en=e2)(ot=Z)(it=x);<br />

}<br />

(ef=buf)(en=e1)(ot=out)(it=in);<br />

In this example, the lengths of all the transistors are 100 (1<br />

micron). The value used for parameter dl in subcircuit buf<br />

overrides the definition in subcircuit inv.<br />

EXAMPLE 2:<br />

HSPICE;<br />

(subckt=inv)(it=A)(ot=Z)(pr=dl:2){<br />

(t=p)(en=t1)(dr=Z)(ga=A)(so=vdd)(w=2000)(l=dl);<br />

(t=n)(en=t2)(dr=Z)(ga=A)(so=gnd)(w=1000)(l=dl);<br />

}<br />

(subckt=buf)(it=A)(ot=Z)(pr=dl:1){<br />

(ef=inv)(en=e1)(ot=x)(it=A)(pr=dl:1.20);<br />

(ef=inv)(en=e2)(ot=Z)(it=x);<br />

}<br />

(ef=buf)(en=e1)(ot=out)(it=in)(pr=dl:0.80);<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


72 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

General Usage Rules<br />

In this example, the lengths of all the transistors are 80 (.8<br />

micron). The value used for parameter dl is taken from the<br />

highest level call, the call to subcircuit buf, and not from the call<br />

to subcircuit inv inside buf, or from the defaults specified in<br />

subcircuits buf or inv.<br />

The following rules apply to using parameters.<br />

■ A parameter name must start with a letter and can contain<br />

only letters, digits, underscores (_), and percent signs (%).<br />

■ You can define and use any number of parameters. The order<br />

of the parameter definitions in an <strong>EPIC</strong> netlist file is<br />

arbitrary. All definitions at a given level of hierarchy are<br />

gathered into a single list and applied to all the statements<br />

at that level.<br />

■ The scope of a parameter definition is strictly maintained. In<br />

other words, a parameter defined in a subcircuit definition<br />

block can be used only within that block and at levels that<br />

are lower in the hierarchy. The global level is regarded as the<br />

highest level in the hierarchy.<br />

■ A redefinition of a parameter in the same hierarchical level<br />

replaces the old definition.


Functions and Expressions<br />

Functions and Expressions 73<br />

<strong>EPIC</strong> netlist syntax supports the use of arithmetic expressions<br />

and functions for specifying values.<br />

Arithmetic<br />

Operators<br />

A function is an arithmetic expression with a specific name.<br />

Arguments can be passed to a function. You can assign the same<br />

name to two functions as long as the number of arguments differ.<br />

The <strong>EPIC</strong> netlist also supports the following built-in math<br />

library functions:<br />

Use the following syntax for a function definition.<br />

SYNTAX:<br />

+ (plus)<br />

- (minus)<br />

* (asterisk)<br />

/ (slash)<br />

% (percent)<br />

^ (caret)<br />

addition<br />

subtraction<br />

multiplication<br />

division<br />

percentage<br />

exponential value<br />

Operands Numbers, parameters, or values<br />

returned from function calls.<br />

Parentheses Groups any part of the expression to<br />

change the order of the operations.<br />

acos cbrt floor pow<br />

acosh ceil hypot rint<br />

asin cos log sin<br />

asinh cosh log10 sinh<br />

atan exp log1p sqrt<br />

atan2 expm1 log2 tan<br />

atanh fabs logb tanh<br />

define func_name (arg1, arg2, ..., arg_n) = expression;<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


74 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Other Statements<br />

Initial Condition<br />

EXAMPLE:<br />

define F(x) = x * 1e-15;<br />

param c1:20;<br />

(c=F(10))(nn=A);<br />

(c=F(c1))(nn=B);<br />

(c=F(c1 + 10))(nn=C);<br />

This section explains statements that you can use to specify:<br />

■ an initial condition on a node.<br />

■ a node to be simulated in PWL mode.<br />

■ sense amplifiers.<br />

■ additional netlists.<br />

SYNTAX:<br />

ic node_name value;<br />

EXAMPLE:<br />

ic APLL 4.5;<br />

The example applies an initial condition of 4.5 volts to node<br />

APLL.<br />

DESCRIPTION:<br />

In <strong>EPIC</strong> netlist format, you can specify an initial condition by<br />

using the command ic, followed by the node name and value. You<br />

can specify ic statements inside a subcircuit definition or in the<br />

top level. For statements specified at the top level, you can use<br />

the hierarchical node name. You can also specify an initial<br />

condition in the configuration file.


NOTE: PathMill does not accept initial conditions.<br />

PWL Specification<br />

Sense Pair<br />

Command Argument Definition<br />

SYNTAX:<br />

pwl node_name_1 [node_name_2...];<br />

Other Statements 75<br />

node_name Name of the node to which the initial<br />

condition is attached.<br />

value Voltage value assigned to the node at<br />

time zero.<br />

EXAMPLE:<br />

pwl APLL;<br />

In the example, the node APLL is simulated in PWL mode.<br />

DESCRIPTION:<br />

In the <strong>EPIC</strong> netlist format, you can specify a node to be<br />

simulated in PWL mode with the pwl command, followed by a<br />

node name. You can also specify a PWL node in the configuration<br />

file.<br />

NOTE: PathMill does not accept PWL mode in a netlist.<br />

Command Argument Definition<br />

node_name Name of the node to be simulated in<br />

PWL mode.<br />

NOTE: The gate capacitance is integrated over the supply voltage range<br />

including the subthreshold low portion. As a result, the average<br />

is higher for higher voltages. It should always be less than the<br />

strong inversion maximum C ox value.<br />

SYNTAX:<br />

sense_pair element_name_1 [element_name_2];<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


76 Chapter 2 <strong>EPIC</strong> Netlist Format<br />

Include Files<br />

EXAMPLE:<br />

sense_pair t1 t2;<br />

This example defines the transistors t1 and t2 as a sense pair.<br />

DESCRIPTION:<br />

In <strong>EPIC</strong> netlist format, you can specify a sense pair by using the<br />

sense_pair command, followed by two element names. This<br />

command specifies sense amplifiers. You can also specify a sense<br />

pair in the configuration file.<br />

NOTE: PathMill does not accept the sense_pair command.<br />

Command Argument Definition<br />

element_name Specifies the name of the<br />

transistors defined as a sense pair.<br />

SYNTAX:<br />

include filename<br />

DESCRIPTION:<br />

In the <strong>EPIC</strong> netlist, use the include statement to include<br />

another netlist file. The included file must also be an <strong>EPIC</strong><br />

netlist. The netlist compiler reads the contents of the included<br />

file at the location where you specify the include statement.<br />

Nested include files are allowed. A netlist recursively including<br />

itself is not allowed.<br />

Command Argument Definition<br />

filename Specifies the name of an additional<br />

netlist.<br />

NOTE: The .inc statement is for HSPICE format.


Chapter 3<br />

Netlist Compiler and<br />

Translators


78 Chapter 3 Netlist Compiler and Translators


Overview<br />

Compiled Files<br />

Overview 79<br />

This chapter describes the <strong>EPIC</strong> netlist compiler and provides<br />

information about the netlist formats supported by the compiler.<br />

It also shows you how to work with Cadence SPF files, device<br />

parameter format files, and to set up an <strong>EPIC</strong> binary file.<br />

Information about utilities that translate SPICE, EDIF and<br />

Verilog netlists to <strong>EPIC</strong> netlists is also provided, as well as how<br />

to use the Ecrypt utility for encrypting netlist files, which can be<br />

read by the compiler.<br />

Netlists are compiled every time you start an <strong>EPIC</strong> simulator.<br />

When you use the compiler, a message appears on the screen<br />

indicating the compiler is in use. The compiler does not produce<br />

intermediate files during compilation.<br />

The netlist compiler supports the following netlist formats,<br />

shown with their abbreviations.<br />

Netlist Format Abbreviation<br />

LSIM lsim<br />

SPICE spice<br />

Verilog vlog<br />

EDIF edif<br />

<strong>EPIC</strong> epic<br />

Cadence SPF cspf<br />

To specify netlist formats, use the -n command-line option.<br />

SYNTAX:<br />

-nformat<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


80 Chapter 3 Netlist Compiler and Translators<br />

EXAMPLE:<br />

-nspice net1 -nvlog net2<br />

This example reads net1 as a SPICE netlist and net2 as a<br />

Verilog netlist.<br />

If you specify a netlist without a format option (that is, -n is not<br />

followed by a format), use a filename with one of the following<br />

suffixes to indicate a particular format.<br />

Format Filename Suffix<br />

LSIM .N, .n<br />

SPICE .sp, .spi, .SP, .SPI<br />

Verilog .v, .V<br />

EDIF .ed, .edif, .ED, .EDIF<br />

<strong>EPIC</strong> .en, .EN<br />

Cadence SPF .spf, .dspf, .cspf, .hspf<br />

Device Parameter Format .dpf<br />

<strong>EPIC</strong> Binary File .edb<br />

A filename with either no extension or with a different extension<br />

from those listed above indicates the netlist is in <strong>EPIC</strong> netlist<br />

format.<br />

EXAMPLE:<br />

-n net1.spi net2.v net3.x<br />

This example reads net1.spi as a SPICE netlist, net2.v as a<br />

Verilog netlist, and net3.x as an <strong>EPIC</strong> netlist.<br />

You can specify netlists of mixed format with the -n commandline<br />

option.<br />

The netlist compiler can read LSIM and SPICE format netlists,<br />

but separate licenses are required for each format. For Verilog or<br />

EDIF netlists, the netlist compiler will first call vlog2e or


Compiled Files 81<br />

edif2e, respectively, to convert the netlist to <strong>EPIC</strong> format before<br />

reading it in; however, no <strong>EPIC</strong> netlist file will be produced.<br />

The netlist compiler provides library support. You can specify<br />

netlist library directories in three ways:<br />

■ Use the environment variable <strong>EPIC</strong>_CELL_LIB_PATH<br />

■ Set the environment variable <strong>EPIC</strong>_CELL_LIB_PATH with<br />

the netlist control option epic_cell_lib_path<br />

■ Use the -L command-line option when running most <strong>EPIC</strong><br />

tools. (For details, see the reference guide for the tool you are<br />

using.)<br />

Specify library directories as a list of directory names separated<br />

by colons (:).<br />

Directories are searched in the same order in which you list<br />

them. The directories specified in <strong>EPIC</strong>_CELL_LIB_PATH are<br />

searched first before those specified in the -L command-line<br />

option. The <strong>EPIC</strong>_CELL_LIB_PATH, if set externally, overrides<br />

the setting in the netlist. Whenever there is an instantiation,<br />

and no subcircuit definition or functional model of that name is<br />

found, the netlist compiler searches the library directories for a<br />

file with that element name, with or without a recognized<br />

extension, as described previously. The search occurs in the<br />

following order: no extension, .en, .EN, .sp, .SP, .spi, .SPI, .n,<br />

.N, .ed, .ED, .edif, .EDIF, .v, .V.<br />

The netlist compiler can detect encrypted netlist files (.eef) with<br />

the Ecrypt utility. For information about this utility, see “The<br />

Ecrypt Utility” on page 131.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


82 Chapter 3 Netlist Compiler and Translators<br />

LSIM Netlist Features and Limitations<br />

LSIM supports:<br />

■ four terminal transistors<br />

■ parameter passing in LSIM is supported<br />

■ <strong>EPIC</strong> stimulus in a separate file<br />

LSIM does not support:<br />

■ the BUILDMODE statement, an LSIM compiler directive<br />

that allows you to select between multiple simulation models<br />

■ <strong>EPIC</strong> stimulus inside an LSIM netlist<br />

EXAMPLE:<br />

CELL A A(d=.5){<br />

IN a;<br />

OUT b;<br />

R R1 r=d*10 s=a d=b;<br />

}<br />

The parameter d in the cell calculates the value of the r<br />

parameter.<br />

SPICE Netlist Characteristics<br />

Characteristics of a SPICE netlist include:<br />

■ All ports in subcircuits are bidirectional. To instantiate a<br />

SPICE subcircuit in an <strong>EPIC</strong> netlist, use (bt=...).<br />

■ The following elements are supported: resistor, capacitor,<br />

diode, BJT, MOSFET, and independent source (only dc, pwl<br />

and pulse).<br />

■ The negative node of an independent source is assumed to be<br />

ground.<br />

■ Unsupported statements are saved in the .ignore file.


HSPICE Netlist Syntax<br />

General Control Options<br />

Input File Control Options<br />

HSPICE Netlist Syntax 83<br />

This section provides information about HSPICE netlist syntax.<br />

All essential HSPICE syntax is supported.<br />

The <strong>EPIC</strong> netlist compiler interprets only <strong>EPIC</strong> netlist control<br />

options and those in the following list. All others are ignored.<br />

ASPEC DEFL DEFW SEARCH<br />

DEFAD DEFNRD SCALE TNOM<br />

DEFAS DEFPD SCALM WL<br />

If SCALE and one or more DEFAD, DEFAS, DEFL, DEFNRD<br />

DEFPD, or DEFW options are defined, SCALE must be defined<br />

first; otherwise, the MOSFET default will not be scaled properly.<br />

The input file control options are:<br />

.DCVOLT .IC .OPTIONS<br />

.END .INCLUDE .PARAM<br />

.ENDS .LIB .SUBCKT<br />

.EOM .MACRO<br />

.GLOBAL .MODEL<br />

NOTE: .ALTER is treated the same as .END, and subsequent options are<br />

ignored.<br />

The SPICE netlist reader reads standard SPICE and HSPICE<br />

netlists with commands placed anywhere in the netlist.<br />

Specify all netlist control options in the SPICE netlist using the<br />

.options statement. Define an .options statement, or<br />

statements, at the beginning of the SPICE netlist. For<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


84 Chapter 3 Netlist Compiler and Translators<br />

Analysis Options<br />

Output Control<br />

information about control options, see “Netlist Control Options”<br />

on page 45 and “SPF Control Options” on page 88.<br />

.options ctrl_opt_name= “value” ...<br />

EXAMPLE:<br />

.options case=”U” bus_notation=””<br />

min_cap_value=”10f”<br />

The <strong>EPIC</strong> netlist compiler understands .TRAN and .TEMP.<br />

Transient monte carlo, transient temperature sweep, transient<br />

parameter sweep, and transient optimization are not supported.<br />

You can use the .TRAN statement simulation end point to set the<br />

simulation end time (for TimeMill and PowerMill only). This is<br />

equivalent to the -t command-line option.<br />

The <strong>EPIC</strong> netlist compiler supports output control in HSPICE<br />

netlists with the following features:<br />

■ .PRINT, .PLOT, and .PROBE statements are supported and<br />

are treated exactly the same.<br />

■ Transient analysis only. Statements specifying other types of<br />

analyses (DC, AC, etc.) will be ignored.<br />

■ In addition to supporting the .PRINT TRAN v(a,b)<br />

expression, the simulator also supports the general .PRINT<br />

label_name=par(f(x1, x2, x3,...)) expression, where operands<br />

in the function “f” can be pin currents, branch currents, node<br />

voltages, or some label previously defined by a .PRINT<br />

statement. Operators can be ^, +, -, *, /, sin(), cos(), and so on.<br />

■ The label type (math, voltage, or current) is automatically<br />

detected and incorporated into the signal name and attribute<br />

in the .index line printed in the <strong>EPIC</strong> .out file. For example,<br />

for the statement .PRINT diff=par(v(a)-v(b)), the signal<br />

name “v(diff)” and attribute “v” are used in the output file.


Elements<br />

HSPICE Netlist Syntax 85<br />

This section shows how elements are supported by the <strong>EPIC</strong><br />

netlist compiler.<br />

Rxxx - Resistor<br />

You can specify either the resistance or the model to<br />

automatically calculate the resistance.<br />

Cxxx - Capacitor<br />

You can either specify capacitance directly or use the<br />

automatic calculation if the model is given.<br />

Lxxx - Inductor<br />

Supported in linear form only.<br />

Kxxx - Mutual Inductor<br />

Supported in standard HSPICE format.<br />

Txxx - Ideal Transmission Line<br />

Supported in standard HSPICE format.<br />

Vxxx - Independent Voltage Source<br />

All source types except AC are supported. The syntax for<br />

each supported source type is found in Appendix D. For 0v<br />

dc voltage source, if no current controlled elements are<br />

present in the circuit, it will be discarded. Its two<br />

terminals will be connected together.<br />

Ixxx - Independent Current Source<br />

All source types except AC are supported.<br />

Exxx - Voltage Controlled Voltage Source<br />

Supported with the ACE engine in the following forms:<br />

linear, polynomial, pwl, transformer, behavior, delay, linear<br />

combination, multi-input gate and laplace function.<br />

Gxxx - Voltage Controlled Current Source<br />

Supported with the ACE engine in the following forms:<br />

linear, polynomial, pwl, behavior, vcr, vccap, multi-input<br />

gate and laplace function.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


86 Chapter 3 Netlist Compiler and Translators<br />

Fxxx - Current Controlled Current Source<br />

Supported with the ACE engine in the following forms:<br />

linear, polynomial, pwl, delay, and multi-input gate.<br />

Hxxx - Current Controlled Voltage Source<br />

Supported with the ACE engine in the following forms:<br />

linear, polynomial, pwl, and multi-input gate.<br />

Dxxx - Diode<br />

With the ACE engine, the netlist compiler reads in level 1,<br />

level 2 and level 3 diodes. No conversion is performed.<br />

Without ACE, the level 2 diode is discarded; the level 3<br />

diode is converted to capacitor. If keep_junc_diode is not<br />

set, level 1 diode is converted to capacitor. The netlist<br />

compiler assumes that the diode is reverse biased; cjo and<br />

cjswo are calculated average values. (For information about<br />

reading diodes as capacitors, see “Reading Diodes as<br />

Capacitors” on page 20.)<br />

Qxxx - BJT<br />

Without ACE, this is ignored by default.<br />

Mxxx - MOSFET<br />

The <strong>EPIC</strong> netlist format permits the use of three terminals<br />

to describe the connection of a four-terminal MOS device.<br />

The default bulk name is VDD for PMOS and GND for NMOS.<br />

This default connection differs from HSPICE.<br />

Jxxx - JFET or MESFET<br />

Supported in standard HSPICE format.<br />

Xyyy - Subcircuit Element<br />

Supported in standard HSPICE format.<br />

NOTE: Uxxx - Lossy Transmission is not supported by the <strong>EPIC</strong> netlist<br />

compiler.


Cadence SPF File<br />

SPF Processing<br />

Cadence SPF File 87<br />

The <strong>EPIC</strong> netlist compiler interprets a file with a .cspf extension<br />

as a Cadence SPF file. Here is an example of how to specify an<br />

SPF file as part of your run:<br />

powrmill -n example.cspf<br />

NOTE: The .cspf extension tells the netlist compiler that this is a<br />

Cadence SPF file. Without the .cspf extension, you must specify<br />

-ncspf filename.<br />

The SPF information for a particular netlist is discarded if the<br />

<strong>EPIC</strong> netlist compiler detects any one of the following<br />

connectivity errors:<br />

■ The net does not exist in the netlist.<br />

■ The pin or instance pin does not exist in the netlist.<br />

■ A pin or instance pin does not connect to the net in the<br />

netlist.<br />

■ The SPF information for a net describes an unconnected<br />

network.<br />

For each SPF net, the netlist compiler creates a subcircuit<br />

definition containing all the parasitics and creates an instance of<br />

the subcircuit at the top level. The SPF net name is used for the<br />

subcircuit definition name. The instance name is in the format<br />

“cspf”, where XXX is the SPF net name. To specify the<br />

instance port connections, use the <strong>EPIC</strong> back-annotation naming<br />

convention, as follows:<br />

P- Pin identifier<br />

I- Instance pin identifier<br />

: Instance port delimiter<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


88 Chapter 3 Netlist Compiler and Translators<br />

SPF Control Options<br />

cspf_cap_select<br />

EXAMPLE 1:<br />

: *<br />

*|NET A 1.028E-04FF<br />

*|P (A O 0.00E00PF 30.39 3.00)<br />

*|I (XI4:PA0 XI4 PA0 I 0.00E00PF 19.67 2.67)<br />

*|S (A:2 30.31 2.67)<br />

R1 A A:2 1.37614E-03K<br />

RD1 A XI4:PA0 0.00E00K<br />

CD1 XI4:PA0 VSS 0.00E00PF<br />

C1 A VSS 4.81112E-05PF<br />

C2 A:2 VSS 6.01185E-05PF<br />

EXAMPLE 2:<br />

(subckt=A)(bt=A,XI4:PA0){<br />

(t=R)(en=R1)(so=A)(dr=A:2)(r=1.37E-03K);<br />

(t=R)(en=RD1)(so=A)(dr=X14:PA0)(r=0.00E00KK);<br />

(c=4.811E-05PF)(nn=A);<br />

c=6.011E-05PF)(nn=A:2);<br />

}<br />

(ef=A)(en=cspf)(bt=P-:A,I-XI4:PA0);<br />

The SPF net in Example 1 is treated like an <strong>EPIC</strong> subcircuit in<br />

Example 2. The instance’s first biput port is connected to "P-:A"<br />

(net A), and the second biput port is connected to "I-X14:PA0"<br />

(port PA0 of instance X14).<br />

This section provides descriptions of the control options that can<br />

be used in the SPF file.<br />

SYNTAX:<br />

ctrl_opt cspf_cap_select: netline | sum | warning<br />

EXAMPLE:<br />

*|NET x1.out 20ff<br />

*|GROUND_NET vss<br />

C1 x1.out vss 2FF<br />

C2 x1.out vss 2FF


cspf_name_map_proc<br />

C3 x1.out vss 2FF<br />

C4 x1.out vss 2FF<br />

Cadence SPF File 89<br />

If the control option is set to sum, 8ff will be added to net<br />

x1.out. If netline is used, then 20ff will be added to the net. If<br />

warning is used, then a warning will be printed because the two<br />

values differ by more than 1%. In this case the sum of the cap<br />

values will be used.<br />

DESCRIPTION:<br />

This option affects only those nets in which the capacitance can<br />

be represented as a single value.You can select one of three<br />

settings for SPF back-annotation of capacitance values.<br />

Argument Definition<br />

netline Selects the capacitance number on the<br />

netline. The netline is the line that<br />

starts with *|Net.<br />

sum Sums all the capacitance values<br />

associated with the net<br />

warning Issues a warning if the netline and sum<br />

values differ<br />

All of the following conditions must be present to collapse SPF<br />

into a single capacitance value:<br />

■ SPF net is not reduced SPF (RSPF.)<br />

■ No instance pins are defined for the net.<br />

■ No subnodes are defined for the net<br />

■ Only capacitor elements are defined for the net<br />

SYNTAX:<br />

ctrl_opt cspf_name_map_proc:“value”;<br />

EXAMPLE 1:<br />

ctrl_opt cspf_name_map_proc:“nm.tcl”;<br />

This example specifies the name-mapping procedure file nm.tcl.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


90 Chapter 3 Netlist Compiler and Translators<br />

cspf_net<br />

EXAMPLE 2:<br />

/* FILE: name_map.tcl */<br />

proc cspf_name_map {a} {<br />

regsub /X [string toupper $a] {} b<br />

return $b<br />

}<br />

This name mapping procedure strips leading Xs from the<br />

instance name and converts them to uppercase in the SPF file.<br />

DESCRIPTION:<br />

For the netlist compiler to correctly process connectivity<br />

information, the net names, pin names, and instance pin names<br />

must match the hierarchical name in the original netlist. If there<br />

is a mismatch, you can use a name mapping procedure to correct<br />

it. The name mapping procedure is a TCL procedure called<br />

cspf_name_map_proc. It takes one argument, the name (pin<br />

name or instance pin name) in the SPF file, and returns a name<br />

that matches the hierarchical name in the original netlist.<br />

Use this control option to specify the filename containing the<br />

name mapping procedure. The netlist compiler will<br />

automatically call the procedure for every net name, pin name,<br />

instance pin name, driver name, and load name encountered.<br />

An example of the name mapping file (cspf_name_map.tcl) can be<br />

found in <strong>EPIC</strong>_HOME/machind/lib/epic.<br />

SYNTAX:<br />

ctrl_opt cspf_net: “value”<br />

EXAMPLE 1:<br />

ctrl_opt cspf_net:"A[*]";<br />

This example back-annotates SPF for nets matching A[*].<br />

EXAMPLE 2:<br />

ctrl_opt cspf_net:"B C D";<br />

This example back-annotates SPF for nets B, C & D.


cspf_disable_net<br />

cspf_process_ccap<br />

DESCRIPTION:<br />

Cadence SPF File 91<br />

This option specifies the nets to which you want parasitic<br />

information back-annotated in the original netlist. If you do not<br />

specify this option, all nets found in the SPF file will be<br />

processed. You can use this option more than once. Wild cards<br />

are allowed in the net name.<br />

SYNTAX:<br />

ctrl_opt spf_disable_net:“value”;<br />

EXAMPLE:<br />

ctrl_opt cspf_disable_net:“a b c*”;<br />

DESCRIPTION:<br />

This control option specifies nets in the SPF file to be ignored<br />

during back-annotation. Wildcards are allowed in the net name.<br />

The cspf_net and cspf_disable_net options can be used<br />

together. When you use both options, all nets that match those<br />

specified in cspf_net will be back-annotated, and those specified<br />

in cspf_disable_net will not.<br />

NOTE: If a net is specified in both cspf_net and cspf_disable_net, it<br />

will not be back-annotated.<br />

SYNTAX:<br />

ctrl_opt cspf_process_ccap;<br />

DESCRIPTION:<br />

This option activates netlist compiler routines that process all<br />

coupling capacitors in SPF nets. By default, the compiler ignores<br />

all coupling capacitors in SPF nets.<br />

The split_floating_cap option affects the coupling capacitors in<br />

SPF nets if cspf_process_ccap is also specified.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


92 Chapter 3 Netlist Compiler and Translators<br />

SPF Netlist Reader Limitations<br />

This section describes the limitations of the SPF netlist reader.<br />

The limitations are:<br />

■ Limited source-to-drain connection checking. See the<br />

“Source-to-Drain Checking” section that follows.<br />

■ Only DelayMill can handle multiple drivers in RSPF files. All<br />

other <strong>EPIC</strong> tools will probably fail to recognize multiple<br />

drivers without issuing an error message.<br />

Source-to-Drain Checking<br />

If the netlist compiler detects any mismatch in source-to-drain<br />

connections described in the transistor netlist and the Cadence<br />

SPF file, it automatically makes corrections, but the net name<br />

specified must be the highest level name.<br />

EXAMPLE:<br />

/* transistor netlist */<br />

(subckt=test)(it=A)(ot=B) {<br />

(t=p)(en=p1)(so=A)(dr=B)....<br />

...<br />

}<br />

(ef=test)(en=test1)(it=n1)(ot=n2);<br />

Use the following format for the Cadence SPF file:<br />

*Cadence SPF file<br />

*|NET n1...<br />

*|p1:d...<br />

R1 p1:d n1:1 100 $ n1 is connected to source in<br />

netlist ...<br />

The mismatch in the following Cadence SPF file cannot be<br />

detected.<br />

* Cadence SPF file<br />

*|NET test1:A $ test1:A is the same as n1<br />

*|l p1:d<br />

R1 p1:d test1:A:1 100


Common SPF Warnings<br />

Cadence SPF File 93<br />

This section lists and describes common SPF warnings.<br />

Connectivity Error<br />

When you back-annotate an SPF net, the SPF net must have the<br />

same number of instance pins as the real net, for the particular<br />

level of hierarchy involved. If connections are made to higher<br />

levels of the netlist, then the SPF net information must include<br />

a pin statement. The SPF net must also be connected. If the<br />

connectivity in the RC network is disjoint, a message appears, as<br />

shown in the following example.<br />

EXAMPLE:<br />

WARNING:0x2020807c:SPF connectivity error on<br />

node’topi’<br />

spf net ’topi’ has the following missing instance<br />

pins:<br />

- x3.m1:g (connecting back to x1:i)<br />

- x3.m0:g (connecting back to x1:i)<br />

WARNING:0x2020807e:SPF connectivity error on<br />

node’topi’<br />

spf net ’topi’ is discarded because it contains<br />

2 disconnected components:<br />

- component # 0 contains the following pins:<br />

x4:i<br />

- component # 1 contains the following pins:<br />

x1:i<br />

x2:i<br />

x3:i<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


94 Chapter 3 Netlist Compiler and Translators<br />

Duplicate Global Node<br />

A net that traverses several levels of hierarchical is backannotated<br />

with several individual net statements, and if you try<br />

to back-annotate the same individual net section again, this<br />

error message appears.<br />

EXAMPLE:<br />

duplicate global node I-x1.m0:d<br />

duplicate global node I-x1.m1:d<br />

Net Does Not Exist<br />

The net cannot be located in the main circuit database. This can<br />

happen if the hierarchy character in the SPF file is not the same<br />

as in the main circuit netlist.<br />

EXAMPLE:<br />

WARNING:0x2020807b:SPF net junk does not exist.<br />

Discarded.<br />

Hierarchical SPF Back-Annotation<br />

Hierarchical SPF (HSPF) back-annotation is similar to the<br />

normal (flat) SPF back-annotation with two exceptions:<br />

■ The SPF file is used to describe parasitics inside all<br />

instantiations of a module<br />

■ Back-annotation is done for all instances of the module<br />

Before using an SPF file for hierarchical back-annotation, make<br />

sure the SPF file does not contain any connectivity errors. To<br />

clear errors:<br />

1 Use the -ncspf command line option to force the hierarchical<br />

SPF file to be interpreted as a normal SPF file<br />

2 Use the -m command line option to specify the top-level<br />

module name.


Cadence SPF File 95<br />

3 If necessary, use the cspf_name_map_proc control option to<br />

specify a TCL procedure to resolve any name mapping issues.<br />

The same TCL procedure will also be needed for hierarchical<br />

back-annotation.<br />

4 After making sure the SPF file is cleared of errors, use the<br />

command-line option -nhspf or name the SPF file with the<br />

.hspf extension to prepare the SPF file for hierarchical backannotation.<br />

If the SPF file already has .SUBCKT/.ENDS statements, the<br />

netlist compiler will automatically use this information.<br />

NOTE: The netlist compiler uses only the module name and ignores<br />

everything else on the .subckt line.<br />

SPF for multiple modules can also be described in one SPF file<br />

with multiple .SUBCKT/.ENDS statements. If there is no<br />

.SUBCKT/.ENDS statement in the SPF file and you do not want<br />

to edit the SPF file to add these statements, you an rename the<br />

filename using the module name as the filename prefix.<br />

In the following example, mux04.spf is the SPF file for module<br />

mux04.<br />

EXAMPLE 1:<br />

1% pathmill -n netlist -ncspf mux04.spf -m mux04...<br />

This example runs PathMill analysis only on module mux04. The<br />

file mux04.spf is used as a normal Cadence SPF file.<br />

EXAMPLE 2:<br />

2% pathmill -n netlist -nhspf mux04.spf...<br />

In this example, the PathMill analysis is done on the full<br />

chip.The file mux04.spf is specified as hierarchical SPF file and<br />

will be back-annotated to every instance of mux04.<br />

NOTE: You cannot selectively back-annotate certain instances. If<br />

hierarchical SPF information is provided for one module, then<br />

all instances of that module will get back-annotation<br />

information.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


96 Chapter 3 Netlist Compiler and Translators<br />

Device Parameter Format File<br />

The Device Parameter Format file (.dpf) is a flattened listing of<br />

transistors with post-layout parameter values. The format is<br />

similar to SPICE. After reading in the .dpf file, the netlist<br />

compiler replaces the corresponding transistor parameter value<br />

with the extracted value.<br />

The following example of a netlist file shows two inverters<br />

chained together.<br />

*net.spi<br />

.global vdd<br />

.subckt inv in out<br />

mp vdd in o vdd pmos w=11.24u 1=0.4u as=0 ad=0 ps=0 pd=0<br />

mn gnd in o gnd nmos w=7.80u 1=0.4u as=0 ad=0 ps=0 pd=0<br />

.ends<br />

x1 a b inv<br />

x2 b c inv<br />

.end<br />

The .dpf file for this circuit is net.dpf and contains a listing of the<br />

transistors with extracted as, ad, ps and pd values, as follows:<br />

*net.dpf<br />

x1.mp vdd a b vdd pmos ad=1.559p as=1.559p pd=0.784u ps=0.784u<br />

x1.mn gnd a b gnd nmos ad=1.245p as=1.245p pd=1.632u ps=0.784u<br />

x2.mp vdd b c vdd pmos ad=1.559p as=1.559p pd=0.784u ps=0.784u<br />

x2.mn gnd b c gnd nmos ad=1.245p as=1.245p pd=1.632u ps=0.784u<br />

.end<br />

The command syntax for power simulation for this circuit<br />

including the .dpf file is:<br />

powrmill -nspice net.spi -ndpf net.dpf ...<br />

The netlist compiler uses the element name in the .dpf file to<br />

locate the corresponding transistor inside the database. It uses<br />

the node name to check if the transistor’s source and drain


dpf_name_map_proc<br />

Device Parameter Format File 97<br />

terminals are swapped. Therefore, the name of the .dpf file must<br />

conform to the following naming conventions:<br />

■ The hierarchical separator used in the .dpf file must be the<br />

same as that used in the original netlist file.<br />

■ The format of the hierarchical name can be in either topdown<br />

or bottom-up format.<br />

You can add an extra character in front of the element name. For<br />

example, the following names can be used in the previous<br />

example of a .dpf file: x1.mp, mp.x1, or mx1.mp.<br />

If you use a different naming convention in the .dpf file, you<br />

must use the control option dpf_name_map_proc to cause the<br />

tcl script to convert the element or node names in the .dpf file to<br />

the format used in the original netlist file.<br />

NOTE: The naming convention in all .dpf files for a circuit must be<br />

consistent.<br />

The following control option can be used with the .dpf file.<br />

SYNTAX:<br />

ctrl_opt dpf_name_map_proc:filename.tcl<br />

EXAMPLE:<br />

ctrl_opt dpf_name_map_proc:map.tcl<br />

The map.tcl file is the tcl script containing the tcl name<br />

mapping procedures.<br />

DESCRIPTION:<br />

This control option is used to convert the element or node names<br />

in the .dpf file to the format used in the original netlist file.<br />

An example of the name mapping file (dpf_name_map.tcl) can be<br />

found in <strong>EPIC</strong>_HOME/machind/lib/epic.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


98 Chapter 3 Netlist Compiler and Translators<br />

<strong>EPIC</strong> Binary File<br />

The <strong>EPIC</strong> binary file is used to repeat simulation of the same<br />

netlist design under the same tool. Compile time can be as much<br />

as ten times faster if you use the binary file.<br />

The <strong>EPIC</strong> binary file is always generated by the <strong>EPIC</strong> netlist<br />

compiler. The file consists of two files: a header file<br />

(hd_filename.edb) and a data file (filename.edb). By default, the<br />

netlist compiler compresses the data file with gzip.<br />

The netlist compiler interprets a file with a .edb extension as an<br />

<strong>EPIC</strong> binary file. You need only to specify the data filename on<br />

the command line; the compiler derives the header filename from<br />

the data filename.<br />

EXAMPLE:<br />

powrmill -n example.edb<br />

This example shows you how to include the example.edb binary<br />

file in the run.<br />

NOTE: Before you use the <strong>EPIC</strong> binary file, you need to consider the<br />

following characteristics:<br />

■ All netlist-related control options and configuration<br />

commands affect the content of binary files. You cannot<br />

change any of the control options when you choose to have<br />

the netlist compiler read the binary file instead of<br />

recompiling netlist files.<br />

■ The <strong>EPIC</strong> binary file is platform-dependent.<br />

■ The <strong>EPIC</strong> binary file is tool-dependent. Thus, binary files<br />

generated by PowerMill are not compatible with PathMill.<br />

■ You cannot compile another netlist when using a binary file.


Control Options<br />

db_file<br />

dont_compress_db<br />

SPICE Netlist Translator 99<br />

The following control options can be used in the <strong>EPIC</strong> binary file:<br />

SYNTAX:<br />

ctrl_opt db_file:filename;<br />

This control option specifies the binary file’s prefix and triggers<br />

the generation of the file.<br />

EXAMPLE:<br />

ctrl_opt db_file:”example”;<br />

This example causes the netlist compiler to generate the header<br />

file hd_example.edb and the data file example.edb.<br />

SYNTAX:<br />

ctrl_opt dont_compress_db:[0|1];<br />

This option controls the compression of the netlist database file.<br />

By default, netlist database files (.edb) are compressed by gzip.<br />

EXAMPLE:<br />

ctrl_opt dont_compress_db:”1”;<br />

This example causes the netlist compiler to generate the<br />

uncompressed header file hd_example.edb and the uncompressed<br />

data file example.edb.<br />

SPICE Netlist Translator<br />

This section describes how to translate a SPICE netlist to an<br />

<strong>EPIC</strong> netlist using the <strong>EPIC</strong> spice2e utility.<br />

This utility reads three files that must be in the local directory:<br />

modelfile, aliasfile and defaultfile. Each file modifies the<br />

translation in a specific way. These filenames are reserved for<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


100 Chapter 3 Netlist Compiler and Translators<br />

Model File<br />

spice2e usage and cannot be used for any other purpose in the<br />

local directory.<br />

SYNTAX:<br />

model subcircuit_name<br />

[inputs n]<br />

[outputs n]<br />

[biputs n]<br />

[state n]<br />

[external]<br />

end model<br />

EXAMPLE 1:<br />

model SUBCKT100<br />

inputs 2<br />

outputs 1<br />

biputs 8<br />

inputs 3<br />

outputs 2<br />

state 1<br />

end model<br />

This example defines SUBCKT100 as a subcircuit with five input<br />

pins, three output pins, and eight bidirectional pins. The pins<br />

are listed in the following order: the first two pins are input pins,<br />

the third is an output pin, pins 4 through 11 are bidirectional,<br />

and so on. SUBCKT100 has one state and is expanded when<br />

referenced.<br />

You can use the abbreviation .sub (or .SUB) in place of .SUBCKT<br />

in your SPICE file. You can use either all lowercase or uppercase<br />

characters for this abbreviation.<br />

EXAMPLE 2:<br />

model INV<br />

inputs 1<br />

outputs 1<br />

external<br />

end model


Alias File<br />

SPICE Netlist Translator 101<br />

This example defines a second subcircuit, INV, that has one<br />

input and one output pin. There are no bidirectional pins and no<br />

state information. The keyword external suppresses the<br />

translation of the subcircuit and calls a model or expects a<br />

subcircuit definition from another netlist file during simulation.<br />

DESCRIPTION:<br />

The model file contains the following subcircuit information:<br />

■ Number of input pins, output pins, and biput pins<br />

■ Pin ordering for subcircuit interface<br />

■ Number of states<br />

■ Whether the subcircuit should be expanded or a model<br />

substituted from a model library<br />

SYNTAX:<br />

set original_name as translated_name<br />

EXAMPLE:<br />

set 0 as gnd<br />

set 1 as vdd<br />

set VDD as vdd<br />

set GND as gnd<br />

set vss as gnd<br />

set %VCC! as vdd<br />

set %VBB! as gnd<br />

set VCC as vdd<br />

set 200 as RDN<br />

In this example, the first line translates all nodes named 0 in the<br />

SPICE netlist to GND in the <strong>EPIC</strong> netlist. The sixth line<br />

translates all references of %VCC! in the SPICE netlist to VDD in<br />

the <strong>EPIC</strong> netlist.<br />

DESCRIPTION:<br />

The alias file contains aliases for nodes in the SPICE netlist. The<br />

set command maps node names that are not allowed in the <strong>EPIC</strong><br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


102 Chapter 3 Netlist Compiler and Translators<br />

netlist to legal <strong>EPIC</strong> node names. The most common example is<br />

translating !VDD, a standard name used in layout-versusschematic<br />

programs, to either vdd or VDD, as required by <strong>EPIC</strong><br />

tools. During translation, node names in the SPICE netlist<br />

specified in alias file set commands are converted to the<br />

alternate node name.<br />

Command Argument Definition<br />

original_name Specifies the node name in the<br />

SPICE netlist<br />

translated_name Specifies the new node name in the<br />

<strong>EPIC</strong> netlist<br />

SYNTAX:<br />

alias original_name as vdd | gnd<br />

EXAMPLE:<br />

alias CCD as vdd<br />

alias Q[0] as gnd<br />

In this example, spice2e recognizes the node names CCD and<br />

Q[0]. They are kept in the <strong>EPIC</strong> netlist as multiple names of<br />

power nodes for separate power reporting.<br />

At the same time, spice2e generates the following configuration<br />

file commands:<br />

set_vdd CCD<br />

set_gnd Q[0]<br />

The name of the configuration file is specified by the<br />

spice2e -b or spice2e -o command arguments. You must<br />

include the configuration file generated by spice2e when<br />

running <strong>EPIC</strong> tools.<br />

DESCRIPTION:<br />

Use the alias command for multiple VDD and GND nodes. In the<br />

<strong>EPIC</strong> netlist, you can use multiple names for VDD and GND<br />

nodes, which indicate power nodes. The spice2e translator<br />

associates the related capacitors so they are not separated from<br />

the capacitors connected to them. The original node names are<br />

kept in the <strong>EPIC</strong> netlist.


Default File<br />

Diodes<br />

SPICE Netlist Translator 103<br />

Here are examples of lines translated by spice2e.<br />

SPICE example:<br />

C1 RCD CCD 1f => spice2e => (C=1) (NN=RCD);<br />

MOS example:<br />

M1 3 4 CCD CCD pmos... spice2e => (T=pmos) (...) (SO=CCD)...<br />

The default file specifies information required to map SPICE<br />

MOS, diode elements, resistors, and capacitors to <strong>EPIC</strong> netlist<br />

format.<br />

To specify the default length and width of MOS devices, and to<br />

replace SPICE MOS model names with <strong>EPIC</strong> MOS model names,<br />

use the following syntax:<br />

spice_model default_width default_length <strong>EPIC</strong>_model<br />

Command Argument Definition<br />

spice_model Specifies the name of the SPICE<br />

model<br />

default_width Specifies the default width in<br />

microns<br />

default_length Specifies the default length in<br />

microns<br />

<strong>EPIC</strong>_model Specifies the <strong>EPIC</strong> model name<br />

that replaces the SPICE model<br />

name<br />

You can keep the diodes in <strong>EPIC</strong> netlists by using the<br />

spice2e -d command argument if both of the following<br />

conditions are true:<br />

■ These diodes are not source or drain to substrate diodes<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


104 Chapter 3 Netlist Compiler and Translators<br />

■ These diodes are nongeometric (area AREA and peripheral<br />

PJ are dimensionless factors, HSPICE level 1) diodes<br />

If the spice2e -d command argument is not used, by default<br />

spice2e converts diodes to capacitors. This means the diode<br />

capacitance parameters must be placed in the default file for<br />

conversion. Source or drain to substrate diodes or geometric<br />

diodes (area AREA and peripheral PJ are values with units,<br />

HSPICE level 3) must be converted to capacitors.<br />

There are two ways to compute the capacitance values when a<br />

diode is converted. The first, less accurate method, is to use the<br />

following formula:<br />

=Area x cj + Perimeter x cjp<br />

You need to provide the voltage average capacitances cj and cjp.<br />

You cannot directly apply the zero-biased capacitance model<br />

values cjo and cjp in the preceding formula since the capacitance<br />

value will be too large. Instead, the average values should be<br />

roughly 0.67 times the zero-biased values.<br />

Use the following syntax to specify the values in the default file:<br />

SYNTAX:<br />

spice_diode_model cj cjp <strong>EPIC</strong>_diode_model<br />

Command Argument Definition<br />

spice_diode_model Specifies the name of the SPICE<br />

diode model<br />

cj Specifies the average bottom<br />

junction capacitance<br />

cjp Specifies the average sidewall<br />

peripheral capacitance<br />

<strong>EPIC</strong>_diode_model Specifies the <strong>EPIC</strong> model name<br />

that replaces the SPICE model<br />

name


SPICE Netlist Translator 105<br />

The second method applies a more accurate calculation for<br />

computing the capacitance by using the equations provided for<br />

the cja and cjsw commands (see page 183). The variables in the<br />

equations are described in the following syntax:<br />

SYNTAX:<br />

spice_diode_model keyword=value ... <strong>EPIC</strong>_diode_model<br />

Keyword Definition<br />

cjo, cj, or cja Zero-bias junction capacitance epr<br />

unit junction bottom area in farads<br />

per unit area. The default value is<br />

0.<br />

cjp or cjsw Zero-bias junction capacitance per<br />

unit junction periphery in farads<br />

per unit junction periphery (PJ).<br />

The default is 0.<br />

pb, phi, vj, or pha Area junction contact potential in<br />

volts. The default is 0.8 volts.<br />

php Periphery junction contact<br />

potential in volts. The default value<br />

is that of pb.<br />

mj, m, or exa Area junction grading coefficient. It<br />

is dimensionless with a default<br />

value of 0.5.<br />

mjsw or exp Periphery junction grading<br />

coefficient. It is dimensionless with<br />

a default value of 0.33.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


106 Chapter 3 Netlist Compiler and Translators<br />

Keyword Definition<br />

vdd Supply voltage in volts. The default<br />

is 5.0.<br />

level Diode model level. The default is 1.<br />

Level 1 represents a nongeometric<br />

diode model and is translated to<br />

<strong>EPIC</strong> diodes by the spice2e -d<br />

command argument. Other levels<br />

represent a geometric diode model<br />

not supported by <strong>EPIC</strong> tools and<br />

can be converted only to capacitors.<br />

Adding the level keyword to the<br />

default file can cause the<br />

spice2e -d command argument to<br />

be overlooked and mistranslate the<br />

geometric diodes to <strong>EPIC</strong> diodes.<br />

The definitions for spice_diode_model and <strong>EPIC</strong>_diode_model are<br />

the same as in the first method.


Resistors and Capacitors<br />

SYNTAX:<br />

spice_model keyword=value ... <strong>EPIC</strong>_model<br />

SPICE Netlist Translator 107<br />

You can use the keyword-value pairs to specify the following<br />

parameters:<br />

Keyword Definition<br />

SHRINK Shrinking factor with a default<br />

value of 1.0<br />

RSH Sheet resistance per square. The<br />

default is 0.0.<br />

DLR The difference between drawn<br />

length and actual length used for<br />

resistor calculation. The default is<br />

0.0<br />

DEL The difference between drawn<br />

width and actual width or length<br />

used only for capacitors. The<br />

default is 0.0<br />

DW The difference between drawn<br />

width and actual width. The default<br />

is 0.0.<br />

COX Bottom-wall capacitance. The<br />

default is 0.0.<br />

CAPSW Side-wall capacitance. The default<br />

is 0.0.<br />

The value 1.0 is used for SCALM.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


108 Chapter 3 Netlist Compiler and Translators<br />

Default File Example<br />

Figure 1 shows an example of a default file.<br />

ptr 1100 200 P<br />

ntr 500 200 N<br />

PSH 1000 200 P<br />

NSH 500 200 N<br />

PMOS 500 200 P<br />

NMOS 200 200 N<br />

P 500 200 P<br />

N 200 200 N<br />

DIODE1 1.2e-15 0.6e-15 DIODE1<br />

DIODE2 cjo=2.5e-16 cjsw=2.8e-16 exp=0.23 exa=0.55 phi=0.9<br />

php=0.88 vdd=3.5 level=1 DIODE2<br />

Figure 1 Sample default file<br />

The first line translates all PMOS in the SPICE netlist that have<br />

the model name ptr to the model P in the <strong>EPIC</strong> netlist. The first<br />

line also assigns all PMOS in the SPICE netlist a default width<br />

of 11 microns and a length of 2 microns whenever the width and<br />

length are not specified. The second line translates NMOS<br />

named ntr in the original SPICE netlist to the model N in <strong>EPIC</strong><br />

format and assigns them the default width of 5 microns and the<br />

default length of 2 microns.<br />

The next to last line specifies an average area capacitance factor<br />

of 1.2 femtoFarads per square micron and an average junction<br />

periphery capacitance of 0.6 femtoFarads per micron for the<br />

diode named DIODE1 in the SPICE netlist. The last line specifies<br />

all the parameters needed for spice2e to perform an average<br />

calculation for diode model DIODE2. It is recommended that you<br />

use this method for more accurate calculation.


spice2e Command<br />

SPICE Netlist Translator 109<br />

The spice2e command translates a SPICE netlist into an <strong>EPIC</strong><br />

format netlist.<br />

Command Syntax<br />

SYNTAX:<br />

spice2e -i spice_netlist<br />

[-b configfile]<br />

[-c min_cap]<br />

[-d]<br />

[-h]<br />

[–m main_circuit]<br />

[-n]<br />

[-o netlist]<br />

[-f hspice | precise]<br />

[-q number]<br />

[-r]<br />

[-s]<br />

[-u m | f ]<br />

[-R min_res]<br />

[-1]<br />

[-2]<br />

[-A aliasfile] [-D defaultfile] [-M modelfile]<br />

Command-line Options<br />

This section describes the command-line options used with<br />

spice2e.<br />

-b configfile<br />

This option instructs spice2e to translate extracted<br />

capacitor netlist elements (with hierarchical node names)<br />

to configfile with configuration commands, as follows:<br />

node_capacitance hierarchical_node_name value<br />

If there are scale factors or multi-device parameters<br />

specified for a capacitor, they cannot be printed to the<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


110 Chapter 3 Netlist Compiler and Translators<br />

configuration file because the parameters might have to be<br />

re-calculated. The capacitors have to stay in the netlist.<br />

This option also places corresponding configuration<br />

commands of translations of other SPICE commands into<br />

the configfile, such as .PRINT TRAN, V1 1 0 DC, I2 2 gnd,<br />

and PWL. If you do not use this option, these configuration<br />

commands are put in a file called xxx.cfg, where xxx is the<br />

string specified by the -o argument.<br />

-c min_cap<br />

This option specifies the minimum capacitance value for<br />

the <strong>EPIC</strong> netlist. Any capacitor with a capacitance of less<br />

than min_cap is discarded. The min_cap value is in<br />

femtoFarads. This feature is used in conjunction with<br />

automatic layout extraction programs that generate<br />

parasitic capacitance values at every node in the circuit. It<br />

is very useful in saving time and memory when processing<br />

a circuit with a large number of capacitors.<br />

-d This option translates SPICE diodes into <strong>EPIC</strong> diodes.<br />

Only nongeometric diodes can be translated to <strong>EPIC</strong><br />

diodes. Geometric diodes with a level value other than 1 in<br />

the default file can be converted only to capacitors. (For<br />

details, see the section “Diodes” on page 103.) If this option<br />

is not used, spice2e converts SPICE diodes to capacitors,<br />

and some model parameters must be defined in the default<br />

file.<br />

-h This option returns a usage message.<br />

-i spice_netlist<br />

This option specifies the SPICE netlist filename. If this is<br />

not used, spice2e takes the UNIX standard input. This<br />

option replaces the following UNIX syntax:<br />

spice2e < spice_netlist<br />

-m main_circuit<br />

This option specifies the name of a main circuit (name of<br />

top-level subcircuit). spice2e assumes that the top-level<br />

circuit is the main circuit name. This option is required<br />

when translating a netlist output by Dracula’s LPE<br />

program. It strips the definition of the named subcircuit.


SPICE Netlist Translator 111<br />

-o netlist<br />

This option specifies the <strong>EPIC</strong> netlist filename. spice2e<br />

places the converted SPICE netlist into this file. If this<br />

option is not used, spice2e creates UNIX standard output.<br />

This option (with the -i option) replaces the following UNIX<br />

syntax:<br />

spice2e < spice_netlist > netlist<br />

-f hspice | precise<br />

This option specifies the type of SPICE netlist being<br />

translated. Using -p or -f has the same effect. One of the<br />

major differences is in the parameter passing rules. In the<br />

HSPICE-like SPICE netlist, the parameter values of the<br />

instances override the values in the subcircuit definition.<br />

The default is the HSPICE-like SPICE netlist. Other<br />

proprietary SPICE names are allowed and will be included<br />

by special arrangement.<br />

-r This option specifies the order of the width and length<br />

parameters in the transistor description of the SPICE<br />

input file. The default order is width followed by length.<br />

Use this switch to reverse the reading order to length<br />

followed by width.<br />

-u m | f<br />

This option can be used to override the default units for<br />

capacitance, width, and length in the input SPICE netlist.<br />

The -u m option changes the default unit width and length<br />

from micron to meter. The -u f option changes the default<br />

unit for capacitance from farad to femtoFarad. The -u mf<br />

and -u fm options specify both conditions.<br />

A warning is generated if the resulting capacitance value is<br />

too small (less than 0.01 fF), or too large (more than<br />

1x106 fF).<br />

-1 This option translates floating capacitors. A floating<br />

capacitor is one that is not connected to a power node.<br />

Power nodes are those named vdd, VDD, gnd, or GND, and<br />

nodes set or aliased to these names by the aliasfile set and<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


112 Chapter 3 Netlist Compiler and Translators<br />

alias commands. By default, no floating capacitors are<br />

translated.<br />

NOTE: If you are running PathMill, do not specify this option.<br />

-2 This option specifies that capacitors not connected to power<br />

nodes (that is, floating capacitors) are replaced with two<br />

duplicate capacitors to GND. Without a -2 (or -1) option,<br />

these floating capacitors are not translated.<br />

NOTE: The -1 and -2 options are mutually exclusive.<br />

-q number<br />

The number value is an integer from 0 to 2047; the default<br />

is 10. The file spice2e.ignore is created if the SPICE netlist<br />

contains lines not supported (no translation, ignored) by<br />

the current version of spice2e. The first word of these<br />

ignored lines will be printed in the file spice2e.ignore for<br />

reference. The title line and comment lines are also printed<br />

up to the specified number of characters. If number is 0,<br />

the title line and comment lines are not printed. spice2e<br />

automatically removes the file spice2e.ignore if it is empty.<br />

-R min_res<br />

This option, expressed in ohms, specifies the minimum<br />

resistance value for the <strong>EPIC</strong> netlist. Any resistance value<br />

less than min_res is discarded, and the two terminal nodes<br />

are connected with a net statement.<br />

-s This option reverts to the old method of handling the<br />

substrate terminal using configuration commands that<br />

inform the <strong>EPIC</strong> simulator about special substrate bias<br />

conditions. You need to include the configuration file<br />

generated by spice2e as the last configuration file used.<br />

The -x argument is needed for <strong>EPIC</strong> simulations to retrieve<br />

hierarchical names properly if nodes or elements inside a<br />

subcircuit are specified in the configuration file using the<br />

subckt configuration command. The generated


SPICE Netlist Translator 113<br />

configuration file commands are accepted only by TimeMill<br />

and PowerMill.<br />

-n This option prevents the first input line from being<br />

ignored.<br />

-A, -D, -M<br />

These options specify the file or pathnames of the alias file,<br />

default file, or model file, respectively, if their names are<br />

not aliasfile, defaultfile, or modelfile, or they do not reside<br />

in the working directory.<br />

EXAMPLE:<br />

spice2e -i alu.spi -o alu.tm -m incdec16 -c 100<br />

This example translates the SPICE netlist file alu.spi and<br />

generates an <strong>EPIC</strong> netlist file called alu.tm. The definition<br />

for top-level subcircuit incdec16 is removed. Since the –c<br />

option is specified, all capacitance values in the SPICE<br />

netlist of fewer than 100 femtoFarads are ignored.<br />

spice2e uses the default units 10 -12m2 of AS and AD if no<br />

units are explicitly defined. The default unit for PS and PD<br />

is 10-6m. EXAMPLE:<br />

SPICE input:<br />

MO out in 1 1 p2n W=20.00u l=2.00u AD=160.00p<br />

+ AS=160.00p PD=36.00u PS=36.00<br />

aliasfile:<br />

set 1 as vdd<br />

defaultfile:<br />

p2n 10 2 p<br />

This example produces the following entry in the <strong>EPIC</strong><br />

netlist:<br />

(t=p)(en=MO)(ga=in)(so=vdd)(dr=out)(w=2000)<br />

(l=200)(ad=1600000)(as=1600000)(pd=3600)<br />

(ps=3600)<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


114 Chapter 3 Netlist Compiler and Translators<br />

NOTE: The units for as and ad are scaled to (.01 micron) 2 in the <strong>EPIC</strong><br />

netlist. The units for ps and pd are scaled to .01 micron.<br />

Supported SPICE Netlist Syntax<br />

The following list shows the statements, constructs, and SPICE<br />

syntax that spice2e can translate from the original SPICE<br />

netlist to <strong>EPIC</strong> format:<br />

BJT Element QXXXXXXX Junction Diode Element (level<br />

1) DXXXXXXX<br />

Capacitors CXXXXXXX .MACRO statement<br />

.END statement MOSFET Element<br />

MXXXXXXX<br />

.ENDS statement .PARAM statement<br />

.EOM statement .PRINT TRAN/DC (to<br />

configuration file)<br />

.GLOBAL statement Resistors RXXXXXXX<br />

.IC (.DCVOLT) V(XXX)= Subcircuit Calls XYYYYYYY<br />

.INCLUDE statements and<br />

nested INCLUDE statements<br />

.SUBCKT statement<br />

spice2e can also translate independent sources (VXXX, IYYY<br />

DC, PWL, and PULSE types only). These are translated to<br />

proper configuration commands in a configuration file. See the<br />

“spice2e Command” on page 109 for more information about the<br />

configuration file.


SPICE Netlist Translator 115<br />

A special comment can be used in the SPICE netlist to indicate<br />

the signal flow direction for a MOS transistor.<br />

EXAMPLE:<br />

MP000 VDD T Y VDD P W=15U L=4U $*S<br />

MN000 OUT A B VSS N W=10 L=4 $*D<br />

The preceding lines are translated to:<br />

(T=P)(EN=MP000)(GA=T)(SO=Y)(DR=VDD)(W=1500)(L=400)<br />

(DI=S2D);<br />

(T=N)(EN=MN000)(GA=A)(SO=B)(DR=OUT)(W=1000)(L=400)<br />

(DI=D2S);<br />

NOTE: The signal direction information is used only by PathMill.<br />

Ignored SPICE Netlist Syntax<br />

Comments To Indicate<br />

Flow Direction<br />

Definition<br />

$*S Signal flows source to drain<br />

$*D Signal flows drain to source<br />

There are statements, constructs, and SPICE syntax that<br />

spice2e does not translate. If they exist in the SPICE netlist,<br />

they are not converted.<br />

You can check the spice2e.ignore file after running spice2e to<br />

see which lines in the SPICE netlist were not converted. (See the<br />

explanation about the -q number argument in the section<br />

“spice2e Command” on page 109 for information about<br />

controlling the printout of the title and comment lines.) For lines<br />

that were not converted, use <strong>EPIC</strong> configuration commands to<br />

model the effects during an <strong>EPIC</strong> simulation or analysis.<br />

The spice2e.log file is also created. It keeps real-time messages<br />

on the standard error (screen) for reference.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


116 Chapter 3 Netlist Compiler and Translators<br />

The following list shows the statements, constructs, and SPICE<br />

syntax that spice2e ignores.<br />

.AC statement .NOISE statement<br />

.ALTER statement .OP statement<br />

Comment statement .OPTIONS statement<br />

.CONTROL statement .PC statement<br />

.DC statement .PLOT statement<br />

.DCVOLT statement (other .PRINT statement (other than<br />

than "V(XXX)=" syntax) TRAN/DC)<br />

.DEL LIB statement .SENS statement<br />

.DISTO statement .SYSTEM statement<br />

.FOUR statement .TEMP statement<br />

.IC statement (other than<br />

"V(XXX)=" syntax)<br />

.TF statement<br />

JFET & MESFET elements<br />

JXXXXXXX<br />

.TITLE statement<br />

.LIB library call statement .TRAN statement<br />

Linear dependent sources Transmission Lines<br />

GXXXXXXX, EXXXXXXX,<br />

FXXXXXXX, HXXXXXXX<br />

TXXXXXXX<br />

.MODEL statement<br />

.nodeSET statement<br />

.WIDTH statement<br />

SPICE Netlist Syntax to Avoid<br />

The following list contains statements, constructs, and SPICE<br />

syntax that spice2e cannot accept. You must remove the<br />

following syntax from the SPICE netlist before using spice2e.<br />

■ Fowler-Nordheim Diode Elements (HSPICE level 2)<br />

■ BJT Models (NPN and PNP)<br />

■ JFET & MESFET Models<br />

■ MOSFET Model (PMOS & NMOS)


Substrate Terminal Bias<br />

SPICE Netlist Translator 117<br />

spice2e selectively outputs the substrate terminal in syntax<br />

(BU=...) to the <strong>EPIC</strong> netlist if the substrate is not power.<br />

TimeMill and PowerMill automatically handle the bias<br />

conditions.<br />

By default, spice2e assumes the substrate terminal (BULK) of a<br />

MOS is connected to either VDD (for PMOS) or GND (for NMOS).<br />

The following special bias conditions are exceptions:<br />

■ The substrate is connected to an electrical source that is not<br />

a power node (multiple VDD or GND nodes might have<br />

different names). In this case, the MOS has no body bias<br />

effects. (spice2e does not consider the possibility of a<br />

substrate being connected to the electrical drain node for the<br />

normal operation of circuits because forward bias would<br />

occur between the substrate and the source.)<br />

■ The substrate is connected to a node other than a power node<br />

or the electrical source node. In this case, the body bias is<br />

determined by the voltage on the substrate node.<br />

spice2e handles these two special substrate bias conditions by<br />

keeping the substrate terminal using the (BU=...) syntax in the<br />

<strong>EPIC</strong> netlist. TimeMill and PowerMill will handle it correctly.<br />

Alternatively, you can use the older method of generating a<br />

configuration file containing bias commands. See the<br />

information about the -s command-line option in the section<br />

“spice2e Command” on page 109 for details.<br />

NOTE: The generated configuration file commands work only with<br />

TimeMill and PowerMill.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


118 Chapter 3 Netlist Compiler and Translators<br />

EDIF Netlist Translator<br />

This section describes edif2e, the <strong>EPIC</strong> netlist translator, that<br />

converts gate-level and transistor-level netlists from EDIF<br />

format to <strong>EPIC</strong> format. It is normally automatically called by the<br />

<strong>EPIC</strong> netlist compiler for EDIF netlist files, and can also be used<br />

as a stand-alone utility.<br />

The edif2e utility supports a Synopsys structured gate-level<br />

flow for ASIC and custom ICs. Although EDIF can describe<br />

various electronic design data, including behavior, logic models,<br />

netlists, schematics, and mask layout, edif2e translates only<br />

netlist data and ignores all other data. It was specifically<br />

designed to enable Synopsys Design Compiler users to analyze<br />

their designs with <strong>EPIC</strong> tools.<br />

edif2e supports hierarchical netlist descriptions. It can<br />

translate both flat and hierarchical netlists, but it does not<br />

flatten a hierarchical netlist. The hierarchical structure of the<br />

output is the same as the input. See the Electronic Design<br />

Interchange Format Version 200, ANSI/EIA 548 publication<br />

for further information about EDIF.<br />

NOTE: edif2e does not support encryption or library search.<br />

Supported EDIF Constructs<br />

The following EDIF constructs are supported:<br />

■ Version 200 Level 0 (basic, only literal constants permitted)<br />

complexity description<br />

■ Keyword level 0 (no keyword abbreviations)<br />

■ EDIF rename construct<br />

■ Conversion from net-based to terminal-based connectivity<br />

model<br />

■ Hierarchical netlist description


EDIF Netlist Translator 119<br />

■ Direction constructs (input, output, or bidirectional)<br />

■ external construct<br />

■ EDIF’s view-cell library three-layer structure<br />

■ status construct<br />

■ design construct<br />

■ joined construct<br />

■ parameter and parameterAssign constructs<br />

Unsupported EDIF Constructs<br />

edif2e does not support the following EDIF constructs:<br />

■ simulate construct<br />

■ timing construct<br />

■ logic modeling and all related constructs<br />

■ mustJoined, weakJoined, permutable, and<br />

nonPermutable constructs<br />

■ criticality construct<br />

■ netDelay and portDelay constructs<br />

■ dcFaninLoad, dcFanoutLoad, dcMaxFanin,<br />

dcMaxFanout, and acLoad constructs<br />

■ unused attribute<br />

■ portImplementation construct<br />

■ figure construct<br />

■ Global net<br />

■ globalPortRef construct<br />

■ array, portBundle and netBundle constructs to group<br />

ports and nets<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


120 Chapter 3 Netlist Compiler and Translators<br />

edif2e Command<br />

■ RIPPER cell<br />

■ EDIF subnets and tie cells<br />

■ scale construct<br />

■ All userData constructs<br />

The edif2e command translates gate-level and transistor-level<br />

netlists from EDIF format to <strong>EPIC</strong> format.<br />

SYNTAX:<br />

edif2e -i edif_file -o epic_file<br />

[-h]<br />

[-m prop_name1 prop_name2 ...]<br />

[-p]<br />

[-v]<br />

[-b]<br />

[-m]<br />

[-r]<br />

[-c]<br />

[-e]<br />

Command-line Options<br />

The following command-line options can be used with edif2e.<br />

-i edif_file<br />

Specifies input netlist files in EDIF format. The default is<br />

UNIX standard input.<br />

-o epic_file<br />

Specifies the netlist file that will be created in <strong>EPIC</strong><br />

format. The default is UNIX standard output.


-h<br />

Provides command-line help.<br />

EDIF Netlist Translator 121<br />

-m prop_name1 prop_name2<br />

Specifies properties to be used as parameters.<br />

-p Generates an <strong>EPIC</strong> netlist without port mapping.<br />

-v Verbose.<br />

-b Generates an <strong>EPIC</strong> netlist with all port direction bt<br />

(INOUT).<br />

-r Renames ports, instances, and nets containing the rename<br />

construct in the EDIF file.<br />

EXAMPLE:<br />

edif2e -i edif_file -o epic_file -r<br />

This example shows how to use the rename construct (-r).<br />

-c Preserves the case in the netlist.<br />

-e Includes in the character set all special characters<br />

documented in EDIF version 2.00.<br />

DESCRIPTION:<br />

The EDIF design structure is translated to the <strong>EPIC</strong> netlist top<br />

level. The original EDIF design structure is:<br />

(design design_name (cellRef cell_name<br />

(libraryRef library_name))),<br />

The <strong>EPIC</strong> netlist top level is:<br />

(ef=cell_name) (en=design_name) (it=...) (ot=...)(bt=...)<br />

In the EDIF rename command (rename edif_id new_name),<br />

the <strong>EPIC</strong> netlist takes edif_id as the only option. edif2e does not<br />

replace the edif_id with the new_name. The EDIF identifier is<br />

used as cell, net, instance names, and so on. EDIF identifiers are<br />

not case-sensitive. edif2e translations put all identifiers in<br />

uppercase.<br />

edif2e supports the parameter, parameterAssign, and<br />

property constructs. The property construct allows you to<br />

specify properties to be treated as parameters. To do this, you<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


122 Chapter 3 Netlist Compiler and Translators<br />

must use the -m option in the edif2e command line. Then you<br />

need to define a cell that maps the EDIF leaf cell information to<br />

<strong>EPIC</strong> primary elements. (See the cell example that follows.) Use<br />

the result of the edif2e run and the defined cell as <strong>EPIC</strong><br />

simulator input.<br />

EXAMPLE:<br />

(subckt=NFET) (bt=D,G,S,B)(pr=WF,LF) {<br />

(t=nfet)(en=nt)(ga=G)(so=S)(dr=D)(bu=B)<br />

(w=WF)(l=LF);}<br />

(subckt=PFET) (bt=D,G,S,B)(pr=WF,LF) {<br />

(t=pfet)(en=nt)(ga=G)(so=S)(dr=D)(bu=B)<br />

(w=WF)(l=LF);}


EDIF Netlist Translator 123<br />

Set the Synopsys edifout variable as shown in Figure 2.<br />

edifout_array_member_naming_style "%s[%d]"<br />

edifout_array_range_naming_style "%s[%d:%d]<br />

edifout_dc_script_flag ""<br />

edifout_design_name ""<br />

edifout_designs_library_name "DESIGNS"<br />

edifout_display_instance_names "false"<br />

edifout_display_net_names "false"<br />

edifout_external "false"<br />

edifout_ground_name "__logic_0__"<br />

edifout_ground_net_name ""<br />

edifout_ground_net_property_name "CP_GROUND"<br />

edifout_ground_net_property_value "GND"<br />

edifout_ground_pin_name "__logic_0_pin__"<br />

edifout_instance_property_name ""<br />

edifout_instantiate_ports "false"<br />

edifout_match_vhdl_names "false"<br />

edifout_merge_libraries "false"<br />

edifout_name_oscs_different_from_ports "false"<br />

edifout_name_rippers_same_as_wires "false"<br />

edifout_netlist_only "true"<br />

edifout_no_array "true"<br />

edifout_numerical_array_members "false"<br />

edifout_pin_direction_in_value ""<br />

edifout_pin_direction_inout_value ""<br />

edifout_pin_direction_out_value ""<br />

edifout_pin_direction_property_name ""<br />

edifout_pin_name_property_name ""<br />

edifout_portinstance_disabled_property_name "VCC"<br />

edifout_portinstance_disabled_property_value"VCC"<br />

edifout_portinstance_property_name ""<br />

edifout_power_and_ground_representation "net"<br />

edifout_power_name "__logic_1__"<br />

edifout_power_net_name ""<br />

edifout_power_net_property_name "CP_POWER"<br />

edifout_power_net_property_value "VCC"<br />

edifout_power_pin_name "__logic_1_pin__"<br />

edifout_skip_port_implementations "false"<br />

edifout_target_system ""<br />

edifout_top_level_symbol "true"<br />

edifout_translate_origin ""<br />

edifout_unused_property_value ""<br />

edifout_write_attributes "false"<br />

edifout_write_constraints "false"<br />

edifout_write_properties_list {}<br />

Figure 2 edif2e variable settings<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


124 Chapter 3 Netlist Compiler and Translators<br />

Verilog Netlist Translator<br />

This section describes vlog2e, the <strong>EPIC</strong> netlist translator that<br />

converts gate-level and transistor-level netlists from Verilog to<br />

<strong>EPIC</strong> netlist format. It is normally automatically called by the<br />

<strong>EPIC</strong> netlist compiler for Verilog netlist files, and can also be<br />

used as a stand-alone utility.<br />

vlog2e supports structural element and construct translation<br />

from the Verilog language to the <strong>EPIC</strong> proprietary netlist<br />

format. The utility recognizes all Verilog constructs and<br />

supports cell-based structural translation. It also supports<br />

certain behavioral constructs that are used as structural<br />

elements such as assign statements.<br />

Notice the following characteristics of vlog2e:<br />

■ vlog2e does not do semantic checking<br />

If the Verilog file has semantic errors, such as an undefined<br />

bus, vlog2e will probably generate incorrect output and not<br />

generate any error messages. It is very important that you<br />

run the Verilog netlists through a full-blown Verilog<br />

compiler, such as VCS, before using vlog2e.<br />

■ vlog2e generates 2e instance names for gates when no<br />

instance name is given in the source Verilog file<br />

■ vlog2e supports port-map-by-name<br />

EXAMPLE:<br />

module RAM(ADDR, DATA, ENB, RD, WR);<br />

input ADDR, ENB, RD, WR;<br />

inout DATA;<br />

endmodule<br />

module BRD;<br />

RAM bnk0(.ADDR(addr_bus), .ENB(enable0),<br />

.RD(read),<br />

.DATA(data_bus), .WR(write));<br />

RAM bnk1(.ADDR(addr_bus),


Verilog Netlist Translator 125<br />

.ENB(enable1),.WR(write),<br />

.DATA(data_bus), .RD(read));<br />

RAM bnk2(.ADDR(addr_bus), .ENB(enable2),<br />

.RD(read),<br />

.DATA(data_bus), .WR(write));<br />

RAM bnk3(.DATA(data_bus), .ENB(enable3),<br />

.RD(read),<br />

.ADDR(addr_bus), .WR(write));<br />

CPU (addr_bus, data_bus, clock, int_vec);<br />

endmodule<br />

This is translated to:<br />

(subckt=BRD)<br />

{<br />

(ef=RAM)(en=bnk0)(bt=ADDR(addr_bus),<br />

ENB(enable0),<br />

RD(read), DATA(data_bus), WR(write));<br />

(ef=RAM)(en=bnk1)(bt=ADDR(addr_bus),<br />

ENB(enable1),<br />

WR(write), DATA(data_bus), RD(read));<br />

(ef=RAM)(en=bnk2)(bt=ADDR(addr_bus),<br />

ENB(enable2),<br />

RD(read), DATA(data_bus), WR(write));<br />

(ef=RAM)(en=bnk3)(bt=DATA(data_bus),<br />

ENB(enable3),<br />

RD(read), ADDR(addr_bus), WR(write));<br />

(ef=CPU)(en=v2e_0)(bt=addr_bus, data_bus, clock,<br />

int_vec);<br />

}<br />

(subckt=RAM)(bt=ADDR, DATA, ENB, RD, WR)<br />

{<br />

}<br />

■ vlog2e supports concatenation on ports<br />

EXAMPLE:<br />

module concat;<br />

foo I4({a[1], b[1]}, c);<br />

foo I0(.A({a[1], b[1]}), .D(c));<br />

endmodule<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


126 Chapter 3 Netlist Compiler and Translators<br />

This is translated to:<br />

(subckt=concat)<br />

{<br />

(ef=foo)(en=I4)(bt=a[1], b[1], c);<br />

(ef=foo)(en=I0)(bt=A(a[1], b[1]), D(c));<br />

}<br />

■ Supply nets are translated to constant drive functions<br />

EXAMPLE:<br />

module supplies;<br />

supply0 a, b, c;<br />

supply1 D;<br />

AND4 (Y, a, b, c, D);<br />

endmodule<br />

This is translated to:<br />

(subckt=supplies)<br />

{<br />

(is=zero)(en=supplies_0_0)(ot=a, b, c);<br />

(is=one)(en=supplies_1_1)(ot=D);<br />

(ef=AND4)(en=v2e_0)(bt=Y, a, b, c, D);<br />

}<br />

■ vlog2e supports single-bit expressions with a value of 0 or 1,<br />

and bit-expressions with lengths greater than 1<br />

EXAMPLE 1:<br />

foo (.a(1'b0), .b(1'b1));<br />

This is translated to:<br />

(ef=foo)(en=v2e_1)(bt=a(GND), b(VDD));<br />

EXAMPLE 2:<br />

module mod1;<br />

mod2 I1(8’b00100101);<br />

endmodule<br />

module mod2(a);<br />

input [7:0] a;<br />

endmodule


This is translated to:<br />

Verilog Netlist Translator 127<br />

(subckt=mod1)<br />

{<br />

(ef=mod2)(en=I1)(bt=GND,GND,VDD,GND,GND,VDD,GND,V<br />

DD);<br />

}<br />

(subckt=mod2)(bt=a[7-0])<br />

{<br />

}<br />

■ vlog2e handles net assignments and bus assignments<br />

EXAMPLE 1:<br />

assign n1 = a;<br />

This is translated to:<br />

(net=n1)(nn=a);<br />

EXAMPLE 2:<br />

module mod1;<br />

wire [7:0] a, b;<br />

assign a = b;<br />

endmodule<br />

This is translated to:<br />

(subckt=mod1)<br />

{<br />

(net=a[0])(nn=b[0]);<br />

(net=a[1])(nn=b[1]);<br />

(net=a[2])(nn=b[2]);<br />

(net=a[3])(nn=b[3]);<br />

(net=a[4])(nn=b[4]);<br />

(net=a[5])(nn=b[5]);<br />

(net=a[6])(nn=b[6]);<br />

(net=a[7])(nn=b[7]);<br />

}<br />

■ vlog2e re-maps escaped identifiers if you select the -n option<br />

EXAMPLE:<br />

module escape;<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


128 Chapter 3 Netlist Compiler and Translators<br />

FOO (\mul_11/n1002, \mul_11/ab[15][2]);<br />

endmodule<br />

This is translated to:<br />

(subckt=escape)<br />

{<br />

(ef=FOO)(en=v2e_0)(bt=_mul_11_n1002,<br />

_mul_11_ab_15__2_);<br />

}<br />

The vlog2e utility does not support the following:<br />

■ logic gate, MOS transistor, or UDP translations<br />

■ translation of expression on ports<br />

■ translation of parameter passing (ignored)<br />

■ translation of dynamic bit/part selection<br />

■ translation of opening or closing square brackets ([and]) and<br />

the leading backslash (\) will be skipped<br />

vlog2e generates two files: the .ignore file and the .xrf file. The<br />

.ignore file contains a list of the parameters and user-defined<br />

primitives that were ignored by vlog2e. The .xrf file contains a<br />

list of names that were converted by vlog2e.


vlog2e Command<br />

Verilog Netlist Translator 129<br />

The vlog2e command performs structural element and construct<br />

translation from the Verilog language to the <strong>EPIC</strong> proprietary<br />

netlist format.<br />

SYNTAX:<br />

vlog2e -i in_file(s) -o out_file<br />

-t [name]<br />

[-h]<br />

[--version]<br />

[-b]<br />

[-n]<br />

Command-line Options<br />

The following command-line options can be used with vlog2e.<br />

-i in_file | files...<br />

Input filename, or a list of input filenames.<br />

-o out_file<br />

Output filename.<br />

-t [name]<br />

Keeps the port type instead of treating all ports as<br />

bidirectional. Specifying a module name is optional.<br />

-h<br />

Displays help.<br />

--version<br />

Prints version number.<br />

-b “”<br />

Controls vlog2e output. The value is a three-character<br />

string specifying the three characters used in bus notation.<br />

The default value is “[-]”.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


130 Chapter 3 Netlist Compiler and Translators<br />

When vlog2e is used as a stand-alone tool, the -b option<br />

specifies the characters that will be used when Verilog bus<br />

notation is translated into the <strong>EPIC</strong> netlist format.<br />

NOTE: The -b option is ignored if it is added to control options.<br />

-n<br />

If you have an escaped identifier in the Verilog source that<br />

looks like a bus, you need to use the bus_notation option<br />

to change Verilog bus notation syntax to avoid name<br />

conflicts. For example, by default, the Verilog escaped<br />

identifier is translated from “\a[5]” to “a[5]”; so if you<br />

have a verilog bus with the name “a[5]”, a name conflict<br />

results.<br />

You can use either the -b option or the bus_notation<br />

control option to assign bus notation syntax that will<br />

prevent name conflicts.<br />

Reverts netlist notation to version 3.x syntax. In 3.x, any<br />

nonalphanumeric characters were mapped to an<br />

underscore.<br />

When vlog2e is run, a vlog2e.xrf file is created. This file<br />

maps the original Verilog identifiers to the translated <strong>EPIC</strong><br />

identifiers.<br />

The following table shows ASCII character mapping.<br />

ASCII Mapping ASCII Code Ranges (0 -127)<br />

Codes Not Allowed 0 (null character)<br />

Codes Causing Termination of<br />

Escaped Identifiers<br />

8-10, 32<br />

Codes Mapped to Underscore 1-7, 11-31, 33-47, 58-64, 92,<br />

94, 96, 123-127<br />

Codes Not Mapped 48-57, 65-91, 93, 95, 97-122


The Ecrypt Utility<br />

The Ecrypt Utility 131<br />

The following table shows the result of all possible combinations<br />

of options.<br />

No output filename -o out_file<br />

No input files stdin → stdout stdin → out_file<br />

-i in_file in_file → stdout in_file → out_file<br />

List For each infile in the<br />

list:<br />

in_file→infile.en<br />

List → out_file<br />

There are many useful applications for the option combinations.<br />

For example, to translate a set of design modules, each of which<br />

is contained in a separate file, provide a list of the filenames. A<br />

set of translated files with an .en extension is produced.<br />

The ecrypt utility encrypts netlist files. The <strong>EPIC</strong> netlist<br />

compiler automatically detects and compiles encrypted netlist<br />

files, eliminating the need to decrypt these files first before<br />

running simulation.<br />

There are two levels of encryption supported by this utility:<br />

■ A first-level encryption, for which only the ecrypt utility is<br />

needed<br />

■ A second-level encryption, for which you provide an<br />

additional internally-defined decryption utility in addition to<br />

the ecrypt utility<br />

NOTE: There is no decryption utility provided with the ecrypt utility, so<br />

exercise caution when deleting your original netlist files.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


132 Chapter 3 Netlist Compiler and Translators<br />

Level-One Encryption<br />

Encrypted files can be further compressed using the gzip/<br />

compress utility. The final netlist files will have the .eef.gz,<br />

.eef.Z, .cef.gz, or .cef.Z extensions.<br />

With a level-one encryption, the ecrypt utility produces new<br />

encrypted files with a .eef filename extension. The original<br />

netlist files are not deleted.<br />

Command Syntax for Level-One Encryption<br />

Level-Two Encryption<br />

ecrypt -i filename1 [filename2 ...]<br />

EXAMPLE:<br />

ecrypt -i Test.spi<br />

This example encrypts the Test.spi netlist file. The resulting<br />

encrypted output filename is Test.spi.eef.<br />

With level-two encryption, the level-two utility receives an<br />

encrypted netlist file and produces level-two encrypted netlist<br />

files with a .cef extension. Use this level of encryption when you<br />

want to use the extra protection provided by your own encryption<br />

utility.<br />

Command Syntax for Two-Level Encryption<br />

ecrypt -l 2 -i filename1 [filename2 ...]<br />

Syntax Part Definition<br />

ecrypt Encryption utility<br />

-l 2 Level-two encryption<br />

-i filename Input file(s) to be encrypted


The Ecrypt Utility 133<br />

For the two-level encryption to function properly, use the<br />

following steps:<br />

1 Create level-one encrypted files by encrypting your netlist<br />

files with your own encryption utility.<br />

2 Create level-two encrypted files using the ecrypt utility on<br />

the level-one encrypted files.<br />

NOTE: You can remove the original and the level-one encrypted files.<br />

Tutorial: Performing a Level-Two Encryption<br />

The following table lists the files needed for this tutorial.<br />

Filename Description<br />

Test.spi Netlist file<br />

cdcrypt Customer-defined decryption utility<br />

which receives encrypted data from<br />

stdin and produces decrypted output to<br />

stdout<br />

CUS_ENCRYPT -i [original_file] -o Customer-defined encryption utility<br />

[encrypted file]<br />

ecrypt The encryption utility<br />

Procedures<br />

Use the following procedures to produce level-two encrypted<br />

netlist files.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


134 Chapter 3 Netlist Compiler and Translators<br />

Encryption:<br />

1 The method used to create level-one encrypted files varies<br />

with the encryption utility provided by the user. In this case,<br />

you will use the CUS_ENCRYPT encryption utility as<br />

defined previously.<br />

Use the following command to produce a level-one encrypted<br />

netlist file, Test_e.spi, from the original Test.spi<br />

CUS_ENCYPT -i Test.spi -o Test_e.spi<br />

2 Use the following command to produce the level-two<br />

encrypted file, Test_e.spi.cef, from the level-one<br />

encrypted file, Test_e.spi<br />

ecrypt -l 2 -i Test_e.spi<br />

3 Use the following command to remove the original and the<br />

level-one encrypted files<br />

rm Test.spi Test_e.spi<br />

cdcrypt installation:<br />

1 Copy cdcrypt to a directory. In this case, to the ~user/<br />

decrypt_dir directory.<br />

cp cdcrypt ~user/decrypt_dir<br />

2 Add the new directory to the main path, as follows:<br />

set path=(~user/decrypt_dir $path)<br />

3 Use the which command to ensure that you can find the<br />

cdcrypt command.<br />

which cdcrypt


The Ecrypt Utility 135<br />

You can now perform simulations using the Test_e.spi.cef<br />

encrypted netlist file.<br />

NOTE: No encryption method is completely safe. Use of the ecrypt<br />

utility constitutes agreement that you will take full<br />

responsibility for any loss or damage caused by using this utility.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


136 Chapter 3 Netlist Compiler and Translators


Chapter 4<br />

<strong>EPIC</strong> Technology File


138 Chapter 4 <strong>EPIC</strong> Technology File


Overview<br />

Overview 139<br />

<strong>EPIC</strong> technology files are look-up tables used by <strong>EPIC</strong> tools to<br />

calculate timing and power behaviors. The <strong>EPIC</strong> Gentech utility<br />

generates the technology file using SPICE netlists and models to<br />

characterize the CMOS process. All the effects modeled by your<br />

SPICE, such as short channel effect, velocity saturation effect,<br />

and body-bias effect, are taken into account.<br />

You can run Gentech as a stand-alone utility, which requires<br />

creating a control file before generating a technology file.<br />

Alternatively, you can automatically generate a technology file<br />

by simply adding parameters to your SPICE netlist for the<br />

following types of SPICE: HSPICE, SMARTSPICE, and other<br />

proprietary SPICES. Using the automatic technology file<br />

generating feature lets you add new resistor sizes to models<br />

between runs without having to regenerate a technology file.<br />

<strong>EPIC</strong> tools also directly support BSIM1, MOS9 and BSIM3<br />

models, which are automatically enabled if no technology files<br />

are specified.<br />

The TechViewer utility provides you with a graphic<br />

representation of an <strong>EPIC</strong> technology file.<br />

The recommended way to verify the accuracy of the generated<br />

technology files is by using the actual circuits that you might<br />

have, and running these with your SPICE and one of the <strong>EPIC</strong><br />

tools for comparison.<br />

Another possible way to verify circuit accuracy is to use the<br />

<strong>EPIC</strong>Veritech utility. This utility tests very specialized circuits<br />

to detect device-level inaccuracies.<br />

NOTE: Veritech can frequently give false negatives, so it should not be<br />

relied on as a gating factor for technology file accuracy. Running<br />

your own circuit using your SPICE is still the best way to Verify<br />

your technology file.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


140 Chapter 4 <strong>EPIC</strong> Technology File<br />

Automatic Technology File Generation<br />

<strong>EPIC</strong> automatic technology file generation simplifies and<br />

enhances the process of generating technology files. It is<br />

available in TimeMill, PowerMill, PathMill and AMPS for use<br />

with HSPICE, SMARTSPICE, and many proprietary SPICE<br />

types.<br />

Automatic technology file generation offers several advantages<br />

over the conventional process of manually generating technology<br />

files. Technology files are generated directly from a SPICE<br />

netlist without requiring you to run a separate Gentech process.<br />

This also eliminates the need to specify each technology file in<br />

your runscript. It also enables you to add new transistor sizes to<br />

models between runs without having to regenerate the<br />

technology file. This method also creates a technology file (one<br />

file per process model) as an output of the simulation.<br />

The following sections describe command-line options and the<br />

commands you add to the netlist to implement automatic<br />

technology file generation. They also describe the basic process<br />

for using this feature in a typical simulation run. By following<br />

the simulation run example, you should be able to use automatic<br />

technology file generation in most situations.<br />

Specifying Automatic Technology File Generation<br />

The following options can be specified on simulation tool’s<br />

command line to generate a technology file. They are:<br />

-z prefix<br />

This option is used specifically to run the automatic<br />

technology file generation feature. It can accept pathnames<br />

as part of the prefix description, enabling you to specify a<br />

central library directory. This option is used in place of the<br />

-p command line option, which you use to explicitly specify<br />

the technology file used for a simulation.


Modifying the Netlist<br />

EXAMPLE:<br />

Automatic Technology File Generation 141<br />

timemill -n net.sp -c config -o slow125_4v -z<br />

/usr/lib/techfiles/slow125_4v<br />

-r always | never | compare | warning<br />

This option gives you several optional commands related to<br />

regenerating technology files. For example, you can specify<br />

the simulator to issue a warning if the models in the netlist<br />

are different from the models in the technology file.<br />

NOTE: Using this option might not produce the desired<br />

results.<br />

For more information about the command-line syntax, see the<br />

reference guide for the tool you are using.<br />

A SPICE netlist is the only input required to run the automatic<br />

technology file feature. However, there are some modifications<br />

you will need to make to the netlist prior to running a<br />

simulation.<br />

There are several control commands unique to automatic<br />

technology file generation that you can specify in the netlist<br />

following the title line. These <strong>EPIC</strong>-specific commands<br />

customize the technology file generation by assigning the<br />

Gentech parameters to the technology control file. Each<br />

command is preceded by the *epic tech command, as shown in<br />

the following syntax:<br />

*epic tech= “command”<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


142 Chapter 4 <strong>EPIC</strong> Technology File<br />

binary<br />

SYNTAX:<br />

*epic tech=“gentech_parameter binary”<br />

DESCRIPTION:<br />

The binary command causes the generation of a binary file.<br />

NOTE: This command is valid only with TISPICE, HSPICE,<br />

SMARTSPICE, and HPSPICE.<br />

You cannot use this command with the simulation tool’s -A<br />

option.


ody_bias<br />

SYNTAX:<br />

*epic tech=“body_bias 0 vbsend vbsstep”<br />

EXAMPLE:<br />

*epic tech= “body_bias 0 20 0.5”<br />

DESCRIPTION:<br />

Automatic Technology File Generation 143<br />

This command specifies the final vbs or vsb voltage and the<br />

voltage step size for the vbs sweep.<br />

If you have a circuit that will have higher than normal voltages<br />

for body-bias considerations, you might need to use this<br />

command. For example, you could use it if you have a high<br />

voltage charge pump in a flash memory circuit that pumps to 20<br />

volts. This would cause a sweep from 0 to 20 volts in 0.5 volt<br />

steps.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


144 Chapter 4 <strong>EPIC</strong> Technology File<br />

direct<br />

SYNTAX:<br />

*epic tech= “direct”<br />

DESCRIPTION:<br />

This command combines direct and technology file device<br />

models. If your netlist contains this command, direct device<br />

models are used whenever possible. All other models are<br />

expected to be characterized using a technology file. The<br />

supported direct device models are BSIM1, BSIM3, and Phillips<br />

MOS9 (HSPICE level 50).


gentech_parameter<br />

SYNTAX:<br />

Automatic Technology File Generation 145<br />

*epic tech=“gentech_parameter any_command [value]”<br />

EXAMPLE:<br />

*epic tech= “gentech_parameter vgs 0 10 0.2”<br />

DESCRIPTION:<br />

This command sets any specified Gentech parameter command<br />

in the netlist.<br />

NOTE: The Gentech commands vgs, vds, body_bias, and delta_vt are<br />

recognized without the gentech_parameter prefix. For<br />

example, the following two commands are equivalent:<br />

*epic tech=“gentech_parameter vgs 0 10 0.2”<br />

*epic tech=“vgs 0 10 0.2”<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


146 Chapter 4 <strong>EPIC</strong> Technology File<br />

invoke<br />

SYNTAX:<br />

*epic tech= “invoke spice_syntax”<br />

EXAMPLE:<br />

*epic tech=”invoke hspice %input > %output”<br />

DESCRIPTION:<br />

This command specifies the command syntax for running SPICE<br />

in a particular environment. Use the invoke command to<br />

explicitly specify the HSPICE path for the machine on which you<br />

are running the simulation. A softlink, such as ~spice/etc/<br />

etc is not acceptable.<br />

The %input and %output keywords control the command syntax.<br />

You can add preprocessors, postprocessors, and so on, by creating<br />

a script.<br />

EXAMPLE 1:<br />

*epic tech=”invoke /path/name/to/hspice %input ><br />

%output”<br />

This example runs HSPICE via the specified path.<br />

EXAMPLE 2:<br />

*epic tech=“voltage 5”<br />

*epic tech=“invoke /path/name/to/hspice %input ><br />

%output”<br />

This example shows a minimum set of control commands.


lratio<br />

wratio<br />

SYNTAX:<br />

*epic tech=“lratio length_ratio”<br />

*epic tech=“wratio width_ratio”<br />

Automatic Technology File Generation 147<br />

EXAMPLE:<br />

*epic tech=“lratio 1.2”<br />

*epic tech=“wratio 1.2”<br />

These examples multiply the default MOS device channel length<br />

and width by 1.2 or, equally, 20%. This setting allows 20% steps<br />

between MOS channel widths and lengths in the SPICE netlist.<br />

Any device falling between these steps is not be included in the<br />

techfile. During simulation, interpolation is used to determine<br />

channel current for a missing device size (W/L) combination.<br />

DESCRIPTION:<br />

These parameters change the MOS device channel width and<br />

length selection ratio. The default equivalent is setting the<br />

lratio and wratio parameters to 1.01, which generates curves in<br />

the technology file for all transistor sizes in the netlist.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


148 Chapter 4 <strong>EPIC</strong> Technology File<br />

speed<br />

SYNTAX:<br />

*epic tech=“gentech_parameter speed”<br />

DESCRIPTION:<br />

This command increases the speed of technology file generation.<br />

This is not the default, but it is the recommended mode.<br />

NOTE: This command can be used only with HSPICE, SMARTSPICE,<br />

HPSPICE, and Spectre2.


3dtable<br />

SYNTAX:<br />

*epic tech=“3dtable”<br />

Automatic Technology File Generation 149<br />

DESCRIPTION:<br />

This command provides the option of using a 3D ids table for all<br />

devices. It presently works for only the directly-supported<br />

BSIM3 model.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


150 Chapter 4 <strong>EPIC</strong> Technology File<br />

vds<br />

vgs<br />

SYNTAX:<br />

*epic tech=“vds 0 vdsend vdsstep”<br />

*epic tech=“vgs 0 vdsend vdsstep”<br />

EXAMPLE:<br />

*epic tech= “vds 0 5 0.05”<br />

*epic tech=“vgs 0 5 0.05”<br />

DESCRIPTION:<br />

These commands specify the final voltage and the voltage step<br />

size for the sweeps in the technology file. You might want finer<br />

resolution on vgs or vds to minimize interpolation errors. For<br />

example, you might want a 0.05 volt step between vgs values and<br />

vds values for each curve.


voltage<br />

SYNTAX:<br />

*epic tech=“voltage value”<br />

EXAMPLE:<br />

*epic tech=“voltage 5.0”<br />

Automatic Technology File Generation 151<br />

DESCRIPTION:<br />

This command sets the normal *epic tech=“voltage value” vds<br />

voltage for the characteristic curve sweeps. It is required<br />

because it is difficult to automatically determine the supply<br />

voltage in a SPICE netlist. For example, VDD might have a name<br />

other than “VDD” in the netlist.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


152 Chapter 4 <strong>EPIC</strong> Technology File<br />

Running a Simulation<br />

This section describes how to run a simulation with automatic<br />

technology file generation. The example uses the basic<br />

commands you will need to run the feature.<br />

A SPICE netlist is the only input required to run the automatic<br />

technology feature.<br />

Before you start, make sure the SPICE netlist contains only<br />

those components and statements accepted by <strong>EPIC</strong> tools. All<br />

models must be specified in either the netlist, a .lib statement,<br />

or an .include statement. Additionally, the temperature for the<br />

simulation must be specified in the SPICE netlist using the<br />

.temp statement.<br />

Creating a Runscript<br />

The runscript for a simulation using automatic technology file<br />

generation is slightly different from a standard runscript.<br />

EXAMPLE:<br />

timemill -n netlist.spi -c config -t 20000 -z typ<br />

In the example, the -z option also specifies typ as the prefix for<br />

the generated technology files. TimeMill or PowerMill creates<br />

the technology filenames using any prefix you specify, including<br />

pathnames to central technology file directories.<br />

The -p option is not used in the script because -z triggers<br />

TimeMill or PowerMill to automatically create the applicable<br />

technology filenames.<br />

Technology files are created for each unique MOS model name in<br />

the netlist. For example, if the netlist contains MOS models<br />

nchan and pchan, TimeMill or PowerMill will create two<br />

technology files named typ_tech_nchan and typ_tech_pchan.<br />

After you start the runscript, the simulator immediately starts<br />

running Gentech if a technology file is not found. This is


Gentech<br />

Gentech 153<br />

confirmed by messages displayed on the screen. The simulator<br />

executes after the technology files are built. Once the initial<br />

technology files are created, you can use the same runscript in<br />

successive runs, and technology file generation will be skipped.<br />

The Gentech utility generates technology files. Gentech submits<br />

all necessary SPICE runs to characterize the range of CMOS<br />

sizes specified. Gentech currently runs with HSPICE,<br />

SMARTSPICE, SPECTRE, and many proprietary SPICE types.<br />

The Gentech program uses information from a control file that<br />

includes the SPICE models, the range of CMOS sizes, the<br />

operating temperature and supply voltage, and the command<br />

syntax to run your SPICE. Figure 1 shows a diagram that<br />

illustrates the flow of a Gentech run.<br />

A directory called examples/gentech located in the <strong>EPIC</strong> root<br />

directory contains a Gentech example. In that directory:<br />

■ The readme file explains how to use Gentech.<br />

■ The file ctrl.typ.25c_5v is a sample control file.<br />

■ run is a sample runscript.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


154 Chapter 4 <strong>EPIC</strong> Technology File<br />

Control File<br />

Gentech<br />

Technology File<br />

Figure 1 Gentech run flow<br />

Sample Control Files<br />

SPICE Input<br />

SPICE Output<br />

SPICE<br />

Several examples of Gentech control files are provided here to<br />

help you start running Gentech with limited reference to the<br />

details given in later sections. A percent sign (%) starts a new<br />

section of the control file.<br />

HSPICE Example<br />

Figure 2 shows an example of a Gentech control file for HSPICE.<br />

For all other SPICE types, see the section “Example of Other<br />

SPICE Types” on page 156.


%lib<br />

.lib "/cmos/model_file" nom<br />

.lib ’/cmos/model_file’ wcs<br />

.inc ’include_file’<br />

%model<br />

.model nch nmos<br />

.model pch pmos<br />

%parameters<br />

NW 1.6 4 10 100 400<br />

N_LENGTH 0.35<br />

NW1 10<br />

N_LENGTH1 0.5 1 8<br />

PW 1.6 5 50 300 400<br />

P_LENGTH 0.35<br />

PW1 2 10<br />

P_LENGTH1 0.5 1.2 5 8<br />

vds 0 2.7 0.3<br />

vgs 0 2.7 0.3<br />

body_bias 0.4 0.8 1.2 1.6 2<br />

speed<br />

%corner<br />

temperature 85<br />

voltage 2.7<br />

%invoke<br />

/usr/local/meta/h93/sun4/hspice %input > %output<br />

Figure 2 Example of Gentech control file for HSPICE<br />

Gentech 155<br />

Notice the use of %lib and %model in this example. Several<br />

library files and an include file are specified in the %lib section<br />

using HSPICE .lib and .inc commands. You must then specify<br />

the model names for NMOS and PMOS in the %model section, to<br />

clarify which one to use if many model names exist in your<br />

library files. When several model sections with names such as<br />

nch.1 and nch.2 or pch.1 and pch.2 are in the library files to<br />

model the same NMOS and PMOS process, but correspond to<br />

different size ranges by the model parameters lmin, lmax,<br />

wmin, and wmax, specify the model root name nch and pch in<br />

the %model section, as shown in this example. HSPICE will pick<br />

up the correct model extension names.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


156 Chapter 4 <strong>EPIC</strong> Technology File<br />

NOTE: The same control file can be used for SMARTSPICE and some<br />

proprietary SPICE types. For SMARTSPICE, add the following<br />

lines:<br />

% option<br />

scale=1u epic<br />

After the control file is created, run Gentech with HSPICE on the<br />

control file example using the following command line:<br />

$gentech -c ctrl.wcs.85c_2.7v.hsp -f hspice -t\<br />

tech.wcs.85c_2.7v.hsp -q<br />

When Gentech is finished, you can use your SPICE on your<br />

sample design and the <strong>EPIC</strong> tool with the generated tenchology<br />

file on your sample design and compare the output to check the<br />

accureacy of the generated technology file.<br />

Example of Other SPICE Types<br />

You should run Gentech with the -q option for HSPICE,<br />

SMARTSPICE, and some proprietary SPICE types (see “HSPICE<br />

Example” on page 154).<br />

For other SPICE types, you need to provide the following values<br />

in the %parameters section:<br />

■ ldiff and wdiff values<br />

■ lmlt and wmlt values if they are not equal to 1<br />

■ rsh values if they are not zero when nrd and nrs values are<br />

used in your SPICE netlists, or your SPICE defaults nrd and<br />

nrs are non-zero values<br />

■ ds_length values if they are used to calculate default nrd<br />

and nrs values or any of the ad, as, pd, and ps values<br />

Figure 3 shows an example of a Gentech control file for<br />

SPECTRE. In general, for all SPICE types other than HSPICE,<br />

the control file format follows this example except for using the<br />

%lib section. In this example, the NMOS and PMOS models are


Gentech 157<br />

listed directly in the %model section and the %lib section is not<br />

used.<br />

$ cat ctrl.27c_5v.spe<br />

%model<br />

model enmos bsim1 type=n \<br />

tox=3.0e-08 dl=0.24 dw=-0.10 rsh=55.0 \<br />

cgdo=360e-12 cgso=360e-12 cgbo=0.0 cj=550e-06 \<br />

mj=0.5 pb=0.7 cjsw=500e-12 mjsw=0.43 js=2.0e-06<br />

model epmos bsim1 type=p \<br />

tox=3.0e-08 dl=0.08 dw=0.10 rsh=75.0 \<br />

cgdo=360e-12 cgso=360e-12 cgbo=0.0 cj=540e-06 \<br />

mj=0.5 pb=0.7 cjsw=600e-12 mjsw=0.53 js=10.0e-06<br />

%parameters<br />

new_format<br />

model_alias enmos n<br />

model_alias epmos p<br />

body_bias 0.5 1 1.5 2 3<br />

NW 5 300<br />

PW 5 150<br />

N_LENGTH 1<br />

P_LENGTH 1<br />

vgs 0 5 0.5<br />

vds 0 5 0.5<br />

ldiff 0.12 0.04<br />

wdiff -0.05 0.05<br />

rsh 55 75<br />

ds_length 2.67<br />

%corner<br />

temperature 27<br />

voltage 5<br />

%invoke<br />

/spectre/spectre -f nutascii -r %output %input<br />

Figure 3 Gentech control file example for SPECTRE<br />

The new_format command in the %parameters section is for<br />

SPECTRE only and is required if your version of SPECTRE is<br />

newer than version cds43. The command syntax shown in the<br />

%invoke section should be used to start SPECTRE, but the<br />

pathname to your SPECTRE may be different.<br />

The command to run Gentech is:<br />

$gentech -c ctrl.27c_5v.spe -f spectre -t tech.27c_5v.spe<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


158 Chapter 4 <strong>EPIC</strong> Technology File<br />

Gentech Control File<br />

The models used in this sample control file are the SPECTRE<br />

native models. If the SPICE2 models are used, use -f spectre2<br />

instead of -f spectre to run Gentech with SPECTRE.<br />

The control file contents are briefly explained using comments in<br />

the above example. Further details can be found in the next<br />

section.<br />

This section describes details of the Gentech control file. The<br />

control file is divided into six sections. Each section starts with a<br />

percent sign (%) and a keyword at the beginning of the line. The<br />

sections are:<br />

■ Section 1 - %lib<br />

■ Section 2 - %model<br />

■ Section 3 - %parameters<br />

■ Section 4 - %corner<br />

■ Section 5 - %invoke<br />

■ Section 6 - %options<br />

■ Section 7 - %diode<br />

Sections 1 through 4 are required; sections 5, 6 and 7 are<br />

optional. Each section can be used only once in the control file<br />

and can appear in random order. The semi-colon (;) is the<br />

comment character for this file.<br />

Section 1 - %lib<br />

This section is required when you specify SPICE model files,<br />

include files, or any other lines needed in SPICE runs executed<br />

by Gentech. All lines of text in the %lib section are included in<br />

the SPICE netlists.<br />

When model files are specified, you must also provide the model<br />

names in the %model section. Otherwise, Gentech will not know<br />

which model names to use. For HSPICE, if a common model root<br />

name is used in model files, HSPICE will select a proper section<br />

of model with the root name and extension name based on MOS


Gentech 159<br />

width and length. In the following HSPICE example, proper<br />

models will be selected with model names tn.xxx or tp.yyy, based<br />

on width and length from the file mylibrary.lib inside the skew<br />

entry tntp, and from the file secondlib.lib. Here, xxx and yyy<br />

represent extension names which are proper character strings.<br />

EXAMPLE:<br />

%lib<br />

.lib ’mylibrary.lib’ tntp<br />

.inc "secondlib.lib"<br />

...<br />

%model<br />

.model tn nmos<br />

.model tp pmos<br />

%parameters<br />

...<br />

Section 2 - %model<br />

This section is mandatory and includes MOS models for SPICE.<br />

One NMOS model and one PMOS model can be listed here if the<br />

%lib section is not used. You can specify both models, but both<br />

are not needed if the sizes for only n or p are specified in the<br />

%parameters section. The dummy model is not needed when<br />

building a separate technology file for depletion NMOS.<br />

If you have models of NMOS and PMOS for different size ranges,<br />

but with the same root model names, you can use the %lib<br />

section to specify model files instead of a single model for NMOS<br />

and PMOS. But, you must specify the model names here using<br />

the syntax .model name [n|p]mos.<br />

EXAMPLE:<br />

%model<br />

.model n2n nmos<br />

.model p2n pmos<br />

%lib<br />

.include "model_file"<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


160 Chapter 4 <strong>EPIC</strong> Technology File<br />

One technology file can have only one NMOS and one PMOS<br />

model name, and one temperature and voltage condition. If you<br />

have multiple NMOS or PMOS models, see the section “Using<br />

Multiple Technology Files” on page 204.<br />

Section 3 - %parameters<br />

This section sets up geometric, electrical, model, and<br />

performance parameters. There are also parameters that help<br />

set up the format of the resulting technology file. The following<br />

table includes all the commands.<br />

Command Definition Comments<br />

nw (or n_width)<br />

nl or n_length)<br />

pw (or p_width)<br />

pl (or p_length)<br />

pn_ratio<br />

ldiff<br />

wdiff<br />

lmlt (or l_scale)<br />

wmlt (or w_scale)<br />

mlt (or wl_scale)<br />

vgs<br />

vds<br />

Specifies MOS size<br />

combinations in μm.<br />

Specifies lateral diffusion<br />

values in μm.<br />

■ Mandatory, but n or p<br />

sizes may be omitted.<br />

■ pn_ratio is not<br />

recommended if it does<br />

not specify the exact p<br />

widths.<br />

■ Allows nw, nw1, nw2,...,<br />

up to nw199; similar for<br />

pw and [n|p]_l.<br />

Mandatory for almost all<br />

SPICE types if -q option is<br />

not specified.<br />

Specifies scaling if not 1. Mandatory for all SPICE<br />

types if -q option is not<br />

specified.<br />

Specifies ids table voltage<br />

ranges.<br />

body_bias Specifies sampling voltages of<br />

vbs.<br />

Beginning value should be<br />

0. Ending value should be<br />

max |vdd-vss and divisible<br />

by the increment value.<br />

See the description of<br />

body_bias on page 174.


Command Definition Comments<br />

model_alias Maps SPICE model names to<br />

names (t=..) in <strong>EPIC</strong> netlists,<br />

if they are different.<br />

Gentech 161<br />

This is copied to the<br />

technology file so you can<br />

edit the entry without<br />

using this command in the<br />

control file.<br />

ds_length Default d/s extension length. ■ This is copied to the<br />

technology file so you can<br />

edit the entry without<br />

using this command in<br />

the control file.<br />

rsh Sheet resistance.<br />

■ Not needed if -q option is<br />

specified.<br />

■ This is copied to the<br />

technology file so you can<br />

edit the entry without<br />

using this command in<br />

the control file.<br />

no_nrd_nrs If RSDW model parameter is<br />

used.<br />

nrd_nrs_caps Improves the calculation of<br />

capacitance when rsh is large.<br />

new_format Specifies that input output<br />

format is new.<br />

■ Not needed for HSPICE<br />

unless you want to<br />

correct values found by<br />

Gentech.<br />

Only for one proprietary<br />

SPICE.<br />

Only for one proprietary<br />

SPICE.<br />

Only needed for SPECTRE<br />

version cds43 or newer.<br />

cjgate Specifies model value cjgate. Only mandatory for<br />

HSPICE acm 3 if the -q<br />

option is not specified.<br />

cg<br />

cov<br />

cja<br />

cjsw<br />

Overwrites average<br />

capacitances found by<br />

Gentech if the -q option is not<br />

specified.<br />

cg and cov are mandatory<br />

to provide cgdo values for<br />

acm 1.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


162 Chapter 4 <strong>EPIC</strong> Technology File<br />

Command Definition Comments<br />

tox<br />

cox<br />

cgdo<br />

cgso<br />

cgbo<br />

Overwrites entries used by<br />

TimeMill and PowerMill’s<br />

acc_branch configuration<br />

command.<br />

Same effect as hand-editing<br />

the entries.<br />

delta_vt Model subthreshold currents. Simulations will be slowed<br />

down.<br />

vto Specifies model value vto. Not needed except for<br />

SPECTRE levels 4, 5, 6.<br />

case Controls SPICE file formats in<br />

upper- or lowercase.<br />

unit_wl<br />

unit_adas<br />

unit_pdps<br />

unit in w= and l=<br />

unit in ad= and pd=<br />

unit in pd= and ps=<br />

If there are no characters<br />

in the commands unit_wl,<br />

unit_adas, or unit_pdps,<br />

there will be no unit<br />

character in the SPICE<br />

input file generated by<br />

Gentech.<br />

wd Default WD parameter. Allows the extracted value<br />

to be overridden. Works<br />

only with HSPICE.<br />

speed Increases the speed with<br />

which the technology file is<br />

generated.<br />

binary Creates a binary technology<br />

file, reducing the amount of<br />

required disk space.<br />

Works with HSPICE,<br />

SMARTSPICE, HPSPICE,<br />

and Sprectre2.<br />

Works with TISPICE,<br />

HSPICE, SMARTSPICE,<br />

and HPSPICE.<br />

The model_alias, rsh and ds_length commands copy their<br />

respective values to the technology files. You do not need to use<br />

them in the control file, but edit these values directly in the<br />

technology files, when needed, without rerunning Gentech.<br />

These values directly affect the functionality and accuracy of the<br />

technology files.


Gentech 163<br />

Use the cg, cov, cja, and cjsw commands carefully and only if<br />

necessary to improve the average capacitance accuracy in the<br />

technology files. The effect of putting these values in the control<br />

file and running Gentech is the same as hand-editing all of the<br />

respective entries directly in the technology file. The cg and cov<br />

commands are required to provide the cgdo model parameters<br />

when the acm value is set to 1.<br />

The tox, cox, cgdo, cgso, and cgbo commands are used to<br />

overwrite the respective entries in the technology files. These<br />

values are needed only if you apply the configuration file<br />

command acc_branch in TimeMill or PowerMill simulations.<br />

The ldiff, wdiff, lmlt, wmlt, rsh, and ds_length commands are<br />

not needed for HSPICE. Instead, Gentech finds these values<br />

automatically and echoes them on the stdout and in the<br />

gentech.log file, as shown in “HSPICE Example” on page 154.<br />

Gentech requires an acm value in the control file. You can still<br />

use these commands to overwrite the result found by Gentech if<br />

it finds the wrong values.<br />

The syntax for each command in the %parameters section<br />

follows.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


164 Chapter 4 <strong>EPIC</strong> Technology File<br />

nw / n_width<br />

pw / p_width<br />

nl / n_length<br />

pl / p_length<br />

SYNTAX:<br />

nw [size_range]<br />

n_width [size_range]<br />

pw [size_range]<br />

p_width [size_range]<br />

DESCRIPTION:<br />

These commands set NMOS or PMOS widths used in<br />

calibrations. Units are in microns. Spaces are used as delimiters<br />

between width values. The maximum value for size range is 199.<br />

SYNTAX:<br />

nl [size_range]<br />

n_length [size_range]<br />

pl [size_range]<br />

p_length [size_range]<br />

DESCRIPTION:<br />

These commands set NMOS or PMOS lengths. Units are in<br />

microns. Ranges of different sizes can be specified in the<br />

%parameters section using the following syntax. The maximum<br />

value for size range is 199.<br />

pw p_width(s)<br />

nw n_width(s)<br />

p_length p_l(s)<br />

n_length n_l(s)<br />

pw1 p_width(s)<br />

nw1 n_width(s)<br />

p_length1 p_l(s)


n_length1 n_l(s)<br />

...<br />

nw199 n_width(s)<br />

n_length199 n_l(s)<br />

Gentech 165<br />

EXAMPLE 1:<br />

nw 1 2 3<br />

n_length 1 2<br />

pw 1 2<br />

p_length 1 1.5<br />

nw1 10 20<br />

n_length1 10<br />

pw1 100<br />

p_length1 5<br />

Example 1 characterizes the following sizes for n (width/length):<br />

1/1, 2/1, 3/1, 1/2, 2/2, 3/2, 10/10, 20/10. The example also<br />

characterizes the following sizes for p: 1/1, 2/1, 1/1.5, 2/1.5, 100/<br />

5.<br />

You can specify ranges beginning with nw, nw1, and so on. The<br />

upper range can extend to nw199. The same is true for pw, nl,<br />

and pl. It’s not necessary to have both n and p sizes specified for<br />

each range. If a pn_ratio is specified, that ratio will be used to<br />

determine the widths of the PMOS, provided no explicit pwn has<br />

been specified.<br />

EXAMPLE 2:<br />

pn_ratio 2<br />

nw 2 4<br />

n_length 1 2<br />

p_length 1 1.5<br />

nw1 10<br />

n_length1 2<br />

pw1 10<br />

p_length1 4<br />

Example 2 characterizes the following MOS sizes for n: 2/1, 4/1,<br />

2/2, 4/2, 10/2. The MOS sizes for p are characterized as follows:<br />

4/1, 8/1, 4/1.5, 8/1.5, 10/4.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


166 Chapter 4 <strong>EPIC</strong> Technology File<br />

If your circuit has several different MOS sizes, you might include<br />

all the sizes in the control file. However, Gentech will each have<br />

to be run at least once, incurring additional time and disk space<br />

for loading huge technology files. If you choose to run Veritech,<br />

you will also have to be run it mulitple times and incur the same<br />

overhead. Instead, you should include all the lengths and just<br />

samples of the widths. This is true for a scalable process since all<br />

the capacitance and ids entries in the technology files are<br />

normalized data.<br />

Because of potential accuracy problems, <strong>EPIC</strong> tools issue a<br />

warning in the .log file if any length in the <strong>EPIC</strong> netlist is not<br />

found in the technology file.


pn_ratio<br />

SYNTAX:<br />

pn_ratio ratio_value<br />

EXAMPLE:<br />

pn_ratio 2<br />

Gentech 167<br />

DESCRIPTION:<br />

This command is used to determine PMOS channel widths if the<br />

pw command is not specified.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


168 Chapter 4 <strong>EPIC</strong> Technology File<br />

acm<br />

SYNTAX:<br />

acm 0 | 1 | 2 | 3<br />

EXAMPLE:<br />

acm 2<br />

DESCRIPTION:<br />

This specifies the acm (area calculation method) value for<br />

diffusion (drain or source to substrate) capacitance. The cg and<br />

cov commands are mandatory when acm is set to 1. The cjgate<br />

command is mandatory when acm is set to 3.<br />

NOTE: If the -q option is specified, you do not need to specify acm,<br />

cjgate, cg, or cov.<br />

Although the HSPICE .options aspec command sets acm to 1,<br />

the acm value in the model lines overwrites it. Therefore, always<br />

take the acm value from the model lines. If acm is not specified<br />

in the model lines, the latest version of HSPICE defaults the<br />

acm value to 0.<br />

This command is mandatory for HSPICE. It is needed for only<br />

one proprietary SPICE type. It sets acm values to 1 if it is an<br />

automod=100 case.


ldiff<br />

wdiff<br />

SYNTAX:<br />

ldiff n_ldiff p_ldiff<br />

wdiff n_wdiff p_wdiff<br />

Gentech 169<br />

EXAMPLE:<br />

ldiff -0.1 -0.15 ; eg ln= 1 μm,ln effective = 1.2μm<br />

; eg lp= 1 μm,lp effective = 1.3μm<br />

wdiff 0.45 0.55 ; eg wn= 4 μm, wn effective =3.1μm<br />

; eg wp= 4 μm, wp effective =2.9μm<br />

DESCRIPTION:<br />

These commands specify the lateral diffusion for MOS lengths<br />

and widths. The effective length and width of each MOS are<br />

calculated as:<br />

Leff = Ldrawn * lmlt - 2 * ldiff<br />

Weff = Wdrawn * wmlt - 2 * wdiff<br />

The values are real numbers in microns. The lateral diffusion<br />

values ldiff and wdiff are not subject to scaling lmlt and<br />

wmlt. This command is not needed for HSPICE unless Gentech<br />

fails to find the accurate ldiff and wdiff values.<br />

NOTE: ld in HSPICE is also called dlat or latd. xl in HSPICE is also<br />

called dl or ldel or dell. xw in HSPICE is also called dw or wdel<br />

or delw.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


170 Chapter 4 <strong>EPIC</strong> Technology File<br />

The ldiff and wdiff values for different SPICE types are listed in<br />

the following table.<br />

SPICE Type Idiff wdiff<br />

SPECTRE level 1, 2, 3 scalm * (ld - xl / 2) scalm * (wd - xw / 2)<br />

SPECTRE<br />

level 4 (bsim1),<br />

5 (bsim2), 10(bsim1_5)<br />

scalm * (dl - xl) / 2 scalm * (dw - xw) / 2<br />

SPECTRE (if Berkeley<br />

SPICE2 models used)<br />

PSPICE<br />

Berkeley SPICE2<br />

Berkeley SPICE3<br />

ld 0


wl_scale /mlt<br />

l_scale / lmlt<br />

w_scale /wmlt<br />

SYNTAX:<br />

wl_scale n_mlt p_mlt<br />

or mlt n_mlt p_mlt<br />

l_scale n_lmlt p_lmlt<br />

or lmlt n_lmlt p_lmlt<br />

w_scale n_wmlt p_wmlt<br />

or wmlt n_wmlt p_wmlt<br />

EXAMPLE 1:<br />

l_scale 0.8<br />

w_scale 0.8<br />

Gentech 171<br />

EXAMPLE 2:<br />

; for HSPICE if a scaling of 0.25 required but not<br />

; specified in HSPICE .model lines:<br />

% parameters<br />

lmlt 0.25<br />

wmlt 0.25<br />

% options<br />

scale=0.25e-6<br />

; HSPICE also requires a unit scaling from meter to<br />

micron<br />

For HSPICE, lmlt and wmlt commands in the %parameters<br />

section are not needed unless Gentech fails to find the correct<br />

values. However, they are still required in the %options section,<br />

if applicable, because the contents of the %options section belong<br />

to the SPICE netlist created by Gentech.<br />

DESCRIPTION:<br />

These commands handle scaled processes. The lmlt and wmlt<br />

values are floating point numbers. If two numbers are supplied,<br />

the first is used for NMOS and the second for PMOS. If only one<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


172 Chapter 4 <strong>EPIC</strong> Technology File<br />

number is supplied, that number applies to both NMOS and<br />

PMOS. The wl_scale and mlt commands scale both the length<br />

and width using the same value.<br />

This is needed for SPICE types other than HSPICE if the scaling<br />

values do not equal 1. This is needed for HSPICE only if Gentech<br />

finds wrong scaling values.<br />

When using a scaled technology file, the pre-scaled sizes should<br />

be used in the Gentech control file and the <strong>EPIC</strong> netlists.<br />

NOTE: These commands are required if scaling is used in the SPICE<br />

.model lines, .options lines, other commands in SPICE library<br />

files, .options, or other commands in actual SPICE netlists. If<br />

scaling is specified in the SPICE .model lines (for example, lmlt<br />

and wmlt values in SPICE models), using lmlt and wmlt<br />

commands in the %parameters section is sufficient. If scaling is<br />

specified in .options or commands other than .model lines,<br />

regardless of whether or not it is in a library file, the lmlt and<br />

wmlt commands in the %parameters section are required, along<br />

with a proper scale parameter in the %options section. This is<br />

because Gentech may create a .options scale=1e-6 line for<br />

unit conversion which overwrites the .options scale=0.25e-<br />

6 line in the SPICE library file. The %options section will then<br />

create a last .options scale=0.25e-6 line in the SPICE<br />

netlist to overwrite again.


vds<br />

vgs<br />

SYNTAX:<br />

vds 0 vde vdi<br />

vgs 0 vge vgi<br />

EXAMPLE 1:<br />

vds 0 6 0.2<br />

vgs 0 6 0.2<br />

EXAMPLE 2:<br />

vds 0 2.7 0.15<br />

vgs 0 2.7 0.15<br />

Gentech 173<br />

DESCRIPTION:<br />

These are the drain-to-source and effective gate-to-source<br />

voltage ranges. Their beginning, ending, and incremental values<br />

are specified for measuring the device currents. Notice that the<br />

effective vgs is defined as the gate to source voltage minus the<br />

threshold voltage. You should choose the incremental values vdi<br />

and vgi so the ending values for vde and vge are their integer<br />

multiples.<br />

The ending values vde and vge must be greater than the voltage<br />

value specified in the %corner section. The voltage value<br />

determines the voltage range used to calculate the average<br />

capacitances. A warning is issued if these voltage values differ<br />

significantly.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


174 Chapter 4 <strong>EPIC</strong> Technology File<br />

body_bias<br />

SYNTAX:<br />

body_bias 0 vbe vbi<br />

EXAMPLE:<br />

body_bias 0 5 0.1<br />

DESCRIPTION:<br />

For HSPICE, SPICE2, and several other SPICE types, you can<br />

use this syntax to specify the range of the sampling voltages with<br />

the ending value vbe and increment value vbi of the source to<br />

substrate reverse bias voltage. This will create a new table data<br />

of threshold voltages in the technology file, and will improve the<br />

simulation accuracy, especially for TimeMill and PowerMill. If<br />

this body_bias command is not specified, the ending voltage vbe<br />

defaults to the ending voltage vde specified in the vds command,<br />

and the increment voltage vbi defaults to 0.1.<br />

In certain cases, the following syntax might be used:<br />

SYNTAX:<br />

body_bias vs1 vs2 vs3 vs4 vs5<br />

EXAMPLE:.<br />

body_bias 0.5 1 1.5 2 3<br />

DESCRIPTION:<br />

This is needed if you want to specify the sampling source to<br />

substrate reverse bias voltages, where threshold voltages are<br />

measured other than the default voltage points of 0.8, 1.2, and 2<br />

volts. When the body_bias command is not used, Gentech<br />

sweeps the vbs values from 0 to voltage using 0.1V increments.<br />

For all SPICE types, a maximum of five sampling voltages can be<br />

specified. The vs values are in volts and must monotonically<br />

increase and not be zero.


model_alias<br />

SYNTAX:<br />

model_alias true_name alias1 alias2 ...<br />

EXAMPLE:(technology file)<br />

model_alias NCH n nmos nch<br />

model_alias TP p<br />

Gentech 175<br />

EXAMPLE:(<strong>EPIC</strong> netlist)<br />

(t=p)(en=p1)(dr=z)(ga=A)(so=vdd)(w=600)(l=80);<br />

(t=n)(en=n1)(dr=z)(ga=A)(so=gnd)(w=300)(l=80);<br />

(t=nch)(en=n2)(dr=z)(ga=A)(so=vdd)(w=300)(l=80);<br />

(t=nmos)(en=n3)(dr=z)(ga=A)(so=vdd)(w=300)(l=80);<br />

Both examples model MOS p1 based on the SPICE model TP and<br />

models MOS n1, n2, and n3 based on the SPICE model NCH.<br />

Aliases p1, n1, n2, and n3 are used in <strong>EPIC</strong> and SPICE netlists.<br />

Model true names TP and NCH appear in SPICE models used in<br />

the Gentech control file and in the generated technology file.<br />

DESCRIPTION:<br />

This maps the true_name used in the SPICE model to the MOS<br />

names in the netlist. You can map multiple MOS names to one<br />

SPICE model name. Each model_alias command is copied to the<br />

technology file. If you have an existing technology file and need<br />

to use this command, you can simply add the command to the<br />

technology file without rerunning Gentech.<br />

The argument true_name is the name in the SPICE model. The<br />

alias arguments are the names in the netlist.<br />

This is only needed if the SPICE model names are different from<br />

the names used in the netlists.<br />

When you are using multiple technology files, be careful to avoid<br />

name mapping conflicts when using this command. See “Using<br />

Multiple Technology Files” on page 204 for more details.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


176 Chapter 4 <strong>EPIC</strong> Technology File<br />

ds_length<br />

SYNTAX:<br />

ds_length diffext<br />

EXAMPLE:<br />

ds_length 2.4<br />

DESCRIPTION:<br />

This command copies only the diffext values to the technology<br />

file. This value is not used by Gentech, even in calculating the<br />

average capacitances. Therefore, the diffext value can be edited<br />

directly in the technology file without rerunning Gentech.<br />

This is needed if any of the ad, as, pd, ps, nrd, and nrs MOS<br />

attributes are not specified in the netlist, and the default value<br />

depends on the diffext value.<br />

The argument diffext is the drain and source extension length.<br />

This dimension is used in conjunction with MOS widths to<br />

determine the default values of the area and perimeter of drain<br />

and source when ad, as, pd and ps are not specified in the<br />

netlists. Some SPICE types also use the diffext value to<br />

determine default nrd and nrs values if they are not specified in<br />

the netlist.


W<br />

Gentech 177<br />

Figure 4 illustrates a MOS transistor cross-section showing<br />

diffext.<br />

source L<br />

gate<br />

Figure 4 MOS transistor cross-section showing difftext<br />

drain<br />

DIFFEXT<br />

Drain Contact<br />

To match HSPICE, diffext should be 2*HDIF when acm is 2 or 3,<br />

and should be 0 if acm is 0 or 1, where HDIF is an HSPICE model<br />

parameter. This command is not needed for HSPICE unless<br />

Gentech fails to find the correct diffext values.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


178 Chapter 4 <strong>EPIC</strong> Technology File<br />

rsh<br />

SYNTAX:<br />

rsh n_rsh p_rsh<br />

EXAMPLE:<br />

rsh 50 75<br />

DESCRIPTION:<br />

This specifies the sheet resistance values in ohms per square<br />

used by the nrd and nrs MOS attributes from the netlist. The nrd<br />

and nrs attributes contain the drain and source resistance<br />

squares.<br />

This is needed when nrd and nrs MOS attributes are used in<br />

SPICE netlists, or when nrd and nrs are not used but SPICE<br />

defaults them to some nonzero value. In the latter case, check<br />

that the calculateNRSH() function in the customize.c file<br />

returns the same values as SPICE. See “Customizing <strong>EPIC</strong><br />

<strong>Tools</strong>” on page 299 for further details.<br />

The values for n_rsh and p_rsh can be obtained from your SPICE<br />

model. These values can be directly edited in the technology file<br />

without rerunning Gentech.<br />

For HSPICE, Gentech will find the proper rsh values with<br />

temperature effects included. You use this command only if<br />

Gentech fails to extract the rsh values correctly.


no_nrd_nrs<br />

SYNTAX:<br />

no_nrd_nrs<br />

EXAMPLE:<br />

no_nrd_nrs<br />

DESCRIPTION:<br />

Gentech 179<br />

This causes Gentech not to use nrd and nrs MOS attributes in<br />

the SPICE runs. Therefore, possible RSDW model parameter<br />

effects can be characterized in the technology files.<br />

This is used by only one proprietary SPICE type, which<br />

sometimes needs to model the RSDW model parameter effect<br />

instead of the rsh model parameter. Use this command only if<br />

your SPICE model contains the RSDW parameter.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


180 Chapter 4 <strong>EPIC</strong> Technology File<br />

nrd_nrs_caps<br />

SYNTAX:<br />

nrd_nrs_caps<br />

EXAMPLE:<br />

nrd_nrs_caps<br />

DESCRIPTION:<br />

This causes Gentech to add small nrd and nrs values in the<br />

SPICE runs when extracting the average capacitances. This<br />

prevents inaccuracies caused by possible large resistance values<br />

from rsh multiplied by nrd or nrs in SPICE models. If you do not<br />

do this, the SPICE .tran results will not settle down, even after<br />

a very long simulation time.<br />

This is used by only one proprietary SPICE type, which has huge<br />

rsh model values, and defaults nrd and nrs to (1), which causes<br />

inaccuracies in extracting average capacitances. If your rsh<br />

values, either by default or in the models, are within several<br />

hundred ohms per square, or if your SPICE defaults nrd and nrs<br />

to zero, you don’t need to use this command.


new_format<br />

SYNTAX:<br />

new_format<br />

EXAMPLE:<br />

new_format<br />

Gentech 181<br />

DESCRIPTION:<br />

This informs Gentech the SPECTRE output format is new. This<br />

is needed only for SPECTRE versions cds43 - ver.4.3.94 or later.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


182 Chapter 4 <strong>EPIC</strong> Technology File<br />

cjgate<br />

SYNTAX:<br />

cjgate n_cjgate p_cjgate<br />

EXAMPLE:<br />

cjgate 3e-10 2.8e-11;cjgate values in SPICE unit F/m<br />

DESCRIPTION:<br />

This is needed only for the HSPICE acm 3 case. It is not needed<br />

if the -q command-line option is specified. Under that condition,<br />

it is mandatory to provide the cjgate model parameters. The<br />

cjate values are in units of F/m, as in HSPICE models.


cg<br />

cov<br />

cja<br />

cjsw<br />

SYNTAX:<br />

cg n_cg p_cg<br />

or cg n|p tox|cox tox|cox<br />

or cg n tox|cox n_tox|n_cox p tox|cox p_tox|p_cox<br />

SYNTAX:<br />

cov n_cov p_cov<br />

or cov n|p cgdo|cgso cgdo<br />

or cov n cgdo|cgso n_cgdo p cgdo|cgso p_cgdo<br />

SYNTAX:<br />

cja n_cja p_cja<br />

or cja n|p cj cjo mj mj pb pb<br />

Gentech 183<br />

or cja n cj n_cjo mj n_mj pb n_pb p cj p_cjo mj p_mj pb p_pb<br />

SYNTAX:<br />

cjsw n_cjsw p_cjsw<br />

or cjsw n|p cjsw cjswo mjsw mjsw pbsw pbsw<br />

or cjsw n cjsw n_cjswo mjsw n_mjsw pbsw n_pbsw p cjsw<br />

p_cjswo mjsw p_mjsw pbsw p_pbsw<br />

The cg command provides the average gate capacitance value.<br />

The cov command provides the SPICE model value cgdo, which<br />

is the gate-to-drain overlap capacitance. <strong>EPIC</strong> assumes cgdo is<br />

equal to cgso, the SPICE model value of gate-to-source overlap<br />

capacitance.<br />

These four commands are used to overwrite the average<br />

capacitance in the technology file when necessary. They<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


184 Chapter 4 <strong>EPIC</strong> Technology File<br />

overwrite the following values in the technology file for all the<br />

MOS devices:<br />

■ the averaged values calculated by Gentech on the gate (sum<br />

of gate-to-source, gate-to-drain, and gate-to-substrate,<br />

excluding the overlap)<br />

■ the overlap (gate-to-drain, gate-to-source overlap)<br />

■ the diffusion junction (drain-to-substrate, source-tosubstrate)<br />

bottom area<br />

■ the diffusion side wall capacitances<br />

These capacitance values appear in the gate_cap and diff_cap<br />

data lines in the technology files.<br />

Adding these commands to the control file and rerunning<br />

Gentech have the same effect as hand-editing the respective<br />

entries in the following data lines in a technology file:<br />

gate_cap model_name nmos|pmos width length cg<br />

diff_cap model_name nmos|pmos width length<br />

cov cja cjsw<br />

Use these commands with care. The cov and cg commands<br />

should be used together. The cja and cjsw commands should also<br />

be used together. Otherwise, you might disturb the overall<br />

capacitance accuracy. These sets of commands are not correlated<br />

to each other. For example, using the cov and cg commands will<br />

not affect the cja and cjsw data entries, which remain as values<br />

calculated by Gentech.<br />

To use these commands, you can provide the necessary model<br />

parameters tox, cox, cgdo, cjo, mj, pb, cjswo, mjsw, pbsw and<br />

let Gentech calculate the average capacitance values using the<br />

following equations. Then all the parameters are in SPICE units:<br />

tox is in m, cox and cjo are in F/m 2 , cgdo and cjswo are in F/m.<br />

If the equations used by your SPICE are different than the<br />

following ones, you may provide the final average capacitance<br />

values directly. If so, the values should be in <strong>EPIC</strong> units: cg and<br />

cja are in fF/10 -16 m 2 , cov and cjsw are in fF/10 -8 m. The


Gentech 185<br />

following calculations and unit conversions are performed by<br />

Gentech when you provide the model parameters. You will have<br />

to do the same unit conversions if you use a different set of<br />

equations when providing the final average values.<br />

If TOX is given in units of meters:<br />

E E sio2<br />

Cg 0.9 o<br />

= ------------------- =<br />

TOX<br />

If COX is given in units of F/m 2 :<br />

(0.1 is used for unit conversion)<br />

The two preceding equations give averaged Cg in required <strong>EPIC</strong><br />

units of fF/10 -16 m 2 . Although cg versus vgs is a quite<br />

complicated function, using the constant value 0.9 to multiply<br />

the maximum value at zero bias is a good approximation for the<br />

average cg value for most applications.<br />

If CGDO is in units of F/m:<br />

This gives averaged Cov in required <strong>EPIC</strong> units of fF/10 -8 m.<br />

Cja and Cjsw are averaged values in the reverse bias vsb voltage<br />

range from zero to VDD.<br />

If Cja is in units of F/m 2 :<br />

3.105 10 12 –<br />

×<br />

--------------------------------<br />

TOX<br />

Cg= 0.9 × 0.1 × Cox= 0.09Cox<br />

Cov 10 7 = × CGDO<br />

PB vdd 1 MJ)<br />

Cja ------------------------------- 1 -------- ⎞<br />

vdd( 1 – MJ)<br />

PB ⎠ – (<br />

=<br />

⎛ +<br />

– 1 ( 0.1 )CJO<br />

⎝<br />

This gives Cja in required <strong>EPIC</strong> units of fF/10 -16 m 2 , where 0.1 is<br />

used for unit conversion.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


186 Chapter 4 <strong>EPIC</strong> Technology File<br />

If Cjsw is in units of F/m:<br />

PBSW<br />

vdd 1 MJSW)<br />

Cjsw ----------------------------------------- 1 ---------------- ⎞<br />

vdd( 1 – MJSW) PBSW⎠<br />

– (<br />

⎛ +<br />

– 1 10<br />

⎝<br />

7<br />

=<br />

( )CJSWO<br />

This gives Cjsw in required <strong>EPIC</strong> units of fF/10 -8 m, where 10 7 is<br />

used for unit conversion.<br />

tox, cox, cgdo, cgso, pb, pbsw, mj, mjsw, cjo, cjswo are SPICE<br />

model parameters. cgso usually equals cgdo. pbsw usually<br />

equals pb if pbsw is not defined.<br />

Notice that a semicolon (;) starts an in-line comment.<br />

EXAMPLE 1:<br />

%parameters<br />

cov n cgdo 2.1e-10 p cgdo 1.9e-10; (cgdo values in<br />

SPICE unit F/m)<br />

;or use the next one<br />

;cov 2.1e-3 1.9e-3<br />

;(cov values in <strong>EPIC</strong> unit fF/1e-8m)<br />

cg n tox 180e-10 p tox 180e-10<br />

;(tox values in SPICE unit m)<br />

;or use either one of the next two<br />

;cg n cox 1.91667e-3 p cox 1.91667e-3<br />

;(cox values in SPICE unit F/m2)<br />

;cg 1.725e-4 1.725e-4<br />

;(cg values in <strong>EPIC</strong> unit fF/1e-16m2)<br />

If there is a need to overwrite the average diffusion capacitances<br />

found by Gentech, use the cja and cjsw commands together.


Gentech 187<br />

EXAMPLE 2:<br />

%parameters<br />

cja n cj 8e-4 mj 0.6 pb 1.02 p cj 6e-4 mj 0.55<br />

pb0.7<br />

;(cj values in SPICE unit F/m2),or use<br />

the next one<br />

;cja 4.22e-5 2.93e-5<br />

;(cja values in <strong>EPIC</strong> unit fF/1e-16m2) cjsw n cjsw<br />

3e-10 mjsw 0.23 pbsw 0.7 p cjsw 1.33e-10<br />

mjsw 0.23 pbsw 0.6<br />

;(cjsw values in SPICE unit F/m),or use the next one<br />

;cjsw 2.19e-3 9.5e-4<br />

;(cjsw values in <strong>EPIC</strong> unit fF/1e-8m)<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


188 Chapter 4 <strong>EPIC</strong> Technology File<br />

tox<br />

cox<br />

cgdo<br />

cgso<br />

cgbo<br />

SYNTAX:<br />

tox n_tox p_tox<br />

cox n_cox p_cox<br />

cgdo n_cgdo p_cgdo<br />

cgso n_cgso p_cgso<br />

cgbo n_cgbo p_cgbo<br />

EXAMPLE:<br />

tox 180e-10 180e-10; (meters, m)<br />

cox 1.92e-3 1.92e-3; (F/m 2 )<br />

cgdo 2.2e-9 2.3e-9; (F/m)<br />

cgso 2.2e-9 2.3e-9; (F/m)<br />

cgbo 0 0; (F/m)<br />

DESCRIPTION:<br />

This data is used by the configuration command acc_branch in<br />

TimeMill or PowerMill simulations. The units are consistent<br />

with SPICE models (therefore, different from the <strong>EPIC</strong> units<br />

used in the technology file), and are shown in the example. Note<br />

that a semicolon (;) starts an in-line comment.<br />

If Gentech fails to include these values from SPICE models in<br />

the technology file, these commands can overwrite respective<br />

data lines in the technology file, and have the same effect as<br />

hand-editing the technology file with these entries.<br />

NOTE: A binary technology file cannot be hand-edited.


delta_vt<br />

SYNTAX:<br />

delta_vt n_delta_vt p_delta_vt<br />

EXAMPLE:<br />

delta_vt -0.5 0.5<br />

NOTE: You should use the values shown in this example.<br />

DESCRIPTION:<br />

Gentech 189<br />

The command delta_vt shifts the original threshold voltage by<br />

the amount specified. The amount of shift you specify should not<br />

be too large.<br />

This command is needed only when you want subthreshold<br />

currents included in the technology files and simulations.<br />

TimeMill and PowerMill simulations will slow down when these<br />

commands are used.<br />

You do not need to specify this command for automatic<br />

technology file generation; the default is used instead.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


190 Chapter 4 <strong>EPIC</strong> Technology File<br />

vto<br />

SYNTAX:<br />

vto n_vto p_vto<br />

EXAMPLE:<br />

vto 0.7 -0.8<br />

This example indicates that the threshold voltage for NMOS is<br />

0.7 volts and the threshold voltage for PMOS is -0.8 volts when<br />

the source to bulk voltage is 0 under the nominal temperature of<br />

your models.<br />

DESCRIPTION:<br />

This command specifies the threshold voltage for MOS with a<br />

zero source-to-bulk voltage at nominal temperature. This is used<br />

to calculate the body-bias effects (the relationship between<br />

threshold voltage and source-substrate bias level) at the<br />

temperature specified in the %corner section.<br />

This is needed only for SPECTRE levels 4 (BSIM1), 5 (BSIM2),<br />

and 10 (BSIM1_5) models.<br />

For any unsupported SPICE type, if the SPICE can do a .OP run<br />

to print the threshold voltages at a specified temperature, this is<br />

not needed and not recommended in your Gentech SPICE runs.<br />

If this command is needed but not provided, Gentech attempts to<br />

read vto directly from the SPICE model. However, that might<br />

not be successful when the files listed in the %lib section are not<br />

readable or vto is not called vto in your model. In those cases,<br />

vto should be constructed by some other parameters. Therefore,<br />

you should specify the vto parameter when necessary.<br />

The vto values are real numbers, given in volts.


case<br />

SYNTAX:<br />

case upper | lower<br />

EXAMPLE:<br />

case upper<br />

Gentech 191<br />

DESCRIPTION:<br />

You can specify upper- or lowercase characters for the SPICE<br />

netlists created by Gentech. The library and model cards are not<br />

affected by this command.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


192 Chapter 4 <strong>EPIC</strong> Technology File<br />

unit_wl<br />

unit_adas<br />

unit_pdps<br />

SYNTAX:<br />

unit_wl wl_char<br />

unit_adas adas_char<br />

unit_pdps pdps_char<br />

EXAMPLE 1:<br />

unit_wl<br />

EXAMPLE 2:<br />

unit_wl u<br />

unit_adas p<br />

unit_pdps U<br />

DESCRIPTION:<br />

You use these commands to overwrite the unit character used in<br />

the SPICE input file produced by Gentech if the defaults do not<br />

work. The defaults are either with or without a ‘U’ for geometries<br />

w, l, pd, ps; and with or without a ‘P’ for ad and as. Only the first<br />

character is taken as the new unit scaling character. If there is<br />

no character or a blank is used, the SPICE netlists will have no<br />

unit character for the corresponding geometry entry.


speed<br />

SYNTAX:<br />

speed<br />

DESCRIPTION:<br />

Gentech 193<br />

The addition of the speed command to the control file increases<br />

the speed with which the technology file is generated.<br />

NOTE: This command can be used only with HSPICE, SMARTSPICE,<br />

HPSPICE, and Spectre2.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


194 Chapter 4 <strong>EPIC</strong> Technology File<br />

binary<br />

SYNTAX:<br />

binary<br />

DESCRIPTION:<br />

The binary command in the control file causes the generation of<br />

a binary file.<br />

NOTE: This command is valid only with TISPICE, HSPICE,<br />

SmartSpice, and HPSPICE.<br />

You cannot use this command with the simulation tool’s -A<br />

option.


temperature<br />

voltage<br />

Section 4 - %corner<br />

Gentech 195<br />

This section specifies the supply voltage and the temperature for<br />

the technology file. This section is mandatory.<br />

SYNTAX:<br />

temperature temperature<br />

voltage voltage<br />

EXAMPLE:<br />

temperature 25<br />

voltage 3.3<br />

DESCRIPTION:<br />

The argument temperature is in degrees Celsius, and voltage is<br />

in volts. The voltage value should be the same as the vde and vge<br />

values in the vds and vgs commands in the %parameters<br />

section. The <strong>EPIC</strong> tool will issue a warning if these voltage<br />

values differ significantly. If you have different parts of a circuit<br />

operating under several voltages or temperatures, see the<br />

section “Using Multiple Technology Files” on page 204 for<br />

details.<br />

Section 5 - %invoke<br />

This section, which is mandatory, lets you specify the command<br />

syntax to start your SPICE. Use full pathnames for commands.<br />

EXAMPLE:<br />

/vendor/ees/runprecise [options] [%input%output]<br />

The arguments in brackets, though optional, are recommended.<br />

The keywords %input and %output let you control the command<br />

syntax to run your SPICE. You can add preprocessors,<br />

postprocessors, and so on, by creating a script that takes %input<br />

and %output as arguments.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


196 Chapter 4 <strong>EPIC</strong> Technology File<br />

The following rules apply to the use of the keywords %input and<br />

%output:<br />

■ Both keywords must be separated by spaces.<br />

■ Multiple %input and %output keywords are accepted, with a<br />

limit of ten each.<br />

■ Any special preprocessing or post-processing should be done<br />

in a script which takes %input and %output keywords as<br />

arguments.<br />

EXAMPLE:<br />

%invoke<br />

/usr/joe/bin/my_SPICE<br />

You can use the %input and %output keywords in the line that<br />

Gentech substitutes with the names of SPICE input and output<br />

files, respectively. For example, if you start SPICE using<br />

my_SPICE -h -b -x abc -r input_file -o output_file,<br />

you can use the following syntax with the keywords in the<br />

control file:<br />

%invoke<br />

my_SPICE -h -b -x abc -r %input -o %output<br />

Note: SPECTRE users must use the %invoke syntax in the<br />

%invoke section.<br />

If your site runs a preprocessor on an HSPICE netlist and a postprocessor<br />

for the output, you can package everything into the<br />

following script called run_my_SPICE:<br />

#!/bin/sh -f<br />

SPICE_pre_proc < $1 > /tmp/foo<br />

/usr/bin/SPICE -h -b -x abc -r /tmp/foo -o<br />

/tmp/bar<br />

SPICE_post_proc < /tmp/bar > $2<br />

rm -f /tmp/foo /tmp/bar<br />

exit 0<br />

NOTE: This script assumes that its first argument ($1) is the name of<br />

the input file and the second ($2) is the name of the output file.


Gentech 197<br />

If this script is made executable, then you only need to change<br />

your control file to the following:<br />

%invoke<br />

run_my_SPICE %input %output<br />

Because you are running a different type of SPICE, you might<br />

also have to change the format of the input netlist that Gentech<br />

produces for SPICE runs. You can do this by either writing a<br />

translator or running a preprocessor. You can run such a<br />

translator before running the actual SPICE. This can be<br />

accomplished easily in the %invoke section.<br />

Section 6 - %options<br />

Section 6 allows you to include any SPICE options that would<br />

normally appear in the .OPTIONS lines in the SPICE netlist. For<br />

any other lines that must be in the SPICE netlist, use the %lib<br />

or %model section.<br />

SYNTAX:<br />

% options<br />

<br />

The .options keyword is not included because it is generated<br />

automatically. If you type .options scale=0.25e-6, Gentech<br />

creates .options .options scale=0.25e-6 in the SPICE<br />

netlist which might cause a SPICE failure.<br />

The defaults that are automatically placed in the SPICE netlist<br />

are:<br />

all except SPECTRE:.options nomod limpts=100000<br />

numdgt=7<br />

PSPICE/SPICE2:.WIDTH IN=80 OUT=132<br />

HSPICE:<br />

.OPTIONS SCALE=1.0E-6 CO=132 INGOLD=2 NXX<br />

.options ignore_measure="0"<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


198 Chapter 4 <strong>EPIC</strong> Technology File<br />

SPICE3:.WIDTH OUT=150<br />

PRECISE:.WIDTH 133<br />

SMARTSPICE:.OPTIONS NOMOD LIMPTS=100000 NUMDGT=7<br />

WIDTH=120 <strong>EPIC</strong><br />

NOTE: <strong>EPIC</strong> does not support GOAL= statements or AC and DC modes.<br />

Section 7 - %diode<br />

Running Gentech<br />

This section can contain only diode models in SPICE format.<br />

This information is stored in a technology file for use by <strong>EPIC</strong><br />

tools during simulation. Using this method, you can avoid<br />

having to keep diode models in the netlist.<br />

This section describes the syntax and control options used to run<br />

Gentech. It also explains how to run the utility in single-step and<br />

multiple-step modes.<br />

Gentech Syntax<br />

SYNTAX:<br />

gentech -c control_file<br />

-f SPICE_name<br />

[-t tech_file]<br />

[-b]<br />

[-a]<br />

[-m]<br />

[-x]<br />

[-n]<br />

[-h]<br />

[-q]<br />

EXAMPLE:<br />

gentech -f your_SPICE -c control.cmos -t tech.cmos


This example instructs Gentech to use the control file,<br />

control.cmos. Gentech runs your_SPICE to create a<br />

technology file named tech.cmos.<br />

DESCRIPTION:<br />

Gentech 199<br />

The Gentech command line option -c specifies the input control<br />

filename, -f specifies the SPICE type you are using, and -t<br />

specifies the output technology filename.<br />

The command-line options for the gentech command are:<br />

-b Turns on the multiple-step (batch) mode. Use this when<br />

your SPICE does not reside on your current network (for<br />

example, if your SPICE runs on a mainframe), monitoring<br />

the Gentech run, or other purposes. See “Running Gentech<br />

in Multiple-step Mode” on page 202 for more details.<br />

NOTE: This option should be used if a SPICE license is<br />

unavailable on your network. If a SPICE license is<br />

available on another host within the same network,<br />

create a script to remote login to the SPICE host<br />

machine and submit the SPICE job. Specify the<br />

name of the script in the %invoke section. The -b<br />

option cannot be used with the -q option.<br />

-a Accumulates the spice input and output files from a singlestep<br />

run (interactive mode not using the -b option) for the<br />

purpose of reporting a problem.<br />

If you encounter problems, rerun Gentech in an empty<br />

directory using the multiple-step run mode with the -b<br />

option to accumulate spice.in1, spice.out1, spice.in2, and<br />

spice.out2 files, and send them with the control file to<br />

<strong>EPIC</strong>. If your SPICE does not allow running Gentech in<br />

multiple-step mode, or you do not have the time to finish<br />

the multiple-step run, use the -a option with the singlestep<br />

run to accumulate the needed SPICE files.<br />

If disk space is limited, delete some MOS sizes in the<br />

control file before reporting the problem.<br />

-c control_file<br />

Specifies the name of the control file. See “Gentech Control<br />

File” on page 158.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


200 Chapter 4 <strong>EPIC</strong> Technology File<br />

-f spice_name<br />

Specifies the name of the SPICE to be run by Gentech. The<br />

following formats are supported: HSPICE, PRECISE,<br />

SPECTRE, SPECTRE2, SMARTSPICE, PSPICE, SPICE2,<br />

SPICE3, HSPICE_like, SPICE2_like, and some proprietary<br />

SPICE types.<br />

-f SPECTRE2 applies when a SPICE2 model is used with<br />

SPECTRE. It runs a SPICE2 mode of SPECTRE. -f<br />

SPECTRE applies when a SPECTRE model is used, and<br />

runs the SPECTRE native language. -f HSPICE_like and -<br />

f SPICE2_like are used on unsupported SPICE types when<br />

customizing.<br />

-t tech_file<br />

Specifies the output technology filename. The default is<br />

technology.prm.<br />

-x Allows you to use SPECTRE BSIM models without<br />

specifying vto in the control file.<br />

NOTE: This option is not needed for HSPICE or PRECISE.<br />

-n Tells Gentech that your SPICE does not support dual. DC<br />

sweep for generating Ids tables. Gentech issues more<br />

SPICE runs to sweep vgs and vds separately. This is turned<br />

on by default for SPECTRE.<br />

-h Prints command-line help.<br />

-q Runs quick mode (for HSPICE, SMARTSPICE, and some<br />

proprietary SPICE types only). Using this option causes<br />

Gentech to read the parameters directly from the SPICE<br />

model information. Gentech runs faster in this mode. You<br />

do not need to specify acm, cjgate, cov, cg, ldiff, wdiff,<br />

lmlt, wmlt, and so on, in the control file. In some cases,<br />

this option generates a more accurate technology file.<br />

-m Instructs Gentech to extract lateral diffusion values (ldiff<br />

and wdiff) from the SPICE models specified in the control


Gentech 201<br />

file. This works with SPICE2, SPICE3, HSPICE, PSPICE,<br />

SPECTRE, and others.<br />

If -m is not specified, the ldiff and wdiff values are either<br />

taken from specified ldiff or wdiff control file commands,<br />

or calculated by running SPICE.<br />

If you are using HSPICE, use the -q option instead of the<br />

-m option.<br />

If you are not using HSPICE, you should set the ldiff and<br />

wdiff parameters in the control file. The following warning<br />

is issued if you let Gentech calculate values for ldiff and<br />

wdiff by running SPICE.<br />

gentech: WARNING: No ldiff/wdiff specified in<br />

Control File.<br />

gentech: WARNING: Extracted values may be<br />

inaccurate and may affect simulation accuracy.<br />

Single-Step and Multiple Step (Batch) Modes<br />

You can run Gentech in single-step and multiple-step (batch)<br />

modes. In either mode, you should save the spice.in1, spice.in2,<br />

spice.out1, and spice.out2 files in case you have to rerun<br />

Gentech or report a problem. In single-step mode, you must use<br />

the -a command argument to generate these files.<br />

Running Gentech in Single-step Mode<br />

In single-step mode, Gentech directly runs your SPICE,<br />

according to the syntax in the %invoke section of the control file,<br />

and iterates several SPICE runs for each size until the<br />

technology file is created. You need to type the gentech<br />

command only once.<br />

If you can run your SPICE and obtain a result in the local<br />

directory, you can run Gentech by using either one of the<br />

following command lines:<br />

gentech -c control.cmos -f your_SPICE -t tech.cmos<br />

or<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


202 Chapter 4 <strong>EPIC</strong> Technology File<br />

gentech -c control.cmos -f your_SPICE -t tech.cmos<br />

-a<br />

This reads the control.cmos file and builds the technology file<br />

tech.cmos as follows:<br />

1 Generates a SPICE netlist named spice.in.<br />

2 Runs SPICE to generate the SPICE output. The file must be<br />

named spice.out.<br />

3 Reads the SPICE output and adds an entry to the tech.cmos<br />

file.<br />

4 Repeats steps 1 through 3 until tech.cmos file is complete. In<br />

both steps 1 and 2, the spice.in and spice.out files are<br />

overwritten.<br />

If the -a command argument is used, all the SPICE files will be<br />

saved in spice.in1, spice.in2, spice,out1, and spice.out2 files,<br />

requiring additional disk space. You can use these files if you<br />

have to rerun Gentech in multiple-step mode or to report a<br />

Gentech problem. You might rerun Gentech when you want to<br />

overwrite the average capacitance.<br />

Running Gentech in Multiple-step Mode<br />

If you must run SPICE on a batch machine or an unconnected<br />

remote machine, the single-step method will not work since the<br />

SPICE jobs go into a queue and are run in the background.<br />

Therefore, you must run Gentech in multiple-step mode. Three<br />

Gentech and two SPICE runs are required. The output of the<br />

first SPICE run is needed to build the input for the second. The<br />

steps are:<br />

1 On your local machine, type:<br />

gentech -f SPICE_type -c control_file<br />

-t tech_file -b<br />

This creates a file called spice.in1.


Gentech 203<br />

2 Run SPICE using the file spice.in1, and name the output file<br />

spice.out1.<br />

3 Move the spice.out1 file to the directory from where you<br />

originally ran Gentech and rerun the utility by typing:<br />

gentech -f SPICE_type -c control_file<br />

-t tech_file -b<br />

This creates a file called spice.in2.<br />

4 Run SPICE using input file spice.in2, and name the output<br />

file spice.out2.<br />

5 Move the file spice.out2 to the directory from where you<br />

originally ran Gentech and rerun the utility a third time<br />

using the same command syntax as above. The technology<br />

file is created.<br />

NOTE: Do not delete or edit the control file, technology file, spice.in1,<br />

spice.out1, spice,in2, or spice.out2 files during the process.<br />

Because Gentech checks the time the files were either created or<br />

edited, editing may occur in the wrong sequence for the process.<br />

The input files to SPICE spice.in1 and spice.in2 have many<br />

SPICE runs in a single file. Your SPICE must be able to take<br />

multiple runs as one job. SPECTRE and some proprietary SPICE<br />

types cannot do this for the supported SPICE types. But any<br />

SPICE type can use the -a command argument to run Gentech<br />

first in single-step mode. Multiple-step mode is then possible<br />

with the available spice.out1 and spice.out2 files.<br />

Multiple-step mode does not run SPICE directly. It is convenient<br />

when a rerun of Gentech is needed to overwrite average<br />

capacitance or to report a Gentech problem. The following steps<br />

show how to rerun Gentech to overwrite average capacitance, if<br />

needed.<br />

1 After you’ve completed steps 1 through 5 above, save the<br />

original technology file using another filename. Keep files<br />

spice.out1 and spice.out2.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


204 Chapter 4 <strong>EPIC</strong> Technology File<br />

2 Enter the appropriate cg, cov, cja, cjsw commands in the<br />

control file.<br />

3 Rerun steps 1 through 5, but replace “Run SPICE...” with<br />

“Touch spice.out1” or “Touch spice.out2” in steps 2 and 4.<br />

4 After the new technology file is generated, use the UNIX diff<br />

command on the new and original technology files to verify<br />

the changes on the diff_cap and gate_cap data lines.<br />

Using Multiple Technology Files<br />

A Gentech control file does not accept more than one NMOS<br />

model and one PMOS model. You need to run Gentech separately<br />

when you have depletion NMOS models, several process corners,<br />

multiple supply voltages, or charge pump circuits. If you run<br />

Veritech, it also needs to be run separately under these<br />

circumstances.<br />

<strong>EPIC</strong> tools accept multiple technology files when you use<br />

multiple -p command line arguments. Therefore, do not<br />

concatenate or edit the technology files. (If necessary, use the<br />

Gentech control file commands to change the technology files.)<br />

You can build a runscript to generate multiple technology files by<br />

using gentech and veritech as basic commands.<br />

Model names and model_alias lines cannot conflict when using<br />

multiple technology files.<br />

Be sure to use different model names in the %model sections and<br />

different model_alias lines in the %parameters section for all<br />

your different models among multiple control files and<br />

technology files. For information about the %model section, see<br />

“Section 2 - %model” on page 159.<br />

Temperatures and Voltages<br />

Different temperatures are allowed. Using different model<br />

names, you can model various parts of your circuit and simulate


PrintWL Utility<br />

PrintWL Utility 205<br />

them under several temperatures. Make sure the temperature<br />

differences are significant so that the results will be meaningful.<br />

Different supply voltages are also allowed. However, you must<br />

use the set_voltage configuration command to properly reset<br />

the supply voltage. Otherwise, <strong>EPIC</strong> tools might use the last<br />

supply voltage read from the multiple technology files. Inside<br />

each technology file, the voltage command in the %corner<br />

section is used to decide the voltage range to calculate the<br />

average capacitance by Gentech, and the vgs and vds commands<br />

in the %parameters section determine the range for ids tables.<br />

Therefore, the ending vgs and vds values and the voltage value<br />

should be the same in one file, but can be different in multiple<br />

technology files.<br />

PrintWL is a utility that generates a file containing all transistor<br />

sizes used in a netlist. The file is in a format that can be used as<br />

part of a Gentech control file to compile a technology file.<br />

PrintWL reads netlist information from all compatible netlist<br />

programs.<br />

When you run PrintWL, it finds NMOS and PMOS model pairs in<br />

the netlist and generates an output file for each pair. If PrintWL<br />

finds an NMOS or PMOS model it cannot pair, it generates an<br />

individual output file for the extra model. This utility generates<br />

several output files, depending on the number of models in the<br />

input netlist. The default output files are WL1, WL2, WL3, and<br />

so on. You can use the -o option to rename the output file prefix.<br />

PrintWL classifies netlist model names beginning with the letter<br />

N or n as NMOS models, and models beginning with the letters<br />

P or p as PMOS models. If PrintWL encounters model names that<br />

do not begin with the letters N or P, it prompts you to specify<br />

whether the model names identify NMOS or PMOS models. The<br />

PrintWL output file contains transistor width and length<br />

descriptions in Gentech control file format. If any two transistors<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


206 Chapter 4 <strong>EPIC</strong> Technology File<br />

have the same width and length measurement, PrintWL lists<br />

only one of those transistors in the output file.<br />

The PrintWL utility sorts transistors by size, listing the smallest<br />

transistor first.<br />

SYNTAX:<br />

printWL [-m main_circuit_name...]<br />

[-N n_model_name...]<br />

[-P p_model_name]<br />

[-o output_file_prefix]<br />

[-f value]<br />

[-g]<br />

[-h]<br />

[-L library_path]<br />

[-a]<br />

-n netlist ...<br />

The command-line options are:<br />

-m top_circuit_name<br />

This option specifies the top level circuit name, or the<br />

topmost circuit name for the given netlist.<br />

-N n_model_name...<br />

This option specifies the NMOS model name. The default<br />

model name is N, or n.<br />

-P p_model_name...<br />

This option specifies the PMOS model name. The default<br />

model name is P, or p.<br />

-o output_file_prefix<br />

This option specifies the output file prefix. The default prefixes<br />

are: WL.1, WL.2, WL.3, and so on.


PrintWL Utility 207<br />

-f This option specifies the number of decimal places to be<br />

printed depending on the desired level of precision. Values<br />

are 0 through 10; the default value is 2 decimal places.<br />

-g This option instructs printWL to truncate the model name<br />

suffix.<br />

-h This option displays the command and its options.<br />

-L library_path<br />

This option specifies the cell library path.<br />

-a This option instructs printWL to process files even though<br />

a main circuit is not defined in the design. This option is<br />

similar to -L except that subcircuit definitions do not reside<br />

in individual files. This option is ignored if -m is used.<br />

-n netlist ...<br />

This option specifies the input netlist names.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


208 Chapter 4 <strong>EPIC</strong> Technology File<br />

Figure 5 shows a sample netlist, which is the primary input to<br />

the PrintWL utility.<br />

HSPICE;<br />

pgalias vdd! vdd;<br />

pgalias gnd! gnd;<br />

(subckt=inv)(it=A)(ot=Y)<br />

(pr=pl:0.6,pw:16,nl:0.5,nw:5){<br />

(t=n)(en=N4)(ga=A)(dr=Y)(so=gnd!)(w=nw)(l=nl);<br />

(t=p)(en=P5)(ga=A)(dr=vdd!)(so=Y)(w=pw)(l=pl);<br />

}<br />

(ef=inv)(en=I8)(it=B)(ot=A)<br />

(pr=nl:6,nw:1.1,pl:3,pw:1.1);<br />

(ef=inv)(en=I7)(it=C)(ot=D)<br />

(pr=nl:0.5,nw:11,pl:0.6,pw:26);<br />

(ef=inv)(en=I6)(it=B)(ot=C)<br />

(pr=nl:0.5,nw:3.4,pl:0.6,pw:8);<br />

(ef=inv)(en=I5)(it=A)(ot=B)<br />

(pr=nl:0.5,nw:1.4,pl:0.6,pw:3.6);<br />

(t=p1)(en=P4)(ga=PREF)(dr=A)(so=vdd!)(w=120)(l=60);<br />

(t=n1)(en=N3)(ga=PREF)(dr=DEC3)(so=A)(w=500)(l=50);<br />

(t=n)(en=N2)(ga=ADR)(dr=DEC2)(so=DEC3)(w=500)(l=50);<br />

(t=n)(en=N1)(ga=ADR)(dr=DEC1)(so=DEC2)(w=500)(l=50);<br />

(t=n)(en=N0)(ga=ADR)(dr=gnd!)(so=DEC1)(w=500)(l=80);<br />

Figure 5 Sample netlist for PrintWL example


The Technology File Viewer 209<br />

The following two figures (collectively Figure 6) show sample<br />

output files that are generated by the printWL -n netlist<br />

command:<br />

The Technology File Viewer<br />

WL1:<br />

%model<br />

.model n1 nmos<br />

.model p1 pmos<br />

%parameters<br />

N_LENGTH1 0.50<br />

NW1 5.00<br />

P_LENGTH1 0.60<br />

PW1 1.20<br />

WL2:<br />

%model<br />

.model n nmos<br />

.model p pmos<br />

%parameters<br />

N_LENGTH1 0.80<br />

NW1 5.00<br />

N_LENGTH2 0.50<br />

NW2 5.00 1.40 3.40 11.00<br />

N_LENGTH3 6.00<br />

NW3 1.10<br />

P_LENGTH1 0.60<br />

PW1 3.60 8.00 26.00<br />

P_LENGTH2 3.00<br />

Figure 6 Examples of printWL-n netlist output files<br />

The technology file viewer, TechViewer, lets you view an <strong>EPIC</strong><br />

format technology file graphically. The TechViewer is<br />

automatically installed if you are running TimeMill, PowerMill,<br />

PathMill, or RailMill. No other installation is needed.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


210 Chapter 4 <strong>EPIC</strong> Technology File<br />

Veritech Utility<br />

To use TechViewer:<br />

1 Type techViewer.<br />

2 Select File → Open Technology File.<br />

The temperature and voltage of the power supply are<br />

displayed. The models from the specified technology file are<br />

listed.<br />

3 Select a model from the list.<br />

4 Click on the Show Tables button(s).<br />

This displays graphs for vt and ids.<br />

Clicking on the vt/iv curve windows displays the relevant<br />

data information on the status banner.<br />

Selecting another model while graphs are displayed<br />

automatically updates the opened graphs.<br />

5 To quit, select File → Exit.<br />

You can use the Veritech utility to verify the accuracy of the<br />

technology file created by Gentech. However, Veritech only tests<br />

on very special circuits, and the tests frequently give false<br />

errors. Therefore, the recommended verification flow for<br />

technology files is to run your SPICE on an actual design and<br />

run <strong>EPIC</strong> tools with the generated technology files on that same<br />

design. You can then compare the two to check for accuracy.<br />

The Veritech utility works with the following SPICE types:<br />

HSPICE, PRECISE, SMARTSPICE, PSPICE, SPICE2, SPICE3,<br />

and some proprietary SPICE types. Make sure your version of<br />

SPICE is supported.


Technology File<br />

Veritech<br />

Veritech<br />

Report<br />

Veritech Utility 211<br />

The utility runs with the <strong>EPIC</strong> <strong>Tools</strong> TimeMill, PowerMill, and<br />

PathMill. An <strong>EPIC</strong> tool license is necessary. Figure 7 shows the<br />

flow of a Veritech run.<br />

Figure 7 Flow of a Veritech run<br />

Running Veritech<br />

SPICE Input<br />

SPICE Output<br />

<strong>EPIC</strong> Input<br />

<strong>EPIC</strong> Output<br />

Veritech provides the following validations:<br />

SPICE<br />

TimeMill<br />

PathMill<br />

or<br />

PowerMill<br />

■ The results of several test circuits, based on the given<br />

technology file, match reasonably well with SPICE.<br />

■ All technology data values are within reasonable numeric<br />

ranges.<br />

■ All technology data matches the corresponding SPICE model<br />

parameters.<br />

This section shows the syntax and command-line options for the<br />

veritech command. It also describes the results of a Veritech<br />

run and the steps you should take if the run is aborted.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


212 Chapter 4 <strong>EPIC</strong> Technology File<br />

SYNTAX:<br />

veritech tech_file -f spice_type<br />

[-o out_file]<br />

[-b] [-B]<br />

[-h]<br />

The command-line options used with the veritech command are:<br />

tech_file<br />

This is the technology file which includes the control file<br />

and the SPICE model (listed in the %model section, or in a<br />

readable file referenced by the .include or .lib commands<br />

in the %lib section). The technology file can be in<br />

compressed format.<br />

NOTE: Veritech treats the %lib control file keyword in the<br />

same way as Gentech.<br />

-f spice_type<br />

This can be used to specify the type of SPICE if Veritech<br />

fails to decide the SPICE type after examining the %invoke<br />

section. The accepted SPICE types are: HSPICE, SPICE2,<br />

SPICE3, PSPICE, SmartSpice, PRECISE, and a number of<br />

proprietary versions of SPICE. Check to see if your SPICE<br />

version is supported.<br />

-o out_file<br />

This specifies the output filename. It is mandatory except<br />

when -b is used.<br />

-b, -B<br />

This runs batch mode. If SPICE is not available on your<br />

machine, first use -b to generate all SPICE input files, then<br />

use -B when all SPICE output files are ready.<br />

EXAMPLE:<br />

veritech techfile -b<br />

This generates all SPICE input files. Run SPICE remotely,<br />

bring back all SPICE output files, and type the following<br />

command line:


veritech techfile -b -o out_file<br />

Veritech Utility 213<br />

-d Debug mode saves all intermediate files and echoes some<br />

model parameters. This is useful when you are reporting<br />

a Veritech problem.<br />

-h This option prints command line help.<br />

Veritech commands are shown in the following examples.<br />

EXAMPLE 1:<br />

veritech tech.8.typ.2 -f hspice 2 0.8 1 0.7 -g -o<br />

report &<br />

EXAMPLE 2:<br />

veritech technology.prm -o veri.out<br />

(Writes out to screen only.)<br />

NOTE: Veritech automatically detects if PowerMill, TimeMill, or<br />

PathMill exist on the machine. If PathMill is used, there will be<br />

no Test 4 since PathMill does not report the final voltages on a<br />

node.<br />

Veritech compares simulation results generated by running your<br />

SPICE and one of the <strong>EPIC</strong> tools and generates a pass/fail<br />

status for each result. This status is determined by checking<br />

whether the difference falls within a pre-determined, allowable<br />

margin of error.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


214 Chapter 4 <strong>EPIC</strong> Technology File<br />

After Running Veritech<br />

If you run Veritech and find that only a very small portion of the<br />

sizes in any test have large percentage errors, the technology file<br />

is still sufficiently accurate, as long as their corresponding data<br />

in the technology file behave roughly the same as other MOS<br />

sizes.<br />

To improve the accuracy of a technology file, carefully check all<br />

the warnings given by Veritech, edit the control file accordingly,<br />

and generate a new technology file. Run Veritech again to verify<br />

the improvements.<br />

NOTE: Remember that Veritech runs very specialized device-level<br />

circuits that can result in false errors. The best way to check<br />

accuracy is to run a sample circuit on your SPICE and then run<br />

the same circuit using of the <strong>EPIC</strong> tools. Generate the<br />

technology file and compare for accuracy.<br />

If Veritech Aborts<br />

If Veritech aborts, check all the simulation output and .err files<br />

remaining in the working directory. This can be done easily if<br />

you start Veritech in a directory that contains only necessary<br />

files (the technology file and model library files, if applicable).<br />

The following conventions are used by Veritech for creating the<br />

input and output files:<br />

■ When rise and fall times are 0.1ns, the following files are<br />

generated for tests 1,2,4,5, and for test 3 (SPICE only):<br />

◆ veritech_netn (netlist files to <strong>EPIC</strong> <strong>Tools</strong> PathMill,<br />

PowerMill, or TimeMill)<br />

◆ veritech_cfgn (configuration files to <strong>EPIC</strong> <strong>Tools</strong>)<br />

◆ pathmilln.out (PathMill analysis output files)<br />

◆ powrmilln.out (PowerMill simulation output files)<br />

◆ timemilln.out (TimeMill simulation output files)


◆ SPICEn_in (SPICE input files)<br />

◆ SPICEn_out (SPICE output files)<br />

Veritech Utility 215<br />

■ When rise and fall times are 5ns, the following files are<br />

generated for tests 1,2,5:<br />

◆ veritech_netnr (netlist files to <strong>EPIC</strong> <strong>Tools</strong>)<br />

◆ veritech_cfgnr (configuration files to <strong>EPIC</strong> <strong>Tools</strong>)<br />

◆ pathmillnr.out (PathMill analysis output files)<br />

◆ powrmillnr.out (PowerMill simulation output files)<br />

◆ timemillnr.out (TimeMill simulation output files)<br />

◆ SPICEnr_in (SPICE input files)<br />

◆ SPICEnr_out (SPICE output files)<br />

You can manually rerun the most recent case to determine why<br />

Veritech aborted. This is usually because the PathMill,<br />

PowerMill, TimeMill, or SPICE run failed.<br />

EXAMPLE 1:<br />

timemill -n net5r -c cfg5r -p tech_file -t 80 -o<br />

timemill5r<br />

This is an example of the command you can use to rerun<br />

TimeMill.<br />

EXAMPLE 2:<br />

spice3 -b -r spice5r_out < spice5r_in<br />

This is an example of the command you can use to rerun SPICE.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


216 Chapter 4 <strong>EPIC</strong> Technology File


Chapter 5<br />

Stimuli and State<br />

Checking


218 Chapter 5 Stimuli and State Checking


Overview<br />

Overview 219<br />

The dynamic <strong>EPIC</strong> tools require input stimulus of some form.<br />

Input stimulus can be either individual time-varying signals or<br />

a vector pattern. Special <strong>EPIC</strong> functions are available to provide<br />

input stimulus if none is specified in a SPICE netlist. Some<br />

stimulus functions generate stimulus patterns based on<br />

parameters specified in the function calls.<br />

An output vector is a state pattern used to compare simulated to<br />

expected results.<br />

This chapter explains the various stimulus functions as well as<br />

the format of the vector pattern.<br />

Stimulus Functions and Vector Functions<br />

<strong>EPIC</strong> provides ten stimulus functions. Some of the <strong>EPIC</strong> input<br />

stimulus functions generate an input stimulus based on<br />

parameters specified in the function call. Stimulus generator<br />

functions are clk, cnt, ptn, and tgl.<br />

Another group of stimulus functions allows data or test vectors<br />

pre-stored in a specified file to be referred to at user-defined time<br />

steps. These functions are nsvt, vec, and vec_chk. The function<br />

vec_chk verifies the simulator results with respect to the<br />

expected circuit response during a simulation. The functions vec<br />

and nsvt offer a combination of input stimulus and vector<br />

checking, and are the most widely used.<br />

Another group of stimulus functions that set stimulus values are<br />

one, udf, and zero.<br />

Multiple stimulus function calls can be placed into one file and<br />

submitted to the dynamic tool using the -n option on the<br />

command line.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


220 Chapter 5 Stimuli and State Checking<br />

Function Definitions<br />

EXAMPLE:<br />

powrmill -n netlistfile stim -p techfile -t time<br />

-c cfgfile<br />

If you are using a vector pattern as input stimulus, you submit it<br />

directly to the dynamic tool using the -nvec option on the<br />

command line.<br />

EXAMPLE:<br />

powrmill -n netlistfile -nvec vectors -p techfile<br />

-t time -c cfgfile<br />

(See “Running the Vector File Using type and signal Commands”<br />

on page 247.) The input vectors for the vec, vec_chk, or nsvt<br />

specification are stored in separate data files.<br />

The following types of functions are described in this section and<br />

are ordered alphabetically:<br />

■ Clock Stimulus (clk)<br />

■ Counter Stimulus (cnt)<br />

■ Pattern Stimulus (ptn)<br />

■ Toggle Stimulus (tgl)<br />

■ Vector Stimuli and Vector Checking (nsvt, vec, vec_chk)<br />

■ Logic Constants (one, udf, zero)


clk<br />

c1<br />

SYNTAX:<br />

Function Definitions 221<br />

(is=clk) (en=element_name) (ot=signal_list) [(ov=orig_values)]<br />

(sv=start_t, toggle_t, prd, rise_time, fall_time);<br />

OR<br />

(is=clk) (en=element_name) (ot=signal_list) [(ov=orig_values)]<br />

(sv=start_time:val, toggle_time:val, period:val, rise_time:val,<br />

fall_time:val);<br />

EXAMPLE:<br />

(is=clk)(en=CLOCKa)(ot=c1,c2,c3,c4)(ov=0,0,0,0)<br />

(sv=10,20,40,5.0,7.5);<br />

The same clock specification is applied equally to nodes c1, c2,<br />

c3, and c4; (ov=0,0,0,0) is optional.<br />

Figure 1 shows an example of a clk function.<br />

40<br />

5.0 7.5<br />

0 1 2 3 4 5 6 7 8 9 10<br />

Figure 1 clk function<br />

DESCRIPTION:<br />

Time (ns)<br />

This function defines a clock which has a repetitive waveform<br />

pattern with a clock period. The default number of states is 5.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


222 Chapter 5 Stimuli and State Checking<br />

The second syntax shows a long form, using keywords recognized<br />

by the <strong>EPIC</strong> simulators.<br />

Command Argument Definition<br />

element_name The unique name that represents<br />

this particular instance of this<br />

function<br />

signal_list Nodes to be stimulated by the<br />

resulting clk pattern<br />

orig_values Sets the initial clock output states;<br />

if it is not specified, the default is<br />

the zero state<br />

start_t Defines the starting time of the<br />

clock operation, and is measured<br />

in nanoseconds. The signals will<br />

start to rise or fall at this time.<br />

toggle_t Defines the incremental time,<br />

after the start time, when the<br />

clock state begins to change, and is<br />

specified in nanoseconds<br />

prd Defines the clock period in<br />

nanoseconds<br />

rise_time, fall_time Specifies the rise and fall time<br />

durations, respectively, in<br />

nanoseconds. They can be specified<br />

in floating point or integer<br />

formats.<br />

The default rise/fall times are<br />

zero, which generates a squareedged<br />

waveform without rise/fall<br />

slopes. The rise/fall times are<br />

imposed on start_t and toggle_t,<br />

which specify the start of the<br />

rising and falling edges.


cnt<br />

in1<br />

in0<br />

SYNTAX:<br />

Function Definitions 223<br />

(is=cnt) (en=element_name) (ot=msb,..,lsb) (ov=orig_value(s))<br />

(sv=start_t, inc, rf_t);<br />

OR<br />

(is=cnt) (en=element_name) (ot=msb,..,lsb) (ov=orig_value(s))<br />

(sv=start_time:val, inc:val, rf_time:val);<br />

EXAMPLE:<br />

(is=cnt)(en=count)(ot=in1,in0)(ov=0,0)(sv=10,10,1)<br />

;<br />

Multiple ot’s and ov’s are allowed, but must be separated with<br />

commas (,).<br />

Figure 2 shows an example of a cnt function.<br />

1.0 ns<br />

0 10 20 30 40<br />

Figure 2 cnt function<br />

DESCRIPTION:<br />

Time (ns)<br />

This function defines an n-bit up-counter. The output signals<br />

count up from the LSB at the right towards the MSB at the left.<br />

The starting time, the increment period, and the signal rise/fall<br />

time are defined in the sv field. The default number of states is 3.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


224 Chapter 5 Stimuli and State Checking<br />

The second syntax demonstrates a long form using keywords<br />

recognized by PowerMill and RailMill.<br />

Command Argument Definition<br />

element_name This unique name represents this<br />

particular instance of this function.<br />

msb,..,lsb This is a list of nodes representing<br />

the most to the least significant<br />

bits.<br />

orig_value(s) Defines the initial values for<br />

msb,...,lsb. The default is zero(es) if<br />

not specified.<br />

start_t At start_t, the value of the nodes<br />

increment by one from orig_value.<br />

The units are in nanoseconds.<br />

inc The increment period. The units<br />

are in nanoseconds.<br />

rf_t Specifies one value used for the<br />

rise/fall time. If not specified, the<br />

default is zero. The units are in<br />

nanoseconds.


fixed_rf<br />

Function Definitions 225<br />

The new vector file command, fixed_rf, which is used by<br />

nsvt and vec, causes the rise/fall/slope commands to<br />

define a fixed rise/fall time that is not affected by the<br />

starting voltage. If this command is not used, the rise/fall/<br />

slope commands define a fixed slew (rise/fall) rate of the<br />

input signal change, and the rise/fall time can vary with<br />

the starting voltage.<br />

EXAMPLE:<br />

rise 2.5<br />

fall 1.5<br />

fixed_rf<br />

This example sets the rise and fall times of all inputs in the<br />

vector to a fixed 2.5 ns and 1.5 ns, respectively, regardless<br />

of the starting voltage for the input.<br />

This command can be overridden by the configuration<br />

command set_vec_opt.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


226 Chapter 5 Stimuli and State Checking<br />

nsvt<br />

SYNTAX:<br />

(is=nsvt) (en=vector_file) (ot=signal_list);<br />

EXAMPLE:<br />

(is=nsvt)(en=my_vectors)(ot=A,B,C[15-0],X,D[7-0]);<br />

This an example entry in the netlist which calls the nsvt<br />

function.<br />

Figure 3 shows how typical data in a vector file might appear.<br />

The radix and io lines are explained in the vector file description.<br />

The keyword period entry specifies the time interval in<br />

nanoseconds at which the test vector, or the signals, are to be<br />

invoked. The period of data invocation is defined inside the<br />

vector file. A line beginning with a semicolon is a comment. (See<br />

“Vector File Format” on page 239.)<br />

; A B C[15-0] XD[7-0]<br />

radix 1 1 4 4 4 4 14 4<br />

; specify input and output signal<br />

io i b i i i u oo o<br />

period 20<br />

;data output at 0ns, 20ns, 40ns, ...<br />

;data to follow<br />

1 0 0 0 0 0 10 0<br />

0 1 a b c d 01 2<br />

0 0 4 e d d 02 1<br />

0 1 4 e d e 1 4 0<br />

Figure 3 Vector file data example<br />

DESCRIPTION:<br />

This function provides a method for reading in a file containing<br />

input stimuli and output comparisons to be applied at fixed<br />

intervals. The stimulus and comparison data is organized in a<br />

tabular format without absolute times in the vector section.<br />

The timing information associated with the vectors is specified<br />

within a period (interval), using the period command. Each new<br />

vector comes one interval after the previous vector. The first<br />

vector is applied at time 0.


Function Definitions 227<br />

The rise/fall/slope time can be specified for the signals in the<br />

vector file. The signal radix and its type (input, output, biput)<br />

can also be specified. For input and biput signals, the stimulus<br />

drive resistance can be specified by the keyword out. See<br />

output_resistance in “Vector File Format” on page 239.<br />

The default time unit for all time parameters, including rise/fall/<br />

slope time, is a nanosecond. It can be changed using time_scale<br />

as explained in “Vector File Format” on page 239. The default<br />

resolution in the time specification is 0.01ns. You can use the<br />

set_sim_tres configuration command to change it. See the<br />

TimeMill or PowerMill reference guide.<br />

The valid state characters for input stimuli and output<br />

comparison are documented in “State Characters Used by <strong>EPIC</strong><br />

<strong>Tools</strong>” on page 248.<br />

Command Argument Definition<br />

vector_file Specifies the file to be read. It can be<br />

either a full pathname or a relative<br />

pathname, as long as the search path<br />

can locate the vector file containing the<br />

vectors used to force the specified nodes<br />

to the proper values during the<br />

simulation. In the vector file, radix,<br />

slope, io, and output_resistance are<br />

used in the same way as in the vec<br />

specification.<br />

signal_list Specifies the list of signal names<br />

corresponding to the data provided in<br />

the vector file.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


228 Chapter 5 Stimuli and State Checking<br />

one<br />

SYNTAX:<br />

(is=one) (en=element_name) (ot=signal_list);<br />

EXAMPLE:<br />

(is=one)(en=HI)(ot=VE,Kdata_edge);<br />

This sets VE and Kdata_edge to constant ONE.<br />

DESCRIPTION:<br />

The stimulus specification one sets the stimulus value to a<br />

constant ONE.


ptn<br />

cck1<br />

SYNTAX:<br />

(is=ptn) (en=element_name) (ot=signal_list)<br />

(sv=bit_duration,rf_time,bit_pattern);<br />

Function Definitions 229<br />

EXAMPLE:<br />

(is=ptn)(en=gen1)(ot=cck1,cck2)<br />

(sv=2,0.2,0,1,1,0,1,0,0,1,1,0);<br />

This example shows a stimulus pattern with a bit duration of 2ns<br />

(first argument in the "sv=" field) and a 0.2ns rise-fall time<br />

(second argument in the "sv=" field). The pattern starts with<br />

logic 0 (third argument). Then it starts to rise to logic 1 at time<br />

2ns (fourth argument). It reaches logic 1 at 2.2ns since the risefall<br />

time is 0.2ns. It stays at logic 1 for another duration (fifth<br />

argument), then starts to fall to logic 0 at 6ns (sixth argument).<br />

The remaining arguments control the waveform for the rest of<br />

time in the same way.<br />

Figure 4 shows an example of a ptn function.<br />

0.2 0.2<br />

0 2 4 6 8 10 12 14 16 18 20<br />

Time (ns)<br />

Figure 4 ptn function<br />

DESCRIPTION:<br />

This function creates an input stimulus from a bit pattern. The<br />

default number of states is greater than, or equal to, 3 depending<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


230 Chapter 5 Stimuli and State Checking<br />

on the sv function. Multiple ot’s are allowed, but must be<br />

separated with commas.<br />

Command Argument Definition<br />

element_name This unique name represents this<br />

particular instance of this function.<br />

signal_list Specifies a list of nodes stimulated<br />

by the resulting ptn pattern.<br />

bit_duration Specifies the time in nanoseconds<br />

for each bit in the given pattern,<br />

and can be specified in either<br />

floating point or integer format.<br />

rf_time Specifies the rise and fall duration<br />

in all the bit patterns in either<br />

floating point or integer formats.<br />

bit_pattern Specifies the desired pattern of a<br />

stimulus variation in binary format<br />

such as 1,1,0,1. The pattern repeats<br />

itself continuously in time. The<br />

pattern can be as long as required,<br />

but it must be at least one number<br />

long.


tgl<br />

gg10<br />

SYNTAX:<br />

Function Definitions 231<br />

(is=tgl) (en=element_name) (ot=signal_list) (ov=orig_value(s))<br />

(sv=rf_time, toggle_times...);<br />

EXAMPLE:<br />

(is=tgl)(en=sig1)(ot=gg10)(ov=1)<br />

(sv=1.0,2,4,10,12,15);<br />

Figure 5 illustrates this example.<br />

1.0<br />

0 2 4 6 8 10 12 14 16<br />

Time (ns)<br />

Figure 5 tgl function<br />

DESCRIPTION:<br />

This function defines a toggle stimulus which toggles output<br />

between 1 and 0, according to a list of non-zero toggle times.<br />

There is no limit to the number of toggle times. The default<br />

number of states is greater than or equal to 2, depending on the<br />

sv function.<br />

Command Argument Description<br />

element_name Specifies a unique name for this<br />

particular instance of this function.<br />

signal_list Lists the nodes stimulated by the<br />

resulting tgl pattern. Multiple<br />

signal lists must be separated by<br />

commas (,).<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


232 Chapter 5 Stimuli and State Checking<br />

Command Argument Description<br />

orig_value(s) Defines the initial states. This is<br />

important because the states are<br />

changed at the subsequent<br />

toggle_times. Multiple values must<br />

be separated by commas (,).<br />

rf_time Defines the signal rise/fall duration<br />

in nanoseconds. The start point on<br />

the rise/fall slope is coincident with<br />

the toggle times.<br />

toggle_times Specifies values measured in<br />

nanoseconds. It is referenced from<br />

Time0 and must be listed in<br />

ascending time order.


udf<br />

SYNTAX:<br />

(is=udf) (en=element_name) (ot=signal_list);<br />

EXAMPLE:<br />

(is=udf)(en=und)(ot=IDN);<br />

This sets IDN to a constant undefined state.<br />

Function Definitions 233<br />

DESCRIPTION:<br />

The stimulus specification udf sets the stimulus value to a<br />

constant undefined state.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


234 Chapter 5 Stimuli and State Checking<br />

vec<br />

SYNTAX:<br />

(is=vec) (en=vector_file) (ot=signal_list);<br />

(is=vec)(en=test_vector)(ot=bus[15-0],vin,vout);<br />

This example specifies that the file (test_vector) is a vec file<br />

to stimulate or compare bus [15-0], vin, and vout.<br />

Figure 6 shows the sample file. The rise time 3ns and fall time<br />

2.25ns are applied to all input signals (bus[15-0], vin). The<br />

output resistance 100 Ohms is applied to input (biput) signals<br />

(bus[11-8]) when the state L/H/Z are applied to the signals at<br />

times 200ns, 300ns, and 500ns.<br />

;<br />

; test_vector: an example vec file<br />

;<br />

; bus[15-0] vinvout<br />

radix 4444 1 1<br />

io iiii i o<br />

rise 3.00<br />

fall 2.25<br />

;<br />

;<br />

output_resistance 100<br />

; output resistance applied to all input<br />

; signals when the input states are L/H/Z.<br />

0.00 3A58 0 1<br />

100.00 5050 1 0<br />

200.00 5H50 1 0<br />

300.00 9L9E 0 1<br />

400.00 604B 0 1<br />

Figure 6 Sample vector file<br />

DESCRIPTION:<br />

This function provides a method for reading in a file containing<br />

input stimuli and output comparison. The stimulus and<br />

comparison information is organized in a tabular format with<br />

absolute times on the left and data vectors on the right.


Function Definitions 235<br />

The rise/fall/slope time can be specified for the signals in the<br />

vector file. The signal radix and its type (input, output, biput)<br />

can also be specified. For input and biput signals, the stimulus<br />

drive resistance can be specified by the keyword out. See<br />

output_resistance in the “Vector File Format” on page 239.<br />

The valid state characters for input stimuli and output<br />

comparison are documented in “State Characters Used by <strong>EPIC</strong><br />

<strong>Tools</strong>” on page 248.<br />

Command Argument Description<br />

vector_file Specifies the file to be read. It can<br />

be either a full pathname or a<br />

relative pathname, as long as the<br />

search path can locate the vector<br />

file containing the vectors used to<br />

force the specified nodes to the<br />

proper values during simulation.<br />

signal_list Specifies the nodes to be forced or<br />

compared.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


236 Chapter 5 Stimuli and State Checking<br />

vec_chk<br />

SYNTAX:<br />

(is=vec_chk) (en=vector_file) (it=signal_list);<br />

EXAMPLE:<br />

(is=vec_chk)(en=alu.chk)(it=a1,b[1-0],fbus[39-0]);<br />

This is an example of an entry in a <strong>EPIC</strong> netlist that calls the<br />

vec_chk function. It specifies the file (alu.chk) where the<br />

vectors are found. The nodes in the <strong>EPIC</strong> netlist that are checked<br />

are a1, a single bit signal; b[1] and b[0], two bits from the bus<br />

labeled b; and 40 bits from fbus.<br />

Figure 7 shows how typical data in the alu.chk file might appear.<br />

Comments are preceded by a semicolon. The radix statement<br />

matches the bit width of the specified nodes: 1 matches the<br />

single-bit a1; 2 matches the two-bit width of b[1-0]; and so<br />

forth. The actual vectors are specified with floating point times<br />

in the left fields and the vector values in the right fields. At time<br />

100 ns, the line is extended to the next line using a backslash.<br />

;this illustrates the features of the vec_chk format<br />

radix 12 4444444444 ;specifies signal radix<br />

;time is on the left and signals on the right<br />

10 10 7f00001111<br />

10.37 11 adadaDadad<br />

14.2 01 3333333333<br />

100 01 010\<br />

10107f7<br />

100.13 1222 12345689<br />

;columns are deliberately misaligned to show generality but<br />

;would in most cases be aligned for ease of reading<br />

Figure 7 vec_chk file sample<br />

DESCRIPTION:<br />

This function provides a method of reading in a file containing<br />

expected data values. The expected data information is<br />

organized in a tabular format that has absolute time on the left<br />

and data vectors on the right. See the TimeMill or PowerMill<br />

reference guide. Any differences between the expected data


Function Definitions 237<br />

stored in vector files and the simulation results are flagged with<br />

an error message in the .err file.<br />

The data file for vec_chk follows the same format as for vec,<br />

with the exception that the io, output_resistance (out), slope,<br />

rise, and fall commands are not necessary because all vectors<br />

are expected outputs. See the “Vector File Format” on page 239<br />

for details.<br />

Command Argument Description<br />

vector_file Specifies the file to be read<br />

containing expected data. It can be<br />

a full pathname or a relative<br />

pathname, as long as the search<br />

path can locate the vector file.<br />

signal_list Specifies the nodes in the <strong>EPIC</strong><br />

netlist to be checked by this<br />

function. Notice that vec_chk uses<br />

it, not ot, to call signal_list, because<br />

it is a monitor, not a signal<br />

generator.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


238 Chapter 5 Stimuli and State Checking<br />

zero<br />

SYNTAX:<br />

(is=zero) (en=element_name) (ot=signal_list);<br />

EXAMPLE:<br />

(is=zero)(en=Z0)(ot=A1,BK,DL);<br />

This example sets A1, BK, and DL to constant ZERO.<br />

DESCRIPTION:<br />

The stimulus specification ZERO sets the stimulus value to a<br />

constant ZERO.<br />

Output State Comparison<br />

All vector stimulus functions (nsvt, vec, vec_chk) in the <strong>EPIC</strong><br />

netlist can be used to specify vector files to check the circuit’s<br />

state during simulation. In addition to state comparison, the<br />

vector files specified in the nsvt and vec functions can also be<br />

used to specify input stimuli to drive the circuit. For more<br />

information, see “Stimulus Functions and Vector Functions” on<br />

page 219.<br />

The logic state of a node is defined by the state level and state<br />

attributes (see “Logic States” on page 248 for details). By<br />

default, the simulator calculates only the state levels for all<br />

nodes. The state attributes are not simulated due to the<br />

computation overhead associated with these attributes. You need<br />

to use configuration commands such as vchk_node_opt or<br />

print_node_opt to instruct the simulator to simulate these<br />

attributes.<br />

At the comparison times specified in the vector file, the output<br />

vectors are compared with the circuit’s state. A node passes the<br />

state comparison only if both its state level and state attributes<br />

match the state character specified in the vector file.<br />

For example, assume that vchk_node_opt z_state=1 is given<br />

in the configuration file, and a node is at the “1” state. The


Vector File Format<br />

delay<br />

Vector File Format 239<br />

expected state specified in the vector file is “H.” The simulator<br />

flags a state comparison error for the node since the node is not<br />

at the expected floating state.<br />

This section describes vector file format conventions. This file,<br />

which is also referred to as the stimulus file, is used for stimulus<br />

and output comparison applications in nsvt, vec, and vec_chk.<br />

The vector file commands are: delay, fall, high, io, low,<br />

output_resistance (out), radix, rise, signal, slope, time_scale,<br />

and type. Their descriptions follow.<br />

This command is used by nsvt, vec and vec_chk.<br />

The delay statement causes the applying time for each vector in<br />

the vec, vec_chk, ornsvt file to have the specified time delay. The<br />

default units for delay time are nanoseconds and can be scaled<br />

up or down by the time_scale command. The time delay can be<br />

positive or negative. For positive delay, the first state of a vector<br />

will be used for vector initialization. For negative delay, the state<br />

of the vector at time 0 will be used for vector initialization.<br />

SYNTAX:<br />

delay delay_value<br />

EXAMPLE:<br />

delay 90.5<br />

The delay in this example causes a 90.5 ns time delay of the<br />

applying time for each vector in the nsvt or vec file.<br />

EXAMPLE:<br />

delay -25.0<br />

The delay in this example causes a -25ns time shift against the<br />

time for each vector in the nsvt or vec file.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


240 Chapter 5 Stimuli and State Checking<br />

high<br />

low<br />

EXAMPLE:<br />

Consider the following sample values in the vec file:<br />

Time 0 10 20 30<br />

A 1 0 1 0<br />

If delay=10, at time 0, A is assigned with the value 1.<br />

The realized values for A are<br />

Time 0 10 20 30 40<br />

A 1 1 0 1 0<br />

If delay=-10, at time 0, A is assigned with the value 0.<br />

The realized values for A are<br />

Time 0 10 20<br />

A 0 1 0<br />

If delay=-5, at time 0, A is assigned with the value of 1.<br />

The realized values for A are<br />

Time 0 5 15 25<br />

A 1 0 1 0<br />

These commands are used by nsvt and vec.<br />

The high and low statements can be used to describe the high<br />

voltage (one) and low voltage (zero) for input and biput nodes.<br />

The unit for voltage values is Volt.


io<br />

SYNTAX:<br />

high high_voltage<br />

low low_voltage<br />

Vector File Format 241<br />

EXAMPLE:<br />

high 3.3<br />

low 0.0<br />

The high/low voltages of individual nodes can be overridden by<br />

configuration commands set_vec_opt and set_node_stv.<br />

This command is used by nsvt and vec.<br />

An io statement containing input and output signals can be<br />

placed after radix to indicate that both input and output signals<br />

are specified in the data file. The statement begins with io,<br />

followed by i,b,o, oru. If the io line is not used in vec or nsvt<br />

files, all signals are treated as inputs.<br />

The<br />

Indicates that the corresponding signal is:<br />

character:<br />

i input<br />

b bidirectional input (with L/H/Z stimuli)<br />

o output<br />

u unused<br />

Here is an example of an io statement:<br />

EXAMPLE:<br />

io iiiioooobobobouu<br />

An i indicates that the corresponding signal is an input and the<br />

stimulus is used to stimulate the circuit.<br />

NOTE: A warning message is generated whenever an input node is not<br />

connected to any element or functional model in the vector input<br />

file.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


242 Chapter 5 Stimuli and State Checking<br />

As a convenience for identifying bidirectional input and output<br />

pairs, you can use a b identifier to indicate bidirectional inputs.<br />

The simulator will also preview your vector files. See<br />

vchk_node_opt in the TimeMill or PowerMill reference guide to<br />

decide if any input signal line needs to be simulated as a biput<br />

signal. This conversion happens when the input signal has an L,<br />

H, or Z state since these states mean that the signal is not an<br />

ideal voltage source, so it becomes bidirectional. See “Input<br />

Stimulus Characters in Vector Files” on page 251.<br />

A node can be driven by an input/biput signal and at the same<br />

time checked by output signals in the same vec file. This is done<br />

by using an io statement to specify which column of the vector is<br />

for input/biput stimuli and which column of the vector is for<br />

output comparison.<br />

An o indicates that the corresponding signal is to be used to<br />

check the simulation result. That is, the specified output value<br />

at the specified time is to be compared against the simulated<br />

result. If they are different, an error message is reported in the<br />

.err file.<br />

A u indicates that the corresponding signal column is to be<br />

ignored by the simulation.<br />

output_resistance<br />

This command is used by nsvt and vec.<br />

A drive resistance can be specified for primary inputs or biputs<br />

using the output_resistance command or the keyword out. The<br />

primary inputs/biputs must be in state the L or H state in order<br />

for the simulator to simulate the drive resistance.<br />

If 0 or 1 is specified for input/biput signals, the simulator will<br />

ignore the drive resistance because 0 or 1 means a strong drive.<br />

If output_resistance is not specified for an input/biput signal<br />

with an L or H state, it will be treated as floating, which is the<br />

same as specifying infinite drive resistance because the circuit is<br />

open.<br />

The drive strength is defined with a resistance value in ohms,<br />

and it follows the keyword out.<br />

This drive resistance can be overridden by the configuration<br />

command set_vec_opt.


period<br />

radix<br />

Vector File Format 243<br />

The following example shows the first two input signals with a<br />

drive strength of 150 Ohms:<br />

EXAMPLE:<br />

radix 1111444411<br />

slope 1.5<br />

io iiibooooii<br />

out 150<br />

0 LL11ae2201<br />

50 1001773411<br />

This command is used by nsvt only.<br />

A period statement specifies the fixed time interval applied<br />

between two consecutive vectors in the nsvt file. The time unit is<br />

nanosecond.<br />

SYNTAX:<br />

period time_in_ns<br />

EXAMPLE:<br />

period 2.5<br />

This statement specifies the interval to apply vectors is 2.5 ns.<br />

This command is used by nsvt, vec and vec_chk.<br />

The first non-comment line in the file may specify the number of<br />

bits (the radix) associated with each input signal. The format for<br />

this line is radix as the first non-white space, followed by a data<br />

sequence representing the radix for each column. The format is<br />

shown in the following example:<br />

EXAMPLE:<br />

radix 1111 441313412 2231 4444444<br />

This example indicates four single-bit binary signals followed by<br />

two hex signals, followed by a binary, then an octal, and so on. If<br />

no radix is specified, it is automatically assumed that all signals<br />

are binary signals.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


244 Chapter 5 Stimuli and State Checking<br />

rise<br />

fall<br />

slope<br />

signal<br />

These commands are used by nsvt and vec.<br />

<strong>EPIC</strong> defines rise/fall as 0%-100% for a rising edge, and 100%-0%<br />

for a falling edge. You can specify the rise and fall times<br />

individually with rise and fall statements. All of the time<br />

parameters are specified in nano-seconds.<br />

SYNTAX:<br />

rise rise_value<br />

fall fall_value<br />

The rise and fall times can also be specified with a single slope<br />

statement.<br />

SYNTAX:<br />

slope slope_value<br />

This statement causes the rise and fall times of all the vectors in<br />

the vec or nsvt file to have the nanosecond value specified in<br />

slope_value. The default is 0 nanoseconds. This command is not<br />

used by vec_chk.<br />

The rise/fall/slope can be overridden by the configuration<br />

command set_vec_opt.<br />

NOTE: The absolute time of each vector must increase by at least the<br />

slope value from the previous waveform.<br />

This command is used by nsvt, vec and vec_chk.<br />

The signal specifies the list of input/output signal names. If you<br />

do not want to use the <strong>EPIC</strong> netlist to call this vector file, use<br />

type and signal. See “Running the Vector File Using type and<br />

signal Commands” on page 247.<br />

SYNTAX:<br />

signal node_names...


time_scale<br />

type<br />

Time Value<br />

Vector File Format 245<br />

EXAMPLE:<br />

signal a1 b[1-0] c[2-0]<br />

This example shows that the vector file is driving/monitoring six<br />

signals: a1, b[1], b[2], c[2], c[1], c[0].<br />

This command is used by nsvt, vec, and vec_chk.<br />

The time_scale command specifies a scaling factor for all the<br />

time values in the vector file including rise/fall/slope.<br />

SYNTAX:<br />

time_scale scaling_factor<br />

EXAMPLE:<br />

time_scale 0.001<br />

Scales all the time values by 0.001.<br />

This command is used by nsvt, vec and vec_chk.<br />

The type command specifies the vector file type. Valid vector file<br />

types are vec, vec_chk and nsvt. If you do not want to use the<br />

<strong>EPIC</strong> netlist to call the vector file, use type and signal. See<br />

“Running the Vector File Using type and signal Commands” on<br />

page 247.<br />

SYNTAX:<br />

type vector_file_type<br />

EXAMPLE:<br />

type vec<br />

The time value for each vector is specified in the first non-white<br />

space on any line. The units are nanoseconds and may be<br />

integral or decimal, with a resolution down to .01 ns. This time<br />

entry is accepted only by vec and vec_chk; nsvt does not accept<br />

time.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


246 Chapter 5 Stimuli and State Checking<br />

Data Vectors<br />

Continuing Data<br />

Valid States<br />

Comments<br />

Examples<br />

For nsvt, the keyword period, followed by a value in<br />

nanoseconds, defines the vector time intervals. Each new vector<br />

is applied one period after the previous vector.<br />

The actual data vectors follow the time specification. There must<br />

be one data entry for every entry in the radix specifier. The data<br />

must be separated from the time entry by white space, but the<br />

data can contain white space.<br />

Data can be continued from one line to the next by terminating a<br />

line with a back slash (\). This allows the entry of very long<br />

groups of input signals. A carriage return indicates the end of a<br />

single data vector.<br />

Valid states are described in the section “State Characters Used<br />

by <strong>EPIC</strong> <strong>Tools</strong>” on page 248.<br />

Comments begin with a semicolon (;), and can appear at any<br />

point along a line. <strong>EPIC</strong> tools ignore characters that appear after<br />

a semicolon (;).<br />

The following syntax shows an example of an entry in the <strong>EPIC</strong><br />

netlist that calls the vec function.<br />

EXAMPLE:<br />

(is=vec)(en=test_vectors)(ot=a1,b[1-0],c[2-0],<br />

d[3-0],fbus[39-0], cntrl[8-0], rd, wr, ps, cs);<br />

This example specifies the test_vectors file in which the vectors<br />

are found. The nodes in the <strong>EPIC</strong> netlist that are forced are a1,<br />

a single-bit signal; b[1] and b[0], two bits from the bus labelled


Vector File Format 247<br />

b; three bits from bus c, four bits from bus d, 40 bits from fbus,<br />

and so on.<br />

Figure 8 shows typical data in the test_vectors file.<br />

;this illustrates the features of the vector input format<br />

radix 1234 4444444444 111111111 4 ;specifies bit count for each column<br />

slope 3.84 ;specifies the rise and fall time in ns.<br />

;time will be on the left and signals to the right<br />

0 0000 fffFff ffff 0101011111;note free format<br />

10 137f 0000 1111 33 111111111 5<br />

20 1111 adadaDadad 000000000 9<br />

30 0123 3333333333 111111111 4<br />

40 ZZZz uuuuuuuUuu 010101010 6\<br />

50 1222 123456890a 000000000 3<br />

;columns are deliberately misaligned to show generality but<br />

;would in most cases be aligned for ease of reading<br />

Figure 8 test_vectors file sample<br />

Semicolons begin comments. The radix statement has an entry<br />

for each column specifying the number of bits in each: 1 matches<br />

the single-bit signal a1; 2 matches the two-bit width of b[1-0];<br />

and so forth.<br />

The slope identifier causes the simulator to attach a 3.84ns rise<br />

and fall time to all the transitions specified. This rise and fall<br />

time starts at the transition times specified. For example, at<br />

10ns, the first bit changes from a zero to a one. The simulator<br />

starts this transition at 10ns and finishes the transition at<br />

13.84ns.<br />

The actual vectors are specified with floating-point times in the<br />

left fields and the vector values in the right fields. At time 40ns,<br />

high impedance and unknown states are specified.<br />

Running the Vector File Using type and signal Commands<br />

Instead of calling the vector functions by using an <strong>EPIC</strong> netlist,<br />

you can include the type and signal commands in the vector file<br />

and run the vector file with -nvec[tor] on the command line. The<br />

signal directions ot or it are automatically associated with the<br />

type of vector function specified.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


248 Chapter 5 Stimuli and State Checking<br />

The previous example can do away with the <strong>EPIC</strong> netlist by<br />

adding type and signal commands to the test_vectors file, as<br />

shown in the following example:<br />

EXAMPLE:<br />

type vec<br />

signal a1 b[1-0] c[2-0] d[3-0] fbus[39-0] cntrl[8-<br />

0] rd wr ps cs<br />

Then you can directly give the vector file to simulation tools:<br />

EXAMPLE:<br />

powrmill -n spice_netlist -nvec test_vectors.....<br />

This method is recommended if you are using non-<strong>EPIC</strong> netlist<br />

for simulation, such as SPICE, and you want to use the <strong>EPIC</strong><br />

vector file. Because if you use an <strong>EPIC</strong> netlist to call the vec<br />

function, then you will have a mixed netlist format. Unlike<br />

SPICE, <strong>EPIC</strong> format is case-sensitive and recognizes VDD as<br />

power node, so mixing the two netlist formats causes the netlist<br />

compiler to be case-sensitive, and the special node names defined<br />

in <strong>EPIC</strong> format are passed the to SPICE netlist also. So directly<br />

passing the vector files to simulation avoids the side effects of<br />

mixing netlist formats.<br />

State Characters Used by <strong>EPIC</strong> <strong>Tools</strong><br />

Logic States<br />

This section provides information about:<br />

■ logic states<br />

■ input stimulus characters in vector files<br />

■ expected output characters in vector files<br />

Since <strong>EPIC</strong> simulation tools use detailed device models to<br />

simulate the transistor-level circuits, the simulators can<br />

describe the circuit's logic state in a more detailed way than<br />

many switch-level and gate-level logic simulators.


State Characters Used by <strong>EPIC</strong> <strong>Tools</strong> 249<br />

A node's logic state is defined by two entities: state level and<br />

state attributes. There are three state levels: ZERO, ONE, and<br />

UNDEF (undefined). A node's state level is:<br />

■ ZERO, if its voltage is smaller than or equal to the node's low<br />

threshold voltage<br />

■ ONE, if its voltage is larger than or equal to the node’s high<br />

threshold voltage<br />

■ UNDEF, if its voltage is between the node’s high and low<br />

threshold voltages<br />

The state attributes are the special conditions associated with<br />

nodes. The attributes include: floating (high impedance state),<br />

unset condition, don't care (X), and biput driving.<br />

For example, a state level ONE with the floating attribute is the<br />

“H” state. A state level ZERO with non-biput-driving is the “N”<br />

state.<br />

The physical meanings of the state attributes are:<br />

■ floating: The node is not driven by any source nodes through<br />

any conducting paths. It is also referred to as high<br />

impedance state to reflect the fact that all paths from source<br />

nodes to the floating node are with high impedance.<br />

■ unset condition: A node is in the unset condition if it is never<br />

explicitly initialized by set_node_ic nor set by signals<br />

propagated from any source nodes. The unset condition<br />

indicates the node is never meaningfully set, and its voltage<br />

value may be meaningless. Once it is set by a meaningful<br />

signal, it will not return to the unset condition.<br />

For example, a dangling node’s state is in the unset<br />

condition. Although an <strong>EPIC</strong> simulator and many SPICE<br />

simulators assign 0V to a dangling node, the node can have<br />

any voltage value in a real circuit.<br />

■ X-state (don’t care, unknown): Represents that the node’s<br />

state is unknown. It can be ONE, ZERO, ‘Z’, and so on. In<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


250 Chapter 5 Stimuli and State Checking<br />

synthesis terms, X-state means “don’t care”, which can be<br />

used to simplify the Boolean sum of products.<br />

The X-state propagation is different from the unset condition<br />

calculation as follows:<br />

◆ X-state is a valid input state (from vector stimuli<br />

configuration command set_node_icx). The unset<br />

condition cannot be an input state.<br />

◆ A node can change from X-state to another state, and go<br />

back to X-state later. A node can never go back to the<br />

unset state if it has been set.<br />

■ biput-not-driving: indicates that a biput node is not driven<br />

by the external source at this moment, and its state is<br />

determined by the node’s neighboring circuit.<br />

There is a precedence ordering among the state attributes:<br />

unset > don't care > floating > biput driving<br />

This means if a node is floating and unset, it will be reported as<br />

unset.<br />

A set of 11 characters are used to represent node logic states.<br />

There is a corresponding set of integer numbers for the state<br />

characters to be used in the .out file.<br />

The following table lists all state characters, with corresponding<br />

state numbers shown in parentheses.<br />

State Level logic-0 logic-1 UNDEF<br />

Attributes State Characters and Numbers<br />

plain state<br />

(no attribute)<br />

‘0’ (0) ‘1’ (1) ‘U’ (2)<br />

floating ‘L’ (3) ‘H’ (4) ‘Z’ (5)


NOTE: All state characters are case-insensitive.<br />

Input Stimulus Characters in Vector Files<br />

State Characters Used by <strong>EPIC</strong> <strong>Tools</strong> 251<br />

State Level logic-0 logic-1 UNDEF<br />

Attributes State Characters and Numbers<br />

biput not<br />

driving<br />

‘N’ (6) ‘T’ (7) ‘Y’ (8)<br />

unset ‘?’ (9) ‘?’ (9) ‘?’ (9)<br />

don’t care ‘X’ (10) ‘X’ (10) ‘X’ (10)<br />

The following table lists the acceptable state characters to<br />

specify the input stimuli in the vector file. They are the state<br />

characters for the single-bit signals. (See “radix” on page 243 for<br />

details.) For multiple-bit signals, hexadecimal numbers '0', '1',<br />

'2', ..., '9', 'A', 'B', ..., 'F' can be used. If any non-numerical state<br />

character is specified for a multiple-bit signal, it means all bits<br />

of the signal are in the specified state. All input state characters<br />

are case-insensitive.<br />

Input State Definition<br />

‘0’ drive to logic ZERO<br />

‘1’ drive to logic ONE<br />

‘U’ drive to logic ZERO (same as '0')<br />

‘L’ + floating to logic ZERO; or<br />

+ resistive drive to logic ZERO<br />

‘H’ + floating to logic ONE; or<br />

+ resistive drive to logic ONE<br />

‘Z’ floating (not driving)<br />

‘X’ + drive to X (don’t care) state if X-state<br />

propagation is requested; or<br />

+ drive to logic ZERO (same as ‘0’)<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


252 Chapter 5 Stimuli and State Checking<br />

When a floating state ('L', 'H', 'Z') is specified for the input signal<br />

and no drive resistance is specified (which is the same as<br />

specifying infinite drive resistance), the node state is determined<br />

by circuit elements connected to the node. If a drive resistance is<br />

specified for the signal by either the keyword out in the vector<br />

file or the configuration command set_vec_opt r=, ‘L’ and ‘H’<br />

will work as described on in the section “output_resistance” on<br />

page 242.<br />

If the node is not channel-connected to any other elements, 'L'<br />

will change the node's state to 'L' (floating with logic level<br />

ZERO); 'H' will change the node's state to 'H' (floating with logic<br />

level ONE); 'Z' will make the node floating and it state level<br />

unchanged.<br />

If 'X' is specified for the signal, it drives the node to X state when<br />

X-state propagation is turned on by configuration commands.<br />

Otherwise, 'X' is the same as input stimulus '0'.<br />

Expected Output Characters in Vector Files<br />

Since a node's logic state is defined by two entities (state level<br />

and state attributes), the output vectors check state levels as<br />

well as state attributes.<br />

For example, if vchk_node_opt z_state=1 is used, the<br />

expected state 'H' will check if a node is floating and at state<br />

level ONE. If the node is not floating or not at state level ONE, a<br />

comparison error will be flagged. The expected state '1' will<br />

check if a node is NOT floating and at state level ONE.<br />

If vchk_node_opt z_state=1 is not used, both 'H' and '1' will<br />

only check if a node is at state level ONE. The node's floating<br />

attribute will not be checked.<br />

The following tables list all the acceptable state characters for<br />

expected outputs in the vector file for TimeMill and PowerMill.<br />

They are the state characters for the single-bit signals. For the<br />

multiple-bit signals, hexadecimal numbers '0', '1', '2', ..., '9', 'A',<br />

'B', ..., 'F' can be used. If any non-numerical state character is


State Characters Used by <strong>EPIC</strong> <strong>Tools</strong> 253<br />

specified for a multiple-bit signal, it means all bits of the signal<br />

are in the specified state. All output state characters are caseinsensitive.<br />

For more information, see “radix” on page 243.<br />

TimeMill<br />

Expected State Definition<br />

‘-’ don’t check<br />

‘0’ logic ZERO<br />

‘1’ logic ONE<br />

‘U’ logic ZERO if vchk_node_opt u_state=2<br />

or<br />

logic UNDEF if vchk_node_opt<br />

u_state=1<br />

or<br />

don’t check if vchk_node_opt u_state=0<br />

‘L’ logic ZERO<br />

and<br />

floating if z_state is checked<br />

‘H’ logic ONE<br />

and<br />

floating if z_state is checked<br />

‘Z’ the same as expected state ‘U’<br />

and<br />

floating if z_state is checked<br />

‘N’ logic ZERO<br />

and<br />

biput node driven by circuit if<br />

biput_drive is checked<br />

‘T’ logic ONE<br />

and<br />

biput node driven by circuit if<br />

biput_drive is checked<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


254 Chapter 5 Stimuli and State Checking<br />

TimeMill<br />

Expected State Definition<br />

‘Y’ the same as expected state ‘U’<br />

and<br />

biput node driven by circuit if<br />

biput_drive is checked<br />

‘X’ the same as ‘-’<br />

or<br />

X state if x_state is checked<br />

‘?’ the same as ‘-’<br />

or<br />

unset_state if unset_state is checked<br />

PowerMill<br />

Expected State Definition<br />

‘-’ don’t check<br />

‘0’ logic ZERO<br />

‘1’ logic ONE<br />

‘U’ logic ZERO if vchk_node_opt u_state=2<br />

or<br />

logic UNDEF if vchk_node_opt<br />

u_state=1<br />

or<br />

don’t check if vchk_node_opt u_state=0<br />

‘L’ logic ZERO<br />

and<br />

floating if z_state is checked<br />

‘H’ logic ONE<br />

and<br />

floating if z_state is checked<br />

‘Z’ the same as expected state ‘U’<br />

and<br />

floating if z_state is checked


State Characters Used by <strong>EPIC</strong> <strong>Tools</strong> 255<br />

PowerMill<br />

Expected State Definition<br />

‘N’ the same as expected state ‘0’<br />

‘T’ the same as expected state ‘1’<br />

‘Y’ the same as expected state ‘U’<br />

‘X’ the same as ‘-’<br />

‘?’ the same as ‘-’<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


256 Chapter 5 Stimuli and State Checking


Chapter 6<br />

batchrun Program


258 Chapter 6 batchrun Program


Overview<br />

Overview 259<br />

The batchrun script runs TimeMill, PathMill, PowerMill, or<br />

AMPS in batch mode with various parameters.<br />

SYNTAX:<br />

batchrun product_name batch_file<br />

DESCRIPTION:<br />

The batchrun command runs a script you have written.<br />

Command Argument Definition<br />

product_name timemill, pathmill, powrmill, or<br />

amps.<br />

batch_file Specifies the name of the batch<br />

script you wrote.<br />

Distributed Computing Capability<br />

The batchrun program can distribute jobs to multiple<br />

computers. Multiple jobs can be executed concurrently. The<br />

information required is in a host file that specifies the host<br />

names of available computers.<br />

To perform distributed computing, all filenames in the batchfile<br />

must be in the network-full-path format or in relative paths to<br />

the working directory. A network full path means a pathname<br />

which is accessible to multiple computers through computer<br />

networks, with all computers referring to the same file or<br />

directory by giving a network full path name. The working<br />

directory is the directory specified by the environment variable<br />

<strong>EPIC</strong>_BATCHRUN_DIR, or the directory where the batchrun<br />

script is executed if <strong>EPIC</strong>_BATCHRUN_DIR is not set.<br />

It is important to designate different outputs using the -o option<br />

for different job runs. Since multiple jobs are run simultaneously<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


260 Chapter 6 batchrun Program<br />

on multiple computers, their outputs might overwrite each other<br />

if they use the same output file.<br />

The batchrun.hosts file specifies the host names of the computers<br />

to execute different jobs. Its format is one host name per line.<br />

EXAMPLE:<br />

maui<br />

oahu<br />

lanai<br />

maui<br />

In this example, maui, oahu, and lanai are host names of<br />

available computers, and maui is a multiprocessor computer<br />

capable of running two jobs at the same time. Once a computer<br />

completes a job, batchrun assigns a new one to it.<br />

It searches for the host file in the following order:<br />

1 Checks for the environment variable<br />

<strong>EPIC</strong>_BATCHRUN_HOSTS, which sets a path to the host<br />

file.<br />

2 Uses the batchrun.hosts host file in the working directory.<br />

3 If steps 1 and 2 fail, uses only the local host to run jobs.<br />

The batchrun program generates a temporary Bourne shell<br />

script in the working directory for the program command<br />

execution. This temporary script will be deleted after batchrun<br />

is completed. Therefore, you must have write permission to the<br />

working directory.<br />

The batchrun program uses remote shell rsh to invoke remote<br />

processes for running a job on a remote computer. The pathname<br />

of the working directory must be visible to all computers<br />

specified in the host file. If <strong>EPIC</strong>_BATCHRUN_DIR is not set,<br />

the program uses a Bourne shell environment variable, PWD, to<br />

set the working directory, that is, the directory where the<br />

batchrun command is executed. Depending on the network file<br />

system setup, PWD might not be a network full path. You should


Batchfile Format<br />

FILE<br />

Batchfile Format 261<br />

set <strong>EPIC</strong>_BATCHRUN_DIR before starting the batchrun<br />

program. <strong>EPIC</strong>_BATCHRUN_DIR must be a network full path.<br />

If you encounter permission problems while doing rsh, see your<br />

system administrator. Also, see the UNIX manual page on rsh<br />

for details.<br />

The batchfile has three statements: FILE, RUN, and DATA.<br />

Each statement keyword must start at the beginning of a line.<br />

You can set off comments in the batchfile by beginning the<br />

comment line with a pound sign (#). You can include comments in<br />

FILE and DATA statements.<br />

SYNTAX:<br />

FILE filename<br />

<br />

<br />

<br />

...<br />

END<br />

EXAMPLE:<br />

FILE temp.config<br />

add_node_cap N1 $CLOAD1<br />

add_node_cap N2 $CLOAD1<br />

END<br />

EXAMPLE:<br />

This example creates a file called temp.config and includes as<br />

its contents add_node_cap N1 and add_node_cap N2.The<br />

parameters are preceded by dollar sign ($). The parameter<br />

values are specified in the DATA statement.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


262 Chapter 6 batchrun Program<br />

RUN<br />

DATA<br />

DESCRIPTION:<br />

The FILE statement specifies the file to be created and the<br />

contents in the file. You can specify the FILE statement more<br />

than once in the batchfile.<br />

SYNTAX:<br />

RUN arguments<br />

EXAMPLE:<br />

RUN -n NET -p $TECH<br />

This syntax runs the <strong>EPIC</strong> tool on the NET netlist and uses the<br />

technology files specified by the TECH parameter in the DATA<br />

statement.<br />

DESCRIPTION:<br />

The RUN statement specifies the command-line options for<br />

TimeMill, PathMill, PowerMill or AMPS. You can specify the<br />

RUN statement only once in the batchfile.<br />

Arguments for the RUN statement can be parameters specified<br />

in the DATA statement by preceding the parameter name with a<br />

dollar sign ($).<br />

SYNTAX:<br />

DATA param1 param2 param3 ...<br />

<br />

<br />

<br />

<br />

...<br />

END


Batchfile Format 263<br />

EXAMPLE:<br />

DATA CLOAD1 TECH OUTFILE<br />

10 best_5v.tech best_5v_c10<br />

20 best_5v.tech best_5v_c20<br />

100 best_5v.tech best_5v_c100<br />

10 worst_4.5v.tech worst_4.5v_c10<br />

20 worst_4.5v.tech worst_4.5v_c20<br />

100<br />

END<br />

worst_4.5v.tech worst_4.5v_c100<br />

DESCRIPTION:<br />

The DATA statement specifies the value of the parameters for<br />

each run. The list of parameter names follows DATA in the<br />

command line. Each set of parameter values is specified on a<br />

separate line. Each value is separated by a space. Each set is<br />

used to run the simulator once. Parameters are referred to in the<br />

FILE and RUN statements (similar to specifying shell variables<br />

in a UNIX shell using $name). The DATA statement can be<br />

specified only once in the batchfile and must be the last<br />

statement in the file. All lines that appear after END in the<br />

DATA statement are ignored.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


264 Chapter 6 batchrun Program<br />

Batchfile Example<br />

Figure 1 shows a sample batchfile for running TimeMill with<br />

different loading capacitances and technology files.<br />

batchrun timemill batchfile<br />

batchfile:<br />

---------------------------------<br />

# to specify capacitances for nodes N1 and N2<br />

FILE temp.config<br />

add_node_cap N1 $CLOAD1<br />

add_node_cap N2 $CLOAD1<br />

END<br />

RUN -n net -p $TECH -c config1 temp.config -t 100 -o $OUTFILE<br />

DATA CLOAD1 TECH OUTFILE<br />

10 best_5v.tech best_5v_c10<br />

20 best_5v.tech best_5v_c20<br />

100 best_5v.tech best_5v_c100<br />

10 worst_4.5v.tech worst_4.5v_c10<br />

20 worst_4.5v.tech worst_4.5v_c20<br />

100 worst_4.5v.tech worst_4.5v_c100<br />

END<br />

Figure 1 Sample batchfile for running TimeMill<br />

Six simulations will be run for this TimeMill batchrun. The<br />

output file best_5v_c10 will contain the result of a simulation<br />

performed using best_5v.tech as the technology file, including a<br />

load of 10fF on nodes N1 and N2.<br />

The other runs use:<br />

Load on N1 & N2 Technology File Output<br />

20fF best_5v.tech best_5v_c20.out<br />

100fF best_5v.tech best_5v_c100.out<br />

10fF worst_4.5v.tech worst_4.5v_c10.out<br />

20fF worst_4.5v.tech worst_4.5v_c20.out<br />

100fF worst_4.5v.tech worst_4.5v_c100.out


Chapter 7<br />

Utilities for Dynamic <strong>EPIC</strong><br />

<strong>Tools</strong>


266 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong>


Overview<br />

Meas Utility<br />

Overview 267<br />

This chapter describes the various utilities you can use to specify<br />

the type of information you want to obtain from simulation<br />

results. These utilities are:<br />

■ Meas: Computes the results of .measure statements in<br />

SPICE or HSCPICE netlists<br />

■ Edisplay: Controls the formation of simulation results<br />

■ Eview: Views simulation results via a graphical interface<br />

The SimWave and turboWave utilities enable you to view<br />

analog and digital waveforms.<br />

This chapter also presents two utilities that enable vector file<br />

translation: vcd2e and VTRAN.<br />

These utilities are described in the following sections.<br />

This is a post-processing utility for computing the results of<br />

.meas (or .measure) statements in SPICE or HSPICE netlists.<br />

This utility allows you to find the .meas results without running<br />

an entire simulation. This is useful, for example, if you want to<br />

modify the .meas statements in the netlist and compute the new<br />

results without having to rerun the entire simulation.<br />

To run the meas utility, you need to have an <strong>EPIC</strong> or FSDB<br />

output file and a SPICE netlist containing .meas statements.<br />

When the meas utility is run, it first parses the .out or the .fsdb<br />

file to get the signal waveforms and then generates results for<br />

the .meas statements specified in the given netlist. All signals in<br />

the netlist must have corresponding waveforms in the output file<br />

or the utility will fail.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


268 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Command Syntax<br />

Command-line Options<br />

meas [-p]<br />

[-n netlist_file]<br />

[-s <strong>EPIC</strong>_out_file]<br />

[-o meas_out_file]<br />

The meas command-line options are:<br />

-p Forces meas to parse only the .meas statements in the netlist.<br />

Setting this option reduces CPU time and memory<br />

consumption. If this option is not set, meas will parse the<br />

entire netlist.<br />

CAUTION: Under the following two conditions, using this option could cause<br />

Meas to fail to generate results: 1) the .meas statements contain<br />

nodes aliased to some other nodes, or 2) the .meas statements<br />

contain signals like i(X), where X denotes an element.<br />

-n Specifies a SPICE or HSPICE netlist file containing .meas<br />

statements.<br />

-s Specifies the <strong>EPIC</strong> (or FSDB) output file to be used as input<br />

to the Meas utility, for example, powrmill.out.<br />

-o Specifies the name of the output file generated by the Meas<br />

utility. The default filename is meas.meas.


Edisplay Utility<br />

Command Syntax<br />

Edisplay Utility 269<br />

Edisplay is a program that controls formatting of simulation<br />

results. It shows the simulation output as a table of logic states<br />

and floating point values. The translation between the logic state<br />

value stored in the output file and the Edisplay output is shown<br />

in the following table. The <strong>EPIC</strong> output file numbers are defined<br />

in the section describing the double integer line on page 317.<br />

<strong>EPIC</strong> Output File Edisplay Output<br />

0 0<br />

1 1<br />

2 U<br />

3 L<br />

4 H<br />

5 Z<br />

6 N<br />

7 T<br />

8 Y<br />

9 ?<br />

10 X<br />

edisplay [-i in_file_name]<br />

[-b begin_time]<br />

[-e end_time]<br />

[-f control_file]<br />

[-h]<br />

[-m error_file]<br />

[-I]<br />

[-o out_filename]<br />

[-p caption_step]<br />

[-r]<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


270 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Command-line Options<br />

[-s interval_step]<br />

[-t]<br />

[-d delay_measure_file]<br />

[-g time_tolerance]<br />

[-w sp_pwl_inode]<br />

[-v sp_pwl_file]<br />

[-l]<br />

This section defines the command-line options for the edisplay<br />

command.<br />

-i in_file_name<br />

Specifies the input file to Edisplay, such as powrmill.out or<br />

timemill.out. If the -i option is not specified, Edisplay looks<br />

first for timemill.out, then powrmill.out.<br />

-b begin_time<br />

Specifies the beginning time step to be printed. The default<br />

is 0.0 ns.<br />

-e end_time<br />

Specifies the ending time step to be printed. The last time<br />

printed is the most recent event at or before the specified<br />

time. The default is the ending time of the simulation.<br />

-f control_file<br />

Specifies the name of the control file you wish to use. This<br />

file lets you specify which signals to display and their<br />

formats (that is, binary, hex, and so on). See the “Edisplay<br />

Control File” on page 275.<br />

-h Command-line help.<br />

-m error_file<br />

Merges the comparison errors into the output. An asterisk<br />

(*) is used to mark the lines that have errors. If a<br />

comparison error appeared in the timemill.err file, then<br />

edisplay -m timemill.err produces the result shown in<br />

the following example:


EXAMPLE:<br />

Edisplay Utility 271<br />

T ......<br />

I n.nnnO<br />

M nInnnU<br />

E 1N234T<br />

0.00 011010<br />

4.00 *U-----<br />

5.00 *-----1<br />

10.00 100101<br />

20.00 100101<br />

23.00 *-----0<br />

30.00 100101<br />

35.00 *--U---<br />

40.00 10010<br />

If specified with the -s option, error lines are printed even<br />

if the error does not occur at the time interval specified by<br />

the -s option.<br />

EXAMPLE:<br />

output_filter edisplay -I<br />

-I Instructs Edisplay to read the input from the standard<br />

input device. This is useful when running TimeMill or<br />

PowerMill in the interactive mode. The configuration file<br />

command shown in the preceding example gives a text<br />

display of the simulation results while the simulation<br />

continues to run.<br />

-o out_filename<br />

This option specifies the name of the output file containing<br />

the simulation result of Edisplay processing. If this option<br />

is not used, the output goes to the standard output.<br />

EXAMPLE:<br />

......O<br />

......U<br />

T ..d...T<br />

I ppa...P<br />

M hht...U<br />

E 12aABCT<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


272 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

0.00 000UUUU<br />

10.00 100UUUU<br />

10.25 1001UUU<br />

20.00 1011UUU<br />

20.82 1010UUU<br />

30.00 0010UUU<br />

35.00 0110UUU<br />

35.01 01100UU<br />

35.02 011001U<br />

35.03 0110010<br />

40.00 0100010<br />

55.00 0000010<br />

60.00 1000010<br />

61.47 1001010<br />

80.00 0001010<br />

85.00 0101010<br />

85.01 0101110<br />

85.49 0101100<br />

86.08 0101101<br />

-p caption_step<br />

Inserts the signal caption section at specified intervals in<br />

the simulation results. This is the number of lines to be<br />

printed between signal captions. It is useful for splitting<br />

the output file into printable pages. The default displays<br />

the caption only once.<br />

EXAMPLE:<br />

SCEDDDDLLLLC<br />

EKN01231111L<br />

R..........K<br />

I......BCAN.<br />

A........._.<br />

T L.........1.<br />

I _...........<br />

M I...........<br />

E N...........<br />

0.00 1U1UUUUUUUUU<br />

0.01 1U1UUUUUUUUU<br />

SCEDDDDLLLLC<br />

EKN01231111L<br />

R..........K


I......BCAN.<br />

A........._.<br />

T L.........1.<br />

I _...........<br />

M I...........<br />

E N...........<br />

0.08 1U1UUUUUUUUU<br />

0.19 1U1UUUUUUUU0<br />

0.29 1U11UUUUUUU0<br />

0.43 1U11UUU0U0U0<br />

0.43 1U11UUU0U0U0<br />

0.54 1U111UU010UU<br />

Edisplay Utility 273<br />

-r Changes the bottom-justified signal caption header to topjustified.<br />

The following table shows you the effect of using<br />

the -r option.<br />

With the -r Option Without the -r Option<br />

T ...... T InnnnO<br />

I .nnnnO I NnnnnU<br />

M InnnnU M .1234T<br />

E N1234T E ......<br />

-s interval_step<br />

Specifies the selected strobe time for output. For example,<br />

if the clock signal is invoked every 20 ns, interval_step can<br />

be set at 20 to print the result at each toggle of the clock.<br />

The interval step is offset by the beginning time; for<br />

example, the time specified by the -b option. The default<br />

beginning time is 0. If this option is not specified, an output<br />

display appears whenever any output signal changes.<br />

-t Prints the values of a signal only when it toggles or<br />

changes state. When a signal does not toggle, its state is<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


274 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

represented by a period (.). The default displays all signal<br />

states at each interval.<br />

-d delay_measure_file<br />

The name of the file that stores the result of the measure<br />

statement included in the control file specified by the -f<br />

option.<br />

-g time_tolerance<br />

Tolerance used for error merging of the -m option. Edisplay<br />

ignores errors within the tolerance of the time specified in<br />

nanoseconds. The time_tolerance argument is specified as<br />

a floating point.<br />

-w sp_pwl_node<br />

This option generates a SPICE PWL input command line<br />

for the specified analog node in the file given in the -v<br />

option. Only one node can be specified. When specifying the<br />

node, the signal type (v, i, I, or di/dt) must be given, and<br />

must be surrounded by single or double quotes.<br />

EXAMPLE:<br />

edisplay -w 'i(n2)' -v spice.file<br />

-v sp_pwl_file<br />

This specifies the name of the output file containing the<br />

PWL command line specified by the -w option.<br />

-l Instructs Edisplay to display only digital logic values, and<br />

to ignore all analog voltage or current values.<br />

DESCRIPTION:<br />

This command provides options to control the formatting of<br />

simulation results. Node names are written vertically in a<br />

caption at the top of each display table.<br />

CAUTION: Edisplay does not do interpolation. If Edisplay outputs lines<br />

between points of an analog signal, the value of the first point<br />

will be repeated.


Edisplay Control File<br />

Edisplay Utility 275<br />

The Edisplay control file can be used to further control output<br />

printing. When a control file is specified with the -f option on the<br />

edisplay command line, only nodes defined by the print<br />

commands in the control file are output. If the first line of the<br />

control file contains the !append statement, all nodes defined by<br />

the control file are displayed, followed by those in the TimeMill<br />

or PowerMill output file.<br />

The following types of statements are supported:<br />

■ Logic signals to be printed:<br />

print_node n1 n2...<br />

■ Analog signals to be printed:<br />

print_node_current i(a1) i(a2)...<br />

print_node_average I(a1) I(a2)...<br />

print_node_voltage v(b1) v(b2)...<br />

■ Math signals to be printed:<br />

print_node_math m(a1) M(a1) dm/dt(a2) M_rms(a2)<br />

■ Spaces to be inserted between signals:<br />

spa #_of_spaces<br />

If #_of_spaces is not specified, the default is 1.<br />

■ Group signals to be printed:<br />

hex/oct/big/bio group_name n1 n2 n3...<br />

■ Specifying the statement !append in the first line of the<br />

control file causes the signals in the TimeMill or PowerMill<br />

output to be displayed after any other signals specified in the<br />

control file. Otherwise, only signals defined in the control file<br />

are displayed.<br />

!append<br />

print_node n1^ n1 n2 n3<br />

spa 1<br />

print_node_current i(a1)<br />

print_node_voltage v(b1)<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


276 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Eview Utility<br />

spa 3<br />

print_node n0<br />

print_node n1<br />

print_node n2<br />

bio bn3 n3<br />

hex bn n7 n6 n5 n4 n3 n2 n1 n0<br />

oct bn1 n3 n3 n1 n0<br />

big bn2 n2 n1 n0<br />

■ Measure the maximum rise/fall time delays between two<br />

nodes.<br />

measure n1 n2<br />

The example prints the maximum R to F, R to R, F to F, F to<br />

R delays between n1 and n2. The results are stored in the file<br />

specified by -d. If -d is not specified, they are printed to the<br />

standard output.<br />

■ High impedance bus may be printed in either hexadecimal or<br />

Z value.<br />

show_hiz_hex<br />

If show_hiz_hex is included in the control file, it will turn<br />

on the hex representation, and the bus value HLHL will be<br />

shown as A (hex). Otherwise, HLHL will be shown as Z.<br />

Mixed-state buses such as 10HL will be shown as A.<br />

■ User-defined state symbols are allowed.<br />

define_value 7 Y<br />

This example would force Edisplay to show the state value 7<br />

for Y in the <strong>EPIC</strong> output file instead of the default symbol T.<br />

Eview is a post-processing utility for viewing simulation results.<br />

It offers some major Edisplay features, and several additional<br />

capabilities:<br />

■ Graphical interface for browsing tabular results


Command Syntax<br />

Command-line Options<br />

■ Hierarchical analog and digital signal selector<br />

Eview Utility 277<br />

■ Search-and-highlight signals (analog and digital), and/or<br />

errors<br />

eview [-eo <strong>EPIC</strong>_out_file]<br />

[-ee <strong>EPIC</strong>_err_file]<br />

[-cf control_file]<br />

The eview command-line options are:<br />

-eo Specifies the <strong>EPIC</strong> simulation output file to Eview, such as<br />

powrmill.out, timemill.out. If not specified, Eview looks<br />

first for the timemill.out file, then powrmill.out file. Analog<br />

signals will only be displayed when a value is reported in<br />

the .out file.<br />

-ee Specifies the <strong>EPIC</strong> comparison error file to Eview, such as<br />

the powrmill.err or timemill.err file. If not specified, Eview<br />

looks first for timemill.err, then powrmill.err.<br />

-cf Specifies the control file you want to use. This file allows<br />

you to specify which signals will be displayed and their<br />

formats, such as hex or oct. See the section “Eview Control<br />

File” on page 284.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


278 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Window Layout<br />

Menu bar<br />

Message<br />

area<br />

Signal names<br />

Simulation<br />

time<br />

Logic values<br />

Figure 1 Eview window<br />

The Eview window is divided into three areas: menu bar, text<br />

display, and message area.<br />

Menu Bar<br />

The menu bar contains five pull-down menus: File, Edit,<br />

Search, Options, and Help.


Figure 2 shows the Eview File menu.<br />

Figure 2 Eview File menu<br />

The File menu options are:<br />

Eview Utility 279<br />

■ Load <strong>EPIC</strong> .out File: Select an <strong>EPIC</strong> simulation output file<br />

and load it into the Eview environment.<br />

■ Load <strong>EPIC</strong> .err File: Select an <strong>EPIC</strong> comparison error file<br />

and load it into the Eview environment.<br />

■ Load Control File: Select a predefined control file and load<br />

it into the Eview environment.<br />

■ Save Result: Save the current Eview result in the text<br />

display window to a user-specified file.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


280 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

■ Exit: Exit Eview.<br />

Figure 3 shows the Edit menu options.<br />

Figure 3 Eview Edit menu<br />

The Edit menu options are:<br />

■ Edit Nodes: Pops up a node selector to allow you to pick up<br />

the digital and analog signals from the selected <strong>EPIC</strong><br />

simulation output file.<br />

■ Error Tolerance: Ignores the comparison errors in the<br />

specified tolerance time frame. The tolerance is specified in<br />

nanoseconds. Ignoring takes effect only if the <strong>EPIC</strong> .err file<br />

has comparison errors.


Eview Utility 281<br />

■ Show Result: Shows the tabular result of an <strong>EPIC</strong> .out file<br />

with comparison errors, if any. After you load the <strong>EPIC</strong> .out<br />

file into the Eview environment, select this menu to see the<br />

tabular result. Otherwise, the text display window will<br />

remain empty.<br />

Figure 4 shows the Search menu.<br />

Figure 4 Eview Search menu<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


282 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

The Search menu options are:<br />

■ Search Node: Search and highlight the user-specified signal<br />

in the text display area.<br />

■ Search Time: Search and highlight the user-specified time<br />

frame (in nanoseconds) in the text display area.<br />

■ Search Value: Search and highlight all nodes with the value<br />

you specify in the pop-up window.<br />

■ Search Next Error Time: Search and highlight the next<br />

comparison error time stamp in the text display area.<br />

Searching and highlighting will take effect only if the <strong>EPIC</strong><br />

.err file has been loaded.<br />

■ Search Next Error Value: Search and highlight the next<br />

comparison error value in the text display area. Searching<br />

and highlighting will take effect only if the <strong>EPIC</strong> .err file has<br />

been loaded.


Figure 5 shows the Options menu.<br />

Figure 5 Eview Options menu<br />

Eview Utility 283<br />

The Options menu’s single menu item is Strobe Time. This<br />

accesses a window in which you specify the strobe time for<br />

output. The default beginning time is 0. If you do not specify<br />

strobe time, an output display appears whenever any output<br />

signal changes.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


284 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Text Display Area<br />

The text display area is composed of a node name area and a<br />

time/value area. The node name area shows selected signal<br />

names displayed vertically. Analog signals are displayed only<br />

when a value is reported in the .out file.<br />

The time/value area shows the values and time stamps of<br />

selected signals. If no value is reported for a specific time on an<br />

analog signal, and other signals are reported, Eview will print a<br />

dotted line for the specified signal. The values displayed for<br />

analog signals will be in E format and in units of volts or<br />

amperes.<br />

Message Area<br />

There are three fields in the message area: outFile, errFile,<br />

and ctlfile. They display the current files being used by Eview.<br />

Eview Control File<br />

■ outFile: Indicates the selected <strong>EPIC</strong> simulation output file.<br />

■ errFile: Indicates the selected <strong>EPIC</strong> comparison error file.<br />

■ ctlFile: Indicates the selected control file.<br />

The Eview control file can be used if you already know which<br />

signals are included. Only nodes defined by the print commands<br />

in the control file are shown in the text display area.<br />

The following types of statements are supported:<br />

■ For printing logic signals:<br />

print_node n1<br />

print_node n2<br />

■ For printing a group of signals:<br />

hex/oct group_name n1 n2 n3...<br />

■ Math signals to be printed:<br />

print_node_math m(a1) M(a1) dm/dt(a2) M_rms(a2)


■ For inserting spaces between signals:<br />

spa<br />

■ For analog signals:<br />

print_node_current i(s[2])<br />

print_node_average l(s[3])<br />

Waveform Display Utilities 285<br />

EXAMPLE:<br />

print_node_voltage v(s[4])<br />

print_node A[2]<br />

print_node B[2]<br />

print_node COUT<br />

spa<br />

print_node S[3]<br />

spa<br />

print_node CIN<br />

spa<br />

hex AB_GROUP A[0] B[0] A[1] B[1] A[2] B[2]<br />

print_node A[0]<br />

print_node B[0]<br />

print_node B[1]<br />

print_node A[1]<br />

oct AB_GROUP A[0] B[0] A[1] B[1] A[2] B[2]<br />

Waveform Display Utilities<br />

While the simulation output is generating, the output data can<br />

be piped to the waveform display utility using the<br />

set_print_filter configuration command. <strong>EPIC</strong> offers two standalone<br />

waveform display utilities: SimWave and turboWave.<br />

These third-party utilities have been integrated with PowerMill<br />

and TimeMill for viewing analog and digital waveforms. Both<br />

utilities can be used as stand-alone tools to view PowerMill or<br />

TimeMill .out files, or simulation results as you are working.<br />

An additional license is required for each utility.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


286 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

SimWave<br />

turboWave<br />

This section briefly describe the use of SimWave. See the<br />

SimWave User Manual or access Help in SimWave for more<br />

information.<br />

To use SimWave as a stand-alone utility, type:<br />

wd foo.out @<br />

You can use a signal browser to select signal names. The basic<br />

procedure is to select names from the browser, then drag-anddrop<br />

them into the waveform window.<br />

To use SimWave for viewing simulation results while you are<br />

running the simulation, add the following line to your simulation<br />

configuration file:<br />

set_print_filter wd<br />

If you want to generate an output file in isdb format, use the<br />

following configuration command:<br />

set_print_format for=isdb<br />

This section briefly describes how to use turboWave. See the<br />

turboWave User Manual or access Help in turboWave for more<br />

information.<br />

To use turboWave as a stand-alone utility:<br />

1 Type: % turbowave &<br />

2 Click on File, then choose Open from the slider menu to load<br />

simulation result file(s).<br />

3 Click Add, then Apply or OK in the signal browser to<br />

display waveforms.<br />

4 Use the browser to add and apply signals.


Vector Translation Utilities 287<br />

5 To display waveforms while running a simulation, add the<br />

following line to your <strong>EPIC</strong> configuration file:<br />

set_print_filter turboWave -i<br />

If you want to generate an output file in fsdb format, use the<br />

following configuration command:<br />

set_print_format for=fsdb<br />

Vector Translation Utilities<br />

Vcd2e Utility<br />

The two vector translation utilities available in <strong>EPIC</strong> tools are<br />

vcd2e and VTRAN. The <strong>EPIC</strong> vcd2e utility reads a file in<br />

Verilog's Value Change Dump (VCD) format and produces a new<br />

file in <strong>EPIC</strong> vector format. The vcd2e utility is described in<br />

detail in the following sections.<br />

VTRAN is an OEM program. It loads the state/time information<br />

of logic stimulus, results, or other data sources contained in a<br />

file. It then processes this data, and formats it for a selected<br />

target simulator into a second file, called the Target Vector File<br />

(TVF). For information on VTRAN, see the VTRAN User Manual.<br />

Each of these utilities requires an additional license.<br />

The vcd2e utility can be executed in batch mode or interactively<br />

using a graphical user interface. In either case, you must<br />

generate a signal file that lists the signals to be converted as<br />

well as their directions.<br />

Even in batch mode, you can group or split buses and specify<br />

control information for bedirectional signals. The advantage of<br />

using the GUI is the ability it gives you to browse the VCD file<br />

hierarchy.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


288 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Command Syntax<br />

vcd2e<br />

Command-line Options<br />

[-b]<br />

[-v Verilog_VCD_file]<br />

[-s filename]<br />

[-o prefix]<br />

[-t]<br />

[-r]<br />

[-h]<br />

[-x]<br />

The command-line options for the vcd2e command are:<br />

-b Invokes batch mode. If you run vcd2e in batch mode, the -<br />

v, -s, and -o options are required.<br />

NOTE: If you specify vcd2e without the -b option, the <strong>EPIC</strong><br />

interface appears.<br />

-h Invokes help information.<br />

-v Verilog_VCD_file<br />

Specifies a Verilog VCD file.<br />

-r Restores the state time segment, in nanoseconds, to split a<br />

large VCD file.<br />

-s filename<br />

Specifies a vcd2e signal definition file. This file contains a<br />

list of the signals in the VCD file to be translated to <strong>EPIC</strong><br />

format.<br />

-t Saves the state time segment, in nanoseconds, to split a<br />

large VCD file.<br />

-o<br />

prefix<br />

Specifies an output file prefix.


Vector Translation Utilities 289<br />

-x New bus notation, or bus expansion character. This option<br />

allows you to change the bus notation from the original<br />

Verilog VCD file or to expand the bus.<br />

For example, if the Verilog VCD file refers to a bus A[0:3],<br />

and you add -x “”, the resulting <strong>EPIC</strong> vector file will<br />

refer to the bus as A.<br />

The same option can be used to split a bus into single bits.<br />

If the argument does not specify parentheses-characterclose-parentheses,<br />

it is assumed to be a bus-splitting<br />

character.<br />

For example, if the Verilog VCD file refers to a bus A[0:3];<br />

and you specify the -x _ option, the resulting <strong>EPIC</strong> vector<br />

file will refer to the bus as A_0_, A_1_, A_2_,A_3_.<br />

Vcd2e Window Layout<br />

The vcd2e window layout is divided into six areas: menu bar,<br />

current scope, design instance browser, signal in current scope,<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


290 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Menu bar<br />

Current scope<br />

Signal in current<br />

scope<br />

Design instance<br />

browser<br />

command buttons, and selected signals list. Figure 6 shows an<br />

example of the vcd2e window.<br />

Figure 6 vcd2e window<br />

Command<br />

buttons<br />

Selected<br />

signal list


Vector Translation Utilities 291<br />

Menu Bar<br />

The File menu is the only menu on the menu bar. Figure 2 shows<br />

the options on the File pulldown menu.<br />

Figure 7 File menu options<br />

The File menu options are:<br />

■ Load VCD file: Select a Verilog VCD file and load it into the<br />

vcd2e environment.<br />

■ Load Signal file: Select a signal definition file and load it<br />

into the vcd2e environment. You must follow the Signal file<br />

format syntax. (See “Signal Save File Format” on page 294.)<br />

■ Save Signal file: Save the current selected signals and their<br />

parameters to a file. You can load this file into the vcd2e<br />

environment in the next run by selecting the Load Signal<br />

file option from the File menu.<br />

■ Quit: Quit the vcd2e environment.<br />

NOTE: The VCD file must be loaded first, followed by the signal file. You<br />

can only do this once per session.<br />

Current Scope Message Area<br />

This area displays the hierarchical path of the selected instance.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


292 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

Design Instance Browser<br />

This area displays the instances in the current selected scope.<br />

You can browse the hierarchical design by double-clicking the<br />

instance in this area with the left mouse button.<br />

Signals in Current Scope<br />

This area shows the signals in the current selected scope. You<br />

are allowed to select signals from this area to build the <strong>EPIC</strong><br />

vector.<br />

Command Buttons<br />

The following command buttons appear on the vcd2e window:<br />

■ Add: Adds the selected signals from the Signals in<br />

Current Scope list to the Selected Signals List.<br />

■ Add All: Adds all signals from the Signals in Current<br />

Scope list to the Selected Signal List.<br />

■ Delete: Deletes the selected signals from the Selected<br />

Signals List area.<br />

■ Delete All: Deletes all signals from the Selected Signals<br />

List area.<br />

■ Create Bus: Creates a bus for the signal selected in the<br />

Selected Signal List area.<br />

The vcd2e utility bus output is no longer exclusively written<br />

in single bits in the .vec/.vec_chk.cmd/.cmd_chk vector files.<br />

The type of bus output of the vcd2e utility depends on the<br />

following factors:<br />

◆ If you define your bus in single bits in the signal file, the<br />

output files list the bits individually, and they are<br />

assigned binary values<br />

◆ If you define your bus as a bus, which must be a multiple<br />

of four, the output files define the bus as a “single signal,”<br />

and the values are written out in hexadecimal


Vector Translation Utilities 293<br />

NOTE: If some of the bits of the buses are X or Z, the<br />

following rules apply:<br />

◆ If one of the bits is X, the hex value is X<br />

◆ If one of the bits is Z (and none of the other bits is X), the<br />

nex value is Z<br />

■ Direction: Specifies the signal directions: input, output, or<br />

biput. By default, all the selected signals are assumed to be<br />

inputs. The signal directionality is not contained in the VCD<br />

file, and must be assigned by you.<br />

■ Time Segment: Breaks the vectors into multiple files. Click<br />

this button to select one of the following options: Save State<br />

Time and Restore State Time.<br />

■ Upper Case: Changes the signals in the VCD file to<br />

uppercase.<br />

■ Lower Case: Changes the signals in the VCD file to<br />

lowercase.<br />

■ No Change: Specifies that the case of the signals in the VCD<br />

file is to remain unchanged.<br />

■ Expand Bus: Expands the bus for the signal selected in the<br />

Selected Signal List area.<br />

■ Build Stimulus: Builds the <strong>EPIC</strong> vector file with the<br />

information in the Selected Signals List. Figure 8 shows<br />

an example of the Bidirectional Signal Specification window.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


294 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

For further information about control signal expression, see<br />

the “Signal Save File Format” on page 294.<br />

Figure 8 Bidirectional Signal Specification window<br />

Selected Signal List<br />

This window displays the signals used to generate the <strong>EPIC</strong><br />

vectors.<br />

Signal Save File Format<br />

Use the vcd2e signal file if you already know which signals are<br />

included, as well as their attributes. The syntax for the signal<br />

file is:<br />

signal_name signal_direction input_default output_default<br />

control_expression


These variables are:<br />

Vector Translation Utilities 295<br />

signal_name Signals in the VCD file.<br />

signal_direction Either I (input), O (output), or B<br />

(biput).<br />

input_default If signal_direction is B, when it is<br />

an output, an input_default is<br />

needed to find the input version<br />

value with the control information<br />

defined in control_expression.<br />

Values can be X, U, or Z.<br />

output_default If signal_direction is B, when it is<br />

an output, an output_default is<br />

needed to find the output version<br />

value with the control information<br />

in control_expression. Values can<br />

be X, U, or Z.<br />

control_expression If signal_direction is B, a<br />

control_expression is needed to<br />

separate input from output state on<br />

biput signals. And if a bidirectional<br />

control signal is not at the same<br />

level of hierarchy as the<br />

bidirectional signal, you must enter<br />

the full path to the control signal.<br />

EXAMPLE 1:<br />

in@(ctrl=1)<br />

This is an example of a control expression. It shows that<br />

signal_name contains input data because ctrl is logic 1.<br />

Otherwise, it contains output data.<br />

NOTE: You cannot have spaces in the expression, and you must enclose<br />

expressions within parentheses.<br />

EXAMPLE 2:<br />

r_wbI<br />

ram_enbI<br />

data[3:0]B Z X in@(r_wb)<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


296 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

adr[2]I<br />

adr[1]I<br />

adr[0]I<br />

SEE ALSO:<br />

Batch Mode<br />

Translating a File<br />

The basic steps for translating a VCD file into <strong>EPIC</strong> vector<br />

format are:<br />

1 Select Load VCD file from the File menu and choose the<br />

name of the VCD file you want to translate.<br />

2 Select the signals required for the simulation. You can do<br />

this in either of two ways:<br />

◆ Select Load Signal file from the File menu, then select<br />

the required signals from the Signals in Current<br />

Scope list. Click the Add command button after<br />

selecting each signal, or click Add All or Delete. The<br />

names of the signals you selected will appear in the<br />

Selected Signals list.<br />

◆ Select Save Signal file from the File menu, and create<br />

a signal file containing all the selected signals and their<br />

attributes. This method works best if you are simulating<br />

a large design because you do not have to manually select<br />

a long series of signals from the Signals in Current<br />

Scope list.<br />

3 Make any necessary changes to the signals in the Selected<br />

Signal List. You can make these changes as follows:<br />

◆ Change signal directionality (Input/Output/<br />

Bidirectional) by selecting the signal, clicking the<br />

Direction command button, and selecting the<br />

appropriate direction.


Vector Translation Utilities 297<br />

◆ Change the signal case by clicking the Case command<br />

button. The <strong>EPIC</strong> tools are case-sensitive, so it may be<br />

necessary to modify the case of the signals in the VCD file<br />

so that they match those in the netlist.<br />

◆ Create and split buses by clicking the Create Bus<br />

command button. This will make the buses compatible<br />

with the netlist you intend to use for the simulation.<br />

4 Click the Build Stimulus command button to generate the<br />

<strong>EPIC</strong> vector file. You need to specify the file prefix. If the<br />

VCD file contains bidirectional signals, you are prompted for<br />

the control logic expressions to determine when the signal is<br />

an input and when it is an output.<br />

The following <strong>EPIC</strong> vector files are generated:<br />

xxx.vec<br />

<strong>EPIC</strong> vector file that contains vectors for all inputs and<br />

bidirectional signals when they are inputs.<br />

xxx.cmd<br />

<strong>EPIC</strong> netlist file used to instantiate the xxx.vec file.<br />

xxx.vec_chk<br />

<strong>EPIC</strong> vector file that contains all the output signals, as<br />

well as bidirectionals when they are outputs.<br />

xxx.cmd_chk<br />

<strong>EPIC</strong> netlist file used to instantiate the xxx.vec_chk file.<br />

The vcd2e utility bus output is no longer exclusively written in<br />

single bits in the .vec/.vec_chk.cmd/.cmd_chk.<br />

The type of bus output of the vcd2e utility depends on the<br />

following factors:<br />

■ If you define your bus in single bits in the signal file, the<br />

output files list the bits individually, and they are assigned<br />

binary values.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


298 Chapter 7 Utilities for Dynamic <strong>EPIC</strong> <strong>Tools</strong><br />

■ If you define your bus as a bus, which must be a multiple of<br />

four, the output files define the bus as a “single signal,” and<br />

the values are written out in hexadecimal.<br />

Batch Mode<br />

You can run vcd2e in batch mode. The syntax for running in<br />

batch mode is:<br />

vcd2e -b -v vcd_file -s signal_file -o epic_output_file_prefix<br />

In vcd2e batch mode, you can also specify strobes in the signal<br />

file. Specify the strobe cycle time, and two strobe points within<br />

that cycle time for any desired output and/or bidirectional pin.<br />

Strobing works only when running in batch mode. Even if you<br />

load a signal file that contains strobes graphically, they are<br />

ignored. There is no way to specify strobes from the <strong>EPIC</strong> user<br />

interface. Strobing only works if the signals you specify are<br />

output or bidirectional. If you specify strobes on input signals,<br />

those strobes will be ignored.<br />

SYNTAX:<br />

signal_name signal_direction [input_default] [output_default]<br />

cycle_time strobe1 strobe2<br />

EXAMPLE 1:<br />

out1 O 100 80 80<br />

NOTE: In the previous example, if you want to choose only<br />

one strobe point, you must enter the value twice.<br />

EXAMPLE 2:<br />

bidi1 B in@(out=0) 80 60 50


Appendix A<br />

Customization<br />

Customizing <strong>EPIC</strong> <strong>Tools</strong><br />

The information in this appendix shows you how to set your<br />

environment to run a customized version of the tool. It also<br />

shows you how to customize <strong>EPIC</strong> tools by modifying some of the<br />

internal calculations they perform.<br />

You can customize <strong>EPIC</strong> tools to work in your environment,<br />

either for your own use or for all users at your site.<br />

The following steps show you how to customize the <strong>EPIC</strong> tools<br />

both for your own use and for use by others at your site.<br />

1 Copy the customize.c source code file from the release<br />

directory using the following command:<br />

cp $<strong>EPIC</strong>_HOME//lib/customize.c<br />

your_dir/customize.c


300 Customization<br />

If you use TimeMill or PowerMill, please see the example in<br />

$<strong>EPIC</strong>_HOME/examples/timemill_api/customize or<br />

$<strong>EPIC</strong>_HOME/examples/powermill_api/customize, and<br />

copy customize.c from the example directory.<br />

2 Edit the customize.c file as required.<br />

3 You can include the modified customize.c file by adding the<br />

following syntax to the .epicrc file in the run directory.<br />

toolname:user_obj_modules_force:customize.c<br />

A shared library, libCustom.so.1.0, is created in your current<br />

working directory during the simulation. When you are sure<br />

the customized version is correct, copy libCustom.so.1.0 to a<br />

permanent directory.<br />

4 If you want to use your customized version every time you<br />

run an <strong>EPIC</strong> tool, you can use one of the following methods:<br />

◆ Add the following line to your $HOME/.epicrc file:<br />

toolname:user_libraries:your_lib_path<br />

libCustom.so.1.0<br />

The toolname can be PathMill, PowerMill, RailMill, or<br />

TimeMill. If you want all users of this <strong>EPIC</strong> installation<br />

to use your customization, add the above line to<br />

$<strong>EPIC</strong>_HOME/PLATFORM_OS/lib/.epicrc.<br />

◆ Add the -U customize.c option to the command line<br />

when starting the simulator.<br />

This will create the libCustom library in your working<br />

directory.<br />

NOTE: After installing <strong>EPIC</strong> software updates, be sure to recompile the<br />

custom library libCustom.so.1.0. The exact name of the custom<br />

library varies from one platform to another.


Library names for supported platforms are:<br />

■ libCustom.so.1.0 (SUN SunOS)<br />

■ libCustom.s1 (HP HPUX)<br />

■ libCustom.o (IBM AIX)<br />

■ libCustom.so (DEC Alpha)<br />

■ libCustom.a (other platforms)<br />

Customizing <strong>EPIC</strong> <strong>Tools</strong> 301<br />

Three functions in the customize.c file need special attention for<br />

a pre-layout case. A pre-layout case is any case where you do not<br />

specify in your netlists any of the MOS geometry values ad, as,<br />

pd, ps, nrd, and nrs. The three functions are:<br />

■ calculateDiffArea() which returns ad or as<br />

■ calculateDiffPerimeter() which returns pd or ps<br />

■ calculateNRSH() which returns nrd or nrs<br />

These functions match the default geometry values of a prelayout<br />

case to your SPICE. You need to make sure they match<br />

your SPICE defaults; otherwise, an accuracy problem might<br />

arise when using <strong>EPIC</strong> <strong>Tools</strong> on a pre-layout netlist.<br />

NOTE: When compiling these functions on an HP machine, you must use<br />

the -z option to generate position independent code (PIC). This<br />

option is not supplied as part of the standard HP-UX operating<br />

system, but must be purchased as a separate product. If you try<br />

to compile without this option, you might get an error message,<br />

such as:<br />

cc: warning 422: Unknown option "c" ignored.<br />

Building libCustom.sl....<br />

ld: DP-Relative Cide in file ./customize.o - Shared<br />

Library must be Position-Independent<br />

Each of the three functions has three leading arguments in its<br />

parameter list: acm, w, and l.<br />

The w argument is the effective width, Weff, which is calculated<br />

by and passed from <strong>EPIC</strong> tools as:<br />

Weff = Wdrawn * wmlt - 2 * wdiff<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


302 Customization<br />

The l argument is actually the effective diffusion extension<br />

length diffext, eff (or ds_length,eff), which is calculated by and<br />

passed from <strong>EPIC</strong> tools as:<br />

diffext,eff = diffext * wmlt<br />

The acm argument if the integer acm value in the technology file<br />

data line:<br />

acm value SPICE_name<br />

For HSPICE, the acm value is 0, 1, 2, or 3, which represents the<br />

physical Area Calculation Method. The three functions are<br />

already set up to return the correct default geometry values for<br />

HSPICE, so you don’t have to do anything for HSPICE.<br />

For other SPICE types, the acm value is used to distinguish its<br />

SPICE type, and the acm integer is borrowed for this purpose. A<br />

line of C code checks the SPICE type.<br />

EXAMPLE:<br />

if (acm == 22)<br />

Check the technology file for the acm value. If it is -1, your<br />

SPICE is not set up, and you should check and edit the three<br />

functions for a pre-layout circuit. If the acm value in the<br />

technology file is not -1 and the value appears in the three<br />

functions, the three functions are already set up for your SPICE.<br />

Customizing Wire Capacitance Estimate<br />

<strong>EPIC</strong> lets you modify the wire capacitance estimate, an internal<br />

TimeMill, PathMill, RailMill, and PowerMill calculation. The C<br />

source code containing the calculation is in the customize.c file.<br />

This module resides in the directory:<br />

$<strong>EPIC</strong>_HOME/ PLATFORM_OS/lib.<br />

To achieve a more accurate pre-layout timing analysis, you use<br />

the wire_cap_est command to automatically get estimated<br />

interconnect capacitances. When you specify the wire_cap_est


Customizing Wire Capacitance Estimate 303<br />

command in the configuration file, the<br />

estimateWireCapacitance function is called for each node in<br />

the design.<br />

The capacitance returned by the estimateWireCapacitance<br />

function is added to the capacitance already specified for each<br />

node.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


304 Customization<br />

The C function is shown in Figure 1.<br />

double<br />

estimateWireCapacitance (node_name, number_channel, number_gate,<br />

number_input, number_output, number_biput, max_pwl, max_nwl, widths)<br />

char *node_name;<br />

int number_channel, number_gate;<br />

int number_input, number_output, number_biput;<br />

int max_pwl, max_nwl, widths;<br />

{<br />

#define FANIN_CAP 2.0<br />

#define FANOUT_CAP 5.0<br />

return<br />

#undef FANIN_CAP<br />

#undef FANOUT_CAP<br />

}<br />

Figure 1 C function<br />

int fanin, fanout;<br />

float fanout_scale, cap;<br />

/* Treat channels as fanin’s and biputs as fanout’s */<br />

fanin = number_channel + number_output;<br />

fanout = number_gate + number_input + number_biput;<br />

/* Select a scaling factor based on number of fanout’s*/<br />

if (fanout >= 15)<br />

fanout_scale = 1.5;<br />

else if (fanout >= 5)<br />

fanout_scale = 1.2;<br />

else<br />

fanout_scale = 1.0;<br />

cap = fanin*FANIN_CAP+fanout*FANOUT_CAP*fanout_scale;<br />

The inputs are:<br />

Command Argument Definition<br />

node_name Name of the node<br />

number_channel Number of channel connected<br />

transistors connected to the node<br />

number_gate Number of gate connected<br />

transistors connected to the node<br />

number_input Number of functional model inputs<br />

connected to the node


Sample .err File<br />

Customizing Wire Capacitance Estimate 305<br />

Command Argument Definition<br />

number_output Number of functional model<br />

outputs connected to the node<br />

number_biput Number of functional model biputs<br />

connected to the node<br />

max_nwl Maximum N transistor W/L ratio<br />

driving the node<br />

max_pwl Maximum P transistor W/L ratio<br />

driving the node<br />

widths Sum of the total widths of the txs<br />

connected to this node (default unit<br />

is 0.01 μm)<br />

The output returns additional capacitance, in femtoFarads, to the<br />

node.<br />

The capacitance is given as a function of the fanins to a node and<br />

the fanouts from the node. The more fanins and fanouts that<br />

exist on a node, the higher the total interconnect capacitance is<br />

on the node. As well as adding this capacitance to each node, this<br />

example also prints the capacitance that was estimated for each<br />

node to a file called estimate.list.<br />

The following example shows a customized<br />

estimateWireCapacitance function. This example models<br />

interconnect capacitance prior to layout.<br />

/*for file access */<br />

#include <br />

#define FAN_IN_CAP 2.0 /* This is the estimated Capacitance<br />

in FF per fan in */<br />

#define FAN_OUT_CAP 5.0 /* This is the estimated Capacitance<br />

in FF per fan out */<br />

#define BAND_LIMIT1 0 /* These 3 constants define the bands<br />

where we apply */<br />

#define BAND_LIMIT2 5 /* a different fan out scaling factor<br />

depending on */<br />

#define BAND_LIMIT3 15 /* the number of fan outs */<br />

#define FAN_OUT_SCALE1 1.0 /* scale factor for the first band of<br />

fan outs */<br />

#define FAN_OUT_SCALE2 1.2 /* scale factor for the second band of<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


306 Customization<br />

fan outs */<br />

#define FAN_OUT_SCALE3 1.5 /* scale factor for the third band of<br />

fan outs */<br />

double estimateWireCapacitance(node_name,number_channel,<br />

number_gate,number_input,number_output,number_biput,<br />

max_pwl,max_nwl)<br />

char *node_name;<br />

int number_channel, number_gate;<br />

int number_input, number_output, number_biput;<br />

int max_pwl, max_nwl;<br />

{<br />

/* max_pwl is the maximum width/length of the drive P MOS */<br />

/* max_nwl is the maximum width/length of the drive N MOS */<br />

float c; /* variable to hold the estimated capacitance */<br />

static FILE *cap_file = NULL; /* file ptr to file for writing<br />

capacitance estimates to */<br />

static short first_time = 1; /* flag set true for the first time<br />

this function is called */<br />

int fan_ins; /* Number of fan ins */<br />

int fan_outs; /* Number of fan outs */<br />

float fan_out_scale; /* Number used to scale the capacitance<br />

for fan outs */<br />

/* This is the first time this function is called. Open the file for writing. */<br />

if (first_time)<br />

if ((cap_file=fopen (”estimate.list”,”w”))==NULL)<br />

/* If unable to open file print an error message */<br />

fprintf (stderr,”estimateWireCapacitance: Unable to"<br />

"open file’estimate.list’\n”);<br />

/* Set first time to false */<br />

first_time = 0;<br />

/* The number of fanouts is given as the number of gate connects plus the number of<br />

inputs. Inputs are defined as ‘inputs’ to a gate i.e., fanouts to the node. In this<br />

example, biputs are<br />

treated as fanouts */<br />

fan_outs = number_gate + number_input + number_biput;<br />

fan_ins = number_output + number_biput + number_channel;<br />

/* We scale the capacitance estimated for the fanouts based on the number of fanouts */<br />

if ((fan_outs >= BAND_LIMIT1) && (fan_outs < BAND_LIMIT2))<br />

fan_out_scale = FAN_OUT_SCALE1;<br />

else<br />

if ((fan_outs >= BAND_LIMIT2) && (fan_outs < BAND_LIMIT3))<br />

fan_out_scale = FAN_OUT_SCALE2;<br />

else<br />

/* if (fan_outs >= BAND_LIMIT3) */<br />

fan_out_scale = FAN_OUT_SCALE3;<br />

/* Capacitance estimate is based on fan ins and fan outs */<br />

c = (fan_ins * FAN_IN_CAP) + (fan_outs * FAN_OUT_CAP *<br />

fan_out_scale);<br />

/* Print the estimates into a file for checking purposes */<br />

/* The output format of this file is the same as accepted by all <strong>EPIC</strong> products. It<br />

could thus also be used by PathMill and PowerMill or TimeMill (when the wire estimator<br />

is turned off) */


Customizing Wire Capacitance Estimate 307<br />

if (cap_file != NULL)<br />

fprintf(cap_file,”node_capacitance %s %d\n”,node_name,(int)c);<br />

/* Return the estimated capacitance */<br />

return(c);<br />

}<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


308 Customization<br />

epic_delay<br />

SYNTAX:<br />

double<br />

epic_delay (intrinsic, drive, slope_factor, slope, loading)<br />

int intrinsic, drive, slope, loading;<br />

double slope_factor;<br />

{<br />

return (int) (intrinsic + (slope_factor * slope) + le-4<br />

* drive * loading);<br />

DESCRIPTION:<br />

This function returns a total delay that is a function of 1) the<br />

intrinsic delay, 2) the output loading times drive resistance, and<br />

3) the input slope times a slope effect coefficient.<br />

Command Argument Definition<br />

intrinsic Intrinsic delay of the gate in .01 ns<br />

units (int)<br />

drive Drive resistance of the output node<br />

in ohms (int)<br />

slope_factor Input slope coefficient (float)<br />

slope Input slope that is returned from<br />

fget_input_slope or<br />

fget_bi_slope in .01 ns (int)<br />

loading Output load that is returned from<br />

fget_out_load or fget_bi_load in<br />

fF (int)<br />

The input parameters are used in the following calculation to<br />

produce the delay:<br />

delay = int_d + (r*c_load)/10000 +<br />

(k_slope * slope + .05)<br />

The delay is returned as an int and is in units of 0.01 ns.


epic_slope<br />

SYNTAX:<br />

Customizing Wire Capacitance Estimate 309<br />

double<br />

epic_slope (intrinsic, drive, loading)<br />

int intrinsic, drive, loading;<br />

{<br />

return intrinsic + le-4 * drive * loading);<br />

DESCRIPTION:<br />

This function returns the output slope as a function of 1) the<br />

intrinsic slope delay, and 2) the output loading times slope drive<br />

resistance.<br />

Command Argument Definition<br />

intrinsic Intrinsic slope of delay in .01 ns<br />

units (int).<br />

drive Slope drive resistance of the output<br />

node in ohms (int).<br />

loading Output load that is returned from<br />

fget_out_load or fget_bi_load in<br />

fF (int).<br />

The input parameters are used in the following calculation to<br />

produce the slope:<br />

slope = int_d + (r*c_load)/10000<br />

The slope is returned as an int in units of 0.01 nanoseconds.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


310 Customization


The .out File<br />

Appendix B<br />

Output Files<br />

This appendix contains information about files that result from<br />

dynamic simulation processing, including a sample file of each<br />

file type. The files types are:<br />

■ .out<br />

■ .act<br />

■ .nact<br />

■ .nodealias<br />

The .out file contains simulation output information for logic<br />

states, voltage, and current. The .out file format can be<br />

controlled using the set_print_format configuration command.<br />

The .out file is divided into three sections:<br />

■ Header section: This section contains the output format<br />

version number, copyright, and the time and date the file was<br />

generated.


312 Output Files<br />

Line Format<br />

Null<br />

■ Definition section: This section defines units used in the<br />

.out file, the mapping between signal index and signal name,<br />

bus notation, and so on.<br />

■ Data section: This final section in the .out file lists all the<br />

requested signal values.<br />

The output file uses line-oriented syntax. The lines can be<br />

classified according to the first character in the line:<br />

■ null (blank line)<br />

■ ; (semicolon)<br />

■ . (period)<br />

■ a number<br />

A blank line can appear anywhere and is ignored by the<br />

waveform display tools. It can contain spaces and tabs.<br />

Semicolon Lines<br />

A semicolon at the beginning of a line indicates that the line is a<br />

header, trailer, information, or comment line. Header and trailer<br />

lines are used by some waveform display tools to check file<br />

integrity. The first line in the file starts with a semicolon and<br />

specifies the output format version.<br />

The semicolon lines, except for comment lines, the end-of-file<br />

indicator, and the trailer line, can appear only in the header<br />

section. A comment line can appear anywhere.<br />

The voltage output of PowerMill and TimeMill is piecewiselinear.<br />

Two voltages in the same timestamp indicate a voltage<br />

transient that occurs too quickly to be resolved given the .out file<br />

time resolution.


Period Lines<br />

Keywords<br />

The .out File 313<br />

Lines that begin with a period (.) contain keywords followed by<br />

related values.<br />

All of the keywords, except for index, can be used only in the<br />

definition section. The index lines may appear in the data section<br />

in addition to the definition section. The keywords and<br />

associated values are defined in the following table:<br />

Keyword and Value Definition<br />

vdd vdd_value Specifies the power supply<br />

voltage.<br />

time_resolution time_unit Specifies the time unit<br />

(nanoseconds).<br />

current_resolution cur_unit Specifies the current unit<br />

(Amperes).<br />

voltage_resolution vol_unit Specifies the voltage unit<br />

(volts).<br />

math_resolution math_unit Used only in version 5.1<br />

output_format, which specifies<br />

the scaling factor for all math<br />

signals so that signal value<br />

times math_unit returns the<br />

real value for a math signal.<br />

In version 5.3 output_format, if<br />

the SPICE math expression is<br />

evaluated to a voltage value or a<br />

current value, the signal will be<br />

printed to the .out file as a<br />

voltage signal or a current<br />

signal, respectively. Otherwise,<br />

the MKS standard units will be<br />

used (for example, wattage will<br />

be in watts (volt*ampere).<br />

high_threshold vol_thresh Specifies the high threshold<br />

voltage.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


314 Output Files<br />

Keyword and Value Definition<br />

low_threshold vol_thresh Specifies the low threshold<br />

voltage.<br />

nnodes number_of_nodes Specifies the number of nodes.<br />

neems number_of_elems Specifies the number of<br />

elements.<br />

extra_nodes<br />

Total extra power node number.<br />

number_of_extra_nodes<br />

bus_notation o s c Specifies the bus name<br />

delimiters; o is the opening bus<br />

delimiter, s is the separator, and<br />

c is the closing delimiter.<br />

hier_separator<br />

hier_separator<br />

Specifies the hierarchical<br />

separation character.<br />

case case_symbol Specifies if the node or element<br />

names are case-sensitive (S),<br />

lowercase (L), or uppercase (U).<br />

index name_index_pair<br />

signal_attribute<br />

Specifies the index for a name,<br />

followed by the signal attribute.<br />

Note: The complete format for<br />

index immediately follows this<br />

table.<br />

bio new_name <strong>EPIC</strong>_name Replaces <strong>EPIC</strong>_name with<br />

new_name in ndisplay or other<br />

output display program.<br />

oct bus_name <strong>EPIC</strong>_name3<br />

<strong>EPIC</strong>_name2 <strong>EPIC</strong>_name1<br />

Specifies a bus name for a group<br />

of three signals. <strong>EPIC</strong>_name3 is<br />

the most significant bit, and<br />

<strong>EPIC</strong>_name1 is the least<br />

significant bit.


Keyword and Value Definition<br />

hex bus_name <strong>EPIC</strong>_name4<br />

<strong>EPIC</strong>_name3 <strong>EPIC</strong>_name2<br />

<strong>EPIC</strong>_name1<br />

big new_group_name<br />

<strong>EPIC</strong>_name1<br />

<strong>EPIC</strong>_name2 ...<br />

The .out File 315<br />

The following syntax shows the complete format for the keyword<br />

index.<br />

SYNTAX:<br />

Specifies a bus name for a group<br />

of four signals. <strong>EPIC</strong>_name4 is<br />

the most significant bit, and<br />

<strong>EPIC</strong>_name1 is the least<br />

significant bit.<br />

Prints a caption with<br />

new_group_name for the group<br />

of <strong>EPIC</strong>_name signals (used<br />

only in ndisplay output).<br />

name_index_pair ::= name index;<br />

index ::= integer;<br />

name ::= <strong>EPIC</strong>_name |<br />

v (<strong>EPIC</strong>_name) |<br />

i (<strong>EPIC</strong>_name) |<br />

I (<strong>EPIC</strong>_name) |<br />

I_rms (<strong>EPIC</strong>_name) |<br />

di/dt (<strong>EPIC</strong>_name) |<br />

i# (<strong>EPIC</strong>_name) |<br />

I# (<strong>EPIC</strong>_name) |<br />

I_rms# (<strong>EPIC</strong>_name)|<br />

di/dt# (<strong>EPIC</strong>_name) |<br />

m (<strong>EPIC</strong>_name) |<br />

<strong>EPIC</strong>_name::=<strong>EPIC</strong> valid element or node name<br />

#::= integer giving valid <strong>EPIC</strong> element branch index (1, 2, 3, 4,<br />

or 5).<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


316 Output Files<br />

The signal attributes are defined as follows:<br />

Signal Attribute Definition<br />

v Analog voltage (PWL/voltage resolution).<br />

i Instantaneous current (PWC/current<br />

resolution).<br />

I Average current (PWL/current resolution).<br />

I_rms rms current (PWL//current resolution).<br />

di/dt Current change rate (PWC/current<br />

resolution).<br />

l Logic state number with a value between 0<br />

and 10.<br />

m Mathematical signal (PWL/math<br />

resolution).<br />

M Average mathematical signal (PWL / MKS<br />

resolution).<br />

M_rms RMS mathematical signal (PWL / MKS<br />

resolution).<br />

dm/dt Mathematical signal change rate (PWL /<br />

MKS resolution).<br />

NOTE: In the previous table, PWL is defined as piecewise linear, and<br />

PWC is defined as piecewise constant.<br />

Lines Beginning with Numbers<br />

Lines beginning with numbers represent either times or values.<br />

Single integer line: The number on this line represents a time.<br />

The unit of time is based on the resolution specified by the<br />

time_resolution keyword. When a time line appears, it defines a<br />

new time section in which all the value lines that appear after<br />

the time line but before the next time line give the signal values<br />

at the current time. Time lines must appear in ascending order.<br />

The last time line in the file is used by the display tool to<br />

determine the length of simulation time.


The .out File 317<br />

Double integer line: A line with two integers is a value line.<br />

The numbers represent index and value.<br />

For nodes whose logic states are printed, value is defined as:<br />

value ::= logic_state_number |signal_value<br />

signal_value ::= integer<br />

where integer is voltage/current/derived output.<br />

The logic state numbers and their corresponding characters are<br />

defined in the following table. (See “Logic States” on page 248.)<br />

Logic State<br />

Number<br />

Character Definition<br />

0 ‘0’ logic ZERO (strong drive)<br />

1 ‘1’ logic ONE (strong drive)<br />

2 ‘U’ logic UNDEF (strong drive)<br />

3 ‘L’ logic ZERO (high impedance drive)<br />

4 ‘H’ logic ONE (high impedance drive)<br />

5 “Z” logic UNDEF (high impedance drive)<br />

6 ‘N’ logic ZERO (biput driven by circuit)<br />

7 ‘T’ logic ONE (biput driven by circuit)<br />

8 ‘Y’ logic UNDEF (biput driven by circuit)<br />

9 ‘?’ logic UNSET (not initialized nor set during<br />

simulation)<br />

10 ‘X’ logic DON’T CARE (can be any state)<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


318 Output Files<br />

Sample Output File for TimeMill<br />

;! output_format 5.3<br />

; header 306719985<br />

; --------------------------------------------------------<br />

;| |<br />

;| TimeMill Version 5.4_Release |<br />

;| SN: P121598-SunOS_5 |<br />

;| Copyright (c) 2000 Synopsys Inc., All Rights Reserved. |<br />

;| |<br />

; --------------------------------------------------------<br />

;<br />

;<br />

.vdd 3.3<br />

.time_resolution 0.1<br />

.current_resolution 1e-06<br />

.voltage_resolution 0.01<br />

;tentative simulation_time 50<br />

.high_threshold 2.31<br />

.low_threshold 0.99<br />

.nnodes 75<br />

.nelems 243<br />

.extra_nodes 0<br />

.bus_notation [ - ]<br />

.hier_separator .<br />

.case L<br />

.index v(g7) 1456 v<br />

.index g7 1457 l<br />

.index m(vfunc1) 1950 m<br />

.index M(vfunc2) 1976 M<br />

.index dm/dt(vfunc3) 2002 dm/dt<br />

.index M_rms(vfunc4) 2028 M_rms<br />

0<br />

1456 330<br />

1457 1<br />

2028 10.89<br />

2002 -200<br />

1976 0.00013464<br />

1950 0.00013464<br />

0<br />

2028 10.89<br />

2028 14.19<br />

5<br />

2028 14.19<br />

2028 3.3<br />

2002 -200<br />

2002 130<br />

1976 0.00013464<br />

1976 9.9e-07<br />

1950 0.00013464<br />

1950 0.00016896<br />

10<br />

2028 3.3<br />

2028 3.3<br />

1950 0.00016896<br />

1950 3.597e-05<br />

20<br />

2028 3.3<br />

2028 0<br />

25<br />

2028 0<br />

2028 -10.89


1976 9.9e-07<br />

1976 0.00013563<br />

1950 3.597e-05<br />

1950 3.762e-05<br />

29<br />

1456 330<br />

30<br />

1456 330<br />

2028 -10.89<br />

2028 3.3<br />

1976 0.00013563<br />

1976 9.9e-07<br />

1950 3.762e-05<br />

1950 3.597e-05<br />

31<br />

1456 313<br />

1456 274<br />

32<br />

1456 189<br />

1457 2<br />

33<br />

1456 81<br />

1456 0<br />

1457 0<br />

34<br />

1456 3<br />

35<br />

1456 2<br />

2028 3.3<br />

2028 3.3<br />

2002 130<br />

2002 -200<br />

1976 9.9e-07<br />

1976 0<br />

1950 3.597e-05<br />

1950 0<br />

39<br />

1456 0<br />

40<br />

2028 3.3<br />

2028 3.3<br />

1950 0<br />

1950 0.00013299<br />

49<br />

1456 0<br />

50<br />

1456 0<br />

1457 0<br />

2028 3.3<br />

2002 -200<br />

1976 0<br />

1950 0.00013299<br />

; file closed at 5.000000ns<br />

; trailer 823484657<br />

The .out File 319<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


320 Output Files<br />

Sample Output File for PowerMill<br />

;! output_format 5.3<br />

; header 306529706<br />

; --------------------------------------------------------<br />

;| |<br />

;| PowerMill Version 5.4_Release |<br />

;| SN: P121498-SunOS_5 |<br />

;| Copyright (c) 2000 Synopsys Inc., All Rights Reserved. |<br />

;| |<br />

; --------------------------------------------------------<br />

;<br />

;<br />

.vdd 3.3<br />

.time_resolution 0.1<br />

.current_resolution 1e-06<br />

.voltage_resolution 0.01<br />

; tentative simulation_time 50<br />

.high_threshold 2.31<br />

.low_threshold 0.99<br />

.nnodes 75<br />

.nelems 243<br />

.extra_nodes 0<br />

.bus_notation [ - ]<br />

.hier_separator .<br />

.case L<br />

.index v(g7) 1456 v<br />

.index g7 1457 l<br />

.index i(g7) 1458 i<br />

.index I(g7) 1459 I<br />

.index I_rms(g7) 1460 I_rms<br />

.index di/dt(g7) 1461 di/dt<br />

.index m(power_flow) 1950 m<br />

.index M(power_flow) 1976 M<br />

.index dm/dt(power_flow) 2002 dm/dt<br />

.index M_rms(power_flow) 2028 M_rms<br />

.index i1(x11.xi9.xn8.mxn0) 2034 i<br />

.index I2(x11.xi9.xn8.mxn0) 2040 I<br />

.index I_rms3(x11.xi9.xn8.mxn0) 2046 I_rms<br />

.index di/dt4(x11.xi9.xn8.mxn0) 2052 di/dt<br />

.index di/dt5(x11.xi9.xn8.mxn0) 2053 di/dt<br />

0<br />

1456 330<br />

1457 1<br />

2052 0<br />

2053 0<br />

2034 0<br />

2046 0<br />

2040 0<br />

1458 0<br />

1461 0<br />

1459 0<br />

1460 0<br />

2028 0.00033<br />

2028 0.00033<br />

2002 -200<br />

2002 -200<br />

1976 0.00013464<br />

1976 0.00013464<br />

1950 0.00013464<br />

1950 0.00013464


0<br />

1950 0.00013464<br />

1950 0.00013464<br />

5<br />

2052 -53<br />

2034 268<br />

2028 0.00033<br />

2028 0.00088539<br />

2002 -200<br />

2002 130<br />

1976 0.00013464<br />

1976 9.9e-07<br />

1950 0.00013464<br />

1950 0.00016896<br />

6<br />

2052 214<br />

2034 54<br />

2028 0.00088539<br />

2028 0.00017919<br />

1976 9.9e-07<br />

1976 9.9e-07<br />

7<br />

2052 48<br />

2034 6<br />

2028 0.00017919<br />

2028 2.079e-05<br />

1976 9.9e-07<br />

1976 9.9e-07<br />

10<br />

2052 2<br />

2034 0<br />

2028 2.079e-05<br />

2028 9.9e-07<br />

1976 9.9e-07<br />

1976 9.9e-07<br />

1950 0.00016896<br />

1950 3.597e-05<br />

20<br />

1950 3.597e-05<br />

1950 3.597e-05<br />

25<br />

2053 10<br />

2046 0<br />

2052 5<br />

2034 175<br />

2028 9.9e-07<br />

2028 0.00033099<br />

1976 9.9e-07<br />

1976 0.00013563<br />

1950 3.597e-05<br />

1950 3.762e-05<br />

26<br />

2053 -239<br />

2046 49<br />

2052 -72<br />

2034 8<br />

2028 0.00033099<br />

2028 0.00033099<br />

1976 0.00013563<br />

1976 0.00013563<br />

27<br />

2053 -10<br />

2046 48<br />

The .out File 321<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


322 Output Files<br />

2052 -3<br />

2034 0<br />

2028 0.00033099<br />

2028 0.00033099<br />

1976 0.00013563<br />

1976 0.00013563<br />

29<br />

1456 330<br />

2053 0<br />

2046 46<br />

1976 0.00013563<br />

1976 0.00013563<br />

30<br />

1456 330<br />

2052 -89<br />

2034 268<br />

1458 -394<br />

1461 -13<br />

1459 0<br />

1460 0<br />

2028 0.00033099<br />

2028 9.9e-07<br />

1976 0.00013563<br />

1976 9.9e-07<br />

1950 3.762e-05<br />

1950 3.597e-05<br />

31<br />

1456 313<br />

1456 274<br />

2052 214<br />

2034 54<br />

1458 -1430<br />

1461 -1036<br />

1459 -12<br />

1460 70<br />

2028 9.9e-07<br />

2028 9.9e-07<br />

1976 9.9e-07<br />

1976 9.9e-07<br />

32<br />

1456 189<br />

1457 2<br />

2052 48<br />

2034 6<br />

1458 -1587<br />

1461 -157<br />

1459 -57<br />

1460 262<br />

2028 9.9e-07<br />

2028 9.9e-07<br />

1976 9.9e-07<br />

1976 9.9e-07<br />

33<br />

1456 81<br />

1456 0<br />

1457 0<br />

1458 -141<br />

1461 1446<br />

1459 -103<br />

1460 378<br />

34<br />

1456 3<br />

1458 -84


1461 57<br />

1459 -104<br />

1460 373<br />

35<br />

1456 2<br />

2052 1<br />

2034 1<br />

1458 -26<br />

1461 58<br />

1459 -103<br />

1460 368<br />

2028 9.9e-07<br />

2028 0<br />

2002 130<br />

2002 -200<br />

1976 9.9e-07<br />

1976 0<br />

1950 3.597e-05<br />

1950 0<br />

39<br />

1456 0<br />

2052 0<br />

2034 0<br />

1458 0<br />

1461 6<br />

1459 -95<br />

1460 348<br />

2028 0<br />

2028 0<br />

1976 0<br />

1976 0<br />

40<br />

2028 0<br />

2028 0<br />

1976 0<br />

1976 0<br />

1950 0<br />

1950 0.00013299<br />

49<br />

1456 0<br />

50<br />

1456 0<br />

1457 0<br />

2028 0<br />

2002 -200<br />

1976 0<br />

1950 0.00013299<br />

51<br />

2053 0<br />

2052 0<br />

2046 35<br />

2040 0<br />

2034 0<br />

2028 -0<br />

2002 -0<br />

1976 -0<br />

1950 -0<br />

1458 0<br />

1461 0<br />

1459 -73<br />

1460 305<br />

; file closed at 5.000000ns<br />

; trailer 809437103<br />

The .out File 323<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


324 Output Files<br />

The .act File<br />

The simulation tool reports active nodes whose voltage changes<br />

exceed the user-defined threshold to the .act file. The .act file<br />

uses the Arcadia netlist format so that it can be read directly by<br />

Arcadia.<br />

The .act file is divided into three main sections:<br />

■ Header section: This section displays the name of the<br />

program generating the file, the time and date the file was<br />

generated, the output format version number, and copyright.<br />

;! act_file_format version_number<br />

The version number is updated only when a new .nact file<br />

format is released with the software.<br />

■ Simulation information section: This section displays the<br />

information used by the tool to postprocess the file. See the<br />

next section for a detailed description of this section.<br />

■ Active node information section: This section displays<br />

the total number of active nodes reported in the file.<br />

Simulation Information Section<br />

This section of the .act file is divided into several subsections,<br />

which can be one or many lines long. For example, one line<br />

provides the RC time constant unit, which you can change using<br />

the set_sim_unit configuration command.<br />

EXAMPLE:<br />

; The unit for RC time constants is ns.<br />

The next subsection reports the interval of time during which<br />

the inactive nodes are monitored.<br />

EXAMPLE:<br />

; The checking starts at 10.600000ns and ends at<br />

13.400000ns


Sample .act File<br />

The .act File 325<br />

The next subsection lists active nodes using the following<br />

syntax:<br />

EXAMPLE:<br />

node_name [cap_model] [reduction_model] [RC_constant];<br />

The possible values for cap_model and reduction_model are<br />

listed in the description of the report_node_active command.<br />

RC_constant is the RC time constant based on the node<br />

capacitance and the maximum resistance of the conducting path<br />

from the voltage source (or ground) to the node.<br />

This file lists active nodes reported by the report_node_active<br />

configuration command.<br />

;! act_file_format 5.3<br />

; --------------------------------------------------------<br />

;| |<br />

;| PowerMill Version 5.4_Release |<br />

;| SN: P101598-SunOS_5 |<br />

;| Copyright (c) 2000 Synopsys Inc., All Rights Reserved. |<br />

;| |<br />

; --------------------------------------------------------<br />

;;<br />

; Report active nodes in Arcadia netlist format.<br />

; The unit for RC time constants is ns.<br />

;<br />

; The checking starts at 10.600000ns and ends at 13.400000ns<br />

*schematic-net-name<br />

t1.C 21 awe ; 0.297<br />

t1.B 21 awe ; 0.252<br />

a 3 serial-parallel ; 0<br />

out 3 serial ; 0.126<br />

; number of active nodes reported in the file: 4<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


326 Output Files<br />

The .nact File<br />

Inactive Node Information<br />

The simulation tool reports to the .nact file inactive nodes whose<br />

voltage changes exceed the user-defined threshold.<br />

The .nact file is divided into two main sections:<br />

■ Header section: This section contains the name of the<br />

program generating the file, the time and date the file was<br />

generated, the output format version number, and copyright.<br />

;! inact_file_format version_number<br />

The version number is updated only when a new .nact file<br />

format is released with the software.<br />

■ Simulation information section: This section contains<br />

information used by various tools to do postprocessing on<br />

this file. See the next section for a detailed description of this<br />

section.<br />

■ Inactive node information section: This section displays<br />

a summary report of the inactive nodes detected. The report<br />

includes the total number of inactive nodes that were<br />

detected, and, of those, the number connected to an external<br />

source, and the number that were or were not in active<br />

stages.<br />

This section of the .nact file is divided into three subsections.<br />

The first subsection (a single line) reports the interval of time<br />

during which the inactive nodes are monitored.<br />

EXAMPLE:<br />

; The checking starts at 50.000000ns and ends at<br />

100.000000ns<br />

The second subsection lists inactive nodes that are not in active<br />

stages using the following syntax:<br />

config_cmd cmd_arguments_with_inactive_nodes


Sample .nact File<br />

The .nact File 327<br />

The third subsection lists inactive nodes that are in active stages<br />

using the following syntax:<br />

set_node_ic node_name ic_voltage<br />

This file reports inactive nodes with voltages that don’t change<br />

during the active node checking period. This file is generated by<br />

the inactive= option of the report_node_active configuration<br />

command.<br />

;! inact_file_format 5.3<br />

; --------------------------------------------------------<br />

;| |<br />

;| TimeMill Version 5.4_Release |<br />

;| SN: P110998-SunOS_5 |<br />

;| Copyright (c) 2000 Synopsys Inc., All Rights Reserved. |<br />

;| |<br />

; --------------------------------------------------------<br />

;;<br />

; Report inactive nodes in <strong>EPIC</strong> configuration file format.<br />

;<br />

; The checking starts at 50.000000ns and ends at 100.000000ns<br />

;==============================================================<br />

; Section for inactive nodes not in active stages<br />

;==============================================================<br />

set_node_v v=0V no=CTR<br />

set_node_v v=0V no=CTR<br />

set_node_v v=0V no=XCNTR-XI2-XI0-XI25-NET9<br />

set_node_v v=0V no=N_378<br />

;==============================================================<br />

; Section for inactive nodes in active stages<br />

;==============================================================<br />

set_node_ic XCNTR-XI2-XI0-XI25-XI4-NET4 0V<br />

set_node_ic XCNTR-XI2-XI2-XI25-NET12 3V<br />

set_node_ic XCNTR-XI2-XI2-XI25-XI4-NET4 0V<br />

;==============================================================<br />

; Summary for inactive node report<br />

;==============================================================<br />

; number of inactive nodes detected: 11<br />

; number of inactive nodes connected to external src: 4<br />

; number of inactive nodes not in active stages reported: 4<br />

; number of inactive nodes in active stages reported: 3<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


328 Output Files<br />

The .nodealias File<br />

Sample .nodelias File<br />

<strong>EPIC</strong> simulation tools report node alias names to the .nodealias<br />

file if the node names specified in the SPICE netlists, SPF files<br />

or configuration files are not the primary names.<br />

A node (net) in a circuit can have alias node names for any of the<br />

following reasons:<br />

■ There are hierarchical alias names from instances of<br />

subcircuits<br />

■ The very small resistors are shorted<br />

■ There are DC voltage sources of 0 volts connected to the node<br />

■ The node is replaced by the back-annonated RC network<br />

■ The RC network is reduced<br />

The .nodealias file has an <strong>EPIC</strong> file banner at the top that<br />

contains the name of the program generating the .nodealias file<br />

and time at which the file was generated. Starting with version<br />

5.3, the first line of the <strong>EPIC</strong> banner gives the file format version<br />

as:<br />

;! nodealias_format version_number<br />

The version number is updated only when a new .nodealias file<br />

format is released with the software.<br />

Node alias names and primary names are listed using the<br />

following syntax:<br />

primary_node_name alias_node_name<br />

The alias_node_name is the name originally used in the SPICE<br />

netlists or configuration files.<br />

<strong>EPIC</strong> simulation tools report node alias names to the .nodealias<br />

file if the node names specified in the SPICE netlists, SPF files<br />

or configuration files are not the primary names.


The .nodealias File 329<br />

;! nodealias_format 5.3<br />

; --------------------------------------------------------<br />

;| |<br />

;| TimeMill Version 5.4_Release |<br />

;| SN: P111398-SunOS_5 |<br />

;| Copyright (c) 2000 Synopsys Inc., All Rights Reserved. |<br />

;| |<br />

; --------------------------------------------------------<br />

;<br />

;<br />

; A node (net) in a circuit can have alias node names for any of the<br />

; following reasons:<br />

; * There are hierarchical alias names from instances of subcircuits<br />

; * The very small resistors are shorted<br />

; * There are DC voltage sources of 0 volts connected to the node<br />

; * The node is replaced by the back-annonated RC network<br />

; * The RC network is reduced<br />

;<br />

; The following node names specified in the SPICE netlists, SPF files,<br />

; or configuration commands are not primary names. Their primary names are<br />

; printed for reference using the following syntax:<br />

;<br />

; <br />

;<br />

; The primary_node_name is the node name chosen by the<br />

; netlist parser. The alias_node_name is the original node name used<br />

; in the SPICE netlists, SPF files or configuration commands.<br />

;<br />

;<br />

out t1.OUT<br />

vdd VSS<br />

PI x1.cell1.in<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


330 Output Files<br />

Warning Messages and the .log File<br />

The following table defines terms you might find in the .log file<br />

or in warning messages:<br />

U A node is unconnected if it is not connected to<br />

any circuit element, except capacitors. A<br />

message is reported by the netlist compiler. The<br />

names of all unconnected nodes are listed in a<br />

.unc file. When an unconnected node is<br />

identified, a message will appear in the .dcu file.<br />

EXAMPLE:<br />

There are ten nodes that are set to U by the<br />

simulator before DC initialization. See the<br />

timemill.dcu file for the node names.<br />

dangling A node is dangling if:<br />

It is not connected to an input stimulus,<br />

including voltage/current source.<br />

It is not channel-connected to any circuit<br />

element.<br />

It is not connected to an output or biput of<br />

any functional models.<br />

The names of all dangling nodes are reported in<br />

a .dng file. When a dangling node is identified,<br />

a message is reported in a .dng file after the<br />

tool reads the configuration commands.<br />

EXAMPLE:<br />

There are eight dangling nodes. See the<br />

timemill.dng file for the node names.<br />

floating A node is defined as floating if there is no<br />

conducting path from a voltage source to the<br />

node.


The .err File<br />

Appendix C<br />

Error Output File<br />

All TimeMill and PowerMill timing, power, and logic errors are<br />

written to an error file. This appendix contains information<br />

about the .err file and the Viewerror utility that you can use to<br />

read the error file.<br />

<strong>EPIC</strong> simulation tools report warnings and errors to an error<br />

(.err) file, in addition to sending messages to the stdout and the<br />

.log file. The error file begins with an <strong>EPIC</strong> file banner that<br />

contains the name of the program generating the error file and<br />

the time the file is generated.<br />

The error file lists each error message as a number of fields of<br />

ASCII code on one line. These fields are error type code, error<br />

description code, related node names, element names, and<br />

simulation information. Each field on a line is separated by a<br />

blank. The number of fields on the line depends on the type of<br />

error.


332 Error Output File<br />

The first three fields are common to all error messages. They are<br />

described in the following table.<br />

Field Number Data Type Description<br />

1 float The simulation time when the<br />

error occurred.<br />

2 int Error/warning type code (T_code).<br />

3 int Error/warning description code<br />

(D_code).<br />

There are 10 different types of codes (T_codes), each of which has<br />

a set of description codes (D-codes). The D-codes provide detailed<br />

messages about the error.<br />

The T_codes (error/warning type codes in field 2) are described in<br />

the following table.<br />

T_Code Data Type<br />

1 Comparison error<br />

2 Timing error<br />

3 Bus contention error<br />

4 High Impedance condition<br />

5 Uncertain state condition<br />

6 Timing error with timing tolerance margin<br />

7 Block delay characterization error<br />

8 Power diagnosis<br />

9 Multiple toggle error<br />

10 Multiple pulse error


Type 1: Comparison Error<br />

Type 1: Comparison Error<br />

The .err File 333<br />

The description codes (D_Codes) describe the error in detail. The<br />

fields that follow the D-code field (field 3) vary. The following<br />

tables list the D_codes for all T_codes.<br />

D_code 1 The simulated result differs from the expected results.<br />

D_code 2 Node should have been in high impedance.<br />

D_code 3 Node should not have been in high impedance.<br />

D_code 4 Biput node should be driven by the circuit.<br />

D_code 5 Biput node should drive the circuit.<br />

D_code 6 Node should have been set during simulation.<br />

D_code 7 Node should not have been set during simulation.<br />

D-code 8 Node should be at X state.<br />

D-code 9 Node should be at a non-X state.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 int Simulated value (state number).<br />

5 char Expected value.<br />

6 string Node name.<br />

D_code 10 The simulated result differs from the expected results during<br />

the strobe window.<br />

D_code 11 The simulated result differs from the expected results during<br />

the stimulus-triggered strobe window.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 int Simulated value (state number)<br />

5 char Expected value<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


334 Error Output File<br />

6 float Time when the strobe window starts.<br />

7 float Time when the strobe window ends.<br />

8 string Node name.<br />

Type 2: Timing Errors and Type 6: Timing Errors with Tolerance Margin Specified<br />

D_Code 1 Setup time violation/tolerance<br />

D_Code 2 Hold time violation/tolerance<br />

D_Code 3 Edge-to-edge violation/tolerance<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node1 name.<br />

5 int direction (0: rising |1: falling |<br />

2: changing)<br />

6 float Occurred time of node1<br />

7 string Node2 name<br />

8 int direction (0: rising |1: falling |<br />

2: changing)<br />

9 float Occurred time of node2<br />

10 float Time diff (abs (field 9 - field 6))<br />

11 string “Min/Max”<br />

12 float Time required.<br />

The following field is for Type 2 only:<br />

13 string Hierarchical name of the timing checking<br />

element or “-cfg” if the timing check element is<br />

specified in a configuration file.<br />

The following fields are for Type 6 only:<br />

13 float Tolerance margin.<br />

14 string Hierarchical name of the timing checking<br />

element or configuration filename if the timing<br />

check element is specified in a configuration file.


The .err File 335<br />

Type 2: Timing Errors and Type 6: Timing Errors with Tolerance Margin Specified<br />

D_Code 4 Pulse width violation/tolerance<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name.<br />

5 int direction (0: rising |1: falling | 2: changing)<br />

6 float Occurred time<br />

7 int direction (0: rising |1: falling | 2: changing)<br />

8 float Occurred time<br />

9 float Pulse width.<br />

10 string “Min/Max”<br />

11 float Width required.<br />

The following field is for Type 2 only:<br />

12 string Hierarchical name of the timing checking<br />

element or “-cfg” if the timing check element is<br />

specified in a configuration file.<br />

The following fields are for Type 6 only:<br />

12 string Hierarchical name of the timing checking<br />

element or “-cfg” if the timing check element is<br />

specified in a configuration file.<br />

13 string Hierarchical name of the timing checking<br />

element or “-cfg” if the timing check element is<br />

specified in a configuration file.<br />

Type 2: Timing Errors and Type 6: Timing Errors with Tolerance Margin Specified<br />

D_Code 5 Edge to edge window violation/tolerance<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string <strong>Reference</strong> node name<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


336 Error Output File<br />

Type 2: Timing Errors and Type 6: Timing Errors with Tolerance Margin Specified<br />

5 int direction (0: rising |1: falling | 2: changing)<br />

6 float <strong>Reference</strong> edge occurred time.<br />

7 string Checked node name.<br />

8 int direction (0: rising |1: falling | 2: changing)<br />

9 float Occurred time for the edge of the checked node.<br />

10 float Time diff by (field 9 - field 6)<br />

11 float Lower bound of time diff in nanoseconds.<br />

12 float Upper bound of time diff in nanoseconds.<br />

The following field is for Type 2 only:<br />

13 string Hierarchical name of the timing checking<br />

element or “-cfg” if the timing check element is<br />

specified in a configuration file.<br />

The following fields are for Type 6 only:<br />

13 float Tolerance margin.<br />

14 string Hierarchical name of the timing checking<br />

element or “-cfg” if the timing check element is<br />

specified in a configuration file.<br />

Type 3: Bus Contention Error<br />

Timing checks can be specified by using a SETUP command in<br />

the netlist file or a timing check in a configuration file. A timing<br />

violation message is reported in the .err output file with element<br />

information if the error was found in a netlist. A timing violation<br />

message is reported without element information if the error was<br />

found from a timing violation check in the configuration file. The<br />

extension -cfg is appended to the message in the .err output file.<br />

D_Code 1 Bus contention error<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name


Type 4: High Impedance Condition Generated by “report_node_z”<br />

D_Code 1 High Impedance Condition<br />

Additional Fields:<br />

Field Number Data Type Description<br />

The .err File 337<br />

4 string Node name<br />

5 float At time<br />

6 int Internal state number for high impedance value<br />

(H/L/Z)<br />

7 float Maximum high-impedance state time without<br />

error reporting.<br />

Type 5: Unknown State<br />

D_Code 1 U-state (transition state) duration is too long.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

5 float U-state end time.<br />

6 int Internal state number for unknown state (U/Z/Y)<br />

7 float Maximum U-state time without error reporting<br />

Type 5: Unknown State<br />

D_Code 2 U- state (transition state) duration is too short.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


338 Error Output File<br />

Type 5: Unknown State<br />

4 string Node name<br />

5 float U-state end time.<br />

6 int Internal state number for unknown state (U/Z/Y)<br />

Type 7: Block Delay Characterization Error<br />

D_Code 1 No transition on node<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

Type 7: Block Delay Characterization Error<br />

D_Code 2 No delay path<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 int 0|1|2 for rising|falling|changing<br />

5 int 0|1|2 for rising|falling|changing<br />

6 string Node name.<br />

7 string Node name.


Type 8: Power Diagnosis<br />

D_Code 1 Static Partial-Swing Detection (NMOS)<br />

Syntax: 0 8 1 <br />

The .err File 339<br />

Definition: Node is driven by PMOS transistors only, and it drives at least one<br />

NMOS fanout transistor.<br />

D_Code 2 Static Partial-Swing Detection (PMOS)<br />

Syntax: 0 8 2 <br />

Definition: Node is driven by NMOS transistors only, and it drives at least one<br />

PMOS fanout transistor.<br />

D_Code 3 Static VDD Path Problem<br />

Syntax: 0 8 3 <br />

Definition: No possible conducting path to VDD.<br />

D_Code 4 Static GND Path Problem<br />

Syntax: 0 8 4 <br />

Definition: No possible conducting path to GND.<br />

D_Code 5 Static DC Path to VDD<br />

Syntax: 0 8 5 () () ... () <br />

Definition: A static DC conducting path from to VDD detected. The<br />

path consists of elements ... and nodes , , ..., ,<br />

and Vdd.<br />

D_Code 6 Static DC Path to GND<br />

Syntax: 0 8 6 () () ... () <br />

Definition: A static DC conducting path from to GND detected. The<br />

path consists of elements ... and nodes , , ..., ,<br />

and Gnd.<br />

D_Code 7 Static DC Leakage Path between two power supply nodes<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


340 Error Output File<br />

Type 8: Power Diagnosis<br />

Syntax: 0 8 7 () () ... ) ()<br />

<br />

Definition: A static conducting path exists between supply nodes and<br />

of different voltages. The path consists of nodes through ,<br />

and branches through .<br />

D_Code 8 Node Stuck at Logic 1 at All Times<br />

Syntax:0 8 8 () () ... () <br />

Definition: A static DC conducting path from to Vdd and no possible<br />

conducting path to Gnd.<br />

D_Code 9 Node Stuck at Logic 0 at All Times<br />

Syntax: 0 8 9 () () ... () <br />

Definition: A static DC conducting path from to Gnd and no possible<br />

conducting path to Vdd.<br />

D_Code 10 Static Excessive-Rise/Fall Time Problem<br />

Syntax: 0 8 10 <br />

Definition: Node with an excessive rise/fall time "est_rf_time" by static estimation.<br />

D_Code 11 Static Excessive-Rise/Fall Time Problem<br />

Syntax: 8 11 <br />

Definition: Node with an excessive rise/fall time by dynamic simulation. time_start<br />

and time_end are the times when node enters and exits the U-state, respectively.<br />

D_Code 12 Dynamic Floating Node (Hi-Z) Problem<br />

Syntax: 8 12 <br />

Definition: Node staying at a floating state (L, H, Z) too long. time_start and<br />

time_end are the times when node enters the high impedance state. The<br />

is an internal state number for state (L, H, Z).<br />

D_Code 13 Excessive Branch Current


Type 8: Power Diagnosis<br />

Syntax: 8 13 <br />

The .err File 341<br />

Definition: Excessive branch current detected for from<br />

to . The average current between and<br />

is .<br />

D_Code 14 Partial off PMOS<br />

Syntax: 8 14 () ... () <br />

||| () ... () ||| () ... () <br />

Definition: A PMOS transistor has a possible channel-connect path<br />

to power supply , and its gate terminal has a possible path to another power<br />

supply node where the voltage of vddl is less than vddh. It is possible that<br />

will not turn off when its gate terminal is driven to logic 1,<br />

resulting in a dc leakage path between and the voltage source .<br />

D_Code 15 Partial off NMOS<br />

Syntax: 8 15 () ... () <br />

||| () ... () ||| () ... ()<br />

<br />

Definition: A NMOS transistor has a possible channel-connect path<br />

to power supply , and its gate terminal has a possible path to another power<br />

supply node where the voltage of gndl is less than gndh. It is possible that<br />

will not turn off when its gate terminal is driven to logic 0,<br />

resulting in a dc leakage path between and the voltage source .<br />

D_Code 16 Forward bias PMOS<br />

Syntax: 8 16 () ... () <br />

||| <br />

Definition: A PMOS transistor has a possible channel-connect path<br />

to power supply , and its bulk terminal is connected to another power supply<br />

node where the voltage of vddl is less than vddh. It is possible to have a<br />

forward biased pn junction between the P-diffusion and the N-substrate, resulting<br />

in a dc leakage path between and .<br />

D_Code 17 Forward bias NMOS<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


342 Error Output File<br />

Type 8: Power Diagnosis<br />

Syntax: 8 17 () ... () <br />

||| <br />

Definition: An NMOS transistor has a possible channel-connect<br />

path to power supply , and its bulk terminal is connected to another power<br />

supply node where the voltage of gndl is less than gndh. It is possible to<br />

have a forward biased pn junction between the N-diffusion and the P-substrate,<br />

resulting in a dc leakage path between and .<br />

D_Code 18 Instaneous Current/Power Exceeds Budget<br />

Syntax: 8 18 <br />

Definition:The instaneous current/power for the report_block_power created probe<br />

has exceeded its current/power budget at .<br />

D_Code 19 Instaneous Current/Power Exceeds Budget at Least Once<br />

Syntax: 8 19 <br />

The instantaneous current/power for the report_block_power created probe<br />

has exceeded its current/power budget of at least<br />

once during the dynamic simulation. The peak current observed was .<br />

D_Code 20 Average Current/Power Exceeds Budget<br />

Syntax: 8 20 <br />

The average current/power for the report_block_power created probe<br />

exceeds its current/power budget of .<br />

D_Code 21 RMS Current/Power Exceeds Budget<br />

Syntax: 8 21 <br />

The RMS current/power for the report_block_power created probe<br />

exceeds its current/power budget of .<br />

D_Code 22 Wasted Current Percentage Exceeds Budget<br />

Syntax: 8 21 <br />

The wasted current percentage for the report_block_power created<br />

probe exceeds its budget of .


Type 9: Multiple-toggle Error<br />

The .err File 343<br />

This set of D-codes displays field names, as shown in the<br />

following table.<br />

Field Name Data Type<br />

string<br />

float<br />

est_rf_time float<br />

string<br />

string<br />

Integer number as .out to represent<br />

L|H|X state<br />

float<br />

float<br />

string<br />

D_Code 1 Node toggle more than once in a user-specified period of time<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

5 float Last time node changed state<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


344 Error Output File<br />

Type 10: Multiple-pulse Error<br />

D_Code 1 Node has more than one pulse in a user-specified period of time.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

5 float Time the last pulse started<br />

6 int Pulse state (0: low; 1: high)<br />

7 float Period<br />

8 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file<br />

Type 10: Multiple-pulse Error<br />

D_Code 2 Node has more than one pulse within the pulse of the reference<br />

node.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

5 float Time the last pulse started<br />

6 int Pulse state (0: low; 1: high)<br />

7 string <strong>Reference</strong> node name<br />

8 float Time the reference pulse started<br />

9 int <strong>Reference</strong> pulse state 0: low; 1: high)<br />

10 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file


Type 10: Multiple-pulse Error<br />

The .err File 345<br />

D_Code 3 Node has a single pulse inside the pulse of the reference node.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

5 float Time the single pulse started<br />

6 int Pulse state (0: low; 1: high)<br />

7 string <strong>Reference</strong> node name<br />

8 float Time the reference pulse started<br />

9 int <strong>Reference</strong> pulse state (0: low; 1: high)<br />

10 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file<br />

Type 10: Multiple-pulse Error<br />

D_Code 4 Node doesn’t have a pulse inside the pulse of the reference node.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

4 string Node name<br />

5 float Time the reference pulse ended<br />

6 int Pulse state (0: low; 1: high)<br />

7 string <strong>Reference</strong> node name<br />

8 float Time the reference pulse started<br />

9 int <strong>Reference</strong> pulse state (0: low; 1: high)<br />

10 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


346 Error Output File<br />

Type 10: Multiple-pulse Error<br />

D_Code 5 Node has more than one pulse in a user-specified period of time.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

1 float Time when the multiple-pulse error is detected.<br />

It is also the time when the current period ends.<br />

2 int Error type code (10)<br />

3 int Error description code (5))<br />

4 string Node name<br />

5 int Pulse state of the node (0: low; 1: high)<br />

6 float Time the current period started<br />

7 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file<br />

Type 10: Multiple-pulse Error<br />

D_Code 6 Node has exactly one pulse in a user-specified period of time.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

1 float Time when the single-pulse error is detected<br />

It is also the time when the current period ends.<br />

2 int Error type code (10)<br />

3 int Error description code (6)<br />

4 string Node name


Type 10: Multiple-pulse Error<br />

The .err File 347<br />

5 int Pulse state of the node (0: low; 1: high)<br />

6 float Time the current period started<br />

7 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file<br />

D_Code 7 Node does not have any pulse in a user-specified period of time.<br />

Additional Fields:<br />

Field Number Data Type Description<br />

1 float Time when the no-pulse error is detected<br />

It is also the time when the current period ends.<br />

2 int Error type code (10)<br />

3 int Error description code (6)<br />

4 string Node name<br />

5 int Pulse state of the node (0: low; 1: high)<br />

6 float Time the current period started<br />

7 string Hierarchical name of the pulse detection element<br />

or configuration file name if the pulse detection<br />

is specified in a configuration file<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


348 Error Output File<br />

.err File Sample<br />

;! error_format 5.2<br />

; --------------------------------------------------------<br />

;| |<br />

;| TimeMill Version 5.4<br />

;| SN: P042498-SunOS_5 |<br />

;| Copyright (c) 2000 Synopsys Inc., All Rights Reserved. |<br />

;| |<br />

; --------------------------------------------------------<br />

;<br />

;Built by hmchen in " sun50504 " on Mon May 4 20:51:51 PDT 1998<br />

; Wed May 6 17:36:46 2000<br />

;<br />

;This is a comment<br />

11.00 1 1 1 0 n1 ;comparison error<br />

12.00 1 2 1 H n3 ;comparison error<br />

12.00 1 4 1 T n5 ;comparison error<br />

13.00 1 5 7 1 n19 ;comparison error<br />

14.00 1 6 9 0 n6 ;comparison error<br />

14.00 1 7 3 ? n6 ;comparison error<br />

30.00 2 1 n1 1 30.7 n2 0 30.8 0.1 Min 10-cfg ;setup violation<br />

30.00 6 1 n1 1 30.7 n2 0 30.8 0.1 Min 10 0.1 ;setup violation warning<br />

45.00 2 2 n3 0 40.7 n4 1 60.8 20.1 Max 10-cfg ;hold violation<br />

100.00 2 3 n2 0 40.7 n4 1 60.8 20.1 Max 10-cfg ;edge to edge<br />

145.00 2 4 n3 0 40.7 1 45.7 5.0 min 10 ;pulse violation<br />

150.00 3 1 n1 ;bus contention<br />

200.00 4 1 n2 202.00 4 ;high impedance condition<br />

200.00 5 1 n2 200.2 2 ;Unknown state<br />

;end<br />

; Total number of errors in this file: 14<br />

Figure 2 Sample .err file output


The Viewerror Utility<br />

Command Syntax<br />

The Viewerror Utility 349<br />

You use the Viewerror utility to view the output error file in<br />

several ways and generate multiple error reports. This utility<br />

can sort errors by the time or type associated with a node. You<br />

can also separate comparison errors from timing check errors.<br />

SYNTAX:<br />

Command-line Options<br />

viewerror [-i filename]<br />

[-m number_of_messages]<br />

[-n nodenames]<br />

[-o filename]<br />

[-p type]<br />

[-s]<br />

[-t t1 t2 ... tx,ty]<br />

The viewerror command line options are:<br />

-i filename<br />

This specifies the input file, for example, timemill.err. If<br />

you do not specify the filename, the program will search for<br />

timemill.err first, then powrmill.err.<br />

-m number_of_messages<br />

The number of error messages to print. The default number<br />

is 1000. This option can take up to 50 arguments.<br />

-n nodenames<br />

Prints all error messages associated with the given nodes.<br />

Signals with square brackets ([ ]) must be enclosed in<br />

quotation marks (“ ”). Buses (single or bit grouped) must<br />

also be enclosed in quotation marks. This option can take<br />

up to 50 arguments.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


350 Error Output File<br />

-o filename<br />

Specifies the output file. The default is stdout.<br />

-p type<br />

Prints all the error messages with the given type, where<br />

type is an integer number of 1 through 10. When used with<br />

-n, it prints out all the error messages of the given type for<br />

the nodes specified in -n. The following list shows the 10<br />

different types of error messages.<br />

1 comparison error<br />

2 timing error<br />

3 bus contention error<br />

4 high impedance error<br />

5 uncertain state condition<br />

6 timing error with timing tolerance margin<br />

7 block delay characterization error<br />

8 power diagnosis<br />

9 multiple toggle error<br />

10 multiple pulse error<br />

-s Sorts error messages by error type. If not specified, the<br />

error messages are sorted by time.<br />

-t t1 t2 tx,ty<br />

Prints all error messages for a given simulation time or<br />

time range. Only one time range can be specified.<br />

Individual times must be separated by a space, and the<br />

time range separated by a comma. This option can take up<br />

to 50 arguments.<br />

EXAMPLE:<br />

-t time1 time2 timex,timey<br />

This example syntax prints all the errors between timex<br />

and timey, plus any errors at times time1 and time2. You<br />

can use this option together with -p and -n to print specific<br />

types of errors for specific nodes at given times.


Appendix D<br />

SPICE-independent<br />

Voltage Source Syntax<br />

This appendix provides the syntax and explanations of the<br />

SPICE-independent voltage sources supported by PowerMill,<br />

TimeMill and AMPS.<br />

SYNTAX:<br />

Vxxx n+ n- voltage_source_type parameters<br />

The voltage source types are:<br />

■ AM<br />

■ EXP<br />

■ PULSE, PU<br />

■ PWL<br />

■ SFFM<br />

■ SIN<br />

The syntax for these voltage source types is found on the<br />

following pages.


352 SPICE-independent Voltage Source Syntax<br />

AM<br />

SYNTAX:<br />

AM (sa oc fm fc td)<br />

EXAMPLE:<br />

v1 1 0 AM(10 1 100 1K 1M)<br />

DESCRIPTION:<br />

Argument Definition<br />

sa Signal amplitude. Default is 0.0.<br />

oc Offset constant. Default is 0.0.<br />

fm Modulation frequency. Default is 0.0.<br />

fc Carrier frequency. Default is 0.0.<br />

td Delay time. Default is 0.0


EXP<br />

SYNTAX:<br />

EXP [(]v1 v2 [td1 [τ1 [td2 [τ2]]]] [)]<br />

353<br />

EXAMPLE:<br />

VIN 3 0 EXP (-4 -1 2NS 30NS 60NS 40NS)<br />

This example describes an exponential transient source that is<br />

connected between nodes 3 and 0. It has an initial t=0 voltage of<br />

-4 V and a final voltage of -1 V. The waveform rises<br />

exponentially from -4 Vto-1 V with a time constant of 30 ns. At<br />

60 ns it starts dropping to -4 V again, with a time constant of 40<br />

ns.<br />

DESCRIPTION:<br />

Argument Definition<br />

v1 Initial value of voltage in volts.<br />

v2 Pulsed value of voltage in volts.<br />

td1 Rise delay time in seconds. Default is 0.0.<br />

td2 Fall delay time in seconds. Default is 0.0.<br />

τ1<br />

τ2<br />

Rise time constant in seconds. Default is 0.0.<br />

Fall time constant in seconds. Default is 0.0.<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


354 SPICE-independent Voltage Source Syntax<br />

PULSE<br />

PU<br />

SYNTAX:<br />

PULSE [([v1 v2 [td [tr [tf [pw [per]]]]] [)]<br />

PU [([v1 v2 [td [tr [tf [pw [per]]]]] [)]<br />

EXAMPLE:<br />

VIN 3 0 PULSE (-1 1 1NS 2NS 3NS 50NS 100NS)<br />

This example specifies a pulse source connected between node 3<br />

and node 0. The pulse has an output high voltage of 1 V, an<br />

output low voltage of -1 V, a delay of 1ns, a rise time of 2 and a<br />

fall of 3ns, a high pulse width of 50 ns, and a period of 100 ns.<br />

DESCRIPTION:<br />

This function is a trapezoidal pulse source function that starts<br />

with an initial delay from the beginning of the transient<br />

simulation interval to an onset ramp. During the onset ramp, the<br />

voltage or current changes linearly from its initial value to the<br />

pulse plateau value. After the pulse plateau, the voltage moves<br />

linearly along a recovery ramp, back to its initial value. The<br />

entire pulse repeats with a period per from onset to onset.<br />

Argument Definition<br />

v1 Initial value of the voltage before the pulse<br />

onset.<br />

v2 Pulse plateau value.<br />

td Delay time in seconds from the beginning of<br />

transient interval to the first onset ramp.<br />

Default is 0.0.<br />

tr Duration of the onset ramp, from the initial<br />

value to the pulse plateau value (reverse<br />

transit time). Default is 0.0.<br />

tf Duration of the recovery ramp, from the pulse<br />

plateau back to the initial value (forward<br />

transit time). Default is 0.0.


Argument Definition<br />

pw Pulse width (the width of the pulse plateau<br />

portion of the pulse). Default is 0.0.<br />

per Pulse repetition period in seconds. Default is<br />

0.0.<br />

V 2<br />

V 1<br />

0 ns<br />

t d<br />

pw<br />

t r tf<br />

Period<br />

Figure 3 Sample pulse waveform<br />

time<br />

355<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


356 SPICE-independent Voltage Source Syntax<br />

PWL<br />

PL<br />

SYNTAX:<br />

PWL [(] t1 v1 [t2 v2 t3 v3...] [r [=repeat]] [TD=delay] [)]<br />

PL [(] v1 t1 [v2 t2 v3 t3...] [r [=repeat]] [TD=delay] [)]<br />

EXAMPLE:<br />

V1 1 0 PWL 60N 0V, 120N, 130N 5V, 170N 5V, 180N 0V,<br />

R0N R1 1 0 1<br />

DESCRIPTION:<br />

Argument Definition<br />

v1 . . . Voltage values.<br />

t1 . . . Segment time values.<br />

r Causes the function to repeat.<br />

repeat Specifies the start point of the waveform which<br />

is to be repeated.<br />

delay Specifies the length of time to delay the<br />

piecewise linear function.


SFFM<br />

SYNTAX:<br />

SFFM [(] vo va [fc [mdi [fs]]] [)]<br />

EXAMPLE:<br />

V 1 0 SFFM (0, 1M, 20K. 10, 5K)<br />

DESCRIPTION:<br />

Argument Definition<br />

vo Output voltage in volts.<br />

va Output voltage in volts.<br />

fc Carrier frequency in Hz. Default is 0.0.<br />

mdi Modulation index. Default is 0.0.<br />

fs Signal frequency in Hz. Default is 0.0.<br />

357<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


358 SPICE-independent Voltage Source Syntax<br />

SIN<br />

SYNTAX:<br />

SIN [(] vo va [freq [td [θ[ϕ]]]] [)]<br />

EXAMPLE:<br />

VIN 3 0 SIN (0 1 100MEG 1NS 1e10)<br />

This example specifies a damped sinusoidal source connected<br />

between nodes 3 and 0. The waveform has a peak value of 1V, an<br />

offset of 0V, a 100 MHz frequency, a time delay of 1 ns, a<br />

damping factor of 1e10, and a phase delay of zero degrees.<br />

DESCRIPTION:<br />

This HSPICE function is a damped sinusoidal source that is the<br />

product of a dying exponential with a sine wave. Application of<br />

this waveform requires the specification of the sine wave<br />

frequency, the exponential decay constant, the beginning phase,<br />

and the beginning time of the waveform.<br />

Argument Definition<br />

vo Voltage in volts.<br />

va Voltage amplitude in volts.<br />

freq Frequency in Hz. Default is 0.0.<br />

td Delay in seconds. Default is 0.0.<br />

θ Damping factor in 1/seconds. Default is 0.0.<br />

ϕ Phase delay in degrees. Default is 0.0.


Symbols<br />

!append 275, 276<br />

%corner 195<br />

%diode 198<br />

%invoke 195<br />

%lib 158, 212<br />

%model 159<br />

%options 197<br />

%parameters 160<br />

*.err file 331<br />

*epic_tech command 141<br />

.act file 324<br />

.log file 330<br />

.measure statements 55<br />

.nact file 326<br />

.nodealias file 328<br />

.OPTIONS 197<br />

.out file 311<br />

Numerics<br />

3dtable command 149<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong><br />

Index<br />

A<br />

acm parameter command 168<br />

alias command 102<br />

alias file 99, 101<br />

attribute identifiers 10<br />

B<br />

batchfile<br />

batchrun command 259<br />

DATA command 262<br />

FILE command 261<br />

format 261<br />

RUN command 262<br />

binary command 142<br />

binary parameter command 162, 194<br />

body_bias command 143<br />

body_bias parameter command 160, 174<br />

BSIM1 139<br />

BSIM3 139<br />

bus_notation 46


360 Index<br />

C<br />

capacitance, minimum 110<br />

capacitor 55<br />

floating 111<br />

minimum value 56<br />

value, scaling 65<br />

case 47<br />

case parameter command 162, 191<br />

cell library path 52<br />

cg parameter command 161, 183<br />

cgbo parameter command 162, 188<br />

cgdo parameter command 162, 188<br />

cgso parameter command 162, 188<br />

circuit elements<br />

BJT 17<br />

capacitor 14<br />

CMOS transistor 21<br />

diode 18<br />

floating capacitor 15<br />

gate-level 37<br />

inductor 16<br />

net 35<br />

resistor 27<br />

subciruit 33<br />

voltage controlled voltage sources 32<br />

voltage source 27<br />

cja parameter command 161, 183<br />

cjgate parameter command 161, 182<br />

cjsw parameter command 161, 183<br />

clk 221<br />

clock stimulus 220, 221<br />

cnt 223<br />

counter stimulus 220, 223<br />

cov parameter command 161, 183<br />

cox parameter command 162, 188<br />

cspf_cap_select 47, 88<br />

cspf_disable_net 48<br />

cspf_name_map_proc 48<br />

cspf_net 49<br />

cspf_process_ccap 49<br />

customize.c file 300<br />

D<br />

D_codes description codes 333<br />

dangling node 330<br />

db_file 50, 99<br />

default file 99, 103<br />

delta_vt parameter command 162, 189<br />

device models<br />

BSIM1 139<br />

BSIM3 139<br />

MOS9 139<br />

device parameter file<br />

control option 97<br />

device parameter format file 96<br />

converting element names 51<br />

converting node names 51<br />

naming conventions 96<br />

diodes 103<br />

direct command 144<br />

dont_compress_db 50, 99<br />

dpf_name_map_proc 51, 97<br />

drain-to-source voltage 173<br />

ds_length parameter command 161, 176<br />

dynamic linked libraries, specifying 68<br />

E<br />

ecrypt utility 131<br />

edge-to-edge timing check 40<br />

EDIF netlist translator (edif2e) 118<br />

command syntax 120<br />

command-line options 120<br />

constructs<br />

supported 118<br />

unsupported 119<br />

design structure 121<br />

output, specifying from command line 52<br />

specifying from command line 51<br />

edif_out variable 123<br />

edif2e. See EDIF netlist translator<br />

edif2e_args 51<br />

edif2e_output_file 52


Edisplay utility 269<br />

command-line options 270<br />

control file 275<br />

syntax 269<br />

element identifiers 10<br />

encryption. See ecrypt utility<br />

<strong>EPIC</strong> binary file 50, 98<br />

control options 99<br />

file compression 50<br />

generation 50<br />

<strong>EPIC</strong> netlist 7<br />

attribute identifiers 10<br />

biput terminal (bt) 10<br />

biput value (bv) 11<br />

element name (en) 10<br />

input terminal (it) 10<br />

multiplier (m) 11<br />

node name (nn) 11<br />

number of states (st) 11<br />

optional (attr) 11<br />

output terminal (ot) 10<br />

output value (ov) 11<br />

state value (sv) 11<br />

buses 8<br />

circuit elements 14, 37<br />

element identifiers 10<br />

BJT (b) 10<br />

input signal (is) 10<br />

library function (ef) 10<br />

output signal (c) 10<br />

output signal (os) 10<br />

output signal (t) 10<br />

transistor-level subcircuit (ef) 10<br />

expressions 73<br />

functions 73<br />

global commands 42<br />

parameter passing 69<br />

syntax 7<br />

<strong>EPIC</strong>_CELL_LIB_PATH 81<br />

epic_cell_lib_path 52<br />

error limit, setting 60<br />

error messages 331<br />

error output file 331<br />

error_undefined_param 52<br />

Eview utility 276<br />

command syntax 277<br />

command-line options 277<br />

control file 284<br />

Edit menu 280<br />

File menu 279<br />

Options menu 283<br />

Search menu 281<br />

window layout 278<br />

F<br />

fall 244<br />

find_top_mod 53<br />

floating capacitor 111<br />

minimum value 57<br />

splitting 67<br />

floating nodes 53, 330<br />

floating_nodes_ok 53<br />

force_global_model 53<br />

G<br />

gate-to-source voltage 173<br />

Gentech utility 139, 153<br />

command syntax 198<br />

command-line options 199<br />

control file 154<br />

corner section<br />

temperature command 195<br />

voltage command 195<br />

diode models 198<br />

example 153<br />

invoke section 195<br />

lib section 158<br />

model section 159<br />

MOS models 159<br />

multiple-step mode 202<br />

parameter section command<br />

361<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


362 Index<br />

acm 168<br />

binary 162, 194<br />

body_bias 160, 174<br />

case 162, 191<br />

cg 161, 183<br />

cgbo 162, 188<br />

cgdo 162, 188<br />

cgso 162, 188<br />

cja 161, 183<br />

cjgate 161, 182<br />

cjsw 161, 183<br />

cov 161, 183<br />

cox 162, 188<br />

delta_vt 162, 189<br />

ds_length 161, 176<br />

l_scale 160, 171<br />

ldiff 160, 169<br />

lmlt 160, 171<br />

mlt 160, 171<br />

model_alias 161, 175<br />

n_length 160, 164<br />

n_width 160, 164<br />

new_format 161, 181<br />

nl 160, 164<br />

no_nrd_nrs 161, 179<br />

nrd_nrs_caps 161, 180<br />

nw 160, 164<br />

p_length 160, 164<br />

p_width 160, 164<br />

pl 160, 164<br />

pn_ratio 160, 167<br />

pw 160, 164<br />

rsh 161, 178<br />

speed 162, 193<br />

tox 162, 188<br />

unit_adas 192<br />

unit_pdps 162, 192<br />

unit_wl 162, 192<br />

vds 160, 173<br />

vgs 160, 173<br />

vto 162, 190<br />

w_scale 160, 171<br />

wd 162<br />

wdiff 160, 169<br />

wl_scale 160, 171<br />

wmlt 160, 171<br />

single-step mode 201<br />

SPICE model files 158<br />

SPICE options 197<br />

starting SPICE 195<br />

gentech_parameter command 145<br />

global commands<br />

global nodes 42<br />

ground 44<br />

param 43<br />

parameters 43<br />

pgalias 44<br />

power 44<br />

global nodes 42, 53<br />

global_override_port 53<br />

H<br />

hier_separator 54<br />

hierarchical information, printing 62<br />

hierarchical separators 54<br />

high 240<br />

HOLD timing check 39<br />

HSPICE netlist syntax 83<br />

I<br />

ignore_excess_pin 54<br />

ignore_meas 54<br />

include statement 76<br />

inductors, minimum value 57<br />

initial condition, specifying 74<br />

internal calculations, customizing 302<br />

invoke command 146<br />

io 241


J<br />

junction diodes 56<br />

K<br />

keep_0v_dcvs 55<br />

keep_distinct_cap 55<br />

keep_junc_diode 20, 55<br />

keep_unc_node 56<br />

L<br />

l_scale parameter command 160, 171<br />

lateral diffusion 200<br />

ldiff parameter command 160, 169<br />

lmlt parameter command 160, 171<br />

logic constants 220, 228, 233, 238<br />

low 240<br />

lratio command 147<br />

LSIM netlist 82<br />

M<br />

max_res_value 56<br />

maximum resistance, specifying 56<br />

Meas utility 267<br />

message limit, setting 66<br />

min_cap_value 56<br />

min_fcap_value 57<br />

min_ind_value 57<br />

min_res_value 57<br />

mlt parameter command 160, 171<br />

model file 99<br />

model_alias parameter command 161, 175<br />

MOS devices 103<br />

SPICE 103<br />

MOS9 139<br />

multiple VDD and GND nodes 102<br />

N<br />

n_length parameter command 160, 164<br />

n_width parameter command 160, 164<br />

net flattening hierarchy 59<br />

netlist control options 45<br />

bus_notation 46<br />

case 47<br />

case specification 47<br />

cspf_cap_select 47, 88<br />

cspf_disable_net 48<br />

cspf_name_map_proc 48<br />

cspf_net 49<br />

cspf_process_ccap 49<br />

db_file 50<br />

dont_compress_db 50<br />

dpf_name_map_proc 51<br />

edif2e_args 51<br />

edif2e_output_file 52<br />

epic_cell_lib_path 52<br />

error_undefined_param 52<br />

find_top_mod 53<br />

floating_nodes_ok 53<br />

force_global_model 53<br />

global_override_port 53<br />

hier_separator 54<br />

ignore_excess_pin 54<br />

ignore_meas 54<br />

keep_0v_dcvs 55<br />

keep_distinct_cap 55<br />

keep_junc_diode 20, 55<br />

keep_unc_node 56<br />

max_res_value 56<br />

min_cap_value 56<br />

min_fcap_value 57<br />

min_ind_value 57<br />

min_res_value 57<br />

netlist_suffix 58<br />

nf_expand_inst 58<br />

nf_flatten_ins 59<br />

param_passing_rule 59<br />

parse_error_limit 60<br />

363<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


364 Index<br />

prefer_model 60<br />

prefer_model_inst 61<br />

prefer_model_port_map 60<br />

prefer_model_port_map_inst 61<br />

rcr 62<br />

rcr_preserve_name 63<br />

report_missing_subckt 64<br />

report_unused_port 64<br />

scale_cap 64<br />

scale_cmos_length 65<br />

scale_cmos_width 65<br />

scale_res 65<br />

set_message_limit 66<br />

split_floating_cap 66<br />

syntax 46<br />

top_module 67<br />

user_lib 67<br />

vlog2e_args 68<br />

vlog2e_output_file 69<br />

netlist formats, supported 79<br />

netlist library 81<br />

netlist suffix 58<br />

netlist_suffix 58<br />

netlists<br />

filename extensions 80<br />

formats 80<br />

new_format parameter command 161, 181<br />

nf_expand_inst 58<br />

nf_flatten_inst 59<br />

nl parameter command 160, 164<br />

no_nrd_nrs parameter command 161, 179<br />

nodes<br />

dangling 330<br />

floating 330<br />

unconnected 56<br />

nrd_nrs_caps parameter command 161, 180<br />

nsvt 226<br />

nw parameter command 160, 164<br />

O<br />

one 228<br />

out 242<br />

output file<br />

active nodes 324<br />

current 311<br />

errors 331<br />

inactive nodes 326<br />

logic states 311<br />

node alias names 328<br />

voltage 311<br />

warning messages 330<br />

output file (.act) 324<br />

format 324<br />

sample file 325<br />

output file (.err) 331<br />

block delay characterization errors 338<br />

bus contention errrors 336<br />

comparison errors 333<br />

high impedance condition 337<br />

multiple-pulse errors 344<br />

multiple-toggle errors 343<br />

power diagnosis 339<br />

sample file 348<br />

unknown state 337<br />

output file (.log) 330<br />

output file (.nact) 326<br />

format 326<br />

sample file 327<br />

output file (.nodealias) 328<br />

format 328<br />

sample file 328<br />

output file (.out)<br />

format 311<br />

keywords 313<br />

line format 312<br />

logic state numbers 317<br />

period lines 312, 313<br />

PowerMill sample file 320<br />

signal attributes 316<br />

TimeMill sample file 318<br />

output_resistance 242


P<br />

p_length parameter command 160, 164<br />

p_width parameter command 160, 164<br />

param_passing_rule 59<br />

parameter passing 43, 60, 69<br />

HSPICE 71<br />

HSPICE convention 69<br />

parameters<br />

defining 70<br />

undefined 52<br />

parse_error_limit 60<br />

pattern stimulus 220, 229<br />

period 243<br />

pins, excess 54<br />

pl parameter command 160, 164<br />

PMOS channel widths 167<br />

pn_ratio parameter command 160, 167<br />

port mapping<br />

name-based 12–13<br />

position-based 12–13<br />

ports, reporting 64<br />

power nodes 111<br />

prefer_model 60<br />

prefer_model_inst 61<br />

prefer_model_port_map 60<br />

prefer_model_port_map_inst 61<br />

ptn 229<br />

pulse width timing check 41<br />

pw parameter command 160, 164<br />

PWL mode 75<br />

R<br />

radix 243<br />

RC reduction 62<br />

preserving nodes 63<br />

rcr 62<br />

rcr_preserve_name 63<br />

report_missing_subckt 64<br />

report_unused_port 64<br />

resistance value, minimum 112<br />

resistance, scale factor 65<br />

resistor, minimum resistance 57<br />

rise 244<br />

rsh parameter command 161, 178<br />

runscript<br />

simulation<br />

runscript 152<br />

S<br />

scale factors, MOS devices<br />

length 65<br />

width 65<br />

scale_cap 64<br />

scale_cmos_length 65<br />

scale_cmos_width 65<br />

scale_res 65<br />

sense pair, specifying 76<br />

separate power reporting 102<br />

set_message_limit 66<br />

signal 244<br />

simulation<br />

running 152<br />

SimWave 286<br />

slope 244<br />

source-to-drain checking 92<br />

speed command 148<br />

speed parameter command 162, 193<br />

SPF file<br />

back-annotation 47, 48<br />

correcting mismatches 49<br />

coupling capacitors 49<br />

parasitic information 49<br />

SPF netlist<br />

control options<br />

name mapping 89<br />

net specification 90<br />

process coupling capacitors 91<br />

discard net 87<br />

limitations 92<br />

SPICE models 53<br />

SPICE netlist 82<br />

365<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


366 Index<br />

.options statements 46<br />

characteristics 82<br />

syntax 46<br />

SPICE netlist translator (spice2e)<br />

alias file 99<br />

configuration file, generated by 102<br />

default file 99, 103<br />

ignored syntax 115<br />

model file 99<br />

spice2e.log file 115<br />

supported syntax 114<br />

syntax 109<br />

syntax to avoid 116<br />

spice2e. See SPICE netlist translator<br />

split_floating_cap 66<br />

stimulus functions 219<br />

clk 221<br />

cnt 223<br />

one 228<br />

ptn 229<br />

tgl 231<br />

udf 233<br />

vec 234, 236<br />

vec_chk 236<br />

zero 238<br />

subcircuit definition 53<br />

locating 64<br />

names 60<br />

substrate<br />

terminal 112<br />

terminal bias 117<br />

subthreshold currents 189<br />

T<br />

T_Code description codes 332<br />

technology files 140<br />

*epic_tech command 141<br />

automatic generation 140<br />

3dtable command 149<br />

binary command 142<br />

body_bias command 143<br />

direct command 144<br />

gentech_parameter command 145<br />

invoke command 146<br />

lratio command 147<br />

modifying netlists 141<br />

running a simulation 152<br />

speed command 148<br />

vds command 150<br />

vgs command 150<br />

voltage command 151<br />

wratio command 147<br />

command-line options 140<br />

runscript 152<br />

TechViewer utility 139, 209<br />

tgl 231<br />

time_scale 245<br />

timing checks<br />

edge-to-edge 40<br />

HOLD 38<br />

pulse width 41<br />

SETUP 37<br />

toggle stimulus 220, 231<br />

top module, specifying 67<br />

top_module 67<br />

tox parameter command 162, 188<br />

turboWave 286<br />

tutorials<br />

basic PowerMill simulation 133<br />

type 245<br />

U<br />

udf 233<br />

unit_adas parameter command 192<br />

unit_pdps parameter command 162, 192<br />

unit_wl parameter command 162, 192<br />

unused ports, reporting 64<br />

user_lib 67


V<br />

Vcd2e utility<br />

batch mode 298<br />

command-line options 288<br />

File menu 291<br />

signal file 294<br />

strobes 298<br />

syntax 288<br />

vds command 150<br />

vds parameter command 160, 173<br />

vec 234<br />

vec_chk 236<br />

vector file commands<br />

fall 244<br />

high 240<br />

io 241<br />

low 240<br />

out 242<br />

output_resistance 242<br />

period 243<br />

radix 243<br />

rise 244<br />

signal 244<br />

slope 244<br />

time_scale 245<br />

type 245<br />

vector stimulus 220, 234, 236<br />

vector translation utility. See Vcd2e utility<br />

Verilog netlist translator (vlog2e)<br />

command-line options 129<br />

specifying from command line 68<br />

syntax 129<br />

Veritech utility<br />

conventions 214<br />

vgs command 150<br />

vgs parameter command 160, 173<br />

Viewerror utility 349<br />

command-line options 349<br />

syntax 349<br />

vlog2e. See Verilog netlist translator<br />

vlog2e_args 68<br />

vlog2e_output_file 69<br />

voltage command 151<br />

vto parameter command 162, 190<br />

W<br />

w_scale parameter command 160, 171<br />

warning messages 330<br />

waveform display utilities 285<br />

wd parameter command 162<br />

wdiff parameter command 160, 169<br />

wire capacitance estimate 302<br />

wl_scale parameter command 160, 171<br />

wmlt parameter command 160, 171<br />

wratio command 147<br />

Z<br />

zero 238<br />

zero volt voltage source 55<br />

367<br />

<strong>EPIC</strong> <strong>Tools</strong> <strong>Reference</strong> <strong>Guide</strong>


368 Index

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!