Vitis High-Level Synthesis (HLS) 是Xilinx公司推出的一款基于C++等高级语言的开发工具,由Vivado HLS升级而来,它能够将高级语言转化为RTL语言,目的是针对大数据、AI、云等新兴领域,面向软件开发者,加快开发和验证速度。就三五年内而言,其在resource、latency、timing等方面必然是比不上直接进行RTL设计,但是它的优势在于极大的提高了开发、验证效率,大幅度降低了上手和开发的时间成本。
当然,现在的HLS工具还不能完美的直接将C++转化为RTL,需要coder在代码设计过程中具有一定的硬件思维,同时加入合理的optimization directives(HLS pragma),使结果更加符合预期。
下面介绍了一些directive,仅供参考,当然在手册ug902中还能找到更加详细的介绍,在github中的Vitis Libraries中还能看到大量的应用实例。
- unroll,如下代码所示,unroll是将for循环内的代码展开成8份,也相当于使用8倍的资源去实现这个结构。
factor
指定的unroll份数必须是可以被循环次数整除的数。factor
也可以省略,default时unroll份数就是循环次数。
for(int i=0;i<16;i++){
#pragma HLS unroll factor=8
x[i] = y[i];
}
- 一个比较经