DIRECTORY IO, Random, Rope; DynaSeer: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; Handle: TYPE = REF HandleRec; HandleRec: TYPE = RECORD [ numCycles: INT _ 0, cycleNumber: INT _ 1, devices: LIST OF Device _ NIL, firstmem, lastmem, memPtr: DeviceId, bubblesPerSwitch: NAT _ 2, lastNonDataCycle: Cycle, -- Used in computing bubbles memRequests: ARRAY DeviceId OF Request _ ALL[NIL], firstcache, lastcache, display, cacheLPPtr, cacheHPPtr: DeviceId, cacheHPRequests: ARRAY DeviceId OF Request _ ALL[NIL], cacheLPRequests: ARRAY DeviceId OF Request _ ALL[NIL], displayHPRequest: Request _ NIL, displayLPRequest: Request _ NIL, history: LIST OF Cycle _ NIL, in, out: IO.STREAM, arbLatency: INT, stats: REF _ NIL ]; Cmd: TYPE = {NoOp, DataCycle, Bubble, RBRqst, RBRply, WBRqst, WBRply, WSRqst, WSRply}; Cycle: TYPE = REF CycleRec; CycleRec: TYPE = RECORD [ cmd: Cmd, deviceId: DeviceId _ 0, master: DeviceId _ 0, data: INT _ 0, grantLatency: NAT _ 0 ]; Cycles: TYPE = LIST OF Cycle; DeviceId: TYPE = [0..256); Length: TYPE = {One, Two, Five}; -- One is used for NoOps Priority: TYPE = {Low, High}; Request: TYPE = REF RequestRec; RequestRec: TYPE = RECORD[ length: Length, cycles: LIST OF Cycle, priority: Priority ]; Device: TYPE = REF DeviceRec; DeviceRec: TYPE = RECORD [ deviceId: DeviceId, state: REF, init: InitProc, cycle: CycleProc ]; InitProc: TYPE = PROC [handle: Handle, device: Device]; CycleProc: TYPE = PROC [handle: Handle, device: Device, cycle: Cycle]; procCycle: REAL = 100.0; -- ns busCycle: REAL = 25.0; -- ns CreateDevice: PROC [] RETURNS [device: Device]; MakeCycle: PROC [cmd: Cmd, deviceId, master: DeviceId _ 0, data: INT _ 0] RETURNS [cycle: Cycle]; MakeNoOp: PROC [] RETURNS [cycle: Cycle]; MakeDataCycles: PROC [length: Length] RETURNS [Cycles]; MakeBubble: PROC [] RETURNS [cycle: Cycle]; MakeRequest: PROC [length: Length, header: Cycle, priority: Priority _ Low] RETURNS [request: Request]; IsDataCycle: PROC [cycle: Cycle] RETURNS [BOOL _ FALSE]; IsUsefulCycle: PROC [cycle: Cycle] RETURNS [BOOL _ FALSE]; IsHeaderCycle: PROC [cycle: Cycle] RETURNS [BOOL _ FALSE]; IsReplyCycle: PROC [cycle: Cycle] RETURNS [BOOL _ FALSE]; IsRequestCycle: PROC [cycle: Cycle] RETURNS [BOOL _ FALSE]; IsDisplay: PROC [handle: Handle, deviceId: DeviceId] RETURNS [BOOL _ FALSE]; IsCache: PROC [handle: Handle, deviceId: DeviceId] RETURNS [BOOL _ FALSE]; IsMemory: PROC [handle: Handle, deviceId: DeviceId] RETURNS [BOOL _ FALSE]; CreateSimulation: PROC [in, out: IO.STREAM, numCycles, numMemories, numCaches, arbLatency: INT] RETURNS [handle: Handle]; GetIntParm: PROC [in, out: IO.STREAM, prompt: ROPE, default: INT] RETURNS [val: INT]; GetRealParm: PROC [in, out: IO.STREAM, prompt: ROPE, default: REAL] RETURNS [val: REAL]; RunSimulation: PROC [handle: Handle]; END. 6DynaSeer.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Written By: Pradeep Sindhu September 18, 1986 3:58:44 pm PDT Pradeep Sindhu September 26, 1986 8:49:30 pm PDT Last Edited by: Louis Monier September 24, 1986 3:53:30 pm PDT Type Definitions Device and Bus Procs Simulation Procs Κγ˜– "Cedar" stylešœ™Icode– "Cedar" stylešœ Οmœ1™—J˜šΟk œ˜ Jšžœ˜—J˜JšΟnœžœž œž˜#head™KšΠbkœžœžœ˜K˜KšΟbœžœžœ ˜š‘ œžœžœ˜Kšœ žœ˜Kšœ žœ˜Kšœ žœžœ žœ˜K˜K˜$Kšœžœ˜KšœΟc˜6Kš œ žœ žœ žœžœ˜2K˜K˜AKš œžœ žœ žœžœ˜6Kš œžœ žœ žœžœ˜6K˜Kšœžœ˜ Kšœžœ˜ K˜Kšœ žœžœ žœ˜Kšœ žœžœ˜K˜Kšœ žœ˜K˜Kšœžœž˜K˜—K˜Kš‘œžœM˜VKš‘œžœžœ ˜š‘œžœžœ˜K˜ K˜Kšœ˜Kšœžœ˜Kšœžœ˜Kšœ˜—K˜Kš‘œžœžœžœ˜Kš‘œžœ ˜Kš‘œžœ’˜9Kš‘œžœ˜K˜Kš‘œžœžœ ˜š‘ œžœžœ˜Kšœ˜Kšœžœžœ˜Kšœ˜K˜—K˜Kš‘œžœžœ ˜š‘ œžœžœ˜K˜Kšœžœ˜ Kšœ˜Kšœ˜Kšœ˜—K˜Kš‘œžœžœ"˜7Kš‘ œžœžœ0˜FKšœ žœ ’˜Kšœ žœ ’˜K˜—™KšŸ œžœžœ˜/KšŸ œžœ2žœžœ˜aKšŸœžœžœ˜)KšŸœžœžœ ˜7KšŸ œžœžœ˜+KšŸ œžœ;žœ˜gKš Ÿ œžœžœžœžœ˜8Kš Ÿ œžœžœžœžœ˜:Kš Ÿ œžœžœžœžœ˜:Kš Ÿ œžœžœžœžœ˜9Kš Ÿœžœžœžœžœ˜;Kš Ÿ œžœ&žœžœžœ˜LKš Ÿœžœ&žœžœžœ˜JKš Ÿœžœ&žœžœžœ˜KK˜—™Kš Ÿœžœ žœžœ1žœžœ˜yKšŸ œžœ žœžœ žœ žœžœžœ˜UKšŸ œžœ žœžœ žœ žœžœžœ˜XKšŸ œžœ˜%—Jšžœ˜—…— ς