Posted: Mon Dec 20, 2010 5:54 am
If Samuel says so. I got it from his post.
Code: Select all
/*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* PROOF-OF-CONCEPT V2 LOGIC *
* *
* --------------------------------------------------------------------------- *
* *
* Copyright (C)2010 by BCS Technology Limited. All rights reserved. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * *
* VERSION HISTORY *
* * * * * * * * * *
Ver Rev Date Revision
------------------------------------------------------------------------------
01 2010/11/04 Original version.
02 2010/12/06 Changed device, added wait-state features & memory banking, &
removed PHI2 generation.
------------------------------------------------------------------------------
*/
Name pocv2log;
PartNo B011040001;
Date 11/04/2010;
Revision 02;
Designer BigDumbDinosaur;
Company BCS Technology Limited;
Assembly POC V2;
Location Ux;
Device v2500clcc;
/*
______________
| ATF2500C |
PHI2 x---|1 PLCC44 44|---x RWB
VDA x---|2 43|---x A10
VPA x---|3 42|---x !EWS
GND x---|4 41|---x A11
D1 x---|5 40|---x !RDY
wde x---|6 39|---x rdyout
romsel x---|7 38|---x !RD
D0 x---|8 37|---x !WD
ramsel x---|9 36|---x !SRCE
D2 x---|10 35|---x !EPCE
Vcc x---|11 34|---x GND
Vcc x---|12 33|---x GND
A16 x---|13 32|---x ramhi
A17 x---|14 31|---x !IO2
A18 x---|15 30|---x !IO1
D6 x---|16 29|---x !IO0
D7 x---|17 28|---x !IO3
RST x---|18 27|---x romhi
RESET x---|19 26|---x GND
A14 x---|20 25|---x A8
A15 x---|21 24|---x A9
A13 x---|22 23|---x A12
|______________|
Lower case pin names are hardware nodes &
are no-connects.
* * * * * * * * * * * *
* INPUT DECLARATIONS *
* * * * * * * * * * * *
*/
pin 1 = PHI2; /* MPU clock */
pin 2 = VDA; /* MPU valid data address */
pin 3 = VPA; /* MPU valid program address */
pin 5 = D1; /* MPU data line */
pin 8 = D0; /* MPU data line */
pin 10 = D2; /* MPU data line */
pin 16 = D6; /* MPU data line */
pin 17 = D7; /* MPU data line */
pin 19 = RESET; /* system reset */
pin 20 = A14; /* MPU address line */
pin 21 = A15; /* MPU address line */
pin 22 = A13; /* MPU address line */
pin 23 = A12; /* MPU address line */
pin 24 = A9; /* MPU address line */
pin 25 = A8; /* MPU address line */
pin 41 = A11; /* MPU address line */
pin 42 = !EWS; /* low = add wait-state */
pin 43 = A10; /* MPU address line */
pin 44 = RWB; /* MPU read/write */
/*
* * * * * * * * * * * *
* OUTPUT DECLARATIONS *
* * * * * * * * * * * *
*/
pin 13 = A16; /* banked RAM address line */
pin 14 = A17; /* banked RAM address line */
pin 15 = A18; /* banked RAM address line */
pin 18 = RST; /* active high reset */
pin 28 = !IO3; /* I/O device chip select */
pin 29 = !IO0; /* I/O device chip select */
pin 30 = !IO1; /* I/O device chip select */
pin 31 = !IO2; /* I/O device chip select */
pin 35 = !EPCE; /* EPROM chip select */
pin 36 = !SRCE; /* SRAM chip select */
pin 37 = !WD; /* write data gated by PHI2 */
pin 38 = !RD; /* inverted read data */
pin 40 = !RDY; /* MPU wait-state */
/*
* * * * * * *
* PIN NODES *
* * * * * * *
*/
pin 6 = wde; /* write data enable */
pin 7 = romsel; /* ROM selection */
pin 9 = ramsel; /* RAM selection */
pin 27 = romhi; /* e_mem selection */
pin 32 = romlo; /* c_mem selection */
pin 39 = rdyout; /* wait-state output */
/*
* * * * * * * * * *
* INTERNAL NODES *
* * * * * * * * * *
*/
node d0ff; /* D0 state flip-flop */
node d1ff; /* D1 state flip-flop */
node d2ff; /* D2 state flip-flop */
node d6ff; /* D6 state flip-flop */
node d7ff; /* D7 state flip-flop */
node vbus; /* valid address bus */
node wsenab; /* wait-state enable */
node wsff1; /* wait-state flip-flop */
node wsff2; /* wait-state flip-flop */
node wsff3; /* wait-state flip-flop */
/*
* * * * * * * * *
* INTIALIZATION *
* * * * * * * * *
*/
d0ff.ar = !RESET;
d1ff.ar = !RESET;
d2ff.ar = !RESET;
d6ff.ar = !RESET;
d7ff.ar = !RESET;
wsff1.ar = !RESET;
wsff2.ar = !RESET;
wsff3.ar = !RESET;
d0ff.sp = 'b'0;
d1ff.sp = 'b'0;
d2ff.sp = 'b'0;
d6ff.sp = 'b'0;
d7ff.sp = 'b'0;
wsff1.sp = 'b'0;
wsff2.sp = 'b'0;
wsff3.sp = 'b'0;
/*
* * * * * * * * *
* CONTROL LOGIC *
* * * * * * * * *
*/
vbus = (VDA # VPA) & RESET; /* true if address bus is valid */
wde = !mmu & vbus; /* ignore RWB if accessing MMU */
/*
* * * * * * * * * * *
* ADDRESSING LOGIC *
* * * * * * * * * * *
MMU Bit
Address Pattern RWB Hardware Symbol
----------------------------------------------------
$bb0000-$bbBFFF xx000bbb x banked RAM b_mem
$00C000-$00CFFF x0000xxx x common RAM c_mem
x1000xxx H ROM (4K) c_mem
x1000xxx L common RAM c_mem
$00D000-$00DEFF xx000xxx x I/O IOBLK
$00DF00 xx000xxx x MMU mmu
$00E000-$00FFFF 0x000xxx H ROM (8K) e_mem
0x000xxx L common RAM e_mem
1x000xxx x common RAM e_mem
----------------------------------------------------
A write to c_mem or e_mem bleeds through to RAM.
*/
c_mem = A15 & A14 & !A13 & !A12; /* $00C000 */
d_mem = A15 & A14 & !A13 & A12; /* $00D000 */
e_mem = A15 & A14 & A13; /* $00E000 */
b_mem = !c_mem & !d_mem & !e_mem; /* $bb0000 */
ioblk = d_mem & !A11; /* I/O hardware */
mmu = d_mem & A11 & A10 & A9 & A8;/* memory mapping */
iosel = ioblk & vbus; /* I/O selected if true */
ramhi = (e_mem & d7ff) #
(e_mem & !RWB); /* RAM at $00E000 if true */
ramlo = (c_mem & !d6ff) #
(c_mem & !RWB); /* RAM at $00C000 if true */
romhi = e_mem & !d7ff & RWB; /* ROM at $00E000 if true */
romlo = c_mem & d6ff & RWB; /* ROM at $00C000 if true */
/* write memory map logic... */
d7ff.ck = mmu & vbus & !RWB & PHI2;
d6ff.ck = mmu & vbus & !RWB & PHI2;
d2ff.ck = mmu & vbus & !RWB & PHI2;
d1ff.ck = mmu & vbus & !RWB & PHI2;
d0ff.ck = mmu & vbus & !RWB & PHI2;
d7ff.d = mmu & vbus & !RWB & D7;
d6ff.d = mmu & vbus & !RWB & D6;
d2ff.d = mmu & vbus & !RWB & D2;
d1ff.d = mmu & vbus & !RWB & D1;
d0ff.d = mmu & vbus & !RWB & D0;
/* read memory map logic... */
D7.oe = mmu & vbus & RWB;
D6.oe = mmu & vbus & RWB;
D2.oe = mmu & vbus & RWB;
D1.oe = mmu & vbus & RWB;
D0.oe = mmu & vbus & RWB;
/* wait-state logic... */
wsenab = ((romhi # romlo) & vbus) #
iosel; /* wait-state ROM or I/O access */
wsff1.ck = PHI2 & wsenab;
wsff1.d = (!wsff3 & EWS) # (!wsff2 & !EWS);
wsff2.d = wsff1;
wsff3.d = wsff2;
rdyout = wsff1 $ ((wsff3 & EWS) #
(wsff2 & !EWS)); /* assert RDY if wait-stating */
/*
* * * * * *
* OUTPUTS *
* * * * * *
*/
A16 = d0ff & b_mem & vbus; /* bank selection bit 0 */
A17 = d1ff & b_mem & vbus; /* bank selection bit 1 */
A18 = d2ff & b_mem & vbus; /* bank selection bit 2 */
D0 = d0ff; /* MMU configuration bit 0 */
D1 = d1ff; /* MMU configuration bit 1 */
D2 = d2ff; /* MMU configuration bit 2 */
D6 = d6ff; /* MMU configuration bit 6 */
D7 = d7ff; /* MMU configuration bit 7 */
EPCE = (romhi # romlo) & vbus; /* ROM chip select */
IO0 = iosel & !A10 & !A9 & !A8; /* I/O device 0 chip select */
IO1 = iosel & !A10 & !A9 & A8; /* I/O device 1 chip select */
IO2 = iosel & !A10 & A9 & !A8; /* I/O device 2 chip select */
IO3 = iosel & !A10 & A9 & A8; /* I/O device 3 chip select */
RD = (RWB # rdyout) & vbus; /* read data operation */
RDY.oe = wsenab; /* tri-state RDY when inactive */
RDY = rdyout; /* assert RDY if wait-stating */
RST = !RESET; /* active high reset */
SRCE = (ramhi # ramlo # b_mem) &
vbus; /* RAM chip select */
WD = !RWB & wde &
(PHI2 # rdyout); /* write data operation */Code: Select all
: hang begin again ;