Domipheus Labs

Stuff that interests Colin ‘Domipheus’ Riley

Content follows this message
If you have enjoyed my articles, please consider these charities for donation:
  • Young Lives vs Cancer - Donate.
  • Blood Cancer UK - Donate.
  • The Children & Young People’s Cancer Association - Donate.

Recent posts

Jun 29, 2025

Why FPS matters when comparing upscaling quality

I posted a small snippet of information on bluesky recently about reviewers comparing upscalers. I have seen outlets compare images rendered with GPUs in different market segments, such as AMD Radeon RX 9070 XT to Nvidia Geforce RTX 5090. I stated if this is done, FPS needs to be limited to be a fair comparison of upscale quality - this post explains the technical reason as to why.…
Jan 9, 2022

Designing a RISC-V CPU in VHDL, Part 22: Doom as a benchmark and adding Cache to RPU

Seems it’s a right of passage for any project of this kind that Doom needs ported to it. For me, I wanted it as a more involved benchmark - the likes of Drystone that gets used everywhere is pretty boring. Why have that when you can publish a Doom timedemo score for your fpga? Along the way, we add a cache in front of the DDR3 to increase performance.…
Jul 22, 2021

Writing the SPI flash of the miniSpartan3 FPGA board

Despite playing with my miniSpartan3 board for quite a while, I’d never attempted to write my FPGA designs to the SPI flash on the board. This means that the FPGA board didn’t do anything until I deployed my design onto it manually - quite useless if you were using the board for a real project, and on power-on you needed it to go to work immediately. Turns out though, it is fairly simple to do, as long as you have the larger XC3S200A variant with an Atmel AT45DB041D flash chip - that’s the only way I’ve been able to validate this method with.…
May 29, 2021

Designing a RISC-V CPU in VHDL, Part 21: Multi-cycle execute for multiply and divide

One of the things which RPU has done from the start is keep the cpu pipeline very simple. It’s a Fetch, Decode, Execute, [Memory], Writeback pipeline, but it does not run pipelined. Some operations really do require multiple cycles to execute, and in this post we figure out how to add this functionality into the CPU…
Oct 3, 2020

Designing a RISC-V CPU in VHDL, Part 20: Interrupts and Exceptions

This is part of a series of posts detailing the steps and learning undertaken to design and implement a CPU in VHDL. Previous parts are available here, and I’d recommend they are read before continuing. Interrupts and exceptions are important events that any CPU needs to handle. The usual definition is that interrupts happen outside of the CPU – timer events, for example. Exceptions occur within the CPU, like trying to execute an invalid instruction. These events are handled all the time within a system, and whilst some signify faults and error conditions – most are just handling system functionality.…
Feb 13, 2020

Designing a RISC-V CPU in VHDL, Part 19: Adding Trace Dump Functionality

This is part of a series of posts detailing the steps and learning undertaken to design and implement a CPU in VHDL. Previous parts are available here, and I’d recommend they are read before continuing. For those who follow me on twitter, you’ll have seen my recent tweets regarding Zephyr OS running on RPU. This was a huge amount of work to get running, most of it debugging on the FPGA itself. For those new to FPGA development, trying to debug on-chip can be a very difficult and frustrating experience. Generally, you want to debug in the simulator – but when potential issues are influenced by external devices such as SD cards, timer interrupts, and hundreds of millions of cycles into the boot process of an operating system – simulators may not be feasible.…