André's 8-bit Pages  Projects  Code  Resources  Tools  Forum
(by Google)

CS/A65 RAMDisk

This board uses the (now outdated) 30-pin SIMM memory modules to build a RAM disk with up to 16Mbyte. The memory is accessible via a single register, using an auto-increment byte address counter (8-bit byte address within page only).

Two major board versions are available. The first one is more a concept and is built from TTL logic glue. The second one uses a CPLD to implement the DRAM controller.

The CPLD board is brand new and undergoing tests. With version 2.0E the power glitch has been fixed - the '245 driver was activated too early so it reached into the previous refresh cycle. The board works stable at 1MHz bus frequency, with 4 DRAM modules. At 2MHz write timing is stable, but there are read glitches (repeated reads vary). On the scope the signals look fine, from timing and shape, and seem to work for writing, so I am investigating bus terminators for the main system bus now.

The current status of the TTL board is that it works in some specific configurations. I built the board over two years ago and encountered a number of errors (see notes below). Only recently I have tested it with the 65816 CPU board, where it works with 3 modules with 1MByte each, but not 4 modules. I still have to retest with other CPU boards and 3 modules only.

Further tests still have to be performed, but I am not sure how far I will go into this with this design version. I had a discussion with Bil Herd - yes, the designer of the Commodore 128 - who suggested some improvements:


The new CPLD-based ramdisk board.
  • Use a state machine and a GAL to create a simple DRAM controller and not rely on gate delay times to create signals. I found the 8296 timing signal generation a good example for such a system.
  • The board layout used could use some improvements in the layout of the power supply lines, but also the address and data lines.
  • The board lacks series resistors, and termination resistors, so signal reflections could easily be a problem.
  • The /RAS signal is always sent to all modules - on a CPU read or write cycle only the active module needs it. This could be a reason for the problems below, which are possibly power supply related and if all modules draw power at the same time the actual access might fail.
  • Maybe even use an FPGA to implement a DRAM controller

See the this page for the full discussion

The CPLD-based design for this board reflects these discussions.

 

Table of content

Version: 2.0F

Status: prototype

Notes

 
This improves on the 2.0E version by adding more bypass capacitors, esp. the one for IC2 that was missing. Two of them are tantals and the CPLD supply voltage is routed over them in the layout.
 
The VHDL has some timing improvements. The 2.0E was still producing a heavy jitter on the power signal, which is now gone.

Files

 
csa_ramdisk-v2.0f.sch
 
csa_ramdisk-v2.0f-sch.png
 
csa_ramdisk-v2.0f.brd
 
csa_ramdisk-v2.0f-brd.png
 
dramctrl-v2.0f.vhd(CPLD VHDL source)
 
dramctrl-v2.0f.ucf(CPLD constraints file (pin mapping))
 
dramctrl-v2.0f.jed(CPLD compiled source)
 
ramdisk-tests.tar.gz(Test programs)

Version: 2.0E

Status: prototype

Notes

 
This board works stable at 1MHz system bus frequency, tested with up to 4 modules with 1 MByte each.
 
I currently use 4k7 Ohm terminators both to GND and to VCC.
 
Compared to the 2.0D it has only a small layout fix (so the GND for the '245 driver is routed directly to its bypass cap, not closer to the DRAM GND... The CPLD has fixed timing, and some glitch prevention from the main bus. The '245 can now be 'LS or 'ALS.

Files

 
csa_ramdisk-v2.0e.sch
 
csa_ramdisk-v2.0e-sch.png
 
csa_ramdisk-v2.0e.brd
 
csa_ramdisk-v2.0e-brd.png
 
dramctrl-v2.0e.vhd(CPLD VHDL source)
 
dramctrl-v2.0e.ucf(CPLD constraints file (pin mapping))
 
dramctrl-v2.0e.jed(CPLD compiled source)
 
ramdisk-tests.tar.gz(Test programs)

Version: 2.0D

Status: prototype

Notes

 
This is a complete redesign - using a CPLD instead of a set of TTL logic glue. Also it now adds - by design - series and termination resistor networks to improve signal quality.
 
The /CAS, /RAS, and DRAM address lines have series as well as termination resistors. I found that the terminator combination in the schematics (2k2/3k3) seems to draw a lot of current from the CPLD. I currently use a 4k7 terminator to ground, but none to VCC.
 
I've tested the board with three types of SIMM modules. One is a three-chip low profile module with parity (which isn't used), one is an industry module with nine separate SMD memory chips (i.e. also with parity), and the third one is simple board where I soldered eight separate chips (through hole). All modules have 1MByte (although I thought the three-chip module would be 4MByte, I cannot remember giving this one away, just as I cannot see a defect in the address decoding).
 
The '245 bus driver MUST be an 'LS type, not an 'ALS. If you use an 'ALS, it somehow at some point seems to drive against the DRAM while reading. I found ripples of up to 550mV on the power supply lines on both(!) sides of the board (bus power supply and external power supply) when using the 'ALS type. Even when the external power supply was regulated out of a 12V that did not show those ripples. Shortening the active period (/EN) for example by masking the signal with RAS helps with the power ripples - but makes the data unreliable. The 'LS seems to work fine so far.

Files

 
csa_ramdisk-v2.0d.sch
 
csa_ramdisk-v2.0d-sch.png
 
csa_ramdisk-v2.0d.brd
 
csa_ramdisk-v2.0d-brd.png
 
dramctrl-v2.0d.vhd(CPLD VHDL source)
 
dramctrl-v2.0d.ucf(CPLD constraints file (pin mapping))
 
dramctrl-v2.0d.jed(CPLD compiled source)
 
ramdisk-tests.tar.gz(Test programs)

Version: 1.0C

Status: buggy

Notes

 
With the 65816 CPU board the RAMDisk has been tested and found working for up to 3 modules with 1MByte each. With 4 modules certain RAMDisk addresses do not seem to work properly.
Tests with larger modules (4M) still have to be performed.
 

This is the current set of errors. The spurious counter pulses seem gone:

1) I wrote some test programs (not yet very sophisticated, but working The programs work (so far) in the lowest 64k of the RAMDisk. What I found out that there are only two addresses in a page, that give problems - $45 and $65. And that only on some of the pages, pages $1x, $5x, $9x, $dx. Interestingly the two addresses have different problems:

  1. when writing the byte offset in the page (or its invers) into the byte, both addresses show read mismatches. A printout of the values shows that mostly the value is converted from $45->$65 for the $45 case. $65 results in high nibble 2,4,6,a,e and low nibble 1,4,5,7,d in combinations. When I write the invers of the value, interestingly $45 (xor $ff) still gets $65 (xor $ff), while $65 is inconclusive. For a further analysis I guess I have to save that on disk and run an analyzer program on the PC on it, if necessary.
  2. when writing the page address into the byte (or its invers), only $65 shows mismatch
  3. when I write the 256 pages once, and read them each 256 times, $45 consistently has an error count that is a multiple of 256, which indicates a write error, while $65 has a error count where the low byte is not 0, which proves a read problem.
  4. all other addresses are rock solid.
  5. same behaviour appears when using a different RAM module, or a different bank in the same module.

I don't yet know what to make of that, though. The bit pattern don't make sense to me, esp. address bits 12/13 (that seem to have to be fixed to 1/0 to give problems) and bit 5 (that seems to give problems) are handled in different ICs.

2) I scoped the supply lines for the ICs and the DRAM modules. I found a jitter of up to .3 Volts on each line (GND and VCC). So I added a .1uF multilayer capacitor to the 'LS257 that generate the multiplexed RAM address lines, and a 1u MLC in parallel to the already existing capacitors in the DRAM supply lines. The jitter did not improve much, although I had one effect: before adding the caps the problems mentioned above in 1) were also seen in addresses $47 and $67, and sometimes $44, $48, $64 and $68 - which is fixed now.

 
I have created this board by modifying the 1.0A board. Currently no layout is available.

Version: 1.0B

Status: buggy

Notes

 
The board timing is not yet fully working.
 
This board currently has a problem with the counter on read accesses. Spurious read strobes appear that increase the counter on read accesses (but not on write accesses). I do not yet have found the source of this problem.

Version: 1.0A

Status: buggy

Notes

 
The board timing is not yet fully working.
 
This board currently has a problem with the counter on read accesses. Spurious read strobes appear that increase the counter on read accesses (but not on write accesses). I do not yet have found the source of this problem.
 
The board has a timing problem. The delayed 2Phi2 signal used with RWDATA by IC6C to generate the input to IC12A comes to fast. This is fixed in V1.0B.
 
The dynamic RAM draws a lot of power. The CSA PWR board checks the supply voltage, so if this board is plugged in, the supply voltage drops below the RESET watcher threshold, and /RESET is asserted. V1.0B contains an additional power supply plug.

Files

 
csa_ramdisk-v1.0a.sch
 
csa_ramdisk_v1.0a-sch.png
 
csa_ramdisk-v1.0a.brd
 
csa_ramdisk_v1.0a-brd.png
 
ramdisk_v1.0a-1.png(On the left you can see the floppy-type power connector cable I soldered to the bottom)
 
ramdisk_v1.0a-2.png

Last modified: 2011-01-09.

Return to Homepage

follow

Follow my 8-bit tweets on Mastodon (In new window) or Bluesky

discuss

Discuss my site on this 6502.org forum thread

(Forum registration required to post)

hot!

Dive into the retro feeling and build yourself a Micro-PET or a Multi-board Commodore 4032 replica

Need more speed? Speed up your 6502 computer with this 10 MHz 6502 CPU accelerator board

Interested in electronics design? Look at the design lesson I got from Bil Herd, the hardware designer of the C128

Want 64bit? - pimp the 6502 with the 65k processor design!