Over the past couple of months I have been working on my FPGA
implementation of the IBM 1410 1960's era pre System/360 system again.
I am pleased to share that the CPU now passes a significant diagnostic,
CU01, which tests almost all of the instructions, and also tests I/O
with overlap and the priority feature (interrupts). Also, it runs at
generally the same speed as the original machine (comparing the IBM
estimates for 1000 passes), using the same logic as the original machine
(though no doubt optimized by the process of taking in VHDL logic
statements and turning combinatorial logic into lookup tables (LUTs),
and some additions of "D" flip flops to avoid race conditions in latches
and logic loops.)
(The speed is the same because its "oscillator" - crystal controlled in
the original - is now a clock divider/counter off of the FPGA chip clock.)
For more details, see
https://www.computercollection.net/index.php/ibm-1410-fpga-implementation/
Mostly the ALD (Automated Logic Diagram) data capture seems to have been
very accurate. I really only had to do four things this year to get it
to this point:
- Make the necessary logic gate deletions / changes for configuration
option S40/$40 - 40K of core
- Add the ability to transfer a core image from the PC support program
to the FPGA.
- Fix some issues in the Assembly Channel because while almost all of
the ALDs are for a 1410 with the Accelerator feature, several pages of
the very important Assembly channel were for the base 1410 model.
- Deal with a race condition during overlapped I/O
These are generally discussed in individual blog posts off the above link.
I really was quite happily surprised that when capturing the data on
over two hundred ALDs with over 10,000 logic gates, over 4,200
individual unique signals, more than 12,000 signal names on individual
ALDs, and more than 32,000 interconnections that there were not a lot
more problems than these. (I may run into some as yet undiscovered
errors involving the channels as I add I/O devices, though).
I suppose that there were not more problems because for most of the
individual sheets and in many cases groups of sheets I wrote VHDL test
benches using the Intermediate Logic Diagrams (ILDs) as a guide, and of
course took considerable care during the data entry process from the
ALDs, checking connection counts on each logic block, for example.
The last post ("Off to the Races") on the aforementioned web page also
discusses the next expected steps: some more work on the PC/Console
support program, more diagnostic tests, other support program
enhancements, and figuring out how to go about I/O, especially since I
don't have ALDs for the 1414 I/O Synchronizers.
But I no longer have any doubts about the viability of this process, so
long as the FPGA logic clock is somewhere around 10x the logic clock of
the simulated machine. (I expect to try and "push it" by speeding up
the 1410 logic clock to see at what ratio of the FPGA clock to the CPU
clock things break down, as well).
JRJ