New Feature: ‘volatile’ Register Fields

Following several user requests, we added support for volatile register fields to the airhdl generator. Volatile fields are a special kind of read-write field whose write-value is set using an AXI4-Lite write transaction, and whose read-value originates from the user logic.

A typical application for volatile fields is time synchronization, where you want to read a counter value from the user logic, perform some adjustment on that value, and write it back to the hardware. Previously, this would have required two registers: a read-only register to read the current counter value, and a write-only register to update the counter value. Using the new volatile field, you can do it with just one counter register as shown in the diagram below:

An airhdl register bank with a volatile counter.value field allows reading a hardware counter and loading that counter to a new value through a single AXI4-Lite register.

The diagram above assumes a read-write counter register with a volatile value field, which looks like this in the airhdl user interface:

Reading from the counter register over the AXI4-Lite interface returns the value of the register bank’s counter_value_rd input port, which reflects the current counter value.

Writing a new value to the counter register over the AXI4-Lite interface updates the corresponding counter_value port of the register bank and pulses the counter_strobe port, which has the effect of loading the new value into the external counter component.

To create a volatile field within a read-write register or register array, activate the Volatile checkbox in the Create or Edit Field dialog:

Volatile fields are currently in beta and available to selected users. To get early access to this feature, please get in touch with support@airhdl.com.

Published by

Guy Eschemann

Founder and CEO at noasic GmbH. Lead developer at airhdl.com.