Vitis HLS backend
Created by: vloncar
Description
An initial attempt at supporting Vitis HLS. Introduces a new backend (Vitis
) that takes most of the stuff over from Vivado
backend and changes things a little. I tried to bring the two backends closer together, so the changes that Vitis requires but are begnin in Vivado backend are ported to Vidado backend. The more extensive ones are implemented as overrides of the existing HLS routines (currently only the streaming implementations needed this). The biggest change in Vitis HLS is the more strict use of pragmas, so some workarounds we did before are no longer possible, and require changes. For example, setting stream depth in a loop is no longer possible (loop variable is not constant, so pragma refuses to use it), which means encoded
CNN implementation doesn't work and is removed from Vitis backend. There are also big issues with Resource
strategy in general. Regardless of which of the three implementations I try to use, the compiler will reintroduce the modulo operator and synthesize an urem
core which adds to the latency significantly. I'll try to resolve this later unless someone volunteers (yeah, unlikely).
Some plots comparing the latency and resource usage between the two will follow.
Type of change
-
New feature (non-breaking change which adds functionality)
Tests
TODO. We will also need to extend the synthesis tests to include the Vitis HLS (probably meaning we either fully switch to CERN machines, or we split over multiple machines at Fermilab.
Test Configuration:
Checklist
-
I have read the guidelines for contributing. -
I have commented my code, particularly in hard-to-understand areas. -
I have made corresponding changes to the documentation. -> Later -
My changes generate no new warnings. -> In fact they do warn the user if they try something not supported -
I have added tests that prove my fix is effective or that my feature works. -> Later