FPGA

Inventory of programmable hardware tooling

All available at: https://hdlfactory.com/bazel-registry/ if you are willing to use bazel.

Feb 1, 2026

Writing XDC Clock Constraints for Vivado

This guide explains how to properly constrain a digital design with multiple clocks in an XDC (Xilinx Design Constraints) file, specifically for use in Vivado batch mode. We’ll cover primary clocks, generated clocks, and the relationships between them.

Sep 1, 2025

Mastering Resolved Signals in VHDL: A Comprehensive Guide for Digital Design

I asked Gemini to teach me about the VHDL resolved signals. What you read below is the result.

Jul 14, 2025

How to shoot yourself in the foot with inout signals

They say that no good deed goes unpunished. Here’s an example of a footgun in VHDL which stems from in my view an eminently reasonable desire to keep the entity interface definitions compact.

Jul 7, 2025

VHDL IEEE Libraries and Numeric Type Conversion: A Definitive Reference

I asked Gemini to teach me the VHDL type conversions. What you read below is the result. An annoying generated podcast will be available for a while.

Jun 29, 2025

Packaging AMD Xilinx Vivado ML Standard edition 2025.1 in a Docker container

I updated the repository https://github.com/filmil/vivado-docker/ with the changes required to package Vivado 2025.1. As of this writing, version 2025.1 is the last published version. I hope that the updated version will remove some of the bugs I discovered in the previous version I dockerized, which was 2023.2.

Jun 19, 2025

Using glbl.v module in a Verilog simulation in Vivado

A quick note about correct use of glbl.v in a Verilog simulation in Vivado. This note is way less confusing than any notes you may find elsewhere on the Internet.

Nov 16, 2024

How to use $readmemh correctly

$readmemh is a Verilog directive that allows you to initialize an array. It works differently in simulation compared to synthesis. In simulation, this directive behaves as a “read file into array”. In synthesis, this directive behaves as a repository of initial values for, say, block RAM.

Oct 7, 2024

From zero to RISC-V in hardware, in 6 minutes

Program your FPGA with a one-liner command. It’s a kind of magic.

Oct 5, 2024

Remote programming of an AMD (fka Xilinx) Artix-7 device

Here is how you can set up a hardware server (hw_server) in AMD Vivado 2023.2, in such a way that you can move your workbench to a virtual machine in your cloud of choice - mine is GCP - but program a device which is attached to a machine that’s close to you.

Jul 8, 2024

Packaging AMD Xilinx Vivado ML Standard edition in a Docker container

A while back I wanted to make a hermetic environment for repeatably running Docker tooling.

Nov 20, 2023