Notes

Public notes, made in hope they are useful to someone.

Inventory of programmable hardware tooling

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

Feb 1, 2026

note to self: do not remove .bazelversion

The other day, I was pondering whether to keep setting particular bazel version in projects. I even removed some, to see what would become of it.

Dec 20, 2025

Hermetic, Ephemeral, Reproducible Builds: Take Three (2)

This is another piece of news in my quest for hermetic, ephemeral, and reproducible builds (“HER”). If you read my articles in the past months or so, you may have noticed that I am looking for good ways of creating completely hermetic, ephemeral, reproducible, but also practical builds.

Oct 15, 2025

Bazel knowledge sources

This is a collection of links to interesting articles and knowledge sources about the Bazel build system that I found. I’m motivated to do this after spending considerable time developing a thing that already existed. Just because I was not following the “right” communities I basically wasted a lot of effort reinventing a wheel. Useful wheel, but reinventing nevertheless.

Oct 7, 2025

Hermetic, Ephemeral, Reproducible Builds: Take Three (1)

This is another piece of news in my quest for hermetic, ephemeral, and reproducible builds (“HER”). If you read my articles in the past months or so, you may have noticed that I am looking for good ways of creating completely hermetic, ephemeral, reproducible, but also practical builds.

Oct 6, 2025

Getting ready for the brave new Bazel Modules world

Update 2025-10-19: I made a searchable index of modules available from my registry at https://www.hdlfactory.com/bazel-registry.

Sep 29, 2025

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

rules_nixpkgs use

This is a run-down of tips and tricks for the use of rules_nixpkgs, a rule set for bringing in nix packages for use in bazel.

Apr 11, 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

GNOME tips and tricks

Reusing the general approach from this post gives a way for setting Shift_L+Shift_R as layout change:

Oct 22, 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

nix requires ranlib

This is something seldom known, and a very sharp corner to cut yourself on. But you really want to know if you are using nix.

Sep 14, 2024

bazel rules for GHDL

I present to you https://github.com/filmil/bazel_rules_ghdl: a set of bazel rules for converting VHDL into Verilog.

Sep 3, 2024

bazel rules for a riscv64 bare metal rust compiler

This article assumes that you have bazel installed via the bazelisk method.

Aug 31, 2024

bazel installation via the bazelisk method

Here is how I install bazel. I use this installation method on all of my machines. I do not think it is practical to go about this any other way. It is implied in all of my writings about bazel.

Aug 24, 2024

bazel rules for a riscv64 bare metal GCC compiler

The repository https://github.com/filmil/bazel_rules_gcc_riscv64_baremetal contains bazel rules that can be used for a hermetic bare metal GCC cross-compiler for a 64-bit RISC-V machine, running in M-mode.

Aug 17, 2024

lazygit tips and tricks

These are some tips and tricks for lazygit that I keep forgetting how to do.

Aug 12, 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

PSA: Google Nest Router can serve as an Access Point

I accidentally bought the Google Nest 2nd Generation Router when I needed an Access Point.

May 25, 2024

Hermetic, ephemeral, reproducible builds (‘her’)

This short note defines the notions of hermetic, ephemeral and reproducible software build, as used in my writing.

May 1, 2024

Nix+Bazel = ❤️

If you are in a hurry, fast forward to https://github.com/filmil/bazel_local_nix

Apr 20, 2024

docker tips and tricks

Docker tips and tricks Save an image to an archive docker save imagename | gzip > myimage.tar.gz Load image to an archive docker load < myimage.tar.gz
Feb 15, 2024

bazel does not like FIFOs

Perhaps obvious in retrospect, but it is not possible for a bazel build artifact to generate a named pipe in the filesystem.

Feb 5, 2024

Unix domain sockets in go

After a lengthy search I found the below article that explains the use of Unix domain sockets in go:

Jan 6, 2024

Running docker containers in Synology NAS

If this advice helped you, let me know.

Jan 1, 2024

TIM-011 video playlist

TIM-011 was an 8-bit teaching computer that was ostensibly developed by IMP in what is now Serbia.

Dec 25, 2023

TIM-011 gets a unit test library

TIM-011 was an 8-bit teaching computer that was ostensibly developed by IMP in what is now Serbia.

Dec 24, 2023

TIM-011 gets a C runtime library

TIM-011 was an 8-bit teaching computer that was ostensibly developed by IMP in what is now Serbia.

Dec 13, 2023

TIM-011 computer - how we did things back then

I was a bit hard pressed to find all the proper work attribution. Please let me know if you have data to contribute.

Dec 3, 2023

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

Neovim tips and tricks

This is my cheat sheet for migrating VimScript into Lua. Things I often forget. There are places to learn about Lua use in Neovim . But, for some reason, I could not find side-by-side examples of VimScript vs Lua for quick migration. So I decided to start my own.

Sep 18, 2023

git tips and tricks

Often needed little bits of git knowledge that I tend to forget.

Aug 5, 2023

bazel tips and tricks

Often needed little bits of bazel knowledge that I tend to forget.

Jul 30, 2023

Build a python web app in bazel

Here is an example python Flask app built with Bazel. See README.md for instructions.

Jul 25, 2023

Tesla ownership experiences so far

We recently became Tesla owners, as our old car unexpectedly gave out. We were expecting to get at least 1 more year out of it. But it was not meant to be.

Jun 30, 2023

How to use the make rule from rules_foreign_cc repository for bazel

The bazel build system has rules available to build C or C++ code from external repositories that use other more “conventional” build tools. By this I mean the usual suspects: GNU autotools, GNU make and cmake.

Jun 13, 2023