BigDumbDinosaur wrote:
The ATF1502AS-7JX44 is a 32-macrocell version of the ATF1504AS-7JX44. Even with only 32 MCs, the 1502 is much more capable than a GAL. That said, I still recommend you do your first build with a GAL to get your feet wet—unless you are going to build your unit with extended RAM, in which case using a CPLD would be a better choice.
I picked up some 7.5s from DigiKey. I'm going to be using the memory space above 64k, so it seemed like a good idea, as you said.
Quote:
Quote:
Do these have enough to demultiplex the Bank Addresses from the Data lines, while also decoding addresses?
You will be more constrained by the number of available I/O pins than the logic capacity.
I'm surprised that there is no 84 pin version of the faster one (7.5ns). It goes right from 44 to 100 pins, though there is an 84 pin one at 10ns.
Quote:
Speaking of demuxing the bank bits, that is a task better performed in a CPLD than a GAL, in my opinion. Setting up transparent latches in CUPL is pretty simple with a CPLD when using buried logic...
Code:
pinnode = extram; /* extended address latch */
extram.LE = PHI1; /* open bank latch */
extram.L = PHI1 & D0; /* capture A16 on Ø2 low */
A16 = extram; /* drive A16 */
The above is an example that latches
A16 from
D0—it would be used in a system with 128 KB of RAM. The
PINNODE statement declares
extram to be a buried node. The
extram.LE and
extram.L statements tell CUPL that the
extram node is a transparent latch.
extram.LE opens the latch when
PHI1 is true (
PHI1 is the inverted Ø2 clock signal), and
extram.L is the latch itself.
The above arrangement works on the same principle as a discrete latch, such as a 74AHC573. Note that if you are going to use a bus transceiver on the 816’s data bus, the
DO signal must be derived from the 816 side of the transceiver, since the transceiver will be in the high-Z state during Ø2 low.
The preceding code may be expanded to work with more RAM with some minor changes...
Code:
pinnode = [extram3..0]; /* bank bit latches */
[extram3..0].LE = PHI1; /* open latches on Ø1 */
[extram3..0].L = [D3..0]; /* capture A16-A19 */
[A19...16] = [extram3..0]; /* drive A16-A19 */
The above would be support a system with 1 MB of RAM.
It's really amazing how flexible these things are; can really get down into the nitty gritty details and configuration options.
Jonathan