Consulting Services

I have been freelancing on and off since September 2015. I offer software and hardware development services such as:

Less recently, I have also been paid to develop:

I am still open to doing widget and GUI design.

Programming Languages

I am most comfortable working with, in no particular order:

FPGAs

For FPGA work, I tend to use the Amaranth or Migen HDLs, the latter as part of the LiteX SoC ecosystem. I can also read and write Verilog (VHDL, less so).

Outside of client work, I also contribute to the open-source yosys Verilog synthesizer, and nextpnr place-and-route tool. With the exception of Lattice Diamond, I am much more familiar with using the above than with FPGA vendor tools directly.

I have worked with the following FPGA families in various capacities:

In general I have spent more time with Lattice FPGAs than Xilinx, and I have not recently used any FPGAs from Altera/Intel or other, smaller vendors (although the latter is likely to change soon as of 2022-04-27).

My services are tailored to individuals and companies with open source code bases who need a feature (this includes FPGA IP) or internal tool implemented. Please feel free to email me to discuss any work that you need done and rates.

Client Projects

Project Facade

Project Trellis is a project by gatecat to reverse-engineer the bitstream format and internal structure of the Lattice ECP5 family of FPGAs. Project Facade is my extension to Project Trellis with databases for the Lattice MachXO2 family.

I found that MachXO2 and ECP5 families are similar enough internally that it made sense to reuse as much of Project Trellis as possible. In addition, thanks to the efforts of gatecat (without them, this project would not have succeeded), and Andres Navarro (who did bitstream compression reverse-engineering for), it should be possible to use Project Trellis to more quickly reverse-engineer the remaining Lattice families later on.

On 2021-01-31, I created, as far as I know, the first bitstream for MachXO2 devices using only open-source tools. However, there is still much work to do, as indicated by the nextpnr-machxo2 README!

TinyUSB

TinyUSB is a open-source USB stack written in C targeting microcontrollers that favors ease of usage and code size over performance. A large selection of microcontroller families and CPU architectures (and multiple C compilers!) are supported.

I have contributed the following ports/backends to TinyUSB:

In addition, I've contributed demos of TinyUSB on various evaluation boards including:

Other Projects

This section needs to be rewritten as of 2022-04-27. In the meantime, my IRC activity is a good glimpse into the type of projects I contribute to.

Last Updated: 2022-04-27