How to Use Git with Vivado FPGA Tools

Xilinx provides the Vivado FPGA (and Vitis software) tools for developing VHDL and Verilog FPGA designs. But they really don’t provide good information on setting up your project to work with Source Code Control (SCC). If you look through the Xilinx support forums you can see this has been a problem for at least a decade. Users were left to find their own solutions. Files for SCC were scattered throughout the directory structure. Finally, in recent years (2020 versions and later) Xilinx has attempted to address the problem by placing the files that need to be controlled under the <project.name>.srcs…

Continue ReadingHow to Use Git with Vivado FPGA Tools

Zen and the Art of Firmware Maintenance

In this article, I touch on coding style, coding standards and philosophy. To paraphrase Robert Pirsig from “Zen and the Art of Motorcycle Maintenance”, this article is not really about Zen and does not tell you how to maintain firmware (or software). However, if you follow my advice, you will be on the path to coding nirvana. And you will bring great joy and enlightenment to the world.Aspire to create a work of art and beauty with every piece of code you write. Remember that firmware lives for ever. Long after the developer has left for another job (or moved…

Continue ReadingZen and the Art of Firmware Maintenance

Writing a Bootloader for the ARM SAM3 SAM4 Microprocessor

A bootloader is a very important feature for many embedded devices. It allows a manufacturer to easily upgrade firmware, to add features and fix bugs after the product has been released. This can done on-site by a field service technician or remotely via the Internet.I will use as an example, software I wrote for a medical device that needed a bootloader. The system used multiple ARM processors. I needed to write a custom bootloader for the Atmel (now Microchip) SAM3E processor for this system to enable in circuit firmware updates. We were downloading the new firmware through a CAN bus…

Continue ReadingWriting a Bootloader for the ARM SAM3 SAM4 Microprocessor