DIRECTORY Boole, BooleCore, CoreCreate, EU2RamControl, EU2LeafUtils, EU2Utils, PW; EU2RamControlImpl: CEDAR PROGRAM IMPORTS Boole, BooleCore, CoreCreate, EU2LeafUtils, EU2Utils, PW EXPORTS EU2RamControl = BEGIN OPEN Boole, BooleCore, CoreCreate, EU2RamControl, EU2Utils; -- To be generated by Alps (Ave, Serlet, programatori te salutant!) CreateRamControl: PUBLIC PROC RETURNS [cellType: CellType] = { inDriver: CellType _ EU2LeafUtils.AlpsExtract["InputDriver.sch"]; outClkDriver: CellType _ EU2LeafUtils.AlpsExtract["ClockedOutputDriver.sch"]; inputDrivers: Inputs _ NIL; outputDrivers: Outputs _ NIL; outputDriver: OutputRec; expr: Expression _ NIL; public: Wire _ Union[GenPGnEWires[], GenWiresCtrlToRam[], GenWiresRamToCtrl[], Wires["reject", "nPhA"]]; ramAdr: Wire _ FindWire[public, "ramAdr"]; reject: Expression _ WireVar[public, "reject"]; nReject: Expression _ Not[reject]; aHi: Wire _ ramAdr[a][hi]; bHi: Wire _ ramAdr[b][hi]; cHi: Wire _ ramAdr[c][hi]; aLow: Wire _ ramAdr[a][low]; bLow: Wire _ ramAdr[b][low]; cLow: Wire _ ramAdr[c][low]; cAdr: Wire _ ramAdr[c]; FOR i: INT IN [0..sizeAdrH) DO inputDrivers _ CONS[[input: Index[aHi, i], driver: inDriver], inputDrivers]; inputDrivers _ CONS[[input: Index[bHi, i], driver: inDriver], inputDrivers]; inputDrivers _ CONS[[input: Index[cHi, i], driver: inDriver], inputDrivers]; ENDLOOP; FOR i: INT IN [0..sizeAdrL) DO inputDrivers _ CONS[[input: Index[aLow, i], driver: inDriver], inputDrivers]; inputDrivers _ CONS[[input: Index[bLow, i], driver: inDriver], inputDrivers]; inputDrivers _ CONS[[input: Index[cLow, i], driver: inDriver], inputDrivers]; ENDLOOP; inputDrivers _ CONS[[input: "reject", driver: inDriver], inputDrivers]; outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: "enWrtIFU", expr: EqualInt[public, cAdr, IFUAdr]]; outputDrivers _ CONS[outputDriver, outputDrivers]; FOR i: INT IN [0..nRows) DO outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: Index["selA", i], expr: EqualInt[public, aHi, i]]; outputDrivers _ CONS[outputDriver, outputDrivers]; outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: Index["selB", i], expr: EqualInt[public, bHi, i]]; outputDrivers _ CONS[outputDriver, outputDrivers]; expr _ IF i=marAdr/4 THEN Or[reject, EqualInt[public, cHi, i]] ELSE And[nReject, EqualInt[public, cHi, i]]; outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: Index["selC", i], expr: expr]; outputDrivers _ CONS[outputDriver, outputDrivers]; ENDLOOP; FOR i: INT IN [0..sizeSelLow) DO outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: Index["selALow", i], expr: EqualInt[public, aLow, i]]; outputDrivers _ CONS[outputDriver, outputDrivers]; outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: Index["selBLow", i], expr: EqualInt[public, bLow, i]]; outputDrivers _ CONS[outputDriver, outputDrivers]; expr _ IF i=marAdr MOD 4 THEN Or[reject, EqualInt[public, cLow, i]] ELSE And[nReject, EqualInt[public, cLow, i]]; outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "nPhA"]], output: Index["selCLow", i], expr: expr]; outputDrivers _ CONS[outputDriver, outputDrivers]; ENDLOOP; cellType _ AlpsCell[ name: "RamControl", public: public, inputs: inputDrivers, outputs: outputDrivers, fillerOutputDriver: PW.Get[EU2LeafUtils.eu2Design, "FillerOutputDriver.mask"], fillerCornerDriver: PW.Get[EU2LeafUtils.eu2Design, "FillerCornerDriver.mask"] ]; }; END. žEU2RamControlImpl.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Louis Monier March 24, 1986 6:26:28 pm PST Bertrand Serlet March 5, 1986 8:41:46 pm PST -- Input inverters to the Alps blocks (25 pieces) -- ramAdr[aAdrH, bAdrH, cAdrH, aAdrL, bAdrL, cAdrL] and reject -- Enable Write on the KBus (IFU side) -- Precharge of the RAM: follows nPhB, so it gets PhB outputDriver _ [driver: outClkDriver, pas: LIST[["Clock", "PhB"]], output: "nPrech", expr: true]; outputDrivers _ CONS[outputDriver, outputDrivers]; -- Output drivers, all of the same type: they follow PhA, so they get nPhA; -- selHi[i][a] _ aAdrH=i -- selHi[i][b] _ bAdrH=i -- selHi[i][c] _ (cAdrH=i).~reject for i#marAdr/4 -- selHi[marAdr/4][c] _ (cAdrH=i)+reject -- selLow[i][a] _ aAdrL=i -- selLow[i][b] _ bAdrL=i -- selLow[i][c] _ (cAdrL=i).~reject for i#marAdr MOD 4 -- selHi[marAdr MOD 4][c] _ (cAdrL=i)+reject TO DO -- nPrech Κ – "cedar" style˜codešœ™Kšœ Οmœ1™KšœA˜AKšœM˜MKšœžœ˜Kšœžœ˜K˜Kšœžœ˜Kšœh˜hKšœ*˜*Kšœ/˜/Kšœ"˜"Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜K™K™1Kšœ>™>šžœžœžœž˜Kšœžœ9˜LKšœžœ9˜LKšœžœ9˜LKšžœ˜—šžœžœžœž˜Kšœžœ:˜MKšœžœ:˜MKšœžœ:˜MKšžœ˜—Kšœžœ4˜GK˜K™'šœ+žœ˜CKšœ˜Kšœ&˜&—Kšœžœ˜2K™K™6šœ+žœ™BKšœ™Kšœ ™ —Kšœžœ™2K™KšœK™Kšžœžœžœ ž˜Kšœ™šœ+žœ˜CKšœ˜Kšœ ˜ —Kšœžœ˜2Kšœ™šœ+žœ˜CKšœ˜Kšœ ˜ —Kšœžœ˜2Kšœ1™1Kšœ(™(šœžœ žœ&˜?Kšžœ(˜,—šœ+žœ˜CKšœ˜Kšœ ˜ —Kšœžœ˜2Kšžœ˜—šžœžœžœž˜ Kšœ™šœ+žœ˜CKšœ˜Kšœ!˜!—Kšœžœ˜2Kšœ™šœ+žœ˜CKšœ˜Kšœ!˜!—Kšœžœ˜2Kšœ1žœ™6Kšœžœ™,šœžœ žœžœ'˜DKšžœ)˜-—šœ+žœ˜CKšœ˜Kšœ ˜ —Kšœžœ˜2Kšžœ˜—K™šœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜KšœN˜NKšœM˜MK˜—Kšœ˜—K˜Kšžœ˜K˜˜K˜—KšΠbl™K™K™ —…— ¦d