II.4.2 GAL22V10 The next circuit can't be realized with a GAL16V8 or GAL20V8. The reason for this is that there are different tristate controls for the register outputs. A GAL16V8 and GAL20V8 has only one tristate control for all register outputs, this is the /OE (output enable) pin in mode 3. Enable1 ---------------------------------+ | |\| +----+ | \ Clock ---o---------------|> Q|------| +------- Y1 | +----+ | | | / A ---+--| | +---|D | |/ | | & |---+ +----+ B ---+--| | | +----+ |\ | +----+ | \ +---------------|> Q|------| +------- Y2 | | | / C -------------------|D | |/| +----+ | | +----+ | Enable2 -------------------| | | | & |--------o-------- Y3 +---| | | +----+ +----+ | D ----| | | | | | E ----| >1 |-----o-------------------------- Y4 | = | F ----| | +----+ Futhermore all register outputs should be reseted asynchronously when the inputs F and AsyncRe are high and they should be preseted synchronously when the input SyncPre is high. (To keep the circuit diagram as simple as possible the inputs AsyncRe and SyncPre are not drawn in it.) Don't think about what the function of this circuit is - there is non. It is just an example. Well, and this is one of many possible pin designations: GAL22V10 ---- ---- Clock 1| |24 +5V A 2| |23 Y1 B 3| |22 Y2 C 4| |21 Y3 D 5| |20 Y4 E 6| |19 Enable1 F 7| |18 Enable2 NC 8| |17 NC NC 9| |16 NC NC 10| |15 NC NC 11| |14 AsyncRe GND 12| |13 SyncPre --------- The only thing which you have to keep in mind here is that the clock signal for the register outputs must be at pin 1 and that the outputs must be at OLMC pins (pin 14-23). To define the asynchronous reset and the synchronous preset for the register outputs the GAL assembler offers you the keywords AR (asynchronous reset) and SP (synchronous preset). Since AR and SP are keywords it is not allowed to use them as pin names when a GAL22V10 is used. The source file of this example looks like this: ****************************************************** GAL22V10 22V10 Clock A B C D E F NC NC NC NC GND SyncPre AsyncRe NC NC NC Enable2 Enable1 Y4 Y3 Y2 Y1 VCC Y1.R = A * B ; Y1 is a registered output => .R Y1.E = Enable1 Y2.R = C Y2.E = Enable2 * Y4 ; Attention: there is a feedback of Y4 ; (Y4 is defined as output but it's ; used as input again) Y3 = Enable2 * Y4 ; there is a feedback again Y4 = D + E + F AR = F * AsyncRe ; define asynchronous reset SP = SyncPre ; define synchronous preset DESCRIPTION ****************************************************** Instead of Y3 = Enable2 * Y4 you could also write: Y3 = Enable2*D + Enable2*E + Enable2*F. But using a feedback is much more comfortable than using this long equation. Another reason for using a feedback is for example the tristate control of Y2. In tristate controls there is just one product term allowed, this means no ORs.