IntroductionThis is a "work in progress" page for my Xi 8088 CPLD project. It is in the concept / requirements collection stage now, and it is not clear if I am actually going to build this project. Project goals- Build a small (about 6.5"x4") 8088/V20 CPU board with ISA interface
- Use CPLD instead of discrete logic
- Optional: Use SMT components (easy to solder - 0805 discretes, SOIC and PLCC IC packages)
TODO List- Reverse X-Bus 74F245 transceivers, so that 'B' side is connected to ISA.
- Connect memory data bus to X-Bus
- Rewrite CPLD pin allocation as a table (pin type / signal name / pin number)
- Review SMT resistor array options
- Work on initial PCB layout, determine size of the PCB.
Technical DetailsDesign Ideas- Atmel ATF1508AS CPLD with JTAG interface
- Clock generation:
- 8284 implementation
- 50% duty cycle 4.77 MHz DMA clock
- 1.19 MHz PIT clock
- 7.16 MHz KBC clock
- Glitchless turbo switching
- Programmable selection of 33% or 50% duty cycle for turbo CPU clock
- Wait state generator:
- Programmable number of I/O wait states (0 to 4)
- /0WS support (no wait states for fast ISA devices)
- Possibly programmable selection of wait states per device (pending CPLD cells availability)
- Bus arbitration logic
- I/O chip select logic
- PIC#1, PIC#2, PIT, DMA, KBC, RTC
- Memory chip select logic
- Programmable UMB configuration (map to SRAM) in 32KiB blocks
- Programmable Flash ROM configuration - in 32KiB or 64 KiB blocks
- Option: automatically disable UMB for areas that are mapped to Flash ROM (pending CPLD cells availability)
- DMA page register
- 74LS670 like, only 3 registers?
- Port B logic
- I/O check NMI generation
- PIT/Speaker control
- XDIR logic
- CPLD Pin allocation
- Total: 64 I/O pins in JTAG mode
- Output: 27 pins
- Input: 25 pins
- Bidirectional: 12 pins
- Chipset control
- Two registers: index and data
- clock / wait cycle control - 1 reg
- RAM CS - 1 reg
- ROM CS - 1 reg
- Version- 1 reg
- Implement a programmable clock divider for turbo mode, to get 50% (for V20) or 33% (for 8088) duty ratio.
- 1 bit (divide by 2 / divide by 3) - always divide by 3 if in non-turbo mode
- Implement programmable I/O wait cycles
- From 0 to 4 wait states (3 bits?!) combine with above?
- Implement programmable /RAM2_CS (enabled/disabled using 32KiB blocks)
- C0000, C8000, D0000, D8000, E0000, E8000, F0000, F8000 - 8 bits
- Implement programmable /ROM_CS
- C0000, C8000, D0000, D80000, E0000, E8000, F0000, F8000 - 8 bits, combine with above, or add support for bigger (256KiB flash)?
- Implement a version register (hardwired)?
- 4 bits - major version
- 4 bits - minor version
- Build a CPLD test board first:
- PLCC84 SMT socket
- Two half can oscillator sockets (connect to global clock?!)
- One 14 pin DIP socket for 74F14 (or just some prototype space)
- Switch (for reset), reset circuit, decoupling capacitors
- Turbo switch jumper
- Turbo LED
- 5x2 pin JTAG header
- Two 17x2 pin headers for I/O connections
- Power connector
- Testing:
- Test 8284 / clock generator circuit
- Test chip select logic (memory, I/O)
- Test Bus Arbitration and Wait Logic (BAL)
Component Selection- 8088/V20
CPU and 8087 FPU in DIP40 packages.
- 8288 bus controller in DIP20 package. That is the only available package for this part.
- Crystal oscillators in "half can" DIP packages. This is to simplify testing different CPUs at different frequencies.
- 82C59,82C54,82C42,82C37 in PLCC28/PLCC44 packages. SMT PLCC sockets to be used, at least for the first (test) board.
- AS6C4008 SRAM in SOIC package.
- ST39C010 Flash ROM in PLCC32 package.
- ATF1508AS CPLD in PLCC84 package
- 74F573, 74F245, 74F244, 74F14, 74F06 in SOIC packages. It is an SMT package with relatively large pitch (1.27 mm).
- Discrete components (resistors and capacitors) in 0805 SMT packages (2x1.27mm).
- Through hole jumpers, connectors, switch, and LEDs.
- Decide on resistor arrays - SMT or through hole?
CPLD Pin AllocationAssumptions- A15 is used as /RAM1_CS - chip select for the first SRAM (00000h-7FFFFh)
- Number of I/O pins on ATF1508AS CPLD with JTAG enabled
- Total: 64
- Special signals:
- Reset: 1
- Clock inputs : 2
- Output enable?!
- RES_IN - reset circuit output - CPLD input, clock generation, Port 61h, wait logic
- OSC - 14.31818 MHz oscillator output - CPLD clock input, clock generation
- TURBO_OSC - 24 MHz - 32 MHz oscillator output - CPLD clock input, clock generation
- TURBO_SW - turbo switch - CPLD input, clock generation
- TURBO_LED - turbo on LED - CPLD output (optional)
- CLK88 - CPU clock to 8088, 8087, and 8288 - CPLD output, clock generation
- READY - Ready signal to 8088 and 8087 - CPLD output, clock generation
- RESET - Reset signal to 8088 and 8087 - CPLD output, clock generation
- DMACLK - DMA clock - CPLD output, clock generation
- OSC/12 - PIT clock input - CPLD output, clock generation
- OSC/2 - Keyboard clock - CPLD output, clock generation
- Total: 11(10)
X-Bus - Address, Data, and Control Signals- XD0-XD7 - Data bus - CPLD input/output/tristate - Port 61h read/write, DMA Page write, CPLD (system) configuration registers?
- XA0,XA4-XA7,A8-A9 - Address bus - CPLD input - on-board I/O chip select logic
- A15 - Address bus - CPLD input - memory chip select for UMB (optional)
- A16-A19 - Address bus - CPLD input/output/tristate - Memory chip select, DMA page output
- /XIOR, /XIOW, /XMEMR - I/O read, I/O write, memory read - CPLD input, bus arbitration, wait logic, Port 61h, RTC, XDIR signal
- /INTA - Interrupt acknowledge from 8088 - CPLD input, XDIR signal
- XDIR - XD0-XD7 transceiver direction - CPLD output, XDIR signal
- Total: 25(24)
Bus Arbitration and Wait Logic- /S0, /S1, /LOCK - Status signals from 8088 - CPLD input, bus arbitration
- IOREADY (IOCHRDY) - Wait signal fro ISA bus - CPLD input, wait logic
- AENBRD - CPU bus disconnect - CPLD output, bus arbitration
- /DMAAEN - DMA address enable to /XIOR,/XIOW,/XMEMR,/XMEMW and XA0-XA7 transceivers - CPLD output, bus arbitration
- RDYTODMA - ready signal to DMA - CPLD output, bus arbitration, wait logic
- HRQDMA - hold request from DMA - CPLD input, bus arbitration
- HOLDA - hold acknowledge to DMA - CPLD output, bus arbitration
- Total: 9
Port B (61h), NMI Logic, and Speaker- NMI - Non-maskable interrupt to 8088 - CPLD output, NMI logic, Port 61h
- /IOCHK - Non-maskable interrupt output from ISA - CPLD input, NMI logic, Port 61h
- GATE2 - timer #2 gate input - CPLD output, Port 61h
- OUT1, OUT2 - timer #1 and timer #2 outputs - CPLD input, Port 61h
- SPEAKER - speaker - CPLD output, Port 61h
- Total: 6
DMA Page Register- /DACK2, /DACK3 - DMA Page register address - CPLD input, DMA page
- Total: 2
I/O Chip Select- /DMA_CS - DMA chip select - CPLD output, on-board I/O chip select logic
- /PIC1_CS, /PIC2_CS - PIC chip select - CPLD output, on-board I/O chip select logic
- /PIT_CS - PIT chip select - CPLD output, on-board I/O chip select logic
- /KEY_CS - Keyboard controller chip select - CPLD output, on-board I/O chip select logic
- RTC_ALE, /RTCR, /RTCW - RTC select, read, write signals - CPLD output, on-board I/O chip select logic
- Total: 8
- /RAM2_CS - chip select for the second SRAM (80000h-9FFFFh, UMB)- CPLD output, memory chip select
- /ROM_CS - chip select for the Flash ROM - CPLD output, memory chip select
- Total: 2
Buffered and Inverted Signals- OSCDRV buffered OSC - 14.31818 MHz oscillator output, ISA input
- CLK - buffered CLK88 - CPLD output, ISA input
- RESETDRV - buffered RESET - CPLD output, ISA input
- /AEN - inverted AENBRD - CPLD output, 8288 input
- /DEN - inverted DEN - 8288 output, AD[0-7] to D[0-7] transceiver enable
- TC - inverted /TC - 8237 output, ISA input
# | Input signal
| Pin#
| Description
| Output signal | Pin#
| Description | Bi-dir signal
| Pin#
| Description | 1 | RES | | Reset from Schmitt trigger
| RESET | | global reset, CPU, peripherals, ISA | XD0 | | DMA page (I), Port 61h (I/O), Chipset control (I/O?) | 2 | OSC | | 14.31818 MHz from oscillator | CLK88 | | to CPU and to ISA | XD1 | | DMA page (I), Port 61h (I/O), Chipset control (I/O?) | 3 | TURBO_OSC | | 24-40 MHz from oscillator | READY | | to CPU | XD2
| | DMA page (I), Port 61h (I/O), Chipset control (I/O?) | 4 | /S0 | | from CPU | CLK_KBC | | 7.16 MHz to KBC | XD3 | | DMA page (I), Port 61h (I/O), Chipset control (I/O?) | 5 | /S1 | | from CPU | CLK_DMA | | 4.77 MHz to DMAC | XD4 | | Port 61h (O), Chipset control (I/O?) | 6 | /LOCK | | from CPU | CLK_PIT | | 1.19 MHz to PIT | XD5 | | Port 61h (O), Chipset control (I/O?) | 7 | TURBO_SW
| | enable turbo, from turbo switch | TURBO_LED | | Turbo LED | XD6
| | Port 61h (O), Chipset control (I/O?) | 8 | HRQDMA | | from DMAC | READYTODMA | | to DMAC | XD7 | | Port 61h (O), NMI Register (O), Chipset control (I/O?) | 9 | /XIOR | | | AENBRD | | | A16 | | DMA page (O), Memory CS (I) | 10 | /XIOW | | | /DMAAEN | | | A17 | | DMA page (O), Memory CS (I) | 11 | /INTA | | from 8288 | HOLDA | | to DMAC | A18 | | DMA page (O), Memory CS (I) | 12 | IOREADY | | from ISA | XDIR | | or /XDIR | A19
| | DMA page (O), Memory CS (I) | 13 | /OWS | | from ISA | NMI | | to CPU | | | | 14 | /IOCHK | | from ISA | PIT_GATE2 | | to PIT | | | | 15 | /DACK2 | | from DMAC | SPEAKER | | | | | | 16 | /DACK3 | | from DMAC | /DMA_CS | | | | | | 17 | PIT_OUT1 | | from PIT | /PIC1_CS | | | | | | 18 | PIT_OUT2 | | from PIT | /PIT_CS | | | | | | 19 | XA0 | | | /PIC2_CS | | | | | | 20 | XA1 | | | /KBC_CS | | | | | | 21 | XA4 | | | RTC_ALE | | | | | | 22 | XA5 | | | /RTCW | | | | | | 23 | XA6 | | | /RTCR | | | | | | 24 | XA7 | | | /ROM_CS | | | | | | 25 | A8 | | | /RAM2_CS | | | | | | 26 | A9 | | | | | | | | | 27 | A15 | | | | | | | | |
Bill of Materials Component Type
| Reference | Description | Quantity | Possible Sources and Notes
| PCB | | Xi 8088 CPLD PCB
| 1 | Order from OSH Park
| Mounting Bracket
| | Keystone 9205
| 1 | Mouser (+)
| Screw | | Screw 4-40 diameter, 1/4" lenght
| 2 | Mouser (+)
| Battery Holder
| BT1 | CR2032 batter holder, 20 mm lead spacing | 1 | Mouser (+)
| Capacitor | C1 - C29
| 0.1 uF, 0805 SMT
| 29 | Mouser CGJ4J2X7R1H104K (-)
| Capacitor | C30 - C35
| 10 uF, 0805 SMT
| 5 | Mouser CGA4J1X7R0J106K (-)
| Capacitor | C36 | 0.01 uF, 0805 SMT
| 1 | Mouser C2012X7R2A103M (-)
| Capacitor | C37 - C40
| 47 pf, 0805 SMT
| 4 | Mouser VJ0805A470GXQPW1BC (-)
| Diode | D1 | 1N4148, SMT
| 1 | Mouser (-)
| LED Indicator
| D2, D3
| Bi-level LED indicator | 1 | Mouser (+)
| Fuse | F1 | 1.1A, SMT
| 1 | Mouser (-)
| Connector | J1, J2, P3, P4, P5 | 12x1 pin header | 1 | Mouser (-)
| Connector | J3 | 3x1 pin header
| 1 | Mouser (+)
| Connector | J4 | 6x2 pin header
| 1 | Mouser (+)
| Connector | J5, J6
| 2x1 pin header
| 2 | Mouser (+)
| Connector | P1, P2
| 6 pin Mini-DIN connector (Purple, Green) | 2 | Mouser (+)
| Resistor | R1 | 100 kOhm, 0805 SMT
| 1 | Mouser (-)
| Resistor | R2, R4, R5
| 470 Ohm, 0805 SMT
| 3 | Mouser (-), Can use a resistor array for R4 and R5?
| Resistor | R3 | 10 k0hm, 0805 SMT
| 1 | Mouser (-), Use a pull up from a resistor array instead?
| Resistor | R6 | 1 k, 0805 SMT
| 1 | Mouser (-)
| Resistor
| R7 | 33 Ohm, 0805 SMT
| 1 | Mouser (-)
| Resistor Array
| RR1 - RR3
| 10 kOhm x 9
| 3 | Mouser (-)
| Resistor Array
| RR5 | 10 kOhm x 5
| 1 | Mouser (-)
| Resistor Array
| RR6 | 470 Ohm x 5
| 1 | Mouser (-)
| Speaker | SP1 | 12 mm speaker | 1 | Mouser (-)
| Switch | SW1 | 6 mm tactile switch, right angle
| 1 | Mouser (+)
| IC | U1 | ATF1508AS | 1 | Mouser (+) | IC | U2 | 8088, 80C88, V20, V20HL
| 1 | Utsource (+)
| IC | U3 | 8087-1 | 1 | Utsource (+)
| IC | U4 | CP82C88Z | 1 | Avnet (o)
| IC | U5, U6
| CS82C59 | 2 | Avnet (+)
| IC | U7 | CS82C37 | 1 | Intersil (+)
| IC | U8 | CS82C54 | 1 | Avnet (+)
| IC | U9 | VT82C42V | 1 | Utsource (o)
| IC | U10 | DS12885, SOIC
| 1 | Maxim (+)
| IC | U11, U12
| AS6C4008, SOIC
| 2 | Mouser (-)
| IC | U13 | ST39SF010, PLCC32
| 1 | Avnet (+)
| IC | U14 - U16
| 74F573, SOIC20
| 3 | Avnet (+)
| IC | U17 - U20
| 74F245, SOIC20
| 4 | Avnet (+)
| IC | U21 | 74F244, SOIC20
| 1 | Avnet (+)
| IC | U22 | 74F14 or 74AHCT14, SOIC14
| 1 | Mouser (-)
| IC | U23 | 74LS06, SOIC14
| 1 | Avnet (+)
| Crystal Oscillator | U24 | 14.31818 MHz, half can, DIP
| 1 | Mouser (-)
| Crystal Oscillator
| U25 | 24 MHz - 32 MHz, half can, DIP
| 1 | Mouser (-, 24 MHz, 30 MHz, 32 MHz, 40 MHz)
| IC Socket | U1 | 84 pin PLCC, SMT | 1 | Avnet 8484-21A1-RK-TP (+) | IC Socket
| U2, U3
| 40 pin 600 mil DIP socket | 2 | Mouser 40-6518-10 (+)
| IC Socket
| U4 | 20 pin 300 mil DIP socket | 1 | Mouser 20-3518-10 (+)
| IC Socket
| U5, U6, U8
| 28 pin PLCC, SMT
| 3 | Mouser 8428-21A1-RK-TP (-)
| IC Socket
| U7, U9
| 44 pin PLCC, SMT
| 2 | Avnet 8444-21A1-RK-TP (+)
| IC Socket
| U13 | 32 pin PLCC, SMT
| 1 | Avnet 8432-21A1-RK-TP (+)
| Oscillator Socket
| U24, U25
| 4 pin 300 mil DIP half can oscillator socket | 2 | Mouser 535-1108800 (-)
|
|
 Updating...
Ċ Sergey Kiselev, Oct 9, 2012, 12:38 AM
|