HLS is perfect for implementing data processing algorithms. Some time ago, I tried to use it for a task that was tightly coupled with low-level hardware handling. I have implemented a DMA engine optimized for large, huge-pages-backed buffers. The results appeared interesting and have been published in https://doi.org/10.3390/electronics12040883. The solution is available under open source license at https://gitlab.com/WZabISE/hls_dma.
It was necessary to implement certain parts of the system in VHDL. That included interrupt masking and registers the driver must monitor during the data transfer. However, a significant part of the system is implemented in HLS, allowing easy integration with user-provided HLS-implemented data preprocessing blocks.