<<>> <> <> <> <<>> DIRECTORY DABasics, CardTab, PriorityQueue, RefTab, Rope, SoftHdwBasics, SoftHdwCompiler, SoftHdwSimulate; SoftHdwDelayPath: CEDAR DEFINITIONS = BEGIN DelayNetwork: TYPE = REF DelayNetworkRec; DelayNetworkRec: TYPE = RECORD [ << Table, indexed by level, of delay events.>> levelTable: CardTab.Ref, <> eventTable: RefTab.Ref, maxLevel: INT _ 0, primaryInputs: DelayEvents _ NIL, allDelayEvents: DelayEvents _ NIL, worstDelayTable: PriorityQueue.Ref, <> maxDelayEvent: DelayEvent _ NIL]; DelayEvents: TYPE = LIST OF DelayEvent; DelayEvent: TYPE = REF DelayEventRec; DelayEventRec: TYPE = RECORD [ inputDelayTerms: DelayTerms _ NIL, outputDelayTerms: DelayTerms _ NIL, zeroSlackTerm: DelayTerm _ NIL, minDelay: INT _ 0, maxDelay: INT _ 0, slack: INT _ 0, level: INT _ -1, levelComputed: BOOL _ FALSE, primaryInput: BOOL _ FALSE, source: REF ANY]; DelayTerms: TYPE = LIST OF DelayTerm; DelayTerm: TYPE = REF DelayTermRec; DelayTermRec: TYPE = RECORD [ inputDelayEvent: DelayEvent, outputDelayEvent: DelayEvent, delay: INT _ 1, blocked: BOOL _ FALSE, source: REF ANY]; CreateNetworkForSimulation: PROC [simulation: SoftHdwSimulate.Simulation] RETURNS [network: DelayNetwork]; CreateNetwork: PROC [array: SoftHdwBasics.ArrayBase] RETURNS [network: DelayNetwork]; ResetNetwork: PROC [network: DelayNetwork]; LevelizeDelayNetwork: PROC [network: DelayNetwork]; ComputeDelays: PROC [network: DelayNetwork]; ComputeSlack: PROC [network: DelayNetwork]; BlockDelayTerm: PROC [term: DelayTerm]; UnBlockDelayTerm: PROC [term:DelayTerm]; <> TimingAnalyze: PROC [simulation: SoftHdwSimulate.Simulation] RETURNS [network: DelayNetwork] ; MakeDelayPositionPath: PROC [event: DelayEvent] RETURNS [SoftHdwBasics.ArrayPositions] ; <<... Traces an event back through the zero slack terms, creating a list of the array positions of the events. This path is useful for highlighting the critical path. >> <> EventPrintFn: TYPE = PROC [event: DelayEvent]; TermPrintFn: TYPE = PROC [term: DelayTerm]; TracePath: PROC [event: DelayEvent, eventPrintFn: EventPrintFn, termPrintFn: TermPrintFn]; <<...Prints out a delay path by traing an event back, following the zero slack pointers, until an event with no input terms is reached. >> ReportCriticalPath: PROC [network: DelayNetwork, eventPrintFn: EventPrintFn _ PrintGenericEvent, termPrintFn: TermPrintFn _ PrintGenericTerm]; TimingAnalyzeFlatCell: PROC [flatCell: SoftHdwCompiler.FlatCell] RETURNS [network: DelayNetwork]; PrintEvent: PROC [event: DelayEvent]; <<...Prints a Delay Event a la SoftHdw Emulator, using ArrayPosition field of event.>> PrintTerm: PROC [term: DelayTerm]; PrintGenericEvent: PROC [event: DelayEvent]; <<... Just prints the delays. >> PrintGenericTerm: PROC [term: DelayTerm]; END.