This is harder than you'd think - This guide describes the steps involved to install Vitis / Vivado 2024.1 on Ubuntu Linux inside a Distrobox container. This is useful if you want to run Vitis on a Linux host without polluting your host system with all the dependencies and libraries that Vitis requires. Distrobox makes it easy...
Using ChatGPT to write Verilog and produce a chip for my christmas tree - TL;DR: I architectured a microcontroller chip in early 2023 using ChatGPT and it was taped out. Now it controls my christmas tree. This was the first time anyone had used an LLM to design silicon. Our paper appeared at MLCAD’23, arXiv link. All chat logs are provided in our repository...
GPT-3, DALL-E, Codex, and more - It was long expected that among all the practices which scientists could apply computers to, that art would remain safe: after all, how can one program a machine to have creativity? Yet, in the last two years we have seen an explosive emergence of new AI-based tools that are not...
A primer to hardware security - Scan chains, a Design for Test (DFT) technique, are implemented in integrated circuits (ICs) in order to test their correct functionality. They provide high fault coverage and do not need complex hardware for test pattern generation or signature analysis. They function by converting all internal flip-flops into scannable flip-flops, pairing...
Code injection and memory editing! - Currently there is a lot of academic interest in the potential for malicious modifications being added to designs during their manufacturing lifecycle. These include, for instance, Integrated Circuits, where Hardware Trojans might modify the behaviour of key IP blocks, or PCBs, where design modifications could add or remove components in...
Because breadboarding is a pain and 2-layer PCBs are cheap - Recently I purchased some Raspberry Pi Pico modules. This is blogpost #2 on the subject, where I will walk through a basic development board that I designed to be used to familiarise myself with the new RP2040 silicon. In the rest of the blog post I’ll have a yarn. If...
This + MicroPython = an absolute joy - A few days ago the Raspberry Pi foundation made the surprise announcement that they’d had their own silicon produced in the form of a dual-core ARM Cortex M0+ microcontroller. I say “surprising” for a number of reasons: (1) until now, Raspberry Pi have focused on their eponymous single-board computer series,...
And a brief look at timer interrupts - Measuring, monitoring, and reacting to the passage of time in embedded systems is an ubiquitous requirement. For instance, you might decide that you want to toggle an output every millisecond. You might be tasked to implement a system that samples an ADC once a second. You might want to change...
Let's have some fun with files - Embedded projects often call for some kind of data storage and retrieval. For instance, you might have need for a data logger to record data points over long periods of time. You might have user settings that need to be preserved after the device is shut off and rebooted. You...
Depicted in 2020 - For the first time ever, I have a 3d printer! Well, it’s not actually mine, but it’s on my desk - it’s mine to use (and abuse). I wanted to update the firmware on it, but was worried about bricking it. This blogpost is about the procedure I went through...
A simple change to add agency to an otherwise autonomous game - I just moved to the USA, and as a leaving gift, a work colleague gave a New Zealand themed version of the classic game Snakes and Ladders (the NZ theme being that this was Taniwha and Ladders, of course). Of course, we all know the rules of Snakes and Ladders...
Project initialisation, intro to debugging, and the virtual COM port - Getting started with an 32-bit ARM-based microcontroller is always a little daunting. There’s a plethora of available microcontrollers, platforms, development boards, tools, and software. Everyone seems to have their own opinion on what is best to use, and debates between the available options range in tone from pleasant and…
Enabling data transfer from 'scope to PC - Recently I acquired an older Agilent 54621A oscilloscope for my at-home workstation, and yes, that is a floppy drive on the front. According to the person I got it from, the floppy drive still works, and they successfully used it to load data captures to their PC as recently as...
Reverse engineering a simple embedded system! - I was cycling through a light industrial area in Auckland City when I came across a rubbish bin awaiting pickup on the side of the road. It caught my eye as it was practically overflowing with discarded LED Matrix modules - big ones, about a foot in each dimension! I...
Can we emulate a PIC16F core using an FPGA? - In this project I set out to create a cycle-accurate FPGA-ready clone of the picmicro-midrange core, i.e. it is a PIC on an FPGA! While there are other FPGA ready clones of PICs, I still wanted to make my own as a learning experience. As a point of difference, however,...
Making an SSD1306 work under serious resource constraints - The goal here was to take a common (and cheap) SSD1306 LCD module and drive it using a PIC16F677A. Now, there’s a lot of code online - libraries and such - for driving an SSD1306, but the problem is that these all use buffered memory (i.e. a temporary screenbuffer to...
For use with FatFS! - The first time that I tried to get an SD card working with CubeMX I found a most interesting affair - not particularly complicated, but definitely a little fiddly. 2020 edit: There is a more detailed and up to date version of this post. Use it instead. At any rate,...