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 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.