It took a bit longer than I’d hoped to tidy things up, but the SuperRT source code is finally released. There’s a lot more detail in the readme file included with the code, but in broad strokes it’s probably mostly of academic interest rather than useful in any practical way - hopefully it will be of interest to anyone curious about the inner workings of the demo.
SuperRT uses, for the most part, fairly simple maths operations - integer addition and multiplication - which are natively supported by Verilog (and can be offloaded to DSPs in some cases). There are, however, some places where it inevitably has to do more complex operations - notably divides and square roots (he hardware side avoids the need for any sine/cosine calculations by formatting the…
Update 31th May 2021: The source code for SuperRT has now been released. One thing I learnt very quickly when I started looking at FPGA design was that debugging is hard. Simulation tools exist but from what I’ve seen they are slow, don’t replicate all the quirks of hardware, and for situations like this where interfacing to external devices is an integral part of the design…
Video links for this article: Short trailer Walkthrough and technical details Update 31th May 2021: The source code for SuperRT has now been released. I’m pleased to finally have some results to show for a project I’ve been working on in my spare time for the last year or so. The idea originated when I was trying to think of an interesting idea for a project to help me learn Verilog…
A concept which took me a little while to get my head around the first time I encountered it in the CLR is that of the “evaluation stack”, so I thought I’d write a little bit to summarise how it works (or, well, how I think it works, which may be slightly different - let me know if I’ve got anything wrong!). In terms of how they execute code, the vast majority of CPUs are…
A key part of Catnip’s architecture is the use of internal microcode. As an intermediate step prior to execution, IL instructions are converted into this microcode, which is then what actually gets executed by the interpreter (or subsequently converted into native code). The primary reason for this is that IL instructions are heavily contextual - for example, the ADD instruction may be…
In the previous post I looked a little bit at the fundamental principles of garbage collection, and now I’d like to talk a little about concurrent garbage collection and why it’s a much harder proposition. Up until now our assumption has been that whilst the GC is running the data in the heap is constant - this can either be because the application has been paused (and thus nothing is modifying…
This is the start of a semi-regular series of articles I’m hoping to write, time-permitting, looking at interesting things I’ve run into, discovered, or failed miserably to comprehend whilst working on Catnip. A lot of this is going to be a bit ad-hoc, so apologies in advance for any errors or omissions - criticism or corrections are both greatly appreciated at…
Whilst I’m not quite in a position to share lots more details and/or code yet, I thought I’d write a little bit about a project I’ve been working on for some time now. It’s called “Catnip” (sorry, cat-related project names seem to happen a lot around me!), and it’s a new implementation of the Common Language Runtime - the foundation used by C# and other…
So having talked a bit in my previous post about the rationale behind Catnip, I’d like to jump forward and introduce some results. Catnip is very much still a prototype, and I’d like to get more of the rough edges off before I actually release any code, but I’ve got an interesting little demo that shows off some of the key features at work. This is Catnip running a little…