This Is A Bit Less Easy.
Smaller CPU designs are fairly easy to work with and will work on convenient FPGA boards.
Larger designs have proven a pain to get working on FPGAs. There are a lot of issues with larger FPGAs to the extent that I’d recommend starting CPU development on an underpowered one.
Issues with running designs on larger FPGAs include:
- Harder to get the tools working, will need to create accounts on very broken vendor websites to access downloads
- Documentation is fucked, I don’t know who they expect to be buying these things but printing a pinout with the boards would be fucking nice
- Examples that don’t work, tools that give warnings when you do things the example way, a weird sensation like the vendor didn’t actually want to sell you this product…
I won’t point out any specific vendors but basically they are all a bit shit (although their support teams can be helpful!), unless you buy the cheap models that are easy to program from a Linux terminal. With those you’re just a bit limited in the size of the design, they will only fit a simple CPU.
It Works In Simulation
It’s been easier to get features working in simulation though, so in a Verilog simulator my new design has the following features:
- Modern 64-bit RISC architecture
- 5-stage or (experimental) 6-stage pipeline
- Extremely efficient hardware threads implementation, designed for configurations with 4 threads per core
- Alternative optimisations for efficient/fast single-threaded implementations
- Very suitable for real-time device control or for further extension as server CPUs
- Based on a simpler MIT-licensed design, allowing for relatively easy commercial or open source licensing
Long Way To Go…
The current design looks and feels really solid, in simulation… There is no guarantee that it will ever work in hardware, maybe I will have to go back to the drawing board eventually but until then I’m working around the clock to make this design work.
There’s a chance that it will just work effortlessly in FPGA & in silicon once I figure out one more bug or get one more FPGA board working, but realistically it’ll take quite a lot more optimisation to get it fine tuned and also to add all the extensions developers would want.
Full Announcement Forthcoming
So I don’t know if this all is going to work right yet, I will reserve more detailed announcements until later.
If my new design does work this will probably become the basis for testing & deploying my OS code, otherwise the backup plan is I’ll probably scale back a little on my hardware designs and offer software/configuration support for existing designs instead (this will probably mean some less aggressive open source CPU forks). But for now of course I’ll continue working on bringing up this design on FPGA, which should work if I spend enough time isolating & testing each behaviour (my current testbench is just a bit of a mess).
So something will be coming either way, but for now I’m slowly progressing on the larger model which should perform quite well on large FPGAs if I can iron out the remaining bugs. This won’t be completely full-featured at first but should provide a good basis for extension.