<> <> <> <> <> <> DIRECTORY Buttons, ChoiceButtons, Core, CoreFlat, RefTab, IO, PlotGraph, Ports, Rosemary, ViewerClasses; RosemaryUser: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Core.ROPE; <> <> <<>> DisplayViewer: PROC [simulation: Rosemary.Simulation, cellType: Core.CellType, name: ROPE _ NIL, displayWires: CoreFlat.FlatWires _ NIL, graphWires: CoreFlat.FlatWires _ NIL] RETURNS [handle: RoseDisplay]; LogSettle: PROC [handle: RoseDisplay, time: INT, memory: BOOL _ TRUE]; <> UpdateDisplay: PROC [handle: RoseDisplay]; InitializeDeltas: PROC [handle: RoseDisplay]; <> RecordDelta: PROC [handle: RoseDisplay, wire: Rosemary.RoseWire, time: INT]; <> DeltaFinished: PROC [handle: RoseDisplay, time: INT]; <> RecordStateSample: PROC [handle: RoseDisplay, roseInstance: Rosemary.RoseCellInstance, value: Ports.LevelSequence, time: INT]; <> <> TestProcedureViewer: PROC [cellType: Core.CellType, testButtons: LIST OF ROPE, name: ROPE _ NIL, displayWires: CoreFlat.FlatWires _ NIL, graphWires: CoreFlat.FlatWires _ NIL, cutSet: CoreFlat.CutSet _ NIL, historySize: NAT _ 0, steady: BOOL _ FALSE, recordDeltas: BOOL _ TRUE] RETURNS [tester: Tester]; <> StartTest: PROC [tester: Tester]; SetProceedUntil: PROC [tester: Tester, count: INT]; RegisterTestProc: PROC [name: ROPE, proc: TestProc]; TestProc: TYPE = PROC [simulation: Rosemary.Simulation, cellType: Core.CellType, p: Ports.Port, Eval: TestEvalProc]; TestEvalProc: TYPE = PROC [memory: BOOL _ TRUE, clockEval: BOOL _ FALSE, checkPorts: BOOL _ TRUE]; <> RoseDisplayFor: PROC [cellType: Core.CellType] RETURNS [RoseDisplay]; <> <<>> DisplayPortLeafWires: PROC [root: Core.CellType, flatCell: CoreFlat.FlatCellTypeRec _ CoreFlat.rootCellType] RETURNS [displayWires: CoreFlat.FlatWires]; AddWireToPlot: PROC [handle: RoseDisplay, wire: CoreFlat.FlatWire] RETURNS [msg: ROPE _ NIL]; RemoveWireFromPlot: PROC [handle: RoseDisplay, wire: CoreFlat.FlatWire] RETURNS [found: BOOL _ FALSE]; WireTimeValue: PROC [handle: RoseDisplay, flatWire: CoreFlat.FlatWire, time: INT] RETURNS [value: Ports.LevelSequence]; <> <> AddStateToPlot: PROC [handle: RoseDisplay, flatCell: CoreFlat.FlatCellType, data: REF ANY _ NIL] RETURNS [msg: ROPE _ NIL]; <> <<>> RemoveStateFromPlot: PROC [handle: RoseDisplay, flatCell: CoreFlat.FlatCellType, data: REF ANY _ NIL] RETURNS [found: BOOL _ FALSE]; <<>> stateToMaxCharsProcProp: ATOM; -- $RoseStateToMaxCharsProc <> <<>> StateToMaxCharsProc: TYPE = PROC [stateAny: REF ANY, data: REF ANY _ NIL] RETURNS [maxChars: NAT _ 0]; <> stateToRopeProcProp: ATOM; -- $RoseStateToRopeProc <> <<>> StateToRopeProc: TYPE = PROC [stateAny: REF ANY, value: Ports.LevelSequence, data: REF ANY _ NIL] RETURNS [rope: ROPE]; <> <<>> StateTimeValue: PROC [handle: RoseDisplay, flatCell: CoreFlat.FlatCellType, time: INT] RETURNS [value: Ports.LevelSequence]; <> <> CheckCoverage: PROC [handle: RoseDisplay] RETURNS [ok: BOOL]; <> <> <> <<>> Tester: TYPE = REF TesterRec; TesterRec: TYPE = RECORD [ intermediatePort: Ports.Port _ NIL, runState: ViewerClasses.Viewer _ NIL, evalsSinceStart: ViewerClasses.Viewer _ NIL, evalSinceStartCount: INT, proceedUntil: ViewerClasses.Viewer _ NIL, evalUntil: INT, historyTrigger: ViewerClasses.Viewer _ NIL, historyTriggerCount: INT, currentStatePoint: NAT _ 0, displayedStatePoint: NAT _ 0, validStates: NAT _ 0, historySize: NAT _ 0, testVectorBuffer: Rosemary.PortSequence _ NIL, proceed: CONDITION, testStarted: BOOL _ FALSE, waiting: BOOL _ FALSE, abort: BOOL _ FALSE, interrupt: BOOL _ FALSE, singleEval: BOOL _ FALSE, testButtonList: LIST OF Buttons.Button, currentTestProc: ROPE _ NIL, display: RoseDisplay _ NIL, steadyInit: BOOL _ TRUE]; timeBlock: NAT = 4096; TimeSteps: TYPE ~ REF TimeStepsRep; -- keeps time->mossim step relation TimeStepsRep: TYPE ~ ARRAY [0..timeBlock) OF INT; RoseDisplay: TYPE = REF RoseDisplayRec; RoseDisplayRec: TYPE = RECORD [ name: ROPE _ NIL, cellType: Core.CellType, simulation: Rosemary.Simulation, displayWires: LIST OF ChoiceButtons.PromptDataRef _ NIL, tsin: IO.STREAM _ NIL, tsout: IO.STREAM _ NIL, path: ViewerClasses.Viewer _ NIL, currentWire: ViewerClasses.Viewer _ NIL, plot: PlotGraph.Plot _ NIL, ps: IO.STREAM _ NIL, psLock: BOOL _ FALSE, psWait: CONDITION, lastValidTime: INT _ -1, wDir: REF ANY _ NIL, traceChanges: BOOL _ FALSE, recordDeltas: BOOL _ TRUE, -- data must be logged on backing file recordSteps: BOOL _ FALSE, -- if recordDeltas, log at MosSim step granularity plotStyle: {allSteps, waveSteps, noSteps} _ noSteps, -- should MosSim steps appear on plot cutSet: CoreFlat.CutSet _ NIL, wBuff: REF TEXT _ NIL, -- output logging speedup filePos: INT _ 0, -- logical position in backing file timeSteps: ARRAY [0..1024) OF TimeSteps _ ALL[NIL]]; END.