[Coco] FW: Multi-Processor 6809 Computer System
John Kent
jekent at optusnet.com.au
Mon Apr 29 16:09:12 EDT 2013
You can instantiate as many 6809 cores in an FPGA as it will fit in the
FPGA, although you will probably need block RAM cache as you would need
to share common memory between the CPUs. I was working on a quad core
6809 system at one stage, many years ago, using a XC3S1000 on the
spartan 3 starter FPGA board from Digilent, but I ran into some
difficulties trying to work out the bus arbitration for shred memory and
never completed it. I wanted to use rotating priority between CPUs for
memory access. It need a priority encode, which I've subsequently made
and a small barrel shifter or cross point switch to rotate the encoder
inputs, and a counter connected to an adder on the output of the
priority encoder to offset the rotated encoded inputs, if you can work
that out. The counter would also drive the barrel shifter and would be
incremented on each bus access. The result is that the priority of the
requests from each CPU for memory is rotated but the adder offsets the
encoded priority so that the same code corresponding to the particular
CPU generating the request is produced. The rotating priority of memory
request means that each CPU is more likely to get an even share of the
memory. If you are looking for speed, a FPGA 6809 will work much faster
than the original chip (25MHz as opposed to 1 or 2MHz). Actually 1 FPGA
6809 is equivalent to about 12 x 2MHz 6809s or even slightly faster.
The XC3S1000 I think has 16 x 2KB block RAMs so I was going to use 3
block RAMs per CPU, 2 for the address (tag?) cache and one for the
program and data cache. (no separate instruction and data cache). I came
up with a scheme for cache coherency so that the CPUs could communicate
through common memory. You still need some form of signalling between
CPUs to indicate when data is ready to be used by another CPU. You could
use a polling system on memory, but interrupts would be more efficient.
The extra 4 block RAMs I was going to use for the VDU text buffer,
attribute buffer, character generator and monitor program. You probably
need an additional CPU as the supervisor or I/O processor, but I don't
think it fitted in the XC3S1000. 4 CPUs was the limit with that FPGA.
The XESS XuLA2 board I think has 1600K gates, so might be able to
accommodate 5 CPUs, but it uses SDRAM which is slower than the 10n SRAM
on the Digilent Spartan 3 starter board. The Altera DE1 board might also
be a candidate, although I think the FPGA may be a slightly smaller than
the XC3S1000.
The XC3S1000 also has 16 hardware multipliers which would allow for 4 x
32 bit hardware multipliers i.e. one per CPU. The hardware multipliers
in the Spartan 3 have 18 bit inputs and 36 bit outputs. You can use 4 of
them to make a 32 x 32 input = 64 bit output hardware multiplier that
will operate in only a few clock cycles. You'd use 4 of them Hi x Hi, Hi
x Lo, Lo x Hi and Lo x Lo and add the parts of the 32 bit results. You
would use 32 bits rather than the full 36 bits, as it would map onto
byte boundaries more cleanly. If the floating point maths in BASIC uses
5 bytes (1 byte signed exponent and 4 byte signed mantissa) then the
multiplier could possibly be used to speed up the BASIC multiply routine.
I sent a QIX arcade board to Mark Mc Dougall a few years ago. It used 2
6809s, one for the game and one for the graphics processor. It used a
6845 CRTC with 64K RAM mapped into two 32K pages. The display was 256 x
256 pixels with 2 bits each for R, G, B and I (intensity) signal giving
256 colors. It used dual port memory to communicate between the two
6809s. I think the CPUs were clocked 90 degrees out of phase to avoid
race problems with the dual port memory. The board(s) also had a 6800
for the sound processor which I think communicated with the game 6809
through a pair of back to back (?) 6821 PIAs and it had two 8 bit DACs
connected to a 6821 PIA to generate stereo sound. It used a pair of
LM2002 amplifier chips for the output. I still have the manual and
schematics for the board in the filing cabinet I could probably scan,
although I think it's probably more complicated and difficult to build
than Kip was looking for.
John.
On 29/04/2013 11:40 PM, Luis Antoniosi (CoCoDemus) wrote:
> The Fujitsu FM-7 computer uses 2 6809 being on of them for generating
> graphics. There is no vdp on this computer, the second 6809 is used
> exclusively for generating 8 color 640x200 pixels graphics.
>
> Some dual 6809 arcades do the same.
>
--
http://www.johnkent.com.au
http://members.optusnet.com.au/jekent
More information about the Coco
mailing list