-- File: [Indigo]<Sakura>Dragon>DragonImpl.sak
--  4-Mar-82 13:46:21

DIRECTORY
  DragonArbiter,
  DragonCache,
  DragonClock,
  DragonMap,
  DragonMemory,
  DragonProcessor,
  SakuraRT,
  SimIO;

DragonImpl: MONITOR IMPORTS DragonArbiter, DragonCache, DragonClock, DragonMap, 
  DragonMemory, DragonProcessor, SakuraRT, SimIO  
  = {
  SimIO.Start[];
  CIRCUIT {
    COMPONENTS proc: DragonProcessor.Processor, cache: DragonCache.Cache, 
      arbiter: DragonArbiter.Arbiter, clock: DragonClock.ClockGenerator,
      map: DragonMap.MapProcessor, memory: DragonMemory.Memory
    NODES op, pcdata, pcexception, pcreject, pcreq, cmshared, cmd, cmdata, 
      clockA, clockB, arqp1, agrp1: NODE
    REPRESENTATION
    CONNECTIONS
      clock[ClockA: clockA, ClockB: clockB],
      proc[ClockA: clockA, ClockB: clockB, Op: op, Fault: pcexception, 
        Reject: pcreject, InData: pcdata, RQ: pcreq,
        OutData: pcdata],
      cache[Op: op, PDataIn: pcdata, MDataIn: cmdata, ClockA: clockA, 
        ClockB: clockB, 
        CMDIn: cmd, RQ: pcreq, SharedIn: cmshared, Grant: agrp1,
        Exception: pcexception, Reject: pcreject, SharedOut: cmshared, 
	CMDOut: cmd, Rq: arqp1, PDataOut: pcdata, MDataOut: cmdata],
      arbiter[ClockA: clockA, ClockB: clockB, Proc1Rq: arqp1, Proc1Gr: agrp1],
      map[ClockA: clockA, ClockB: clockB, CMDIn: cmd, MDataIn: cmdata,
        CMDOut: cmd, MDataOut: cmdata],
      memory[ClockA: clockA, ClockB: clockB, CMDIn: cmd, SharedIn: cmshared, 
        MDataIn: cmdata, MDataOut: cmdata]
    };
  SimIO.Stop[];
  }.