一、HLS技术的局限性
1.HLS编译器说明
关于HLS编译器是一个静态工具,那么对理解动态特性没有帮助,可以认为是一个翻译工具。
rtl级别的是无法在线调试和debug的,只能在c层面进行debug,但是c层面和rtl层面的结果
是两个概念。
2.HLS编译器的行为没有办法预测。没法预测最终的性能和资源利用率。
3.HLS设计人员主要是通过修改代码以及program编译指令的不断尝试,手动探索,最终达到目标,说白了就是试和凑!
4.HLS对一些简单的设计,有时候需要很复杂的代码实现
5.HLS开发对设计人员要求很高,你需要懂c/c++,需要懂数字电路,需要懂算法,软硬件都要懂,才能玩的好!!
二、HLS设计的技巧性
1.HLS开发有一定的任性要求,需要讲究一些“技巧”。举个简单例子:一个很“大”的数组,直接去分配存储空间,这对堆栈的内存要求其实是巨大的,即使算法本身没有毛病,也很有可能导致C-Sim 或Co-Sim的仿真通不过,从而无法观测波形等后果
2.如何将C/C++的(多维)数组映射到FPGA的(有限)RAM/ROM;又比如,(多层嵌套)for循环或者子函数之间,如何将代码从Unperfect改进到Semi-perfect的状态,进而使用展开、流水、数据流等一系列的优化策略,这背后其实要求,具备一定的FPGA基础和算法并行的思想。
3.LS只要把所有的c++/c用到的库函数文件,include进来,告诉编译器这个文件的位置;直接不做修改,按照c++/c去编译,然后转成RTL是可以的,只不过是占用资源和执行效率的问题;
4.通过pragma/directive,来优化代码,使得最终变成的RTL占用更少资源/有更高效率