ElectricalCoreClasses.mesa
Copyright Ó 1987 by Xerox Corporation. All rights reserved.
Written by: Pradeep Sindhu April 1, 1986 1:12:34 am PST
Last Edited by:
Last Edited by: Richley June 23, 1987 12:38:24 pm PDT
Christian Le Cocq April 8, 1988 2:44:53 pm PDT
Christian LeCocq February 11, 1987 5:10:50 pm PST
Bertrand Serlet April 15, 1987 4:11:27 pm PDT
Pradeep Sindhu April 30, 1986 10:31:53 pm PDT
ElectricalCoreClasses: CEDAR DEFINITIONS = BEGIN OPEN Core;
Theory
This interface defines the electrical elements of integrated circuits, plus a few tricks used by the simulators.
Basic Types and Associated Procs
V: TYPE = REAL;
KOhms: TYPE = REAL;
pF: TYPE = REAL;
ns: TYPE = REAL;
Hz: TYPE = REAL;
mA: TYPE = REAL;
uH: TYPE = REAL;
CorV: TYPE = {Voltage, Current};
RopeFromV: PROC [v: V] RETURNS [rope: ROPE];
RopeFromKOhms: PROC [r: KOhms] RETURNS [rope: ROPE];
RopeFrompF: PROC [c: pF] RETURNS [rope: ROPE];
RopeFromns: PROC [t: ns] RETURNS [rope: ROPE];
RopeFrommA: PROC [i: mA] RETURNS [rope: ROPE];
RopeFromuH: PROC [l: uH] RETURNS [rope: ROPE];
Resistor
resistorCellClass: CellClass;
Resistor:
TYPE =
REF ResistorRec;
ResistorRec:
TYPE =
RECORD [
value: KOhms];
ResistorPort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1)};
Public wires: n0, n1.
CreateResistor: PROC [args: ResistorRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [resistor: CellType];
Inductor
inductorCellClass: CellClass;
Inductor:
TYPE =
REF InductorRec;
InductorRec:
TYPE =
RECORD [
value: uH];
InductorPort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1)};
Public wires: n0, n1.
CreateInductor: PROC [args: InductorRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [inductor: CellType];
Capacitor
capacitorCellClass: CellClass;
Capacitor:
TYPE =
REF CapacitorRec;
CapacitorRec:
TYPE =
RECORD [
value: pF];
CapacitorPort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1)};
Public wires: n0, n1.
CreateCapacitor: PROC [args: CapacitorRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [capacitor: CellType];
Bipolar Junction Transistor
bjtCellClass: CellClass;
BJT:
TYPE =
REF BJTRec;
BJTRec:
TYPE =
RECORD [
type: BJTType ← npn,
area: REAL];
BJTType:
TYPE = {npn, pnp};
BJTPort:
TYPE =
MACHINE
DEPENDENT {c(0), b(1), e(2)};
Public wires: e, b, c.
CreateBJT: PROC [args: BJTRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [cellType: CellType];
Diode
diodeCellClass: CellClass;
Diode:
TYPE =
REF DiodeRec;
DiodeRec:
TYPE =
RECORD [
type: DiodeType ← Junction,
area: REAL];
DiodeType:
TYPE = {Junction, Zenner, Varicap, Special};
DiodePort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1)};
Public wires: n0, n1.
CreateDiode: PROC [args: DiodeRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [cellType: CellType];
Coupled Inductors
coupledIndCellClass: CellClass;
CoupledInd:
TYPE =
REF CoupledIndRec;
CoupledIndRec:
TYPE =
RECORD [
l1: uH, -- inductance between n0 and n1
l2: uH, -- inductance between n2 and n3
k: REAL -- coefficient of coupling
];
CoupledIndPort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1), n2(2), n3(3)};
Public wires: n0, n1, n2, n3.
CreateCoupledInd: PROC [args: CoupledIndRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [cellType: CellType];
Lossless Line
losslessLineCellClass: CellClass;
LosslessLine:
TYPE =
REF LosslessLineRec;
LosslessLineRec:
TYPE =
RECORD [
z0: KOhms, -- characteristic impedance
td: ns -- transmission delay
];
LosslessLinePort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1), n2(2), n3(3)};
Public wires: n0, n1, n2, n3.
CreateLosslessLine: PROC [args: LosslessLineRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [cellType: CellType];
Linear Sources
linearSourceCellClass: CellClass;
LinearSource:
TYPE =
REF LinearSourceRec;
LinearSourceRec:
TYPE =
RECORD [
type: LinearType ← VCVS,
value: REAL];
LinearType:
TYPE = {
VCCS,
VCVS,
CCCS, ccvs};
LinearSourcePort:
TYPE =
MACHINE
DEPENDENT {n0(0), n1(1), n2(2), n3(3)};
Public wires: n0, n1, n2, n3.
CreateLinearSource: PROC [args: LinearSourceRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [cellType: CellType];
Pulse Generator
signalGeneratorCellClass: CellClass;
SignalGenerator:
TYPE =
REF SignalGeneratorRec;
SignalGeneratorRec:
TYPE =
RECORD [
type: SignalGeneratorType ← DC,
onLevel: V ← 5.0,
offLevel: V ← 0.0,
period: ns ← 0.0,
width: ns ← 0.0,
tRise: ns ← 0.0,
tFall: ns ← 0.0,
tDelay: ns ← 0.0];
SignalGeneratorType: TYPE = {DC, RectWave, OneShot, Step};
SignalGeneratorPort:
TYPE =
MACHINE
DEPENDENT {n(0)};
Public wires: n.
CreateSignalGenerator: PROC [args: SignalGeneratorRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [signalGenerator: CellType];
Sine Generator
sineGeneratorCellClass: CellClass;
SineGenerator:
TYPE =
REF SineGeneratorRec;
SineGeneratorRec:
TYPE =
RECORD [
v0: V ← 1.0,
vA: V ← 1.0,
freq: Hz ← 1.0,
td: ns ← 0.0,
theta: Hz ← 0.0];
SineGeneratorPort:
TYPE =
MACHINE
DEPENDENT {n(0)};
Public wires: n.
CreateSineGenerator: PROC [args: SineGeneratorRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [sineGenerator: CellType];
AC Source
acSourceCellClass: CellClass;
ACSource:
TYPE =
REF ACSourceRec;
ACSourceRec:
TYPE =
RECORD [
mag: V ← 1.0,
phase: REAL ← 0.0];
ACSourcePort:
TYPE =
MACHINE
DEPENDENT {n(0)};
Public wires: n.
CreateACSource: PROC [args: ACSourceRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [acSource: CellType];
Probe
probeCellClass: CellClass;
Probe:
TYPE =
REF ProbeRec;
ProbeRec:
TYPE =
RECORD [
type: CorV ← Voltage,
acKind: Rope.ROPE ← NIL,
scale: REAL ← 1.0,
resistance: KOhms ← 0.001];
ProbeType: TYPE = {Voltage, Current};
Public wires: depends on the type of probe.
CreateProbe: PROC [args: ProbeRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [probe: CellType];
Init
initCellClass: CellClass;
Init:
TYPE =
REF InitRec;
InitRec:
TYPE =
RECORD [
type: CorV ← Voltage,
value: REAL ← 5.0,
time: ns ← 0.0];
Public wires: depends on the type of init.
CreateInit: PROC [args: InitRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [init: CellType];
Panel
panelCellClass: CellClass;
Panel:
TYPE =
REF PanelRec;
PanelRec:
TYPE =
RECORD [
title: ROPE ← NIL,
tMin: ns ← 0.0,
tMax: ns ← 100.0,
tStep: ns ← 0.05,
yMin: V ← -1.0,
yMax: V ← 5.0,
tScale: REAL ← 1.0,
iScale: mA ← 1.0];
Public wires: none.
CreatePanel: PROC [args: PanelRec, name: ROPE ← NIL, props: Properties ← NIL] RETURNS [Panel: CellType];
END.