DIRECTORY
Commander,
Dragon,
DragOpsCross,
IFUPLAInterlock,
IO,
PLAOps;

IFUPLAInterlockImpl: CEDAR PROGRAM
IMPORTS Commander, IO, PLAOps =
BEGIN OPEN IFUPLAInterlock, PLAOps;

InterlockPLA: PLAOps.PLA;


GenInterlockPLA:  PROC = {

read2:			BoolExpr _	BE[m:[dPCmndIsRd2:	TRUE],	d:[dPCmndIsRd2:		TRUE]];
ac2:			BoolExpr _	BE[m:[a1IsC2:			TRUE],	d:[a1IsC2:			TRUE]];
bc2:			BoolExpr _	BE[m:[b1IsC2:			TRUE],	d:[b1IsC2:			TRUE]];
ac3:			BoolExpr _	BE[m:[a1IsC3:				TRUE],	d:[a1IsC3:			TRUE]];
bc3:			BoolExpr _	BE[m:[b1IsC3:			TRUE],	d:[b1IsC3:			TRUE]];
kIsRtOp:		BoolExpr _	BE[m:[kIsRtOp1:			TRUE],	d:[kIsRtOp1:			TRUE]];
fCtlIsRtOp:	BoolExpr _	BE[m:[fCtlIsRtOp1:		TRUE],	d:[fCtlIsRtOp1:		TRUE]];
cField2:		BoolExpr _	BE[m:[cIsField2:			TRUE],	d:[cIsField2:			TRUE]];
cField3:		BoolExpr _	BE[m:[cIsField3: 			TRUE],	d:[cIsField3:			TRUE]];

aluRtFromB:	BoolExpr _	Not[ Or[ kIsRtOp, fCtlIsRtOp ]];

interlock2:		BoolExpr _ And[ read2, Or[ ac2, bc2, And[ fCtlIsRtOp, cField2 ]]];

Set[s: interlock2, out: [stage1BHold:		TRUE ] ];

Set[s: 				ac2,
out:[eUAluLeftSrc1: rBus]];
Set[s: And[Not[	ac2],			ac3],
out:[eUAluLeftSrc1: cBus]];
Set[s: And[Not[	ac2],	Not[	ac3]],
out:[eUAluLeftSrc1: aBus]];
Set[s:			kIsRtOp,
out:[eUAluRightSrc1: kBus]];
Set[s: And[	fCtlIsRtOp,		cField2 -- ,	Not[read2] -- ],
out:[eUAluRightSrc1: rBus]];
Set[s: And[	fCtlIsRtOp,	Or[Not[cField2] -- ,	read2 -- ],	cField3],
out:[eUAluRightSrc1: cBus]];
Set[s: And[	fCtlIsRtOp,	Or[Not[cField2] -- , read2 -- ],	Not[cField3]],
out:[eUAluRightSrc1: fCtlReg]];
Set[s: And[	aluRtFromB,			bc2 -- ,	Not[read2] -- ],
out:[eUAluRightSrc1: rBus]];
Set[s: And[	aluRtFromB,	Or[Not[bc2] -- ,		read2 -- ],		bc3],
out:[eUAluRightSrc1: cBus]];
Set[s: And[	aluRtFromB,	Or[Not[bc2] -- ,		read2 -- ],	Not[bc3]],
out:[eUAluRightSrc1: bBus]];
Set[s: And[		bc2 -- ,		Not[read2] -- ],
out:[eUStore2ASrc1: rBus]];
Set[s: And[		Or[Not[bc2] -- ,		read2 -- ],		bc3],
out:[eUStore2ASrc1: cBus]];
Set[s: And[		Or[Not[bc2] -- ,		read2 -- ],	Not[bc3]],
out:[eUStore2ASrc1: bBus]];

Set[s: 			bc2,
out:[eUSt3AIsCBus1:		TRUE]];

};

BE: PROC [m, d: InterlockIn] RETURNS[BoolExpr] = {
mRef:		REF InterlockIn	_ NARROW[InterlockPLA.mask];
dRef:		REF InterlockIn	_ NARROW[InterlockPLA.data];
mRef^ _ m; dRef^ _ d; RETURN[GetBEForDataMask[InterlockPLA]]};

Set: PROC [s: BoolExpr _ NIL,	m, d: InterlockIn _ [ ], out: InterlockOut] = {
res:	REF InterlockOut	_ NARROW[InterlockPLA.out];
IF s=NIL
THEN	s	_						BE[m,d]
ELSE	s	_			And[s,	BE[m,d] ];
res^ _ out; SetOutForBE[InterlockPLA, s]};

GenInterlock: Commander.CommandProc = {
filename: IO.ROPE _ DefaultCMDLine[cmd.commandLine, defaultFile];
InterlockPLA _ NewPLA["IFUPLAInterlock.InterlockIn", "IFUPLAInterlock.InterlockOut"];
GenInterlockPLA[];
[ ] _ ConvertTermListToCompleteSum[InterlockPLA.termList, FALSE, FALSE, cmd.out];
[ ] _ FindAMinimalCover[InterlockPLA.termList, 120, cmd.out];
WritePLAFile[filename, cmd.out, InterlockPLA] };


doc:			IO.ROPE = "Expects the name of the ttt file";
defaultFile:	IO.ROPE = "IFUPLAInterlock.ttt";
Commander.Register[key:"GenInterlock",		proc: GenInterlock,		doc: doc];

END.


���IFUPLAInterlockImpl.mesa
Copyright c 1984 by Xerox Corporation.  All rights reserved.
Last edited by Curry, August 27, 1986 7:15:40 pm PDT
McCreight, May 13, 1986 6:12:28 pm PDT

InterlockProc:		 PROC[args: InterlockIn]	 RETURNS[result: InterlockOut];
read3:			BoolExpr _	BE[m:[dPCmndRd3:		TRUE],	d:[dPCmndRd3:		TRUE]];
isBubble2:	BoolExpr _	BE[m:[condEffect2: VAL[LAST[IFUPLAMainControl.CondEffect]]],
d:[condEffect2: bubble]];
interlock3:		BoolExpr _ Or[
Not[isBubble2],
And[ read3, Or[ ac3, bc3, And[ fCtlIsRtOp, cField3 ]]]
];

Pipe Interlock
= stage1BHold OR (DPReject AND stage1BHoldIfReject)
Set[s: interlock3, out: [stage1BHoldIfReject:		TRUE ] ];

Bypassing
eUAluLeftSrc1

eUAluRightSrc1

eUStore2ASrc1
eUSt3AIsCBus1



�Ê…��˜�šœ™Jšœ<™<Jšœ4™4Icode™&J™�—šÏk	˜	J˜
J˜Jšœ
˜
Jšœ˜Jšœ˜Jšœ˜J˜�—šœœ˜"Jšœœ
˜Jšœœ˜#J˜�Jšœœ˜J˜�JšÏn
œœœ™HJ˜�šžœœ˜J˜�Jšœœœœ˜FJšœœœœ™CJšœœœœ˜=Jšœœœœ˜=Jšœœœœ˜>Jšœœœœ˜=Jšœœœœ˜DJšœœœœ˜JJšœœœœ˜FJšœœœœ˜Gšœœœœ!™RJšœ™—J˜�Jšœ7˜7J˜�šœO˜OJ˜�—šœ™Jšœ™Jšœ6™6Jšœ™—J™�—šÐbl™Jšœ3™3Jšœ'œ˜0Jšœ/œ™8—J™�šŸ	™	J˜�šÏb
™
šœ˜Jšœ˜—šœ˜Jšœ˜—šœ!˜!Jšœ˜——J™�š ™šœ˜Jšœ œ˜—šœ!Ïcœ˜6Jšœ œ˜—šœ(¡
œ
˜BJšœ œ˜—šœ(¡
œ˜GJšœ œ˜—šœ¡œ˜3Jšœ œ˜—šœ$¡œ
˜<Jšœ œ˜—šœ$¡œ˜@Jšœ œ˜——J™�š 
™
šœ¡œ˜'Jšœ œ˜—šœ¡œ
˜1Jšœ œ˜—šœ¡œ˜5Jšœ œ˜——J˜�š 
™
šœ˜Jšœœ˜——J˜�Jšœ˜J˜�——šœœœ˜2Jšœœœ˜3Jšœœœ˜3Jšœœ"˜>—J˜�šžœœœ1˜MJšœœœ˜1šœ˜Jšœ
œ˜Jšœœ˜—Jšœ*˜*—J˜�šžœ˜'Jšœ
œœ0˜AJšœU˜UJšœ˜Jšœ:œœ˜QJšœ=˜=Jšœ0˜0—J˜�J˜�Jšœœœ&˜4Jšœ
œœ˜-šœG˜GJ˜�—Jšœ˜J™�˜�™�J™�——J˜�—�…—���� ��…��