Name 23621A9; Assembly 0001; Revision 1.0; PartNo E112,E114 74S571; Device f1508ispplcc84; Company None; Designer Digital Equipment Corporation; Location None; Date March 2018; property ATMEL { jtag=on }; PROPERTY ATMEL { preassign keep }; PROPERTY ATMEL { TMS_pullup=on }; PROPERTY ATMEL { TDI_pullup=on }; /* PROPERTY ATMEL { pin_keep OFF }; */ /* PROPERTY ATMEL { open_collector = INT_RQST }; */ /* * 23621A9 is a 74S571, programmed to add three bit numbers. * An 74S571 has 9 address inputs, an enable, and 4 data outputs. In this * case, the inputs indicate 2 bits of 3 operands, a borrow input, a selector, * and an enable. If the select is low, [4,5] is selected, otherwise [3,6]. * If the enable is active, the operand on [2,7] is subtracted, otherwise the * selected operand appears unchanged at the output. * The output bits are the 2 bit difference and a borrow out. */ /* * The 74S571 is a tri-state device, if the enable is inactive, the * outputs are undriven. */ Pin 13 = !G; /* * These are the bits we need to decide which bank to use. */ Pin 14 = sub; /* Enable the subtraction */ Pin 15 = use_d; /* Use the D operand */ Pin 1 = BI; /* Borrow in */ Pin [2,7] = [R0..1]; Pin [3,6] = [I0..1]; Pin [4,5] = [D0..1]; /* * The outputs. */ Pin 10 = bo; /* Borrow out */ Pin [11,12] = [da,db]; /* * Perform the subtraction. */ [BA,BB] = sub & ![R0..1]; [AA,AB] = use_d & [D0..1] # !use_d & [I0..1]; TABLE [AA,AB,BA,BB,BI] => [bo,da,db] { 'b'00000 => 'b'000; 'b'00001 => 'b'111; 'b'00010 => 'b'111; 'b'00011 => 'b'110; 'b'00100 => 'b'110; 'b'00101 => 'b'101; 'b'00110 => 'b'101; 'b'00111 => 'b'100; 'b'01000 => 'b'001; 'b'01001 => 'b'000; 'b'01010 => 'b'000; 'b'01011 => 'b'111; 'b'01100 => 'b'111; 'b'01101 => 'b'110; 'b'01110 => 'b'110; 'b'01111 => 'b'101; 'b'10000 => 'b'010; 'b'10001 => 'b'001; 'b'10010 => 'b'001; 'b'10011 => 'b'000; 'b'10100 => 'b'000; 'b'10101 => 'b'111; 'b'10110 => 'b'111; 'b'10111 => 'b'110; 'b'11000 => 'b'011; 'b'11001 => 'b'010; 'b'11010 => 'b'010; 'b'11011 => 'b'001; 'b'11100 => 'b'001; 'b'11101 => 'b'000; 'b'11110 => 'b'000; 'b'11111 => 'b'111; } /* * Here is where G1 and G2 are implemented. */ bo.oe = G; [da,db].oe = G;