Mike
A key factor is that 60 years have passed:
- the PDP8/E (and its chums) were core store machines
- the bus time slots are 300 + 250 + 350 + 300 ns = 1200 ns [T1 T2 T3 T4 phases of
core access]
- FPGA fabric can trivially run at 100 MHz, and talk to an AXI bus + Arm Core
- SoCs have 32 / 64 bit “external” data busses
- Arm cores run at 666 MHz and above
- consequently the test hardware is ~3 orders of magnitude faster than the old iron,
wider and capable of performing lots of (hardware) logic in 10 ns – a cascade of 10 LUT6’s
is not unreasonable on a mid range FPGA.
To cut to the chase, a clone of the UniBone should be possible and largely a software
project – there is a large body of code and experience to build on and the Omni and Uni /
Q Busses are similar.
The 96 signals need not define the scale of the FPGA / SoC hardware. There is probably
scope for multiplexing / serialising the lines to / from the OmniBus – I should think the
RetroCmp designs use this technology – unfortunately I have not had the time to read them
sufficiently carefully to say.
Interfacing between the omnibus and an FPGA / SoC will require debouncing and a metastable
hardened synchronisers (~3 stages of FFs) to bring the signals into the FPGA/SoC
synchronous domain. Beyond a Schmidt trigger / equivalent front end this is a job for
modern digits, in the input FPGA/CPLD(s).
Re your specific requirements:
1) Was a hardware task 60 years ago, It would now be trivial to do it with an FPGA
controlled by any reasonable processor
2) You should be able to this by bit banging over JTAG, maybe with a little hardware
assist
3) Sequencer breakpoints in FPGAs are straightforward, provide the condition and it
pulls the stop line; all that is required are condition register sets and comparison
logic
4) see comment above re Mux/Serial
5) I should think avoiding stubs will be more important than the specific input
devices
I would restate your needs / the design as:
a) bus interface
b) FPGA interface
c) bus receiving, driving, uC demand (e.g. DMA, FP emulation, breakpoint conditions)
and reactive logic
d) uC code
HtH; Best Regards
Martin
From: Mike Katz [mailto:bitwiz@12bitsbest.com]
Sent: 22 September 2023 22:17
To: General Discussion: On-Topic and Off-Topic Posts
<cctalk@classiccmp.org<mailto:cctalk@classiccmp.org>>
Cc: Martin Bishop
<mjd.bishop@emeritus-solutions.com<mailto:mjd.bishop@emeritus-solutions.com>>
Subject: Re: [cctalk] Re: Good C to FPGA/PLA compiler
Martin,
The debug board will need to have the following functionality:
1. Read and write to/from memory when the CPU is running using one cycle data break
(DEC's version of DMA for the PDP-8). Single Cycle DMA requires some interesting
signaling, including putting the priority on the data bus during part of the cycle.
2. Read and write to/from memory when the CPU is halted using front panel emulation
(something totally different than one cycle data break unfortunately)
3. Handle 4 breakpoints (based on address, data, R/W and count) and signal the cpu to
stop. I don't know, yet, if there will be enough time in the CPU's instruction
cycle to top the CPU before the fetch of the next instruction. If this cannot be done in
hardware than a much more crude break point system can be done in software.
4. There are 96 active signals on the PDP-8/E's Omnibus. I expect to need most or
all of them for this project.
5. The Omnibus is an open drain, active low bus where +2.7V to +4.5V is a zero and -0.5
to +0.4V is a one. I don't necessarily need a 5V tolerant gate array but what ever I
use to interface to the bus will need to be.
A full description of the Omnibus can be found here:
https://bitsavers.org/pdf/dec/standards/EL-00157_00_A_DEC_STD_157_OMNIBUS_S…
Coding the break point system in some kind of parallel C like language seems way easier to
me than to write this in gates. I don't have a clue how to design the count
registers.
I need to get #'s 1 and 2 working first and then I can dive into #3.
Thanks.