DIRECTORY CoreCreate, Ports, Sisyph; Logic: CEDAR DEFINITIONS = BEGIN OPEN CoreCreate; Vdd: PROC RETURNS [ct: CellType]; Gnd: PROC RETURNS [ct: CellType]; Inv: PROC RETURNS [ct: CellType]; InvBuffer: PROC RETURNS [ct: CellType]; And2: PROC RETURNS [ct: CellType]; And3: PROC RETURNS [ct: CellType]; And4: PROC RETURNS [ct: CellType]; Nand2: PROC RETURNS [ct: CellType]; Nand3: PROC RETURNS [ct: CellType]; Nand4: PROC RETURNS [ct: CellType]; Or2: PROC RETURNS [ct: CellType]; Or3: PROC RETURNS [ct: CellType]; Or4: PROC RETURNS [ct: CellType]; Nor2: PROC RETURNS [ct: CellType]; Nor3: PROC RETURNS [ct: CellType]; Nor4: PROC RETURNS [ct: CellType]; Xor2: PROC RETURNS [ct: CellType]; Xnor2: PROC RETURNS [ct: CellType]; invMux2: PROC RETURNS [ct: CellType]; MSFlipFlop: PROC RETURNS [ct: CellType]; Latch1: PROC RETURNS [ct: CellType]; Register: PROC [b: NAT] RETURNS [ct: CellType]; Latch : PROC [b: NAT] RETURNS [ct: CellType]; TstBuffer : PROC [b: NAT] RETURNS [ct: CellType]; Adder: PROC [b: NAT] RETURNS [ct: CellType]; ALU: PROC [b: NAT] RETURNS [ct: CellType]; Constant: PROC [b: NAT, v: INT] RETURNS [ct: CellType]; Comparator: PROC [b: NAT] RETURNS [ct: CellType]; Mux2: PROC [b: NAT _ 2] RETURNS [ct: CellType]; Mux3: PROC [b: NAT _ 2] RETURNS [ct: CellType]; Mux4: PROC [b: NAT, i: NAT _ 2] RETURNS [ct: CellType]; Decoder: PROC [a: NAT, s: NAT _ 0] RETURNS [ct: CellType]; Counter: PROC [b: NAT] RETURNS [ct: CellType]; ShiftRegister: PROC [b: NAT] RETURNS [ct: CellType]; OnePortRam: PROC [b: NAT, a: NAT, w: NAT _ 0] RETURNS [ct: CellType]; TwoPortRam: PROC [b: NAT, a: NAT, w: NAT _ 0] RETURNS [ct: CellType]; ThreePortRam: PROC [b: NAT, a: NAT, w: NAT _ 0] RETURNS [ct: CellType]; ROM: PROC [b: NAT, a: NAT, w: NAT _ 0, rp: NAT _ 1, wp: NAT _ 1] RETURNS [ct: CellType]; PLA: PROC [b: NAT, a: NAT, w: NAT _ 0, rp: NAT _ 1, wp: NAT _ 1] RETURNS [ct: CellType]; -- **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** SetObjectPort: PROC [cx: Sisyph.Context, initType: Ports.PortType _ b, initDrive: Ports.Drive _ none]; SetObjectTesterDrive: PROC [cx: Sisyph.Context, initDrive: Ports.Drive _ none]; ClockGen: PROC [up, dn, firstUp: NAT] RETURNS [ct: CellType]; END. zLogic.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Barth, May 9, 1986 4:41:56 pm PDT Last Edited by: Louis Monier July 22, 1986 9:45:33 am PDT -- This module provides basic blocks for logic description and simulation of ICs. Every procedure corresponds to an icon in the library "Logic.dale" i.e. extracting such an icon using Sisyph will call the corresponding procedure. The difference with a library like SSI is that there is no electrical notion attached to the cells, only logic behavior. -- There are two types of cells in this library: the simple ones and the composite ones. The simple ones (inverter, nor4, ...) are similar to the cells in SSI and have usually a corresponding standard cell in most decent libraries. The composite ones (i.e. adder) have a Core structure using cells of the first type as leaves. Both have a behavioral procedure for simulating using Rosemary. -- Very basic standard cells "Vdd", "Gnd" "Vdd", "Gnd" "Vdd", "Gnd", "I", "X" "Vdd", "Gnd", "I", "X" "Vdd", "Gnd", "I-A", "I-B", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "I-D", "X" "Vdd", "Gnd", "I-A", "I-B", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "I-D", "X" "Vdd", "Gnd", "I-A", "I-B", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "I-D", "X" "Vdd", "Gnd", "I-A", "I-B", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "X" "Vdd", "Gnd", "I-A", "I-B", "I-C", "I-D", "X" "Vdd", "Gnd", "I-A", "I-B", "X" "Vdd", "Gnd", "I-A", "I-B", "X" "Vdd", "Gnd", "A", "B", "selA", "nOut" "Vdd", "Gnd", "D", "Q", "NQ", "CK", "nR", "nP" "Vdd", "Gnd", "D", "Q", "NQ", "E", "nR", "nP" -- Composite (macros) "Vdd", "Gnd", "CK", Seq["Input", b], Seq["Output", b], "nE", "nCl" "Vdd", "Gnd", Seq["Input", b], Seq["Output", b], "E", "cl" "Vdd", "Gnd", Seq["Input", b], Seq["Output", b], "E" "Vdd", "Gnd", "carryIn", Seq["A", b], Seq["B", b], Seq["Sum", b], "carryOut" "Vdd", "Gnd", "carryIn", Seq["A", b], Seq["B", b], Seq["Sum", b], "carryOut", Seq["F", 8] "Vdd", "Gnd", Seq["Output", b] Output is continuously driven to v with strength drive. "Vdd", "Gnd", Seq["A", i], Seq["B", i], "AEqB" "Vdd", "Gnd", "Select", Seq["In0", b], Seq["In1", b], Seq["Output", b] "Vdd", "Gnd", Seq["Select", 2], Seq["In0", b], Seq["In1", b], Seq["In2", b], Seq["Output", b] "Vdd", "Gnd", Seq["Select", i], Seq["In0", b], Seq["In1", b], Seq["In2", b], Seq["In3", b], Seq["Output", b] "Vdd", "Gnd", Seq["Address", a], Seq["nSelect", s], "nEnable" s=0 => s _ 2**a "Vdd", "Gnd", "CountA", "CountB", "Load", "UpNDown", Seq["Input", b], Seq["Output", b] "Vdd", "Gnd", "ShiftA", "ShiftB", "Load", "LeftNRight", "LeftInput", "RightInput", Seq["Input", b], Seq["Output", b] "Vdd", "Gnd", "Load", Seq["Address", a], Seq["Input", b], Seq["Output", b] w is the number of words w=0 => w _ 2**a w > 2**a => ERROR "Vdd", "Gnd", "Load", Seq["Address", a], Seq["Input", b], Seq["Output", b] w is the number of words w=0 => w _ 2**a w > 2**a => ERROR "Vdd", "Gnd", "Load", Seq["Address", a], Seq["Input", b], Seq["Output", b] w is the number of words w=0 => w _ 2**a w > 2**a => ERROR "Vdd", "Gnd", Seq["Load", wp], Seq["WriteAddress", wp, Seq[size: a]], Seq["ReadAddress", rp, Seq[size: a]], Seq["Input", wp, Seq[size: b]], Seq["Output", rp, Seq[size: b]] w is the number of words w=0 => w _ 2**a w > 2**a => ERROR "Vdd", "Gnd", Seq["Load", wp], Seq["WriteAddress", wp, Seq[size: a]], Seq["ReadAddress", rp, Seq[size: a]], Seq["Input", wp, Seq[size: b]], Seq["Output", rp, Seq[size: b]] w is the number of words w=0 => w _ 2**a w > 2**a => ERROR -- These belong in Sch, but Sch must be redone, so in the mean time... "Time", "Clock" ΚΚ˜codešœ ™ Kšœ Οmœ1™