//************************************************************************************** //ALU1.TST //By F. Itami and M. Thomson January 29, 1979 //Sub Test Program for D0 ALU Module //************************************************************************************** get "alu.d" //Edge pin signal busses used by ALU module: //{ALUA: ALUA.00, ALUA.01,ALUA.02,ALUA.03, ALUA.04,ALUA.05,ALUA.06, ALUA.07,ALUA.08,ALUA.09, ALUA.10,ALUA.11,ALUA.12, ALUA.13,ALUA.14,ALUA.15} //{aluf: ALUF.0, ALUF.1,ALUF.2,ALUF.3} //{clkbus: LT,LR, Abort',LoadMIR,Cycle0Feed'} //{CTask: CTask.0, CTask.1,CTask.2,CTask.3} //{F1F2: F1.0,F1.1, F1.2,F1.3,F2.0, F2.1,F2.2,F2.3} //{H2: H2.08,H2.09, H2.10,H2.11,H2.12, H2.13,H2.14,H2.15} //{MASK: MASK.00, MASK.01,MASK.02,MASK.03, MASK.04,MASK.05,MASK.06, MASK.07,MASK.08,MASK.09, MASK.10,MASK.11,MASK.12, MASK.13,MASK.14,MASK.15} //{MC1SA: BSEL.0,BSEL.1, F1.0,F1.1,F1.2, F1.3,LR,LT} //{mcbus: MC1WriteR, MC2AllowWrite,MC1NeedsR,MC2WillGetR} //{mirbus: MemInst/d,MemInst/d', RMOD/d,RMOD/d',RSEL.0/d', RSEL.1/d',RSEL.2/d,RSEL.3/d, RSEL.4/d,RSEL4and5/d,RSEL.5/d} //{rbus: R.00, R.01,R.02,R.03, R.04,R.05,R.06, R.07,R.08,R.09, R.10,R.11,R.12, R.13,R.14,R.15} //{TA: TA.0, TA.1,TA.2,TA.3} //************************************************************************************** //Test 1: Check initial conditions and the Suspend flip-flop control let Test1() be [ SpeakTest(1) //set initial conditions (see notes at end of ALU.TST) //Repeat the SpeakTest initialization sequence with WCompares monitoring the process. //See SpeakTest (in ALU.TST) for all input edge-pin signals (not redundantly entered here) //The "//WCompares" are optional breakpoints. To activate, delete the leading "//". Restore to normal by re-inserting "//". {clkbus}=#27; //LT=1, LR=0, Abort'=1, LoadMIR=1, Cycle0=0 {aluf}=3; //for prom f2 outputs = 1111 (page 16) {LoadAd'}=0; //for MC1XferWord_1, MC1XWdly_1 {EdgeClockFeed'}=0 //WCompare(1,0,1000) {EdgeClockFeed'}=1; //load MIR with MemInst=0, RMOD=1, RSEL=01 11 11 for R_NBR (i.e. open Cycle0 R bus sources), Suspend_0, AbortDly'_1, MC1XferWord_1, MC1XWdly_1 WCompare({Suspend-a},0,1001) WCompare({MemInst-a},0,1002) {clkbus}=#24; //LT=1, LR=0, Abort'=1, LoadMIR=0, Cycle0=1 WCompare({EnableR},0,1004) //check test-clip b6.6 WCompare({R_NBR'},0,1005) {ALUF.2}=0; //makes {aluf}=1 for ALUOUT_ALUA.IN {LoadAd'}=1; //de-activate {AdvancePipe'}=0; //for MC2XferWord_1, MC2XWdly_1 {EdgeClockFeed'}=0 //WCompare(1,0,1006) {EdgeClockFeed'}=1; //reset cycler/masker bypass flip-flop, H2_(F1F2=0) (i.e. H2'_#177777), ALUF()_1 for ALUOUT_(ALUA.IN=ALUA), MC2XferWord_1, MC2XWdly_1 WCompare({H2},0,1007) WCompare({MC2XferWord},1,1008) {Cycle0Feed'}=1; //Cycle0=0 {MASK}=#177777; //ALUA_0's WCompare({ALUA},0,1009) {EdgeClockFeed'}=0 //WCompare(1,0,1010) {EdgeClockFeed'}=1; //Stkp_(ALUA=0), RSA,B_3,3(Stkp), TComing_1, TWPending_1, RComing_0, RWPending_0 {Cycle0Feed'}=0; //Cycle0=1 {rbus}=#177777 {EdgeClockFeed'}=0 WCompare({clkH3P'},0,1011) //check test-clip d7.12 //WCompare(1,0,1012) {EdgeClockFeed'}=1; //H1_(rbus=#177777), H3P_(ALUOUT=ALUA.IN=ALUA=0), RASAVE_RA_(Stkp=0), reset EnableMask (i.e. route ALUB_H2) {rbus}=### {Cycle0Feed'}=1; //Cycle0=0 WCompare({rbus},0,1013) //rbus_H3P {SALUF_H2'}=0 {EdgeClockFeed'}=0 //WCompare(1,0,1014) {EdgeClockFeed'}=1; //SALUF_(H2[8:15]=0) (includes MA',MB), WA_(RASAVE=0), RSA,B_3,3(Stkp), SStkp_(Stkp=0) {Cycle0Feed'}=0; //Cycle0=1 {SALUF_H2'}=1; //keep SALUF=0 {MASK}=0; //ALUA_(H1=#177777) //Additional check of the SpeakTest initialization sequence //Edge connector signals: WCompare({Suspend-a},0,1020) WCompare({R_NBR'},0,1021) WCompare({H2},0,1022) WCompare({ALUA},#177777,1023) WCompare({SRC/DEST=0'},1,1024) //Test connector signals (tester socket "B" to test-clips): WCompare({EnableR},0,1030) //pin 1 to test-clip b6.6 WCompare({clkH3P'},1,1031) //pin 2 to test-clip d7.12 WCompare({RWriteStrobe'},1,1032) //pin 3 to test-clip c7.11 WCompare({TWriteStrobe'},1,1033) //pin 4 to test-clip c7.6 WCompare({RA=WAa},1,1034) //pin 5 to test-clip d10.12 WCompare({RA=WAb},1,1035) //pin 6 to test-clip d10.10 //registers displayable on R bus: {Stkp_ALUA'}=1; //keep Stkp=0 {mirbus}=#1547; //MemInst=0, RMOD=1, RSEL=00 00 11 ClockMIR() //rbus_SStkp,Stkp' WCompare({rbus},#377,1040) {mirbus}=#1557; //MemInst=0, RMOD=1, RSEL=00 01 11 ClockMIR() //rbus[8:15] _ not(MA',MB,SALUF[0:5]) WCompare({rbus}Ź,#377,1041) //Test the Suspend flip-flop (page 13) and the MemNeedsR gates (page 16) //Suspend/d = MemNeedsR = MC1NeedsR.MC1XferWord + MC2WillGetR.MC2XferWord //prom f2 (page 16) contols MC1XferWord; ALUF.2 contols prom f2: //ALUF.2=0 will mean prom address = 1100 1010 (ouput = 0011) //ALUF.2=1 will mean prom address = 1100 1110 (ouput = 1111) //hence, MC1XferWord will follow ALUF.2 //{MemNeedsRbus: ALUF.2,MC1NeedsR,MC2WillGetR} let t1sb = table [ 0;0;0;0; 0;1;0;1; 0;0;1;1; 0;1;1;1 ] //Verify condition of signals resulting from SpeakTest WCompare({MC2XferWord},1,1101) {Cycle0Feed'}=1; //keep H2=0 and H1=-1 for prom f2 address = 1100 1x10 {LoadAd'}=0; //all clocks in loop will cause MC1XferWord_ALUA.2 for i = 0 to 15 do [ {MemNeedsRbus}=i EClock() //MC1XferWord_(ALUF.2=i[13]) {ALUF.2} = i rshift 3 ClockMC2() //MC2XferWord_(MC1XferWord=i[13]) //MC1XferWord_(ALUF.2=i[12]) WCompare({MC2XferWord},(i rshift 2)&1,1103,i) //Status: (MC1XferWord,MC2XferWord,MC1NeedsR,MC2WillGetR)=i EClock() //Suspend_MemNeedsR WCompare({Suspend-a},t1sb!i,1105,i) ] //Check that RUN=0 D.C. resets Suspend {RUN}=0 WCompare({Suspend-a},0,1006) //DC reset {RUN}=1; //return to normal WCompare({Suspend-a},0,1007) //should remain reset ] //************************************************************************************** //Test 2: Check all outputs generated on page 19. // The test sends all possible values of the inputs // and calculates what the result should be. and Test2() be [ SpeakTest(2) //set initial conditions (see notes at end of ALU.TST) //{t2drive: MC1NeedsR, Cycle0Feed',MemInst/d,RMOD/d, RSEL.0/d',RSEL.1/d',RSEL.2/d, RSEL.3/d,RSEL.4/d,RSEL.5/d} //{t2out: MemInst-a, R_NBR',R_DBSB',R_PCXF', R_SpareR',ReadErrors',ReadSyn', EnCtrlAuxRa,EnCtrlAuxRb,RSEL-Parity} for i = 0 to #1777 do [ {t2drive}=i //set values which are combinatorial functions of other inputs {RSEL4and5/d} = i<