mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
Current timestamp read code uses FPGA register reads. Through testing, this read was slower then clock_gettime by about 4-5x. However, another method of reading the FPGA time is available, using HMB. HMB is memory mapped IO from RAM to the FPGA. So to code side, reading the value is just a memory barrier and a memory read. There is some latency on the write side, so a very small artifical delay (5us) is added to avoid register reads such as interrupts being ahead of current timestamps, which could cause issues. Below is read times for 1000 calls to clock_gettime, register reads and hmb reads. ``` Clock: Rise 1.72939400 s Fall 1.72990700 s Delta 0.00051300 s FPGA : Rise 1.72999000 s Fall 1.73429300 s Delta 0.00430300 s HMB : Rise 1.73466800 s Fall 1.73481900 s Delta 0.00015100 s ``` Also add full HMB struct to HAL for future usage.