PageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceBus Interface -IBIPSim43.sily43State Diagramrr=fPCpIBRqmem=MAR_mem=Map_MAR_Map_>>>r=_0=Cp'0_=rrPhaseBrr=0()**Double Fetch**)0=Write=0()***_=r_Abort,Ca'_Cp'=()*(Ca')Fetchr111Release111=qq1Rq'=q1,_IFJIIJFIis the FORK symbol.is the JOIN symbol.JIr_=Rq'00RqOut'*()rWait for Valid A1 Bitscadh_APOutpin is called "xxOut."The input to a pad driving signal xx to aThe output of a pad receiving signal xxfrom a pin is called "xxIN."rahcadhCpOut'APOut=fPCdLMARPgCross'LMDuCpOut'0=Cp'0_rLMDu'LMDR'LMARPgCross'rrCaOut'_0CaOut'CpOut'CaOut'LMARPgCross'LMDRrrrRqOut'_1CpOut'r=11)Ca'(*)(=Cp'rAPBus((*)PhaseF=1)(1=PhaseF*cadh=)r0(Ca')=*rLMDR'*()*PhaseA=)Ca'(0*LMDR*)(0Rq'=rAPIN(APIN*r)))0=Cp'*(rrAPIN(*(*)*()(*)*(APIN)(*)Wait for Write Data to be valid.*()*=)Ca'(0rAPINFI>>IJq>q>FIr>>IDLE+IBRef'*+*IBReffPCdr*)*)(0=Note this must be done before waitingfor Resp' since Resp' may take awhile.CaOut'1_Respv'Respv'Respv'Respv'*()*(()r(*Respv'LMARPgCross*)(0=)IB Fetch(())cadh"+" is defined to mean Logical OR."*" is defined to mean Logical AND.Wait forRespv'APOut_)(fPCp*IBRef)(rahIBRef'*rcadh reflectsthe F Bus. Thisis broadcastfor debugging.**PhaseAPhaseA(())IBRefThis is here so the IBRef, Map_ or MAR_ states get resetLatch MARPgCross, pMDR_, pDouble andp_MDu during Phase F here. This is doneAPOut _cadh from above. The cadh latchenable MUST be disabled after this PhaseFto hold the write data.in case the next uInst stalls trying to read,or dispatch on, an empty IB. The latched>Garner, Daviesbefore entering IDLE where they could be set again.This state exists so the processor clock circuitry candistinguish receiving the first word of a double fetchfrom receiving both words. Thus the clock can bestarted after receiving the first word.)(*rWDuValidWDvValidWait for WDvValid>FIWDvValid)*(*IF>rWDvValid)*(*LSelect0LSelect1IB bytes0,,1are latched by*WDuValid'IB bytesIB bytesIB bytes2,,34,,56,,7are latched byare latched byare latched byWDuValid'**WDvValid'WDvValid'*BAIBWriteSelect0IBWriteSelect0IBWriteSelect1IBWriteSelect1The IBWriteSelects are derived on IBIPSim46.silyLSelect0 _ IBWriteSelect0LSelect1_IBWriteSelect0'Set Full.1Set Full.0Points A and B areon IBIPsim46.sily>>qThis state exists becausea Fork can't lead directlyto a Join.S1S3S4S5S6:S2:S7:S8:S9:S15:S16:S17:S5Sxis the name of a state.S5'S5S5S5S5S5'S5'S5'S5'S5'S5'S5S5'S5'S5'S5'S5S5Must be able to drive A1 and Cp'and leave S8 before PhaseF ends.Must be able to drive A2 and Ca'S10:S11S12S13:S20S14:S18:S19and leave S10 before PhaseA ends.On Reset, all state flip-flops are reset except S4and S17, they are set. We could have used S3 insteadof S4. Starting here resets Rq', Ca' and Cp'. It alsowaits for Respu' and Respv' to go away.as latched by WDuValid'as latched by WDuValid'>S21(mem=AAR_)PhaseA*AuxRef0_S22:AuxRqOut'>FIr>qJIq)(*0Rq'=PhaseB,;ïÕþGî1sïÕþGî&WïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&åïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð îpïëðî&åï]ðîKï]ðîï@ð î�ïc.þ$«î|ï_èðîïcÌðî ÈtïIÂðî!åïIÂðî«ïZüðî:ï^Qðî:ïa§ðî9Éuï]Ãðî9Éïaðî+åïZµþ r$î4;|ïZZðîDæï]¯ðîLïWðî*:ï>‚þ$Çî)¬ï;=ðî1stï?Âðî ÈïAûðî2�ïDÂðî1sïDÂðî/:ïDÂðî)¬ïFûðî(ïFûðî1sïIÂðî*:ïH‚þ$Çî)¬|ïE=ðî)¬ïJ=ðî+WïUJþ$î.¬tïOßðî)¬|ï@=ðî*:ïC‚þ$Çî)¬ï-Yðîtï/¥ðîï/¥ðîï/¥ðî«ï/¥ðî:ï/¥ðîï/¥ðîVuï1Þð îAtï0Âðî8ï0Âðî7�ï0Âðî7ï0Âðî5åï0Âðî-�uï1Þðî:tï*ðîVï*ðîVï*ðîäï*ðîsï*ðî&Wï*ðî:ï(úðîF�ï+3ðîG­ï(úðîDX|ï)uðî4Étï+3ðî-�uï,Þðî6tï+3ðîEttï(úðî;tï+3ðî7ï(úðî8¬ï(úðî6tï(úðî:Wï(úðî:åï(úðî<ï(úðî‚ï(úðîF|ïdZðîM;ïdZðî+åtïÝðî(�ïÝðî*ÈïÝðîF|ï\“ðî&åtïðî'suïðî%Ètïðî*È|ïW“ðî+3tïZJðîFIïaðîF|ï^>ðîM;ïW“ðîM‚tïZnðîkï,ðî|ïtðî«uïOðî«ï¤ðîGtï¤ðî|ïÊðî*ÈïRðî(tïRðî5åïOßðî4;ïOßðî7ïOßðî)¬ïRðî «ïfÊþÇGîrïdÙþG9î «ïd‘þGî «ïd‘þG€î$ïRðî*:ïM‚þ$äî2�ïOßðî3¬ïOßðî8ïOßðî(ïSŸþ$«î's|ïPZðîruïRðî«tï]Ãðî�ï]Ãðî 9ï]Ãðîuïðîï3ð*îïúð'îïÝðî2�tïIÂðî2�ï?Âðî$ïFûðîäïAûðî :ï?Âðî!Vï?ÂðîVï/¥ð î :ï/¥ðî ï+3ðî «ï(úðî �ï(úðîÇï(úðîï+3ðî äï+3ðî 9|ï$uðî Èï'ºþ$Çîrï'ºþ$îVtï(úðîVï(úðî�ï*ð î ä|ï$uðî �ï)uðî ï/^þ$îrï(³þ�$î(ï(³þ$î&Wtï<ûðî*:ï<ûðî+Wï<ûðîB­ï+3ðî0åï+3ðî7�ï+3ðîDæï,ºþ$Çî9;ï0Âð î2ï/¥ðî5W|ï ðî Èï#Hþ$9î 9ï ðîDæï#Hþ$9î&åïXðî$tï ðî(ï ðî)¬ï ðî'sï!žþ$«î!åïðî'sï�þ$Çî&å|ïXðî1ºtïÝðî2�ïÝðî,,ïÝðî:åïÝðî/‚ïÝðî.óïÝðî-×ïÝðî3¬ïÁðî.ïÁðî+WïÝðî)ïÝðî&å|ïXðî ätï&3ðî�ï&3ðî «ïbçþÇGîrïY¼þG rî «ïYuþGî «ïYuþG ¹î5Wï_þäGî>;ï]þG9î5Wï\Êþ +Gî5Wï\ÊþG€î5WïbXþäGî>;ï`gþG9î5Wï` þ +Gî :ïQþG€îïM;þ¬GîïKþóGîïKþG€î :ïFþG€î :ïFþ €Gî,sïFIþG9î :ïH;þ 9GîïAþG€îïAþ�Gî4;ïAIþG9îïC;þ:Gî"sï>;þ Gî,sïÉï,sþ GîHÉï*�þG9î>Éï*:þ GGî>Éï*:þG€î-ï,sþ«Gî=­ï*�þG9î-ï*:þòGî-ï*:þG€î :ï!Vþ «Gî+åïeþG9î :ïþ òGî :ïþG€îïVþGî.ïdþG9îïþdGîïdþG9î.¬ïDÂðî4ÉïDÂðî3¬ïDÂðî3ïDÂðî5WïDÂðî9;ïDÂðî:WïDÂðî:åïDÂðî6tï/¥ðî0Wï4ðî/:ï4ðî+Wï4ðî5Wï/¥ðî:åï/¥ðî9Éï/¥ðî=­ï/¥ðî)ï7�þäGî-ï5žþG9î)ï5Wþ+Gî)ï5WþG€î*:ï0žþ$î*:ï7×þ$rî)¬|ï4’ðî!tï:Âðîsï:Âðîï:Âðî!žï:Âðî :ï:Âðî"sï:Âðî's|ï-Yðî#�tï:Âðî4;ïÝðî5WïÝðî3ïÝðî3¬ï:Âðî4Éï:Âðî1sï:Âðî2×ï:Âðî/:ï:Âðî.¬ï:Âðî2Iï:Âðî8¬ï:Âðî9Éï:Âðî :ïQþ 9Gî,sïQþG€îïOßðî$ïOßðî :ïOßðî#�ïOßðî ÈïOßðî"sïOßðî%:ïM‚þ$äî$¬|ïJ=ðîtïIÂðîsïIÂðî.¬ïIÂðîVïIÂðî$¬|ïE=ðî%:ïH‚þ$Çî$tïIÂðî$ïDÂðî%:ïC‚þ$Çî%:ï>‚þ$Çî$ï?Âðî#�ïDÂðî"sïDÂðî :ïDÂðî�ïDÂðî¬ïDÂðî$¬|ï@=ðî$¬ï;=ðîstï?Âðîäï?ÂðîÈï?Âðî.ïOßðî-ïOßðî8¬ïOßðî-ïIÂðî.ïIÂðî4;ïIÂðî.ïDÂðî-ïDÂðî;tïDÂðî-ï?Âðî.ï?Âðî.¬ï?Âðî5Wï?ÂðîVï=Bþ @$îVï6»þ$«î.ï:Âðî-ï:Âðî=ï:Âðî2uï8‰ð îÈtï:Âðîäï:Âðî&åï:ÂðîÈï=‰ðî¬ï=‰ðî!ï=‰ðîsï=‰ðîäï=‰ðî �ï=‰ðîVï6—þr$î%Èï0žþ$î%:|ï-Yðî7tï/¥ðî5Wï` þG€î$ˆï`õðî$|ï^>ðî4;ï]¯ðîrïa`þÏ$î#ï]¯ðîIæïZèðîJ-tï]ÃðîIæ|ïY>ðîHÉïZZðîIæïdZðî5WïYuþG€î5WïYuþ +Gî>;ïY¼þG9î5Wï[®þäGî4;ïWðî$¬ïUJþ$ «îF�ïaîþ$ÎîJtï^˜þ$ $îMÊï[Cþ$ yî'Þtï]Ÿðî's|ïZèðî(�ï^ þ È$î(ïUJþ$Vî'sïRðî$¬ïU&þ«$îrï^ þ$î&WïZZðî)¬ïWðîruï\ðî*ÈtïKûðî3¬ïKþG€î,sïAûðî/ÉïAûðî*ÈïAûðî%ÈïAûðî"sïAûðî&åïAûðî(ï0žþ$ «î Èï#%þ8$î ï,ºþ$Çîï-³þA$îr|ï)uðîï,ºþ$î-tïÁðî#ï/¥ðî«ï-úðîVï-úðîÈï-úðîÈï-úðî¬ï-úðî2uï7lð%î2ï6Pð&î(tïðî-ïðî+åïðî2�ï0Âðî«ï/¥ðîVï-úðîäï*ðîïþ �Gî,sïdþG9îïVþ VGî'sï�þ$Çî«ï*ðîÈï*ðî¬ï(úðî0Wï0Âðî1sï0Âðî2ï0Âðî>;ï/¥ðî5åï#Hþ$9î,sï-³þ r$î5W|ï)uðî1stï-úðî0Wï-úðî2�ï-úðî9;ï-úð î8ï-úðî7�ï-úðî2ï-úðî7ï-úðî5åï-úðî@tï-úðî5åï,ºþ$îVuï,Þðî!åtïAûðî+åïAûðî3ïAûðî)¬ïAûðî0åïAûðîuïÝð"îïúð#î$¬ï,Þðî(�ï,ÞðîätïKûðî ÈïKûðî)¬ïKûðî!åïKûðî&åïKûðî%ÈïKûðî"sïKûðî2�ïKûðî+åïKûðî0åïKûðî,sïKûðî/ÉïKûðî,sï/^þs$î$|ïRðî%:ïa`þ$î�ïgþ$«îUuïað îUï_üðîUï^ßð îUï]Ãðîätïa§ðîsï^Qðîïa§ðî�ï^Qðî«ïa§ðî«ï^QðîVïa§ðîäï^Qðî�ïh™þ>;$î9ÉuïZnðî :ïSXþ 9Gî�ïfð8îïH¦ð$îïG‰ð(î2ï53ð'î2ï4ð)î2ï2ûðîïFmð-îïEPð)îïJ˜þ«$îÈïBôþ$Çî«ïBÐþ@$îä|ïC’ðîÈïGBþ9$î2�pï]ðî�uïdüð3î.¬ï3ð6î.¬ïð6î.¬ïúð1î.¬ïÝð'î-tïÝðî(�ïÝðîï/¥ðîïdþG9î;t|ï�ðî5åtïÝðî.¬ïÁðî#uïðî)ï�þ$Çî=­|ï �ðî?4tïÖðî>É|ï ðî.¬tïˆðî3¬ïˆðî-ïˆðî.ïˆðî4;ïˆðî;t|ï æðî;Þtï �ðî:W|ï Wðî?æïAþ9$î<�ïþŽ$î?Wï Öþ$î>Éï�ðî'sïdþ$î'sïAþV$î%Èï+þ$9î%Èïþ«$î.¬tïOðî3¬ïOðî-ïOðî.ïOðî4;ïOðî5Wïˆðî5WïOðîuïkðî rïkðî «ïkðîÈïkðîäïkð îïOðîï 2ðîï ðî rïOðî rï 2ðî rï ðî «ïOðî «ï 2ðî «ï ðîäï 2ð îÈï 2ðîÈïOðîäïOð îäï ð îÈï ðî:åï ²þ9$î:åï�þ$9î:åïyþ9$î=ïyþ$]î<tï Oðî@tïyþ$]î>;ïyþ9$î>;ï�þ$9î>;ï ²þ9$î?Wï OðîruïkðîrïOðîrï ðîrï 2ðîï Ýð0îïÀð î ïÀðîï¤ð î ï¤ðî8¬ïð î>;ïð î0Wï Ýðî0WïÀðîDæï+þG9îDæïþŽGîDæï äþŽGîJtï äþG€îBï+þ$9îBï$þÇ$îA|ï �ðîAï WðîM;ïUèðîB­uï ¤ðîB­ï ‡ðîB­ï kð îMÊïHþ$KîJtï$þy$îJtï�þ$Kî)ïyþ!z$îrrïeCðî6tï`Ñðî6tï]|ðî6tïZ&ðî ÈïQÑðîrï_µðî�ïK´ðî ÈïF´ðî�ïA´ðî?Wï*ìðîï%ìðî ÈïÏðîstïOßðîrï³ðî9uïúðî*ÈtïOßðî¬ïIÂðîäïDÂðîï?Âðîï=‰ðî*ÈïIÂðî*ÈïDÂðî*Èï?Âðî*Èï:Âðî�ï:Âðî Èï/¥ðîï-úðî.ï0Âðî.ï-úðîrï*ðî*ÈïÁðî*Èïˆðî*ÈïOðî0WuïG‰ð î0WïFmð î0Wï=‰ð î#rï<´ðî)¬ï6 ðî&åï.Aðîï*ìðîFï–ðî-�ï*ìðî�ïÏðî¬ïÏðî0Wuï;ïVfþG9î5WïVþ +Gî5WïVþG€î6trïVÑðî«tïW¦ðî:ïW¦ðîäïW¦ðî�ïW¦ðîsïW¦ðî9ÉuïWðî3¬ïSXþ VGîAïQþG€î3¬ïQþ VGî3¬ïQþG€î?WtïRðî=­ïRðî4;rïQÑðî7�tïRð î-�|ïS¯ðî/tïVõðî.¬|ïT=ðî9ÉïPZðî/ÉïW_þŽ$î�ïW_þA$î>;ïa`þÇ$îA�ïS¯ðîB­ïR“ðîBôtïWðîB­|ïT=ðî>;ïW_þr$îC;ïT˜þ9$îC;ïWíþ$ÏîB­ïdZðî>;ï^ þ «$î>;ïZµþ$îDXtïOßðî?æïOßðî>ÉïOßðîC;ïOßðî@tïOßðîBïOßðî:åïOßðî*:|ïKZðî*:ïKZðîC;ïT¼þ$9îF�ïT¼þ$ 9î/:ïUJþ$«î/:ïU&þ $î:WïSŸþ$«î*:ïO þ$î:WïO þ$]î�ïWƒþ$9îuïCð îïD4ð$îï2ð(îïð)îBpï]ð ²äŽO˜h. ¸PageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceIBIPSim44.sily441.2.3.4.vPC012345678910111213141576543210fPCdQuad WordDouble WordWordfPCd.7 is always sent to memory as0. Its actual value can be read fromthe X bus.The Instruction Fetch Unit consists of an InstructionBuffer and fetch logic. The Instruction Buffer iswritten by the fetch logic and read by the MesaEmulator. There are a number of exception conditionsencountered in normal operation. The vPC is the lower16 bits of Mesa's virtual program counter (actuallytime a byte is removed from the IB (successful IBDisp,AwIBDisp, _ib, etc)). The fPCd is the least significant8 bits of the real address of the double word to befetched into the IB. The vPC register points to bytes,vPC.[7..14]. The difference between these twoquantities equals the number of words in theInstruction Buffer. fPCd.[0..7] >= vPC.[7..14].The Instruction Buffer can hold 8 bytes or 2 doublewords. The Instruction Fetch Unit uses double wordBecause Mesa pages have 256 words (512 bytes),the least significant 8 bits of a given virtual addressand its corresponding real address are the same. Theygive the displacement of the word in a page.fetches when accessing memory. fPCd.7 is always sentto the memory as 0. Its actual value can be read fromInstruction Fetch Unit:DocumentationPC + CodeBase). It is incremented by hardware eachfPCd points to words. fPCd.[0..7] corresponds tothe X bus.5.To increase the performance of the Daisy P chip, anautonomous instruction fetch unit has been incorporated.This circuitry can fetch ahead in the instruction streamwhen the Emulator would otherwise not be using memory.The bytes fetched are held in an 8-byte Instruction Buffer.Use of the Buffer requires two pointers. One, vPC, holdsthe virtual memory address of the next byte to be usedby the Emulator. A copy of this byte will be in theInstruction Buffer, so the Emulator need not wait to accessit. The other pointer, fPCp,,fPCd, is used to point tothe next real memory location from which bytes will befetched. One may think of the fPCp,,fPCd concatenationthe number of bytes in the Instruction Buffer.as forming a program counter which is always ahead of, orequal to, the vPC. The difference between them equals6.The method used to synchronize the Emulator with eventsoriginating outside the P chip is to stop the P Chip clock.Garner, DaviesThe clock may also be stopped when the Emulator requresa resource (Instruction Buffer, AP Bus) which is notbe stopped waiting for an Instruction Buffer fetch tocomplete, the Instruction Fetch machine itself may notdepend on the clock. Primarily for this reason, theAP Bus State Machine and the Instruction Fetch Statemachine have been integrated into a single asynchronousstate machine (see IBIPSim43.sily).machine that its inputs will not have unwanted pulses oredges at the wrong times. After much investigation, The Instruction Buffer itself must be addressed so thatthe correct bytes may be read and written. However,one must be very careful when building an asynchronousit was decided that circuits using the least significantbits of vPC and fPCd as Instruction Buffer addressesalways produced such glitches. Because of this, theInstruction Buffer is addressed by a rather strangecircuit (at least if you are used to standard TTL stuff)shown on the next page.1514131211109876543210F BusByte0123456789101112131415fPCpLoaded from F Bus using fPCp_Loaded from F Bus using PCs_Loaded from F Bus using PCs_See IBIPSim42.sily for bit assignmentsSee IBIPSim42.sily for bit assignmentsavailable. See IBIPSim49.sily for details ofAn"IBAccess" is any operation which reads a byte in theAn "IBConsume" is an IBAccess that actually removesthe byte read from the IB. All IBAccesses are IBConsumesexcept for _ibHigh and _ibLow.the clock holding curcuitry. Because the clock mayInstruction Buffer. The byte may or may not be removedfrom the IB. IBAccess is true either if the microinstructioncontains one of {_ib, _ibSE, _ibHigh, _ibLow, AwIBDisp} orif fPCAtEndOfPage is false while a microinstruction hasan IBDisp.8/19/83An IBAccess causes a word to be read from the IB.If the IB is empty, the IBIP clock will be stopped to delaythe IBAccess while the Instruction Fetch Unit puts someMesa bytes into the IB. The IBAccess will be allowed toproceed only when the data arrives.If the IB is empty and filling it would require theInstruction Fetch Unit to access a new page, the accesswill be cancelled, the clock will not be stopped and anIBEmptyTrap will be generated. This results in a pagefault being taken since the new page cannot be resident.Rule1:Rule 2:An IBDisp is an IBAccess (and an IBConsume).Exception to Rule 1:If the last bytes put into the IB came from the end ofa page, fPCAtEndOfPage is set. If a microinstructionattempts an IBDisp while fPCAtEndOfPage is set, theIBDisp is cancelled and an IBDispTrap is generated instead.Special microcode then trys to find a real memory addressresident in real memory, fPCp is loaded, fPCAtEndOfPageis turned off and both the Emulator and the IFU canproceed. If the page is not resident, the Emulator saveswhatever data is necessary in case the Mesa instructionmust be restarted and proceeds with the Mesa instructionin hopes that data from the next page won't be needed.If it is, we arrive at the Exception to the Exception to Rule2.Thus there is no IBAccess or IBConsume.for the next virtual page. If the next virtual page isException to Rule 2:Exception to the Exception to Rule 2:Definition:Definition:Any Mesa Instruction emptying the IB must haveencountered an IBDispTrap that would have resetfPCAtEndOfPage if the next page were resident.Even if the Emulator jumps to the end of a virtual page,the IBDisp in the jump microcode will generate an IBDispTrapbecause fPCAtEndOfPage will be true by PhaseB of theIBDisp microinstruction.îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî&WïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&åïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð î&åpï]ðîKï]ðîrtïhàðîrïWðîrïCðî*:ï'Þðî 9ïLôþ$9î«rïM_ðî ÈtïM¦ðîïM¦ðî9ïM¦ðîrïM¦ðî«ïM¦ðîäïM¦ðîïM¦ðîVïM¦ðî�ïM¦ðî ÈïM¦ðî#ïM¦ðî%:ïM¦ðî'sïM¦ðî)¬ïM¦ðî+åïM¦ðî.ïM¦ðî 9ïO þ#³$î 9ïLÑþ#³$îrïLôþ$9î«ïLôþ$9îäïLôþ$9îïLôþ$9îïLôþ$9îÈïLôþ$9î�ïLôþ$9îVïLôþ$9î :ïLôþ$9î"sïLôþ$9î$¬ïLôþ$9î&åïLôþ$9î/ÉïLôþ$9î-�ïLôþ$9î+WïLôþ$9î)ïLôþ$9î&åïIŸþ$9î)ïIŸþ$9î+WïIŸþ$9î-�ïIŸþ$9î$¬ïIŸþ$9î"sïIŸþ$9î :ïIŸþ$9îïIŸþ$9î+åïJQðî)¬ïJQðî'sïJQðî%:ïJQðî#ïJQðî ÈïJQðî�ïJQðîVïJQðîÈïIŸþ$9îÈïK´þÈ$îÈïI{þÈ$î«rïJ ðî(ïE þÇ$î(ïE-þ$äî*:ïF&þŽ$î*:ïFIþ$Çî,sïGBþU$î,sïGfþ$«î0WtïDÂð î0WïEßð î0WïFûðî-�uï\§ð"î-�ï[Šð%î-�ïZnð î«tïCð5î«ïAûð2î«ï@ßð/î«ï?Âð5î«ï>¦ð6î«ï=‰ð3î«ï;Pð6î«ï:4ð8î«ï9ð3î«ï7ûð7î«ï5Âð.î«ï4¥ð,î«ï3‰ð0î,sï'Þð3î,sï&Áð3î«ï2lð.î«ï1Pð7î«ï03ð6î«ï/ð,î,sï%¥ð5î,sï$ˆð6îpïëðîï@ð î«tï;ïÕþGî1sïÕþGî&WïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&åïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð îrtïfðîrï<ûðîrï%ðîäï3ðîäïkðîpïëðîï@ð î&åï]ðîKï]ðî2�ï]ðîÇïeÑðîäïY¼þ$äî#�ïY¼þ$äî:ïY¼þ$äîäïb|þ¬$îäï`Cþ¬$îäï^ þ¬$îäï[Ñþ¬$îäïY˜þ¬$îVtïcàðî 9ïaðî 9ï^ßðî 9ï\§ðî 9ïZnðîïZnðîï\§ðîï^ßðîïaðîïaðîï^ßðîï\§ðîïZnðîäïaðîäï^ßðîäï\§ðîäïZnðî&Wïaðî&Wï^ßðî&Wï\§ðî&WïZnðî%ÈïY¼þ$äî%Èïb|þ$î*ÈïY¼þ$äî%ÈïY˜þ$$î%Èï`Cþ$î%Èï^ þ$î%Èï[Ñþ$î-ï_üðî-ï[Šðî,sïa`þä$î,sï\îþä$î,sï_Jþ$9î,sïZØþ$9î,sï_'þä$î0Wï_'þ$]î,sïZµþä$î0WïZµþ$]î«ïTQð>î«ïS4ð7î«ïRð;î«ïPûð8î«ïOßðî«ïM¦ð9î«ïLŠð:î«ïKmð5î«ïJQð9î«ïI4ð5î«ï<ûð8î«ï6ÞðîVï6Þðî«ï53ðîVï53ðî«ï3‰ðî«ï1Þðî«ï03ðî«ï.‰ðî«ï;Þð5î«ï:Âð8î«ï9¥ð5îVï3‰ðîVï1ÞðîVï03ðîVï.‰ðî 9ï03ðî«ï,Þð4î«ï*¥ð9î«ï'Oð9î«ïFûð0î«ïHðDî«ï#úð7î«ï"Þð8î«ï!Áð8î«ï ¥ð;î«ïˆð1î«ïlðî«ï3ð<î«ïúð6î«ïÝð;î«ïÁð:î«ï¤ð*î«ïkð9î«ïOð8î«ï2ð7î«ïð9î«ïUmð9î«ïVŠð8î«ï8‰ðDî«ï(lð,î«ï%ð=î«ïùð8î«ïÝð9î«ï Àð<î«ï ¤ð8î«ï ‡ð8î«ï kð9î«ï Oð î 9ï3‰ðî 9ï1Þðî«ïEßð=î«ïDÂð7î«ïC¦ð:î«ïB‰ðî«ï@ßðî«ï?Âðî ï@ßðî ï?Âðî 9ï@ßðî 9ï?Âðî Èï@ßðî Èï?Âðî«ï@ßðîï@ßðî«ï?Âðîï?ÂðîÈï@ßðîÈï?Âðî«ï+ÁðBî«ï)ˆð;î«ïð<îBpï]ðî 9tï.‰ð öäŽNfƒÏPageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceInstruction Fetch Unit:DocumentationGarner, DaviesIBIPSim46.sily4612.a)Write the lower double word of the IB if either theupper double word is not empty (Full.1=1) or bothdouble words are empty and the next byte will beb)Write the upper double word of the IB if either thelower double word is not empty (Full.0 = 1) or bothdouble words are empty and the next byte will bec)follows (Note IBReferences are only started when thereis room in the IB):read from the lower double word (uvPC.0 = 1 orread from the upper double word (uvPC.2 = 1).uvPC.1 = 1). Note the only way uvPC.1 can be setwhile both Full bits are reset is that a PCs_ clausehas just been executed.==(*Full.1Full.0Full.0'Full.1'*(uvPC.0+uvPC.1))(*Full.1'Full.0'*(uvPC.2)one of the low double words is being written, Full.1will go to 0 and uvPC.0 will go to 1. This could causere-write the equations as follows:=(+Full.1Full.0')*(Full.1+uvPC.1+uvPC.0)Full.0=(+Full.1'*)+(Full.0uvPC.2)If the circuit is implemented in this way, we must only ensurethat the )uvPC.0+uvPC.1Full.1+(This is equivalent to making sure uvPC.0 is set beforeFull.1 is reset. This is incorporated into the state machineuvPC.1srsrJIFull.0Full.1uvPC.0auvPC.0bsrsrsr;ïÕþGî1sïÕþGî&WïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&åïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð îpïëðîï@ð î2�ï]ðî&åï]ðîKï]ðî9tï_üðîïVŠðî«ïVŠð3î«ïUmð1î«ïTQð0îïM¦ðî«ïM¦ð3î«ïLŠð3î«ïKmð0îïHðîïYQð6îïX5ðî«ïS4ð.î«ïJQð-î«ïRð1î«ïPûð4î«ïOßðî0Wï^Qðî0Wï\§ðî<ïSÃðî:Wï^Qðî1sï^Qðî1sï\§ðî6tï^Qðî;tï^Qðî?Wï^Qðî@tï^QðîAï^QðîDæï^QðîFï^QðîIæï^QðîJtï^Qðî@tï\§ðî?Wï\§ðî;tï\§ðî6tï\§ðî:Wï\§ðî5åï\§ðîAï\§ðîDæï\§ðî(�ïYQð4î(�ïX5ð7î(�ïUüð"î0WïSÃðî1sïSÃðî?æïSÃðî2ïSÃðî6tïSÃðî9ÉïSÃðî:åïSÃðî5åï^Qðî<�ïSÃðî5WïSÃðîFïSÃðîDæïSÃðîAïSÃðîIæïSÃðî2ïRðî0WïRðî1sïRðî5WïRðî6tïRðî:åïRðî9ÉïRðî?æïRðî<ïRðî<�ïRðîAïRðîDæïRðî(�ïOßð>î(�ïNÃð î;tïNÃðî2�ïNÃðî6tïNÃðî7�ïNÃðî.ïNÃðî1sïNÃðî-�ïNÃðî(�ïM¦ð6î(�ïLŠð=î ï8¬þäGî ï6»þG9î ï6tþäGîï6tþG€îï%ÈþG€î ï%ÈþäGî ï&þG9î ï(þäGî¬ï-þäGî¬ï+þG9î¬ï*ÈþäGî(�ï*ÈþG€î(�ï :þG€î¬ï :þäGî¬ï �þG9î¬ï"sþäGî Vï&Áðî|ï%ðî�ï#Hþ$Çîrï; þ $î�ï8ôþ$9îï5®ðîktï4ðî|ï1<ðî!åtï+Áðî!åï!3ðîï/ÉþG€î ï/ÉþäGî ï0þG9î ï2þäGî Vï7lðî Vï0Âðî|ï*ðî ï-þäGî ï+þG9î ï*ÈþäGîï*ÈþG€î�ï-Iþ$Çî�ï5þ$«îï1Êðî�ï2Iþ$«îï/ðîï!zþÎ$îï!zþ$îï4^þ$îï0®ðî�ï(Hþ$Çî Vtï+Áðî«ï)ˆðî�ï)ˆðî�ï$ˆðî«ï$ˆðî«ïÝðî�ïÝðî�ïÝðî«ïÝðî�ï�þ$Çî|ïðîïXðî�ï�þ$«îïðî�ïeþ$«î�ï�þ$ÇîïþG€î ïþäGî ïdþG9î ïVþäGîïXðî ïVþäGî ïdþG9î ïþäGîïþG€îï‘ðîktïlðî|ï ðîïXðî ïVþäGî ïdþG9î ïþäGîïþG€îï ÈþG€î ï ÈþäGî ï!þG9î ï#þäGî Vtï!Áðî Vïðî Vïðî Vïðî�ï¹þ$«îrï–þ @$îrï–þ$,—îVï, þy$îVïÖþ$ Vîï³þ ]$î#ï0Âðî"s|ï*ðî!åï0þ$9î!åï/ìþ9$î$ï/ìþ$]î!åï2%þ]$î#ï-Iþ$Çî#ï"ºþ$Çî!åï'—þ]$î$ï%^þ$]î!åï%^þ9$î!åï%�þ$9î"sïuðî#tï&3ðî+Wï9ðî*:pï; ð î-tï9ð5î-ï7ûð*î+Wï6Pðî(�ïJQð4î(�ïI4ð î-ï6Pð6î-ï53ð î-ï3‰ðî.¬ï3‰ð1î.¬ï2lðî-ï0Âðî.¬ï0Âð5î.¬ï/¥ð.î.¬ï.‰ð î-ï'Þð6î-ï&Áð6î-ï$ˆð3î+Wïúðî ï9^þ@$î ï*�þ$î ï*^þ$îŽuï2lðî ï²þ$î ïÖþ$î ï#³þ$îŽïÁðî-tïúðî-ïOðî.¬ïOðî3ïOðî-ï¤ðî.¬ï¤ðî3ï¤ðî-ïúðî.¬ïúð)î4;ïOðî4;ï¤ðî-ï%¥ð1îï_üð2îï^ßð3îï]Ãð4îï\§ð îïZnð2î«ïHð.î«ïFûð1î«ïEßð-î«ïDÂð-î«ïC¦ð,î«ïB‰ð.î«ïAmð.î«ï@Pð î(�ï_üðî(�ïZnð1î<�ïNÃðî(�ïKmð;î(�ï^Qðî(�ï\§ðî(�ïRðî(�ïSÃðî+WïÁðî-ïÁð4î-ï¤ð6î-ïˆð6î-ïùðî<ïùðî8¬ïùðî7�ïùðî3ïùðî2ïùðî3¬ïùðî-ïOðî3¬ïOðî2ïOðî3ïOðî8¬ïOðî<ïOðî7�ïOðî+Wï ðî-ï ùðî-ï ð9î-ïkð8î-ïOð6î-ï2ð&î4Éï\§ðî4Éï^Qðî(�ïWð<î-ï-lð/î-ï,Pð;î-ï+3ð7î-ï*ð6î-ï(úð7î-ï#lð1î-ï"Oð5î-ï!3ð1îBpï]ðî«tï)ˆð î«ï$ˆð î«ïÝð î«ïÝð î+Wï Oðî-ï Oð4î-ï2ð5î-ïð:“äŽNX`gšPageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceInstruction Fetch Unit:DocumentationGarner, DaviesThe IB memory circuits are interesting (or strange,depending on your point of view) latches. The pads onthe edges of the chip encode each data bit on two lines.13.14.There are two sets of data bits latched from the AP Bus.the even words of the Instruction Buffer array and tothe MDu latch. The second goes to the odd words of theIB array and the MDv latch.15.set is latched whenever Respv' rises. The first set goes toThe first set is latched with when Respu' rises. The secondThe MDu latch is activated only on double fetch operations.The MDv latch is activated for all MAR_ or Map_ operations. The IB is written only in IBReferences.16.Generation of the write enable term for any particular01 = bit is 0, 10 = bit is 1, 11 = bit isn't valid yet. Thelatches require that both the write enables be set andthe input bits reach the 01 or 10 states before theywill be written. We assume they are written very soonafter the 01 or 10 state is reached.when they are selected and Respu' drops causing all thedata inputs to go to the 11 state. The write enables arereset when all data bits reach either the 10 or 01 state.enables covers the data setup time to the end of the17.IBIPSim47.sily47write enable pulse. Thus:IBWriteEnable01=IBWriteSelect0*WDuValid'*IBWriteSelect0==*WDuValid'*=IBWriteEnable23IBWriteEnable45IBWriteEnable67IBWriteSelect1IBWriteSelect1We are now ready to discuss the conditions that intiatean IBReference. The general philosophy is that the InstructionFollowing this line of reasoning, we derive two conditionsFetch logic should stay out of the way as much as possiblewhile attempting to maintain an adequate number of bytesin the Buffer.under which the Instruction Fetch unit should initiate aFetch:a)Begin a fetch whenever the next microinstruction containsb)Begin a fetch if there is room in the IB for another doubleword (IBRoom=1) and the current microinstruction containsan IBWindow clause. This gives the microcoder explicitcontrol of the times at which the IB will fetch. Thewon't be using memory for awhile and the bytes fetchedmicrocoder should use IBWindow when the Emulatorwill probably be used. It is expected that after the basicstructure of the microcode and the chip set timings areset, microcoders will tune the performance by placingIBWindow clauses in the code.and a timing term. Latches receiving Respu' data are enabledlatch involves both a select term (given above or in IBIP46.sily)If the next microinstruction contains an IBAccess and theIB is empty, the Emulator clock will be stopped. If anIBReference is already in progress, it will complete, a Fullbit will be set, IBEmpty will be reset and the Emulator clock18.19.An IBReference will not start if the fPCd has reached theend of a memory page. This is because it doesn't knowwhere the next virtual page is in real space. The fPCd isincremented by 2 during each IBReference. If there is a carry out of bit 0, the fPCAtEndOfPage flag is set. Whenthis flag is set, IBWindow clauses are ignored. When it is set,each IBDisp executed causes a microcode trap. In thisIBDispTrap code, the new virtual page number is examined.and the code dispatches on the next byte in the IB. This canbe done since the trap occured when the Emulator expectedto dispatch on a new bytecode. If the new virtual pagewas not present in memory, the machine state is saved andthe Emulator attempts to dispatch on the next bytecodeanyway. It is not legal to cause a page fault until we arecertain the new page will be needed. Thus, if there isan IBAccess, the IB is empty and fPCAtEndOfPage is true,we know a new page must be brought in. When this conditionis detected, another type of microcode trap is generated.This trap code recovers the state of the machine at thebeginning of the bytecode, saves this, and puts this processIf the new virtual page is already in real memory,the corresponding real page number is put in fPCpto sleep while scheduling the page fault process. Whenthe page arrives, this process may be restarted at thebeginning of the bytecode that caused the fault.The following discussion assumes fPCAtEndOfPage is not set.will start. If the Instruction Fetch Unit was idle, it will wait20.This act of waiting for bus activity to complete implies arestriction on the type of bus activity allowed whenusing the IB. In particular, the microcoder may not includean MDR_ clause and an IBAccess in the samemicroinstruction. Referring to the bus machine statediagram in IBIPSim43.sily, one can see that thedefines the type of memory operation to be performed.microinstruction immediately following a MAR_ or Map_If the operation is a write (has an MDR_ clause), the busmachine must wait until the end of this secondmicroinstruction for the write data. If, however, that samemicroinstruction contains an IBAccess, it would be heldbefore being executed. This would result in a deadlockin which the clock holding circuitry would be waiting for theIFU to fill the IB, the IFU would be waiting for the busmachine to release the bus so it could start and the busmachine would be waiting for the clock holding circuitry torelease the second microinstruction.21.the clock, an ordinary memory read can be "interrupted"by an IBReference. Consider a standard short Mesa routinecontaining a MAR_, an IBDisp and a _MD in successivemicroinstructions. The clock could be stopped just beforethe IBDisp microinstruction. The bus state machine would seeword fetch. This fetch would be completed by theasynchronous bus state machine. At the end of the fetch,the data would be latched in the MDv register. Upon enteringIBAccess, so it would start an IBReference. When itcompleted, a Full bit would be set, causing IBEmpty to gofalse and the clock would start. The Emulator would thenexecute the IBDisp and _MD microinstructions normally.22.An IBAccess of an empty IB will cause the clock to stopand wait for the Instruction Fetch logic to figure out whatthe Instruction Fetch unit will see no logic hazards inis happenning. So long as the IBEmpty flag is correctly set=IBEmpty(*pIBAccess+(IBRoom*pIBAccess is the indication that the next microinstructioncontains an IBAccess. This indication is valid in PhaseF.this term.The IBWindow term is another story. The whole purposeof providing an IBWindow clause is to allow the Emulatorto proceed in parallel with an IBReference. Hence, we cannotstop the Emulator clock on every IBWindow just to let theIFU see it. In fact, it is most reasonable to let the IFUIBWindow**PhaseAPhaseF))ignore the IBWindow if bus is already busy doing somethingelse. The problem then may arise if the bus state machineoff that term. This could cause a hazard and great confusionin the bus state machine. It could conceivably decide to goto no state at all, effectively disabling bus activity forever.23.To remedy this problem, we install an arbiter made ofscary (to the old-fashioned TTL designer) gates andtransistors. it is shown on the next page.We assume the delays involved in both detecting the databits have reached valid states and disabling the writeWDvValid'WDvValid'It is interesting to note that because an IBAccess can stopOne might (almost correctly) think the IBRequest is:IBRqan IBAccess (See IBIPSim44.sily) and the IB is empty,indicated by IBEmpty (IBIPSim45.sily).8/19/83for any P chip bus activity to complete and begin anIBReference.that the microinstruction after the MAR_ didn't have anMDR_ or _MDu clause, so it would assume a singleState S2 (IDLE), the bus state machine would see IBEmpty andby the time the bus state machine lands in state S2 (IDLE),arrives in state S2 (IDLE) just as PhaseA is ending, turningîIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî&WïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&åïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð îpïëðîï@ð î2�ï]ðîtïfð3îïdüð6îïcàð8î9ïfðî9ï\ðîï\ð8îïXÃð5îïW¦ð7îïVŠðî9ïTQðîïYßð<îïZüð<îïTQð;îïS4ð0îïRð4î9ïOßðîïOßð6îïbÃð<îïa§ð6îï`Šð4îï_nð6îï^Qð$îïLŠð7îïKmð9îïJQð9îïFûð4î9ï>ðî&åpï]ðîKï]ðîtïEßðîïD4ðî äïD4ðîïD4ðîÈïD4ðîäïD4ð îÈïCðîïCðî äïCðî äïAûðîÈïAûðîäïAûð îÈï@ßðî äï@ßðîïCðîïAûðîï@ßðîïAûðîï@ßðîï>ð7îï<ûð?îï7ûð:îï;Þð:îï:Âð8îï9¥ðîï6Þð8îï5Âðîï4ðî«ï4ð9îï03ðî«ï03ð;î«ï/ð9î«ï-úð7î«ï,Þð5î«ï*¥ð6î«ï+Áð0î«ï)ˆð;î«ï(lð7î«ï'Oð5î«ï&3ðîïM¦ð=îïNÃðAî,sïdnð9î,sïcQð7î,sïb5ð<î,sïað=î9ï#lðî)¬ïfðîï#lð9îï"Oð6îï!3ð:îï ð9îïúð9îïÝð@îïÁð6îï¤ð9îïOð=îï3ð9îïð7îïúð9îïÝð6îïÁð;îï¤ð7îïˆð8îïkð;îïOð9îï 2ð7îï ð<îïˆð2îïkð1îï ùð7îï Ýð6îïÀð0î,sïfð;î,sï_üðAî)¬ï\ðî,sï\ð:î,sïZüð4î,sïYßð<î,sïXÃð*î,sïW¦ð5î,sïVŠð/î,sïTQð5î,sïUmð5î,sïS4ð9î,sïRð.î,sïPûð<î,sïOßð7î,sïNÃð7î,sïM¦ð=î,sïLŠð8î,sïKmð8î,sïJQð;î,sïI4ð$î)¬ïFûðî,sïEßð7î,sïDÂð:î,sïC¦ð4î,sïB‰ð:î,sïAmð=î,sï>ð1î,sï<ûð9î,sï;Þð=î,sï9¥ð4î,sï8‰ð9î,sï7lð9î,sï6Pð6î)¬ï3‰ðî,sï+3ð7î,sï*ð;î,sï&Áð7î,sï(úð<î/:ï1Pðî0åï1Pðî0Wï1Pðî5Wï1Pðî6tï1Pð îBï1Pðî1sï/¥ðî2ï/¥ðî5åï/¥ðî,sï-lð:î,sï,Pð:î,sï%¥ð î,sï#úð6î,sï"Þð8î,sï!Áð=î,sï ¥ð9î,sïˆð:î7ï/¥ðî<�ï/¥ðî<ï1Pðî=­ï/¥ðî=ï1PðîAï1PðîA�ï/¥ðî,sïlð:î,sïOð:î,sïð=î,sïúð<î,sïÝð?î)¬ï¤ðî,sï¤ð5î,sïˆð3î,sïkð+îïI4ð8îïHð6îäïCð îäï@ßð î,sïFûð;î,sï3‰ð4î,sï1Pðî«ï2ûð5î«ï1Þð&îBpï]ðî,stï^ßð4î,sï]Ãð î,sï@Pð7î,sï?4ð0î,sï:Âð<î,sï'Þð;î,sï3ð<ZäŽP&fƒ�PageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceDocumentationGarner, DaviesIBIPSim48.sily48CDiRRTCDiRRTIBWindowIBRoomPhaseAWindowStart'WindowHoldIBWindow is true when the current microinstructioncontains an IBWindow clause.IBRoom=(Full.0'+Full.1')IBWindow is valid during PhaseA24.This is a strange circuit. Note that because of the MOStransistors, WindowStart',,WindowHold may be in onlythe 01, 10 or 11 states. If both NOR gates produce00, both transistors are turned off and the pullupsforce both WindowStart' and WindowHold to the 1 state.In fact, it is claimed that whenever the NOR gate outputsare equal, WindowStart' and WindowHold are both setto 1. We need to know what WindowStart' and WindowHolddo in order to understand the circuit. The basic idea isthat when WindowStart' is 0, we will start an IBReference.When WindowHold is a 1, we hold the Emulator clock. Whilethe arbiter is deciding what to do (NOR gate outputstracking each other, and no longer in PhaseA), we holdthe clock AND don't start an IBReference. When it decides,release the clock or just release the clock. If themicroinstruction being held contains a MAR_ or Map_,some gate delay conditions must be met to ensure thethe clock. There is an explicit list of critical delayInstruction Fetch Unit:RTBARRSetResetQQ*assumptions on IBIPSim50.sily - IBIPSim52.sily.In this case, the action proceeds as follows:1)2)The IBRq causes the bus state machine to leave3)Assuming this happens before PhaseA completes,4)PhaseA ends so only the reset input is active.Note that if PhaseA ends before the machine5)WindowStart' stays at 1 and WindowHold goesto 0. This allows the clocks to proceed if thereb)IBWindowRqIBWindowRqWindowStart'IBRqIBRefWindowHoldpWS'pWHpWS'pWHThe appearance of IBWindowRq causes an IBRq1)2)3)4)With the reset active and the set inactivePhaseAPhaseBPause'pMAR5)Pause Pointboth the set and reset inputs are active, soboth outputs are set to 1.Note that it is fine for Pause' togo HI so long as it is LO beforethe Pause Point. It cannot be stablebefore the pMAR flag is stable.the IBWindowRq pulse. Explore these two cases:a)pMARPause'PhaseBPhaseApWHpWS'WindowHoldIBRefIBRqWindowStart'IBWindowRqeither active or inactiveThe only action is to set WindowHold while IBWindowRq is set.is shown in the critical delay documentation (IBIPSim50.sily).were no other conditions holding them.Pause PointIBWindowRq was true. See timing diagram below.This only lasts to the end of PhaseA, well before the PausePoint, so there is no net effect on the machine.Note that if things are slow so WindowHold stays up pastthe Pause Point, the clock is just held and the machineslows down a bit until WindowHold finally falls.The IBWindow Arbiter is shown below.Case aS2'S2' is a 1 when the bus state machine is NOT in state S2 (IDLE).the circuit will either start an IBReference, leave S2, andclock stays held if we leave S2 and this circuitry releasesNormally, the bus machine is either in the S2 (IDLE) state whenIBWindowRq is set or it stays outside S2 for the duration ofThe bus state machine was already in the S2 state.the S2 state, setting S2'.exits S2, we simply skip 3) above.The bus state machine stayed outside S2 whileS2'S2'pMAR * S2'pMAR * S2'The case of S2' going LO while IBWindowRq is HI8/19/83îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî&WïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&åïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð îpï@ð î2�ï]ðî&åï]ðîKï]ðî È|ï]¯ðî Èï]¯ðî$¬ï\ðî!ï]!ðî!ïZèðî%:ï\ðî ÈïTÌðî ÈïTÌðî$¬ïS!ðî!ïT=ðî!ïRðî%:ïS!ðî�ï^˜þë$î�ï\ƒþ$9î�ï\_þä$î'sïVõþ$Žî�ïWíþë$î�ïWíþ$]î�ïZ&þÇ$î&WïZ&þ$²î.ïWíþ9$î0WïVõþ$î%:ïVÑþä$î.ïVÑþ$@î.ïX|þ9$î7ïVÑþ$]î5åïY þ@$î5åï[Cþ$î7ï[Cþ$]î6tï]|þ$î5åïY.þk9î4ÉïZ&þ@$î4ÉïXþ$9î4ÉïWíþ9$î.ï^¼þ$î.ï^˜þ9$î0Wï^˜þ$@î%:ï_µþä$î.ï^ þ9$î/:ïX|þ$Îî+åïZ&þy$î+åïZ&þ$²î/:ï\ƒþ$«î-ï\_þ]$î-ïVõþ$Žî4Éï`Ñþ9$î4Éï`õþ$9î4Éïc þ@$î5åïbþk9î6tïf`þ$î7ïd'þ$]î5åïd'þ$î5åïaîþ@$î7ï_µþ$]î0WïVÑþÈ$î0Wï_µþÈ$îŽïaîþ –$îŽï_µþ –$îŽï`Ñþ –$îtïb5ðîïaðîï_üðî:Wï_üð î:WïWð îïRð2îïPûðîïOQðî ïOQðî ïOQðî «ïOQðîïOQðîïOQðîrïOQðî%ÈïRðîïeŠðîäïKûð8îäïJßð4îäïIÂð3îäïH¦ð3îäïG‰ð6îäïFmð9îäïEPð3îäïD4ð7îäïCð9îäïAûð:îäï@ßð:îäï?Âð4îäï>¦ð6îäï=‰ð;îäï;Pð4îäï:4ð4îäï9ð4îäï6Þð7îpïëðî¹|ï]!ðî2ï]!ðîï^Ìðîï^Ìðî¹ï\ðî¹ï^>ðî�uïaðî�ï`Ñþ¹$îïUüðî1sï_üðî1sïWðîätï5Âð0î*:ïFmð-î+WïDÂðî+WïCðî-ïCð.î+Wï@Pðî-ï@Pð.î+Wïðî«uïÝð"î«ï Àð îïþä$î«ï ¤ð%î«ï ‡ðî(�tïIÂð/î(�ïHðîFï–þä$îG­ïþ$@î4;ïþr$îHÉïÏþ$@î=ïÏþ «$î4;ï$þV$î4;ïþ$@î0åïþU$î)ïOðîHÉïëþÇ$îIæï–þ«$îIæï¹þ$îFï²þä$îFï–þ$@î6tï–þ�$î6tï¹þ$î0åï²þŽ$î)ïÝðî=ïëþ «$î=ïÏþ$@î0åïÏþ 9$îC;ï(%þV$îC;ï'þ$@î0åï'þV$îA�ï)Aþ $îA�ï)eþ$î2ï*^þ�$î2ï)Aþ$@î0åï)Aþ$î)ï'Oðî)ï)ˆðîDæïAþ«$îDæïdþ$î5Wï]þ�$îCÉï#³þÇ$îCÉï"–þ$@î4;ï"–þ�$îB­ï$Ïþä$îB­ï$óþ$î0åï–þ¬$î0åïÏþ¬$î3ï%ìþ�$î5WïAþ$@î0åïAþr$î4;ï"ºþ$î0åï#³þU$î)ï ¥ðî)ï"Þðî3ï$Ïþ$@î0åï$Ïþ9$î)ïˆð î)ïúðî)ï3ðî)ïlð î)ï%ð î0åï ]þ¬$î0åïAþ¬$î0åïìþ¬$î0åï³þ¬$î6tïúðî0åïÖþ$îK‘ïÖþ$î)ï kð=îUuïð>î-tï53ð&îK‘ï þ$îH;ï ð î*:ï,Þð/î)ï Oð;î)ï2ð0î*:ï3‰ð8î*:ï2lð7î*:ï1Pð0îUïeŠð$î�ï2lðîïUüðî%ÈïPmð@îäï>>ClkClkccb<(b < a)Read/Write R/RH registersCompute ALU logical functionsCompute F15Read/Write U registersPrecharge F busCompute ALU carriesF bus validX bus validPrecharge U/R/RH regscbbpauseGive RA bits to AChipGive CA, WriteData to AChipPhaseF (=pause+c)c = Time for Fbus_MD, CSA_INIA or CbusIBIP ClockingPrecharge X busPause'ihgkmn+.TimeOuta-ca-cNext Microinstruction fields can be decodedF Bus ValidTap ATap BTap CPause PointPause PointTap BUpdate/Write registers (Q, Fh, Stkp, vPC, uvPC, fPCd)August83a-ca-ccPhaseA (=a-c+c = a)PhaseB (=a-c+b+pause+c = a+b+pause)16î rï\<þÇGî 9ï\<þGî 9ï_þ rGî«ï\ƒþGÇîÈïW<þGîÈïZþGî%ÈïWƒþGÇî ïW<þ òGî ïW<þGî rïZþòGî rïUþGî �ïRƒþGÇî �ïR<þsGî#ïR<þGî#ïUþÇGî%ÈïRƒþGÇî«ï\<þ9Gî&åï\<þGî&åï_þ Gî0åï\ƒþGÇî%ÈïW<þ 9Gî2ïW<þGî%ÈïR<þsGî>;ïR<þGî2ïZþÈGîHÉïXþG9î0åï\<þGîIæï\<þGîHÉïWÊþÇGî>;ïUþ �GîHÉïRƒþGÇîHÉïR<þÇGî�ïH;þGîÈïH;þGîïH;þGî:ïH;þGîsïH;þGî¬ïH;þGî!åïH;þGî�ïH;þ VGî;tïH;þGî9;ïH;þGî7ïH;þGî4ÉïH;þGî4ÉïH;þ«Gî rïKþ2Gî;tïH;þ GîEtïH;þGîEtïKþGîIæï_þ«Gîï\îðîïWíðîïRíðîïHíðî:|ï6<ðî:ï6<ðîï4’ðî¬ï8Bþä$î�ï7Iþ$9î�ï9^þ$î%:pï7´ð î:å|ï/ðî:åï/ðî:åï$uðî:åï$uðî=­ï-çðî=­ï#Xðî?Wï'þ$ëî9Éï)Ðþ²$î9Éï)Ðþ$ëî?Wï*�þ$Çî:Wï*^þ$$î:Wï'ºþ$Çî:Wï'—þ$î6tï#Xðî6tï#Xðî8¬ï"Êðî5Wï&zþ@$î>;ï-%þr$î>;ï'þr$î9Éï,—þ«$î=­ï)uðî:åï*‘ðî:åï*‘ðî!åï-×þ$ rî!åï-³þ�$î5Wï&žþ$9î5Wï1 þ$î0åï1ºþ$Žî0åï1—þ �$î9Éï2Iþ$î9Éï2%þ«$î5Wï-×þ$Uî>;ï1—þr$î4Éï*ðî>Éï)uðî>Éï#Xðî9;ï&zþ9$î0åï9^þ$@îï?{þì$îï9^þ«$î9Éï9^þ$Îîrï8ÐþU$î«ï0®ðî«ï0®ðîï0 ðîï/ðîï-çðîï2³þ$îï2³þ$•îï7%þ«$î äpï8Bðîrï@ þ&W$îC;ï,—ðîC;ï&zðîC;ï1 ðîÈï0þ$Vîï/ìþ ë$îï/ìþ$Îîï1—þ$î:|ï4’ðî�ï5þ$î Èï5{þ$î�ï5{þ$îópï4ìðî�ï:þ$î%:ï9íðî�ï:{þ@$î&Wï:{þ $î�|ï6Ëðî�ï1Êðî8ï6Ëðî/:ï6Ëðî Èï1Êðî rï`®þGî �ï`®þGî �ïcuþ �Gîï`õþGÇîï`®þGî%:ï`®þGî%:ïcuþ Gî0Wï`õþGÇî0Wï`®þäGîH;ï`®þGîH;ïcuþUGî �ïQCþ$–î%:ïQfþ$rî0WïQfþ$rîïQfþ$rîH;ïQfþ$rîpïa`ðî#ï.Aðî#�tïa§ðîïaƒþ$«îEtïaƒþ$«îF�ïa§ðî5Wpï9íðî1s|ï6Ëðî:Wtï:4ðîpï(³ðîï"ðîï ]ð îï'ðîï#³ðîï$ðîïzð îï%^ð îïyðî1sï:{þU$î6tï:{þÇ$îäïaƒþ$îtïa§ðî"sïaƒþ$«î :ïa§ðî;tïa§ðî=­ïaƒþ$«î9;ïaƒþ$«î@tïa§ðîpïÏðîï³ðî Èï ]ðîïyð&îï²ð îïÏðîrï8ôþ$9îï9‚þ$î«ï3Bðî;tï8BþŽ$îC;|ï4’ðîAï5 ðîAï5 ðîEtï8uðîEtï3uðîFï7×þ$ŽîEtï1<ðîCÉï8Bþr$îH;ï8Bþ$ ²î ÈïBÐþ;—$î Èï3óþ$î Èï3ÐþU$îEtpï<´ðîEt|ï4’ðî«ï2³þ –$îrï7´þV$îApïA´ðî�tïa§ðî4Éïa§ðîpï$ð+îï $ð î/:tï7ûðî8ï7ûðî�ï7%þä$î;tï7%þ$]î Èï7ûðîïEßð î:WïEßð îpïN{ðîäïM‚þGÇî rïM;þ¹Gî"sïM‚þGÇîäïPþ �Gî2�ïPþ �Gî=ïM‚þGÇî"sïM;þGî2�ïM;þGî=ïM;þrGî"sïGfþ$Žî=ïGfþ$Žîï$ð5î"stïÀðî&åïÀðî äïa§ðî)ïa§ðî/:ïa§ðî.ïaƒþ$î Èpï*ìðî Èï]ð#î :tïÀðÿ†äyEta`¨PageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceDocumentationGarner, DaviesIBIPSim49.sily4926.Clock Hold circuits:This drawing describes the clock holding circuitry.The clock itself is shown in Garner's drawingIBIPClocking.sil or IBIPClocking.press on[Indigo]IBIP>Doc and[Indigo]IBIP>Doc>Press respectively.27.A couple of subtle points about that clocking schemeshould be noted before going on. First, the longestrun of 1's in the delay line is of length a. In orderto ensure that the clock operates properly, b mustbe less than a. If it weren't, that run of 1's couldlie entirely between taps a and b, both taps wouldsignal 0, and a new run of 1's would beginerroneously.Second, notice that the basic mode of operation isfor the run of 1's to fall off the end before Pause'1's begins. The TimeOut line is supposed to restartis examined. When Pause' goes HI, another run ofthe clock if Pause' refuses to go HI. This also causesThis feature of ignoring Pause' until the delay lineempties allows one to be fairly sloppy in generatingPause'. The in fact, one need not worry aboutgenerating a rising edge on Pause' at any time. If itoccurs when Pause' is being ignored, it will be ignored.if it occurs when the clock is stopped, it will simplystart the clock. One need only worry about fallingedges on Pause' just when the delay line runs out.If Pause' falls just at the right time, a runt clockpulse could be generated.28.Another subtle point that escaped me for a coupleof weeks is that the delay line empties and thePhaseF starts with the pause and ends c time unitsafter the clock holding circuitry has decided to startthe clock. The main consequence of this is that onecannot decide whether or not to stop the clock bylooking at signals that are only valid in PhaseF.29.The main conditions that cause the Emulator clock to stop are:a)Waiting to use the AP bus,b)Having started a memory cycle, waiting for the datato return,c)Waiting for the Instruction Fetch Unit to put bytes intothe Instruction Buffer so the Emulator may read or dispatchon them,d)Waiting for the Instruction Buffer to complete a referenceso the Mesa program counters may be loaded. This occursin the jump routines,not to do an IBReference.e)Waiting for the IBWindow arbiter to decide whether30.To enhance performance, a microinstruction needing memorydata is allowed to proceed to the point at which the datais stored. When the data arrives, the clock is started. Thechip has c time units until PhaseF ends. During this time, thedata must be stored and, if the microinstruction specifies abranch based on the F bus contents, the new microinstructionaddress must be calculated. If we made the entiremicroinstruction wait until the data arrived, as is done withall of the other cases, we would waste the time needed to getthrough PhaseA and PhaseB to PhaseF on many memoryreferences.31.Pause'=(MAR_Map_()*==(+))+=_MDu)*(**)(+()=_MDv*)(=PCs_*)*(++((=0)*()()(((*)=15+)){_ib, _ibSE, _ibLow, _IbHigh}fPCAtEndOfPage'a)b)c)d)e))'WindowHold()*+IBEmpty*EnableAPBus *()25.iCDRRTiIBRqWindowStart'IBEmptypIBAccessThe IBRequest is generated as follows:RTBARRPhaseFdecision about whether to hold the clock or not (the Pause Point in IBIPClocking.sil) is made justBEFORE PhaseF, not at the end of PhaseF.pmemmemmempmempfS.1pfZ.[0..1]0=pfS15pfY{AwIBDisp, IBDisp}pfX#An IBRq causes the bus state machine to leaveS2, setting S2' and resetting the arbiter onIBIPSim48.silya microcode trap. The time at which Pause' isThe IBIP uses a two level pipeline in which the fetching anddecoding of one microinstruction is overlapped with theexecuted the "current" microinstruction and the one beingdecoded the "next" microinstruction. In the equationsbelow, we add the prefix "p" to denote a field from the nextmicroinstruction. For example, "mem" is the field of thecurrent microinstruction indicating what sort of memoryoperation should take place. The corresponding field in thenext microinstruction is called "pmem."examined is called the "Pause Point."execution of the next. We call the microinstruction beingS2'S5'S2'S1'S19'S1'S2'S5'**S5fetch or only word of single fetch. See IBIPSim43.sily}{Not an IBReference and waiting for 1st word of double fetch.}{Not an IBReference and waiting for 2nd word of doubleNotice that, in general, we don't stop the clock if anattempted IBAccess will result in an IBDispTrap or anIBEmptyTrap. The only exception is when we jump to theend of a page. There, we stop the clock while the IB dataarrives, then allow the IBDispTrap to take place. It's toomessy and unnecessary to wait for the AwIBDisp in theIBDispTrap code to stop the clock and run the IBReference.8/19/83(+pfX)=(fPCp_)îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî%ÈïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&WïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð îpï@ð î2�ï]ðî&Wï]ðîKï]ðîätïOQðîpïëðî«tïOQð3î«ïN4ð-î«ïMð)î«ïKûðî«ïJßð.îäïHðî«ïHð4î«ïFûð4î«ïEßð6î«ïDÂð2î«ïC¦ð5î«ïB‰ð2î«ïAmð*î«ï@Pð î«ï>ð2î«ï<ûð4î«ï:Âð4î«ï;Þð1î«ï9¥ð7î«ï53ð4î«ï4ð4î«ï2ûð.î«ï1Þð6î«ï0Âð8î«ï/¥ð6î«ï.‰ð3î«ï-lð2î«ï,Pð4î«ï+3ðî'sï]Ãðî*:ï]Ãð1î*:ï\§ð/î*:ïX5ð2î*:ïWð6î*:ïUüð4î*:ïTßð1î*:ïSÃð1î'sïPûðî*:ïPûð>î*:ïOQðî+åïOQðî*:ïM¦ðî+åïM¦ð3î+åïLŠð î*:ïJßðî+åïJßð8î+åïIÂð;î+åïH¦ðî*:ïFûðî+åïFûð:î+åïEßð8î+åïDÂðî+åïAûðî*:ïCðî+åïCð2î'sï6Þðî*:ï6Þð9î*:ï5Âð9î*:ï4¥ð=î*:ï3‰ð?î*:ï2lð<î*:ï1Pð<î*:ï03ð2î*:ï/ð=î*:ï-úð=î*:ï,Þð2î*:ï+Áð î'sï)ˆðîäïlðî Èïlðî«ï¤ðî«ï¤ðî¬ï¤ðîï¤ðîï¤ðî$ï¤ðî�ï¤ðî�ï¤ðî¬ï¤ðî�ï¤ðî#ï¤ðî#�ï¤ðî&åïˆðîrïkðî�ïkðîäïkðîïkðîïkðî :ïkðî#�ïkðî'sïkðîïkðî(�ïOðîïOðîäïOðîrïOðî�ïOðîïOðî#�ïOðî«ïOðîrïOðî�ïOðî"sïOðîVïOðîäïkðîïOðî%:ïOðî%:ïOðî Èïˆðî"sïˆðî%Èïˆðî&åïˆðî(ïˆðî(�ïˆðî)¬ïˆðî1sïˆðî!åïˆðîBïˆðî4;ïˆðî4Éïˆðî<ïˆðî:åïˆðî:Wïˆðî>Éïˆðî?æïˆðî3ïˆðî2ïˆðîA�ïˆðî#uïkðî«tïˆðî 9uï¤ðî 9ïkðî 9ïˆðî 9ïOðî 9ïðîrtïOðîïOðîïð îrïlðîCÉïˆðî�ïˆðîDæïˆðîïˆðî¬ïˆðîïlð î�ïOðî�ïùðîäï]Ãðî|ïUZðîïX!ðîïX!ðî³ïW“ðî³ïUZðîÝïVvðîïW“ðîäï[Cþ]$îäïY þV$îäïWíþV$îHïWíþ€$îÈïWíþ$@îÈïY þU$î ÈtïZnðî rï[Šð î rïYQðî rïX5ð î«ï]Ãð&î«|ïT=ðî$ïT=ðîòïUèðîòïUèðî«ïS!ðî«ïUZðîäïVÑþV$î rtïWðî*:ï[Šð0î*:ïZnð2î*:ïYQð(îïZ&þŽ$î9ï¤ðî«ïkðî«ïOðî:ï¤ðî#ïˆðî*:ïˆð î0åïˆðî/Éïˆðî5Wïˆðî8¬ïˆðî<�ïˆðî6tuïkðî9tïOðî7�ïˆðî«ïSÃð-î«ïR¦ð,î«ïQŠðî«ï8‰ð.î*:ï)ˆð<î*:ï(lð7î*:ï&3ð9î*:ï%ð6î*:ï#úð<î*:ï"Þð9î*:ï!Áð7î*:ï ¥ð<î*:ïˆð'î«ï7lð%î*:ï'Oð:î%:ï¤ðî¬ïkðîïkðî!Vïkðî$¬ïkðî!VïOðîïOðî¬ïOðîäïOðî :ïOðî#�ïOðî+Wuï3ð8î*Èïkð>î*ÈïOð6î*:tï@Pð6î*:ï?4ð5î*:ï>ð7î*:ï<ûð:î*:ï;Þð;î*:ï:Âð5î*:ï9¥ð:îBpï]ðîtïOðîsïOðîïOðî ÈïOðîVïOðî�ïOðîsïOðî!VïOðiäŽN^.WPageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceGarner, DaviesCritical Delay AssumptionsCritical Delay Assumptions1.After an IBReference, the new value of IBRoom mustOne of the two forks at the bottom of IBIPSim43.silywill be taken at the end of an IBReference. This willThe IBRoom calculation is =Full.0'+IBRoomthe IB was completely empty. The other branch of theuntil the Full bit has been set. The designer mustadditionally guarantee that IBRoom is valid by thewas room in the IB and an IBWindow clause was present,another IBReference could begin with disasterousresults. Another consequence of IBRoom staying toolong could be that IBRq might disappear just as theconfusion, possibly leaving all the states turned off.2.Comments1.2.cause one of the Full bits to be set (see IBIPSim46.sily).Full.1',so IBRoom should go to 0 soon after this fork unless2a.If it were possible to violate condition 2a and it took amicroinstruction containing a MAR_ or Map_ start just asthe bus state machine was embarking on an IBReference.IBIPSim50.sily50IBWindowRqWindowStart'IBRqIBRefWindowHoldpWS'pWHPhaseAPhaseBPause'pMARPause Pointbefore resetting the WindowHold term.If the clocks are near the Pause Point (IBIPClocking.sil),This condition should only be reached when the busIBWindowRq (IBIPSim48.sily) goes LO.See IBIPSim48.sily for circuit.We must guarantee that if andthe arbiter (IBIPSim48.sily) waits until after the Pause Pointto decide what to doandit decides to start an IBReferenceandthe next microinstruction contains a MAR_ or Map_THENPause' is held LO without a glitch.before the Pause Point.Not to Scale, the Pause Point is too soon.go to an undecided state. It is claimed that while in thisstate they are equal to each other so both MOS transistorsare turned off and both WindowStart' and WindowHold areHI. WindowHold holds Pause' LO while a decision is made.If the arbiter had decided to forget the IBReference,WindowHold would simply rise and the clock would start.We assume the arbiter decides to start an IBReference andraised. This starts two events into motion. First, thearbiter, passing through both NOR gates and the lowerpass transistor, pulling WindowHold LO. To guarantee thatthe clock circuitry won't generate a runt pulse, we mustWindowHold goes LO.IBWindowRq should set WindowHoldfork leads to a join with the S5 state and the joinleads to S1. Note we cnnot leave S1 for S2time S2 is entered. If it falsely indicated that therestate machine was leaving S2. This could causethen leaving S2 must set the(pMAR_ + pMap_) * S2' term of the Pause' circuitrystate machine entered S2 just asthe bus state machine enters S2 just as IBWindowRq dropsWhen both IBWindowRq and S2' drop, pWS' and pWH canpulls WindowStart' LO. This eventually causes S2' to be(pMAR_ + pMap_) * S2' term in the pause circuitry startsHI. Second, the S2 transition propagates through the guarantee that (pMAR_ + pMap_) * S2' gets HI beforeS2'pMAR * S2'very long time to set S2', it would be possible to have abe valid by the time state S2 (IDLE) is entered.8/19/83îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî%ÈïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&WïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð î2�pï]ðîï]ðî ïeCðî(tïb5ðî«ïb5ð2î*:ïb5ð4î*:ïað6î*:ï^ßðî.ï]5ðî/:ï]5ðî3ï]5ðî*:ï]5ðî*:ïZnð5î*:ïWð3î*:ïUüð2î*:ïSÃð6î*:ïR¦ð0î*:ïQŠð3î*:ïPmð3î*:ïN4ð6î(ïKmðî.pïeCðîrtïb5ðîrïKmðî*:ï_üð:î4;ï]5ðî*:ï[Šð4îrïÝðî*:ïÝð9î*:ï ¤ð8î*:ï ‡ð6î&Wpï]ðîKï]ðî9tï-úð î9ï'Oð î9ï%ðî9ï"Þðî9ïlð î ï.Ðþ9$î9ï+Áðî9ï)ˆðî ï,—þU$î Vï+žþ$î ï)AþU$î Vï)Aþ$@î ï%þr$îrï%þ$@î 9ï-³þ�$î Vï*^þ $îÈï-³þä$î Vï+zþ $îsï+zþ$@î9ï2lðî9ï03ðî ï2Iþ$î ï2%þ�$î ï/ìþ9$î 9ï/ìþ$@î 9ï1 þs$î9ïÁðî ï–þŽ$î�ï�þ$î9ï3ðî ïìþU$î ïþ¬$î ïìþ9$î9ïìþ$@î9ïúð î�ïòþ$î«ïHð%î«ïKmð:î«ïFmð2î«ïD4ð$î ï3Bþ@$î 9ï-×þ$î Vï,—þ $î ï!zþ9$î 9ï �þ$î Vï)Aþ $îsï)Aþ$@î ï(%þ�$î�ï',þ$î ï$Ïþ«$î¬ï$Ïþ$@î ï"–þÈ$îÈï"–þ$@îÈï#³þä$î 9ï ]þ«$îäï ]þ$@îäï!zþÇ$îsï*^þŽ$îï)eþ$îï)Aþ«$îsï+zþ«$îï+zþ$@îï,—þŽ$î�ï'þŽ$îï'þ$@îï(%þŽ$î¬ï%ìþŽ$î :ï$óþ$î :ï$Ïþr$îrïAþÈ$î :ïHþ$î :ï%þr$î ï³þ$îï³þ$@îïÏþ«$î�ïzþ$î VuïOðî*:tïKmðî7ïH¦ðî*ÈïG‰ð>î*ÈïFmðî7ïEPðî*ÈïD4ð"î7ïCðî*ÈïAûð1î7ï@ßðî*Èï?Âð#î«ï Àðî Vuï53ð*î*:tï<ûð;î*:ï;Þð:î*:ï:Âð7î*:ï9¥ð9î*:ï8‰ð5î*:ï7lð7î*:ï6Pð9î*:ï4ð8î*:ï0Âð5î*:ï/¥ð:î*:ï.‰ð8î*:ï,Pðî«ïÝð î*:ïYQð3î*:ïX5ð+î*:ïTßð7î*:ïOQð/î«ïJQðî«ïI4ð2î«ïEPð î*ÈïIÂð8î*:ï>ð3î*:ï53ð8î*:ï2ûð8î*:ï1Þð6î*:ï-lð3î9ï ¥ðî9ïúð î*:ï Àð9î«ïað0îBpï]ðÿ üäŽNeõ:PageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceGarner, DaviesCritical Delay AssumptionsCritical Delay AssumptionsCommentsStarting an IBReference must set theIBIPSim51.sily513.3.Note that putting an IBWindow clause in amicroinstruction which immediately preceeds agenerally a better idea to put the IBWindowclauses where they cannot interfere with normalEmulator memory references. Note that itwould make sense to have IBWindow and MAR_in adjacent microinstructions if the IBWindowexecuted a couple of times before getting to theMAR_.successive microinstructions is a genuinely badidea. The result will be that either nothing happensmicroinstruction were at the end of a loop that would bePutting IBWindow and PCs_ clauses inidea. Either there will be no IBReference (if theIB had no room) or the PCs_ clause will be delayedwhile the Instruction Fetch Unit fetches 4 bytesthat will be immediately thrown away. This couldbranch and the path leading to the PCs_ wasseldom executed. Nonetheless, the hardware mustperform correctly if a PCs_ microinstructionimmediately follows an IBWindow microinstruction.To guarantee this, we must guarantee that if thearbiter decides to execute an IBReference, the clockwill be held. The following sequence will be executed:a)WindowStart' will go LO, setting IBRq'b)c)d)WindowHold term of the clock hold circuitry.If the clock is to be held properly, (if there was no room in the IB) or the memoryreference will be delayed by the IBReference. It isonly make sense if the IBWindow microinstruction had awill start towards HI while the machine begins to4.The Instruction Buffer write enables must notglitch.0 between the time the P chip senses that Respv'has gone to 0 and it has set Rq', Ca' and Cp' to1.4.There are three undesirable consequences of incorrectThe WDuValid and WDvValid signals should go tobehavior on the WDuValid, WDvValid and IB writeenable signals.a)If WDuValid or WDvValid falsely indicate that thedata from memory is available before it actuallyarrives and the bus state machine looks at themwhile they are in this state, the state machinewill proceed as though the data had actuallyarrived. This will cause both bad data to be usedand it will allow the state machine to startEmulator or IBReference before the A chip is ready.b)If the IB write signals glitch as they are beingsampled to decide which IB Full bit to set, thewrong one could be set. This could cause theInstruction Fetch Unit to lose track of what isreally in the IB.c)The IB input data is only valid briefly before theIB write enable signals are disabled. If thewrite enable signals glitch at this time, the IB maybe written incorrectly.WDuValid and WDvValid signals will themselves be validwhen the state machine looks at them.As discussed in IBIPSim46.sily, the IB write enablesignals are composed of select and timing terms. Thetiming terms are either WDuValid' or WdvValid' dependingon which word in the double word is being written.The delay between when the WDu or WDv linesactually have valid data and when this is reflectedin WDuValid or WDvValid should be longer that thesetup times of the destination latches.It should not be possible for a WDu (or WDv) data lineto go from valid to invalid after Respu' (or Respv')If the Select terms are glitch-free, conditions 4b and 4cguarantee that the correct data will be written inthe IB or MD destination latches.has gone HI. It should similarly be impossible fora WDu (or WDv) data line to take on, evenway to the correct value.momentarily, the incorrect value (10 or 01) on theThe IB state machine must set the uvPC.2 state(see IBIPSim46.sily) before clearing the Full.0 state.Similarly, it must reach uvPC.0 before clearing Full.1.From IBIPSim46.sily, the write select terms are:IBWriteSelect0IBWriteSelect1)uvPC.2Full.0(+)*Full.1'+(=Full.0)uvPC.0+uvPC.1+Full.1*)Full.0'Full.1+(=(IBWriteSelect0IBWriteSelect1)uvPC.2Full.0(+)*Full.1'+(=Full.0)uvPC.0+uvPC.1+Full.1*)Full.0'Full.1+(=(Condition 4d guarantees these will be glitch-free evenif the Emulator reads the IB just as the IFU is writing to it.Meeting conditions 4a - 4c guarantees that theIBRq will set S5 (see IBIPSim43.sily)leave the S2 state.Leaving S2 will set S2', resetting theWindowHold goes LO.a)b)c)d)MAR_ or Map_ microinstruction is generally a badIn parallel: the ((pfX=PCs_) + (pfX=fPCp_)) * S5((pfX=PCs_) + (pfX=fPCp)) * S5 Pause' termsbefore resetting the WindowHold term.((pfX=PCs_) + (pfX=fPCp)) * S5 must go HI before8/19/83îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî%ÈïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&WïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð î2�pï]ðîï]ðî ïeCðî+åïeCðî«tïb5ð$î&Wpï]ðîKï]ðîrtïb5ðî*:ïb5ðî,sïb5ð)î,sïað-î,sï[Šð+î,sïZnð/î,sïYQð)î,sïX5ð*î,sïWð-î,sïTßð0î,sïSÃðî,sïPûð/î,sï^ßð5î,sïUüð8î,sïRð$î,sïOßð2î,sïNÃð2î,sïM¦ð0î,sïLŠð1î,sïJQð+î,sïI4ð0î,sïHð,î,sïFûð1î,sïEßð0î,sïDÂð4î,sïC¦ð7î-ïAûðî.¬ïAûð&î-ï@Pðî-ï>¦ðî-ï:Âðî.¬ï9¥ð,î-ï7ûð%î,sï]Ãð.î,sï\§ð4î,sïKmð6î.¬ï=‰ð1îrï2ûðî«ï2ûð-î«ï1ÞðîVï.‰ð0îVï-lð0îVï,Pðî*:ï2ûðî,sï2ûð5îVï/¥ð.î,sï1Þð/î,sï0Âðî-ï/ðî.¬ï/ð1î.¬ï-úð0î.¬ï,Þð/î.¬ï+Áð/î.¬ï*¥ð,î.¬ï)ˆð2î.¬ï(lð,î.¬ï'Oð3î-ï%¥ðî.¬ï%¥ð0î.¬ï$ˆð/î.¬ï#lð-î.¬ï"Oð/î.¬ï!3ðî-ïˆðî.¬ïˆð2î.¬ïlð-î.¬ïOð4î.¬ï3ðî,sïkð6î,sïOð%î,sï¤ð3î,sïˆð5î,sïkð8î,sïOð2îVï*¥ð+îVï)ˆð3îVï(lð1îVï'Oð'îVï%¥ð6îVï$ˆð4î,sï2ð9î,sïð2î,sïùð!îVï#lð3îVï"Oð)îVï ðîVï!3ð2îVïÝð.îVïÁð6îVï¤ð7î,sïOð0î,sï ¤ðî,sï ùðîHÉï ùðîDæï ùðî@tï ùðî?æï ùðîCÉï ùðî=­ï ùðî>Éï ùðî:Wï ùðî9;ï ùðî5Wï ùðî4;ï ùðî5åï ùðîMÊï ¤ðîDæï ¤ðîHÉï ¤ðîIæï ¤ðî9;ï ¤ðî@tï ¤ðî>Éï ¤ðî=­ï ¤ðî:Wï ¤ðî5åï ¤ðîCÉï ¤ðî5Wï ¤ðî4;ï ¤ðî?æï ¤ðî,sï ¤ðî,sï ùðîHÉï ùðîDæï ùðî@tï ùðî?æï ùðîCÉï ùðî=­ï ùðî>Éï ùðî:Wï ùðî9;ï ùðî5Wï ùðî4;ï ùðî5åï ùðîMÊï ¤ðîDæï ¤ðîHÉï ¤ðîIæï ¤ðî9;ï ¤ðî@tï ¤ðî>Éï ¤ðî=­ï ¤ðî:Wï ¤ðî5åï ¤ðîCÉï ¤ðî5Wï ¤ðî4;ï ¤ðî?æï ¤ðî,sï Oð6î,sï2ð>î,sïˆð.î.¬ï@Pð%î.¬ï¦ð0î«ïað+î«ï_üð%î-ï6Þð1îBpï]ðÿ‡äŽNXeõ%PageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceGarner, DaviesCritical Delay AssumptionsCritical Delay AssumptionsCommentsIBIPSim52.sily525.The delay from when a PCs_ clause causes the Fullbits to be cleared until the Pause' signal can be raisedmust be less than the time from the beginning of5.A Mesa jump instruction results in a change in theMesa PC. This is implemented by having a microinstructionin the Emulator's jump code execute a PCs_ clause.This, in turn, sets the least significant 16 bits of thevirtual program counter (vPC) and the least significant8 bits of the fetch Program counter (see IBIPSim44.sily -IBIPSim46.sily). It also causes the Instruction Buffer'sFull bits to be reset, indicating that the IB is empty andshould be refilled with instruction stream data referencedIf the next microinstruction contains an IBAccess, likely anIBDisp, it must be possible to stop the clock while theInstruction Fetch unit retrives instruction stream data.In order to stop the clock, the Pause' signal must bedelay of the circuits that gate the PCs_ signal, clear theFull bits, set IBEmpty and can activate the Pause' signalmust be less than the interval between the beginningPhaseA to the Pause Point.by the new fetch PC. The decoded PCs_ signal is latchedby PhaseA, hence it becomes valid soon after thebeginning of PhaseA.It will start clearing the Full bits at this time.valid by the Pause Point. Thus, the propagationof PhaseA and the Pause Point.6.The delay from when an IBConsume causes the Fullmust be less than the time from the beginning ofbits to be cleared until the Pause' signal can be raisedPhaseB to the Pause Point.6.This is similar to the case above except that the uvPCcan't be changed until PhaseB starts. This is becauseit is used to address the IB in PhaseA. This is potentiallya much more serious constraint than #5 above becausethe circuit can't start until the beginning of PhaseB.7.The delay from when the Instruction Fetch machinecauses fPCAtEndOfPage to be set until it can beused to cause an IBDispTrap must be less than thedelay from the beginning of PhaseF to the beginningof the next PhaseB.7.If a Mesa jump lands on the last byte of a page (actuallyany of the last 4 bytes) we must have an IBDispTrapbefore starting that first bytecode. The Emulator iswritten assuming an IBDispTrap will occur whenever theIB can't fetch any more without crossing a page boundry.It is quite likely that the jump microcode will execute aPCs_ followed by an IBDisp. The IBDisp will not trap thenbecause fPCAtEndOfPage should be false. Instead, theIBDisp will stall as the IFU fetches the last double wordof the page. At the end of the fetch, the IFU willincrement the new fPCd, which starts to set fPCAtEndOfPage.It will also set one of the Full bits, which resets IBEmptyand allows PhaseF of the microinstruction BEFORE theIBDisp to proceed. The actual IBDispTrap takes placein the next PhaseB. There, the vPC, uvPC and Full countersare held and the proper trap address is generatedin NIA. While we have until the end of PhaseB to generatethe trap address, we cannot begin to increment thecounters in PhaseB, then go back.Full bit is set which is when IBEmpty is reset which iswhen Pause' goes HI which is when the fixed delay sectionby the beginning of the next PhaseB.Note that if we attempt to fix the problem shown in #6the trap logic to be active by the beginning of PhaseA.condition becomes more restrictive. We would requireHence, if the fPCd counter is incremented when theof PhaseF begins, fPCAtEndOfPage*IBDisp mustinable the trap logic which disables the counter updatesabove by incrementing the IB counters in PhaseA, this8/18/83îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî%ÈïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&WïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð î2�pï]ðîï]ðî ïeCðî+åïeCðî&Wï]ðîKï]ðîrtïb5ðî«ïb5ð1î«ïað8î«ï_üð0î*:ïb5ðî,sïb5ð2î,sïað:î,sï_üð2î,sï^ßð8î,sï]Ãð7î,sï\§ð9î,sï[Šð9î,sïZnð:î,sïYQð:î,sïSÃð<î,sïR¦ð7î,sïQŠð8î,sïPmð5î,sïN4ð:î,sïMð9î,sïKûð4î«ï^ßðî,sïX5ð8î,sïWð0î,sïUüðî,sïTßð2î,sïOQð0î,sïJßðîrïHðî«ïHð0î«ïEßð0î«ïFûð8î«ïDÂðî*:ïHðî,sïHð6î,sïFûð6î,sïEßð<î,sïDÂð4î,sïC¦ð6îrï@ßðî«ï@ßð1î«ï?Âð/î«ï>¦ð1î«ï=‰ð3î«ïð6î,sï<ûð8î,sï;Þð9î,sï:Âð:î,sï9¥ð5î,sï8‰ð9î,sï7lð3î,sï6Pð;î,sï53ð;î,sï4ð4î,sï2ûð5î,sï1Þð;î,sï0Âð1î,sï/¥ð:î,sï.‰ð2î,sï-lð!î,sï*¥ð7î,sï)ˆð9î,sï&3ð$î,sï$ˆð6î,sï!3ð7î,sï"Oð5î,sï+Áð2î,sï(lð,î,sï'Oð8î,sï#lð5îBpï]ðÿbäŽO»eõÀPageDateRevDesignerProjectFileSDDAXEROXDaisyReferenceGarner, Davies8/19/8354IBIPSim54.silyMiscellaneous Points32.As seen on IBIPSim41.sily, the least significant bitof the A1 address group is F.15. This is a problembecause the A1 bits should be ready by the end ofPhaseA and the F bus bits aren't normally readyuntil the beginning of PhaseF. To fix this, a specialcircuit has been added that computes F.15 in PhaseA.To make the circuit fast, it only performs arithmeticoperations (addition and subtraction). Thus, allmicroinstructions containing a MAR_ must form theaddress using some sort of arithmetic operation.Adding 0 is a legal arithmetic operation. TheDandelion allowed one to also send addresses viaA-Bypass and one could use an OR operation.The A-Bypass has already disappeared, there issimply no data path from the A side of the Rregisters to the F Bus that avoids the ALU orLRot box. The OR operation was fairly rare anyway.33.If the clocks are held too long, a time out signal startsthem and causes a trap (IBIPClocking.sil, IBIPControl.sil).This time out can be disabled by some external pin.This is viewed as a debugging aid. Its a little difficultto see what the IBIP will do in the TimeOut trap sinceits only communication port (the AP Bus) is bustedand the bus state is undefined.îIæuïNðîIXïÕþGîAïÕþGî>;ïÕþGî1sïÕþGî%ÈïÕþGîrïÕþGî«ïÕþGîïÕþG¹îMÊïŽþGGîïŽþMÊGîA�ïNðî>ÉïNðî2ïNðî9ïNðî&WïNðîïŽþMÊGî9ïðî?Wpï]ðîïyðîÇï]ðî�uïNð î2�pï]ðîBï]ðîKï]ðî&Wï]ðîï]ðîätï]Ãðî«ï]Ãð4î«ï\§ð3î«ï[Šð1î«ïZnð/î«ïYQð6î«ïX5ð4î«ïWð5î«ïUüð1î«ïTßð1î«ïSÃð0î«ïR¦ð/î«ïQŠð0î«ïPmð+î«ïOQð.î«ïN4ð,î«ïMð-î«ïKûð3îäïIÂðî«ïIÂð9î«ïH¦ð;î«ïG‰ð3î«ïFmð:î«ïEPð6î«ïD4ð2î«ïCðäŽN^.ó Helvetica  Helvetica  Helvetica Helvetica Gates nR$ µ.›<QO J\bsp Çz † �€“j/– ”ÿÿ›m™ËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIBIPSim43.sily etc.1.sily etc. DDavies.PAF19-Aug-83 20:34:35