DIRECTORY Core, CoreClasses, CoreCreate, CoreFlat, Ports, Rosemary, RosemaryUser; Example: CEDAR PROGRAM IMPORTS CoreClasses, CoreCreate, CoreFlat, Ports, Rosemary ~ BEGIN CellType : TYPE = Core.CellType; CellTypes: TYPE = LIST OF Core.CellType; Level: TYPE = Ports.Level; Properties : TYPE = Core.Properties; ROPE: TYPE = Core.ROPE; Wire: TYPE = Core.Wire; Wires: TYPE = Core.Wires; PA: TYPE = CoreCreate.PA; WR: TYPE = CoreCreate.WR; FFState: TYPE = REF FFStateRec; FFStateRec: TYPE = RECORD [ prevClk: Ports.Level, master: Ports.Level ]; Vdd, Gnd, D, Q, Clk: NAT; MyFF: PUBLIC PROC [] RETURNS [ct: CellType] = { public: Wire _ CoreCreate.WireList[LIST["Vdd", "Gnd", "D", "Q", "Clk"]]; ct _ CoreClasses.CreateUnspecified[public: public]; [] _ Rosemary.BindCellType[cellType: ct, roseClassName: myFFName]; [] _ CoreFlat.CellTypeCutLabels[ct, "Logic"]; [Vdd, Gnd, D, Q, Clk] _ Ports.PortIndexes[ct.public, "Vdd", "Gnd", "D", "Q", "Clk"]; Ports.InitPorts[ct, b, none, "Vdd"]; Ports.InitPorts[ct, b, none, "Gnd"]; Ports.InitPorts[ct, l, none, "D"]; Ports.InitPorts[ct, l, drive, "Q"]; Ports.InitPorts[ct, l, none, "Clk"]; }; MyFFInit: Rosemary.InitProc = { ffState: FFState _ IF oldStateAny=NIL THEN NEW[FFStateRec] ELSE NARROW[oldStateAny, FFState]; ffState.prevClk _ X; ffState.master _ X; stateAny _ ffState; }; MyFFEval: Rosemary.EvalProc = { ffState: FFState _ NARROW[stateAny]; IF p[Clk].l = X THEN p[Q].l _ X ELSE { IF p[Clk].l = L THEN ffState.master _ p[D].l; IF ffState.prevClk=L AND p[Clk].l=H THEN p[Q].l _ ffState.master; }; ffState.prevClk _ p[Clk].l; }; myFFName: ROPE = Rosemary.Register[roseClassName: "MyFF", init: MyFFInit, evalSimple: MyFFEval]; END. φRoseExample.mesa Pradeep Sindhu August 5, 1987 3:55:27 pm PDT Flip Flop Section --PROC [cellType: Core.CellType, p: Ports.Port, oldStateAny: REF ANY _ NIL] RETURNS [stateAny: REF ANY _ NIL]-- --PROC [p: Ports.Port, stateAny: REF ANY]-- ΚH˜™Icode™,J™—J™šΟk ˜ KšœG˜G—J™KšΡblnœœ˜Kšœ3˜:šœ˜K˜—head™Kšœ œ˜ Kšœ œœœ˜(Kšœœ˜Kšœ œ˜$Kšœœœ˜Kšœœ ˜Kšœœ˜Kšœœœ˜Kšœœœ˜K˜Kšœ œœ ˜šœ œœ˜K˜K˜K˜—K˜Kšœœ˜K˜šžœœœœ˜/Kšœ#œ!˜HKšœ3˜3KšœB˜BKšœ-˜-KšœT˜TK˜$K˜$K˜"K˜#K˜$Kšœ˜K˜—šžœ˜KšΟco™oKš œœ œœœ œœ˜]K˜K˜K˜Kšœ˜K˜—šžœ˜KšŸ+™+Kšœœ ˜$šœ ˜Kšœ ˜šœ˜Kšœœ˜-Kšœœ œ˜AK˜——Kšœ˜Kšœ˜—K˜šœ œR˜`K˜——Kšœ˜J™—…—Ž Μ