The first half of my career was as an SRE. Despite SRE practices being used widely only recently, they’re what I always did. I could code, understood how computers worked, how the internet worked, and how server and software architecture was done.
One recently popular aspect of failure-introspection is, in part, looking at the bigger picture. A component failed or some code errored, but what were the trademarks of the human system that got us to this failure point? If we unwind the stack all the way past meetings and the organization of humans, what do we learn from it?
There was one particular failure a few years into my career that triggered my own thinking beyond “hey this person screwed up” and into “what were the cosmic combination of circumstances that lead to me standing here, staring down a harddrive, wondering if a company with over 100 employees would exist in the morning”.
With that hell of a sentence, lets do a war story!
Classical raycasting engine using embedded microcontrollers and FPGAs.
This project pairs a standard arduino (ATmega328) with a small Field Programmable Gate Array (ICE40LP8K) on two small boards, outputting to a 320x240x16bit SPI LCD. Using a mix of C and Verilog for implementation.
This post walks through the separation of duties between the Arduino and FPGA, optimizations to the raycasting algorithm, and other details. It doesn’t assume prior knowledge of FPGA’s or Verilog, but reading some links along the way will make it easier to understand.