//************************************************************************************** //MEMB1.TST //By B. Rosen and M. Thomson January 31, 1979 //Sub Test Program for D0 MEM Module //************************************************************************************** get "memb.d" //Edge pin and test connector signal busses available to this sub-test: //{StorEcIn: StorEcIn.0,StorEcIn.1, StorEcIn.2,StorEcIn.3,StorEcIn.4, StorEcIn.5,StorEcIn.6,StorEcIn.7} //************************************************************************************** //Test 1: Check assorted logic indicated by the sub-titles let Test1() be [ SpeakTest(1) //set initial conditions (see notes at end of MEMB.TEST) //Check for shorts in the tri-state signals accessed by new test clips //{t1bus1: MC2Next.4, MC2Next.5,MC2Next.6,preMC2Next.7, MC2TestSE,MC2TestDE,MC1Ftype.0, MC1Ftype.1,NewPipe,MC1Pipe.0, Refresh',Refresh'b,PStore12', EnInputParChk,MC2SE,MC2DE} //{Disablebus: Disablee2,Disableb9,Disablef14, Disableh2,DisableMC1,DisableMC2} //Verify the state of the tri-state disable terms WCompare({Disablebus},#37,1000) for i = 0 to 15 do [ {t1bus1} = 1 lshift i WCompare({t1bus1},1 lshift i,1001,i) ] //Test the f14 prom (page 19) let t1tab1 = table [ 0;2;2;1;2;1;1;2; 2;1;1;2;1;2;2;1; 2;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 2;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1; 2;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1; 1;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 2;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1; 1;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1; 1;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 1;1;1;1;1;1;2;1; 1;1;2;1;2;1;1;2; 1;1;1;1;1;1;1;2; 1;1;1;2;1;2;2;1 ] //{MC2SEDE: MC2SE,MC2DE} {MC2SEDE}=###; //disconnect tester drivers from the f14 prom outputs {Disablef14}=0; //enable the f14 prom outputs for this test for i = 0 to 255 do [ {StorEcIn}=i EClock() //ChkSyn[0:7]←(StorEcIn[0:7]=i) EClock() //CrctSyn[0:7]←(ChkSyn[0:7]=i) WCompare({MC2SEDE},t1tab1!i,1100,i) ] {Disablef14}=1; //disable the f14 prom outputs for next test //Check the MC2Next.7' and OFault' logic (page 20) //Check gates a and b of MC2Next.7'; check OFault' //(Gate a can only be partially checked since MC2LogSE is not tester-controllable) //Gate c is disqualified since MC2HoldIfSNE0=0 from SpeakTest {preMC2Next.7}=0; //disqualify gate d //{t1bus2: MC2TestSE, MC2SE,MC2TestDE,MC2DE} for i = 0 to 8 do [ {t1bus2}=i let sb = (#567 rshift i)&1 WCompare({MC2Next.7'},sb,1200,i) WCompare({OFault'},sb,1201,i) ] //Check gates c and d of MC2Next.7' //Gates a and b are rendered disqualified by the loop above {StorEcIn}=0; //Clear so that StorEcIn.7 can control SNE0 //{t1bus3: preMC2Next.7,MC2HoldIfSNE0,StorEcIn.7} for i = 0 to 4 do [ {t1bus3}=i EClock() //ChkSyn7←(StorEcIn.7=i[15]) EClock() //CrctSyn7←(ChkSyn7=i[15]) for SNE0←i[15] WCompare({MC2Next.7'},(7 rshift i)&1,1202,i) ] //Check the OValid' logic (page 20) //{t1bus4: preLoadOdata',MC2WriteCdat,MC2Next.4} for i = 0 to 8 do [ {t1bus4}=i EClock() //e2d ff ←(preLoadOdata'=i[13]) EClock() //Odata←Cdat' ←(e2d ff =i[13]) WCompare({Odata←Cdat'},i<<w.b13,1300,i) EClock() //e2f ff ← gate f1d output WCompare({OValid'},(#160 rshift i)&1,1301,i) ] //Check the EmRef logic (pages 15,16) {preMC1Next.6}=0; //MC1Next.6'←1 for MC1Active' control //{t1bus5: CTask.0,CTask.1, CTask.2,MC1Next.4,MC1StartMC2} for i = 0 to 16 do [ {t1bus5} = i xor 1 EClock() //ClockAd': MC1Task[0:2]←(CTask[0:2]=i[11:13]) (MC1Task.3←0) //MC1Active' inputs: MC1Next[0:3]=0 from SpeakTest, MC1Next.6'=1 // hence, MC1Active'←(MC1StartMC2'=i[15]) (page 16) WCompare({MC1Active'},i&1,1400,i) WCompare({EmRef},1 rshift i,1401,i) //rev. J boards will fail when i=2 ] ] //************************************************************************************** //Test 2: Test the Pipe Data logic (pages 7,11,15) // Test the b11 prom and the b9 flip-flops (page 15) and Test2() be [ //[ // test loop SpeakTest(2) //set initial conditions (see notes at end of MEMB.TEST) //Test the Pipe Data logic (pages 7,11,15) //{CTaskALUF: CTask.0,CTask.1, CTask.2,CTask.3,ALUF.0, ALUF.1,ALUF.2,ALUF.3} //{MC1Pipe.0003: MC1Pipe.0, MC1Pipe.1,MC1Pipe.2,MC1Pipe.3} //{R.0815: R.08,R.09, R.10,R.11,R.12, R.13,R.14,R.15} //{StorA: StorA0, StorA1,StorA2,StorA3, StorA4,StorA5,StorA6} //Set up initial conditions: {R←Pipe'}=0; //for R[8:15]←d14 ff's←RAM outputs (page 11) {LoadPipe}=1; //for WritePipe" active when RamClock (page 14) //EnRowAd'=1 from SpeakTest to disable the a17 StorA drivers (page 7) //Check the RAM data paths using adresses 0 and 1 only {MC1Pipe.0003}=0 //[// test loop for i = 0 to 7 do [ let a = 1 lshift i //Set up data (a[9:15]') to be stored in address 0 {StorA}=a; //for IStorA=a' (page 7) RClock() //a12 ff's ←(IStorA[0:6]=a[9:15]') (page 11) //(a12f ff←(Map.8=?) - cannot be tested) //Set up data (a[8:15]) to be stored in address 1 {CTaskALUF}=a EClock() //MC1Task[0:3]←(CTask[0:3]=a[8:11]) (page 15) //MC1Type[0:3]←(ALUF[0:3]=a[12:15]) (page 15) //Store into and read from address 0 {MC1Pipe.3}=0 RClock() //WritePipe': RAM(0)←(a12 ff's=IStorA[0:6]=a[9:15]') EClock() //R[8:15]←d14 ff's←RAM(0)' WCompare({R.0815}±,a±,2000,i) //exclude R.08 //WCompare({R.0815}±,0,2000,i) //exclude R.08 test wait only //Store into and read from address 1 {MC1Pipe.3}=1 RClock() //WritePipe': RAM(1)←(c9,c10 mux's=MC1Task[0:3],,MC1Type[0:3]=a[8:15]) EClock() //R[8:15]←d14 ff's←RAM(1)' WCompare({R.0815},a xor #377,2001,i) ] //] repeat // test loop //Check all the testable addresses of the RAM using both 1's and 0's in each cell //(excludes 3,7,#13,#17 since their data inputs involve Map outputs) for i = 0 to 1 do [ for j = 0 to 7 do //Write pattern into even addresses (0,2,...#16) [ let a = 1 lshift j let b = a xor (-i) //a inverted if i=1 {MC1Pipe.0003} = 2*j; //even addresses (0,2,...#16) {StorA} = not b; //for IStorA[0:6]=b[9:15] RClock() //a12 ff's←(IStorA[0:6]=b[9:15]) //(a12f ff←(Map.8=?) - cannot be tested) RClock() //WritePipe': RAM←(a12 ff's=b[9:15]) ] for j = 0 to 7 do //Read pattern from even addresses (0,2,...#16) [ let a = 1 lshift j let b = a xor (-i) //a inverted if i=1 {MC1Pipe.0003} = 2*j; //even addresses (0,2,...#16) EClock() //R[8:15]←d14 ff's←RAM' WCompare({R.0815}±,(not b)±,2010+i,j) //exclude R.08 ] for j = 0 to 3 do //Write pattern into addr. 1,5,#11,#15 [ let a = 3 lshift (2*j) //3,#14,#60,#300 let b = a xor (-i) //a inverted if i=1 {MC1Pipe.0003} = (4*j) % 1; //addr. 1,5,#11,#15 {CTaskALUF}=b EClock() //MC1Task[0:3]←(CTask[0:3]=b[8:11]) (page 15) //MC1Type[0:3]←(ALUF[0:3]=b[12:15]) (page 15) RClock() //WritePipe': RAM←(c9,c10 mux's=b[8:15]) ] for j = 0 to 3 do //Read pattern from addr. 1,5,#11,#15 [ let a = 3 lshift (2*j) //3,#14,#60,#300 let b = a xor (-i) //a inverted if i=1 {MC1Pipe.0003} = (4*j) % 1; //addr. 1,5,#11,#15 EClock() //R[8:15]←d14 ff's←RAM' WCompare({R.0815},(not b)Ź,2020+i,j) ] ] //Check that LoadPipe=0 inhibits WritePipe' {ALUF.3}=0 EClock() //Change write data from #177 to #176 {LoadPipe}=0; //inhibit WritePipe' RClock() //don't change RAM(#16) from #177 to #176 EClock() //R[8:15]←d14 ff's←RAM(#16)' WCompare({R.15},0,2030) //if result =1, check gate a11b, page 14 //Check the b11 prom and the b9 flip-flops (page 15) let t2tab1 = table [ #034;#074;#174;#114; #034;#074;#024;#064; #174;#114;#174;#114; #174;#114;#076;#016 #270;#210;#270;#210; #274;#214;#030;#070; #174;#114;#276;#216; #074;#014;#276;#216 ] //{t2bus1: ResetMemErrs',ALUF.0,ALUF.1, ALUF.2,ALUF.3,NewPipe} //{t2bus2: MC1Ftype.0,MC1Ftype.1, NewPipe,MC1Pipe.0,Refresh', Refresh'b,PStore12',EnInputParChk} for i = 0 to 63 do [ {t2bus1}=i; //ResetMemErrs'←i[10], b11 prom addr.←i[11:15] EClock() //ClockAd': b9 ff's ← (prom b11, gate a11a) {t2bus2}=###; //Disconnect tester drivers from b9 flip-flop outputs {Disableb9}=0; //Enable b9 flip-flop outputs //b11 prom outputs with address = i[11:15] let a = t2tab1!(i%) //b11 prom output code adjusted to match b9 ff inputs (MC1Pipe.0 excluded) let b = (aŞ) % ((a rshift 1)) //Define gate a11a output (MC1Pipe.0 input) = (a[11] & i[10])' let c = (not (a & (i rshift 1))) WCompare({t2bus2},b % c,2100,i) {Disableb9}=1; //Disable b9 flip-flop outputs ] //Check that LoadAd=0 disqualifies ClockAd' {PAbort}=1; //for LDisableMC1'=0, hence LoadAd=0 WCompare({LoadAd'},1,2110) //confirm LoadAd=0 {t2bus1}=0; //Change b11 prom address from #37 to 0 EClock() //ClockAd' is inactive, so b11 ff's should retain old data {t2bus2}=###; //Disconnect tester drivers from b9 flip-flop outputs {Disableb9}=0; //Enable b9 flip-flop outputs WCompare({MC1Ftype.0},1,2111) //should stay =1 from address #37 ]