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:
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
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 firstname.lastname@example.org.