15 comments

[ 4.9 ms ] story [ 37.2 ms ] thread
For anyone else curious: custom FPGA-based CPU code but not a custom architecture. This is an RV32I core. The article takes along time to give up this fact.
Always a delight seeing Chisel in the wild :)
Great work!

This reminded me of a project I built a while back: a RV32IM emulator in C++ that can boot and run DOOM. Initially I implemented only RV32I, and implementing the M extension provided a massive speedup!

If anyone's curious, here's the source code: https://github.com/lalitshankarch/rvcore

why Zmmul and not full M — is it just fpga area, or did the doom port let you drop div/rem?
I'm kinda lazy lol. We are also implementing out-of-order rn, so we want to get a really solid rv32i setup going before adding multiplication, floating point, vector, etc.
Reading "Custom CPU" I expected wafer.space, instead of FPGA.
We hope to tape it out, along with an NPU and GPU once we raise $10k. Though first we have to find $10k :(
Cool, I thought this was a CPU custom designed for Doom, but I guess that's just a 486 :)

edit: I went to down a quick hole "The historical footnote is that a version of this genuinely happened. SNES Doom shipped with a Super FX 2 in the cartridge, a custom RISC chip with a pixel-plot instruction, because the console's own CPU had no chance. Jaguar and PlayStation ports both moved the rasteriser onto dedicated hardware. Doom's design was shaped by the absence of an FPU, and then hardware kept getting built to catch up with it."

I wonder, if Doom didn’t exist, what would have taken its place for the “can it run X” usage.
Well, Doom runs everywhere.