Directory DragOpsCross, IFUPLAMainControl, IFUPLAInstrDecode, LizardRosemary;
TranslationNeeds Dragon, IFUPLAMainControl, IFUPLAInstrDecode, IFUPLAFetchPreDecode;
Library IFUData1, IFUData2LS, IFUData2ABC, IFUData3, IFUFetch, IFUStack, IFUMainControl, IFUInterlock, IFUInstrDecode;

IFU: LAMBDA [logRef: |REF IO.STREAM|, lizardSimRef: |REF LizardRosemary.Simulation| ] RETURN CELLTYPE AutoName
PORTS [
KBus						= INT[32],

EUAluOp2AB			> EnumType["Dragon.ALUOps"],
EUCondSel2AB			> EnumType["Dragon.CondSelects"],

EUSt3AisCBus2BA		> BOOL,
EUCondition2B		< BOOL,

EURes3BisPBus3AB		> BOOL,
EUWriteToPBus3AB		> BOOL,

DPCmnd3A				> EnumType["Dragon.PBusCommands"],
DPData					< INT[32], -- for logging only
DPRejectB				< BOOL,
DPFaultB					< EnumType["Dragon.PBusFaults"],
IPCmnd3A  			> EnumType["Dragon.PBusCommands"],
IPRejectB				< BOOL,
IPFaultB				< EnumType["Dragon.PBusFaults"],
IPData  				= INT[32],
ResetAB				< BOOL,
DHoldAB				< BOOL,
DShiftAB  			< BOOL,
DExecuteAB			< BOOL,
DNSelectAB			< BOOL,
DDataInAB			< BOOL,
DDataOutAB			= BOOL,

RescheduleAB		< BOOL,
PhA					< BOOL,
PhB					< BOOL
]

Expand

XBus:					INT[32];

X2ASrcLit0BA:		BOOL;		-- InstrDecode to ControlPipe
X2ASrcLit1BA:		BOOL;		-- ControlPipe to X2ALitGen

Stage1BHoldBA:		BOOL;	-- Interlock to MainControl

LoadStage1Ac:		 BOOL;		-- Pipe Controls
LoadStage1Bc:		 BOOL;
LoadStage2Ac:		 BOOL;
BubbleStage2A1BA:	 BOOL;
NormalStage2A1BA:	 BOOL;
AbortStage2B2AB:	 BOOL;
NormalStage2B2AB:	 BOOL;
LoadStage3Ac:		 BOOL;
AbortStage3A2BA:	 BOOL;
NormalStage3A2BA:	 BOOL;

MicroExcptJmpAB:	EnumType["IFUPLAMainControl.MicroExcptJmp"]; -- MainControl to MicroCycle
ExceptionCodeAB:	EnumType["IFUPLAMainControl.ExceptionCode"];	-- MainControl to MicroCycle, PCTrapGen, CFormation

MicroCycleAB:		INT[8];
GetNextInstBA:		BOOL;
MacroJumpBA:		BOOL;
MicroCycleNextBA:	EnumType["IFUPLAInstrDecode.MicroCycleNext"];

InstReadyAB:		BOOL;
OpAB:				INT[8];
AlphaAB:			INT[8];
BetaAB:				INT[8];
GammaAB:			INT[8];
DeltaAB:				INT[8];
OpBA:				INT[8];
AlphaBA:			INT[8];
BetaBA:				INT[8];
OpLengthBA:		INT[3]; --      _ "1" used to prevent BoundsFault at startup
JumpOffsetSelAB:		EnumType["IFUPLAFetchPreDecode.JumpOffsetSel"];

RschWaiting2BA:		BOOL;
UserMode0AB:			BOOL;
TrapsEnbled2BA:		BOOL;
ClearTrapsEnbledBA:	BOOL;
ClearUserModeBA:		BOOL;
KPadsIn0BA:				BOOL; -- C address in the IFU
KPadsIn3BA:				BOOL;


X2ALitSourceBA:		EnumType["IFUPLAInstrDecode.X2ALitSource"];
	
PCBusB:				INT[32];
PCStkTopAB:			INT[32];
PCForLogAB:		INT[32];
PCPipe3BA:			INT[32];
PCNextBA:  			EnumType["IFUPLAInstrDecode.PCNext"];
PCBusSrcB:			EnumType["IFUPLAInstrDecode.PCBusSrc"];
PCPipeSrcBA:		EnumType["IFUPLAInstrDecode.PCPipeSrc"];

Push0BA:				BOOL;		-- InstrDecode to ControlPipe
Pop0BA:				BOOL;		-- InstrDecode to ControlPipe
Push2BA:				BOOL;		-- ControlPipe to MainControl
Push3BA:				BOOL;		-- ControlPipe to stack
Pop3BA:				BOOL;		-- ControlPipe to stack
PushPendingAB:	BOOL;		-- ControlPipe to InstrDecode
PopPendingAB:		BOOL;		-- ControlPipe to InstrDecode
PushPendingBA:	BOOL;		-- ControlPipe to MainControl
PopPendingBA:		BOOL;		-- ControlPipe to MainControl

IStkNearlyFullBA:	BOOL;		-- stack to MainControl

LBusB:				INT[8];
LStkTopAB:			INT[8];
LPipe3BA:			INT[8];
LAB:					INT[8];
SAB:					INT[8];
DeltaSBA:			INT[8];

PopSa0BA:			BOOL;
PopSb0BA:			BOOL;
PushSc0BA:			BOOL;

LSourceLtBA:		EnumType["IFUPLAInstrDecode.LSourceLt"];
LSourceRtBA:		EnumType["IFUPLAInstrDecode.LSourceRt"];
SSourceLtBA:		EnumType["IFUPLAInstrDecode.SSourceLt"];
SSourceRtBA:		EnumType["IFUPLAInstrDecode.SSourceRt"];
ASourceLtBA:		EnumType["IFUPLAInstrDecode.ABCSourceLt"];
ASourceRtBA:		EnumType["IFUPLAInstrDecode.ABCSourceRt"];
ASourceOffBA:		EnumType["IFUPLAInstrDecode.PlusOffset"];
BSourceLtBA:		EnumType["IFUPLAInstrDecode.ABCSourceLt"];
BSourceRtBA:		EnumType["IFUPLAInstrDecode.ABCSourceRt"];
BSourceOffBA:		EnumType["IFUPLAInstrDecode.PlusOffset"];
CSourceLtBA:		EnumType["IFUPLAInstrDecode.ABCSourceLt"];
CSourceRtBA:		EnumType["IFUPLAInstrDecode.ABCSourceRt"];
CSourceOffBA:		EnumType["IFUPLAInstrDecode.MinusOffset"];

X1ASrcStackBA:	BOOL; -- various registers in the IFU
X1ADstStackBA:	BOOL;
XBusStackEldestBA:	BOOL;
XBusStackLBA:		BOOL;
X1ASrcSLimitAc:	BOOL;
X1ADstSLimitAc:	BOOL;
X2ASrcStatusBA:		BOOL;
X1ADstStatusBA:	BOOL;

AReg0BA:			INT[8]; -- passed up to this level just for the logger
BReg0BA:			INT[8]; -- passed up to this level just for the logger
CReg0BA:			INT[8]; -- passed up to this level just for the logger

ARegIsC2BA:			BOOL;
ARegIsC3BA:			BOOL;
BRegIsC2BA:			BOOL;
BRegIsC3BA:			BOOL;

ALUOpNeedsField0BA:	BOOL; -- from InstrDecode to ControlPipe
ALUOpNeedsField1BA:	BOOL; -- from ControlPipe to Interlock

C0IsFieldCtlBA:		BOOL; -- from InstrDecode to ControlPipe
C2IsFieldCtlAB:		BOOL; -- from ControlPipe to Interlock
C3IsFieldCtlAB:		BOOL; -- from ControlPipe to Interlock

CRegIsField3B:		BOOL; -- from ControlPipe to ABCFormation, piece of KBus

EUAluLeftSrc1B:	EnumType["Dragon.ALULeftSources"],
EUAluRightSrc1B:	EnumType["Dragon.ALURightSources"],
EUStore2ASrc1B:		EnumType["Dragon.Store2ASources"],

EStkOverflow1BA:	BOOL; -- SLimit to Control pipe
EStkOverflow2BA:	BOOL; -- Control pipe to MainControl PLA

DPCmnd0BA:			EnumType["Dragon.PBusCommands"];
DPCmndRd0BA:			BOOL;
DPCmndRd2BA:			BOOL;
DPCmndRd3BA:			BOOL;

KIsRtOp0BA:				BOOL;
KIsRtOp1BA:				BOOL;

FCtlIsRtOp0BA:			BOOL;
FCtlIsRtOp1BA:			BOOL;

EUAluOp0BA:			EnumType["Dragon.ALUOps"];

EUCondSel0BA:			EnumType["Dragon.CondSelects"];
EUCondSel3AB:			EnumType["Dragon.CondSelects"];

EUCondEffect0BA:		EnumType["IFUPLAMainControl.CondEffect"];
EUCondEffect1BA:		EnumType["IFUPLAMainControl.CondEffect"];
EUCondEffect2AB:		EnumType["IFUPLAMainControl.CondEffect"];
EUCondEffect2BA:		EnumType["IFUPLAMainControl.CondEffect"];

EUSt3AisCBus1BA:		BOOL;
EUAluLeftSrc1AB:		EnumType["Dragon.ALULeftSources"];
EUAluRightSrc1AB:		EnumType["Dragon.ALURightSources"];
EUStore2ASrc1AB:		EnumType["Dragon.Store2ASources"];

DPRejectedBA:		BOOL;

IPFaulted0BA:		BOOL;
IPFaulted2BA:		BOOL;

InstStarting0BA:		BOOL;
InstStarting2BA:		BOOL;

RescheduleBA:		BOOL;
ResetBA:				BOOL;
DHold0BA:			BOOL;
DHold1AB:			BOOL;

logger:				IFULogger[logRef: logRef, lizardSimRef: lizardSimRef][];

fetch:					Fetch[];				-- IFUFetch

x2ALitGen:			X2ALitGen[];		-- IFUData1
pcForm:				PCForm[];		-- IFUData1

stack:					Stack[];				-- IFUStack

lFormation:			LFormation[];		-- IFUData2
sFormation:			SFormation[];		-- IFUData2
sLimitTest:			SLimitTest[];			-- IFUData2
sDelta:				SDelta[];				-- IFUData2	 (static control)

aBCFormation:		ABCFormation[];	-- IFUData2

ifuStatus:				IFUStatus[];			-- IFUData3
kBusPads:			KBusPads[];			-- IFUData3

mainControl:			MainControl[];		-- MainControl
microCycle:			MicroCycle[];		-- MainControl

instrDecode:			InstrDecode[];		-- InstrDecode

interlock:				Interlock[];			-- Interlock
controlPipe:			ControlPipe[];		-- Interlock

misc:					Misc[]				-- IFUData3

ENDCELLTYPE

��˜��IFU.rose
Copyright c 1984 by Xerox Corporation.  All rights reserved.
Last Edited by: Barth, February 8, 1984 10:51 am
Last Edited by: Twilliams, August 28, 1984 9:15:49 am PDT
Last edited by: Herrmann, September 12, 1985 6:23:08 pm PDT
Last edited by: McCreight, March 18, 1986 3:23:57 pm PST
Last edited by: Curry, September 24, 1985 7:59:28 pm PDT

Signal names obey the following conventions:  If a signal x is computed during PhA and remains valid throughout the following PhB, it is denoted as xAB and is said to be stable.  If x is computed (combinatorialy) during PhA and can have unrestrained changes during PhB and the first part of phase A, it is denoted as xA and is said to be floppy.  In this latter case, a client wanting to use x during PhB must receive it in his own latch open during PhA.  xBA and xB are defined symmetrically.  A signal which is low while A is low and can have at most one transition while A is high is denoted as xAc and is said to a control clock.  A signal which is high while A is low and can have at most one transition during A is denoted as NxAc.  Although precharged signals have the single transistion property they must be gated with the appropiate clock in order to achive the status of being a control clock.
Floppy signals may not be used as inputs to precharged PLA's.  
Examples:
xA		floppy
xAB		stable
xAc		BA or precharged low signal gated with phase A.
Positive logic is assumed (asserted = TRUE = 1 = more positive logic voltage); negative-logic signals have an extra "N" at or very near the beginning of the signal name (e.g., PNPError for PBus Negative-TRUE Parity Error).ALSE
EU
PhA IFU <-> EU
PhB , PhB A,B,C,EUAluLeftSrc1B,EUAluRightSrc1B,EUStore2ASrc1B to EU
P Interfaces for EU cache

P Interfaces for IFU cache

Serial debugging interface
Timing and housekeeping interface
Stage1BHoldIfRejectBA: BOOL;	-- Interlock to MainControl
IFUInterlock to ABCFormation, piece of KBus
�Ê	��˜�šÐbl™Jšœ
Ïmœ1™<J™0J™9Icode™;Jšœ8™8Jšœ8™8J™�Jšœˆ™ˆJšœ?™?šœ	™	Jšœ
™
Jšœ™Jšœ4™4—Jšœâ™â—J˜�JšÏb	œD˜MJšŸœD˜TJšŸœo˜vJ˜�šÑbklœÏkœ¡œ¡œ¡œ¡œ¡œ¡œ	˜nšÐbkœ˜™šœ¡œ˜JšÏc™Jšœ£œ£œ£œ£™C—J˜�Jšœ)˜)Jšœ0˜0J˜�Jšœ¡œ˜Jšœ¡œ˜—˜�Jšœ¡œ˜Jšœ¡œ˜J˜�—šœ™Jšœ.˜.Jšœ
¡œ£˜)Jšœ¡œ˜Jšœ-˜-—J™�šœ™Jšœ/˜/Jšœ¡œ˜Jšœ,˜,Jšœ¡œ˜—J™�šœ™Jšœ
¡œ˜Jšœ
¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜—J˜�šœ!™!Jšœ¡œ˜Jšœ
¡œ˜Jšœ
¡˜Jšœ˜——J˜�šŸ˜J˜�Jšœ
¡œ˜J˜�Jšœ¡œ£˜3Jšœ¡œ£˜1J˜�Jšœ¡œ£˜1Jšœ¡œ£™8J˜�Jšœ¡œ£˜'Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜šœ¡œ˜J˜�—Jšœ¡œ¡œ£˜ZJšœ¡œ¡œ£3˜qJ˜�Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ?˜?J˜�Jšœ¡œ˜Jšœ	¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ	¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ
¡œ£œ£&˜IJšœA˜AJ˜�Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ£˜,Jšœ¡œ˜J˜�J˜�Jšœ<˜<J˜Jšœ¡œ˜Jšœ¡œ˜Jšœ
¡œ˜Jšœ
¡œ˜Jšœ3˜3Jšœ4˜4Jšœ6˜6J˜�Jšœ¡œ£˜0Jšœ¡œ£˜/Jšœ¡œ£˜0Jšœ¡œ£˜*Jšœ¡œ£˜)Jšœ¡œ£˜3Jšœ¡œ£˜3Jšœ¡œ£˜3Jšœ¡œ£˜3J˜�Jšœ¡œ£˜0J˜�Jšœ
¡œ˜Jšœ
¡œ˜Jšœ¡œ˜Jš¡œ¡œ˜Jš¡œ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ˜Jšœ¡œ˜Jšœ
¡œ˜J˜�Jšœ6˜6Jšœ6˜6Jšœ6˜6Jšœ6˜6Jšœ8˜8Jšœ8˜8Jšœ8˜8Jšœ8˜8Jšœ8˜8Jšœ8˜8Jšœ8˜8Jšœ8˜8Jšœ9˜9J˜�Jšœ¡œ£˜4Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ£.˜AJšœ¡œ£.˜AJšœ¡œ£.˜AJ˜�Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ£"˜<Jšœ¡œ£ ˜:J˜�Jšœ¡œ£"˜9Jšœ¡œ£ ˜7Jšœ¡œ£ ˜7J˜�Jšœ¡œ£2˜HJ˜�šœ2˜2Jš£+™+—Jšœ4˜4Jšœ3˜3—˜�Jšœ¡œ£˜0Jšœ¡œ£"˜9J˜�Jšœ-˜-Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ(˜(J˜�Jšœ/˜/Jšœ/˜/J˜�Jšœ;˜;Jšœ;˜;Jšœ;˜;Jšœ;˜;J˜�Jšœ¡œ˜Jšœ4˜4Jšœ6˜6Jšœ4˜4J˜�Jšœ¡œ˜J˜�Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ˜Jšœ¡œ˜J˜�Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜Jšœ¡œ˜J˜�JšœC˜CJ˜�Jšœ£˜"J˜�Jšœ£˜&Jšœ£˜!J˜�Jšœ£˜"J˜�Jšœ£˜(Jšœ£˜(Jšœ£˜)Jšœ£˜5J˜�Jšœ£˜*J˜�Jšœ£˜(Jšœ£˜%J˜�Jšœ£˜-Jšœ£˜+J˜�Jšœ£˜-J˜�Jšœ£˜)Jšœ£˜+J˜�Jšœ£˜J˜�—Jš¡˜—J˜�—�…—����(��+Ã��