03-28-2020 05:47 AM
Have a look here. The main document you need is UG902.
However, to use HLS well, it would make sense to be very familiar with C/C++ (HLS code is C/C++) plus a good knowledge of FPGAs an either Verilog or VHDL (because you need to understand what hardware HLS is going to produce).
03-30-2020 06:58 PM
I started with ug998-vivado-intro-fpga-design-hls, and it does cover some of the differences between programming for processor and FPGA's.
Next will be ug902-vivado-high-level-synthesis.
I do use C / C++ a lot, it should help.
04-01-2020 03:48 AM
Knowing C will definitely help.
Programming for FPGAs requires a decent understanding of what the underlying hardware will do, but there are a few simple rules:
- No dynamic memory allocation (because it has to actually dedicated memory hardware on the chip, so it needs to know how much is needed).
- No system calls (because there is no OS to manage them).
- Often a brute-force solution works better than a "smart" one. If you've made HLS create the hardware to do an operation once, there's no harm in doing the same operation (on the same hardware) on every clock cycle. Whereas a "smart" solution often requires a lot of different operations.
- Floating-point is slow, fixed-point is fast.
- RAM has fixed sizes, and is always in very limited supply.
- Multiplers also have fixed sizes and are in limited supply.