HLS设计技巧
一、开发中注意事项
1.在C仿真中,建议勾选Clean Build这个选项,
不管是launch debug还是其他模式,都建议勾选Clean Build,用于将上次仿真设计的一些文件清理,
防止上次仿真文件的干扰。
2.尽可能使用assert对边界进行约束设计
3.C/RTL协同仿真是必须要做的,可以检查Timing时序,死锁,stream空满挂死
4.C仿真和rtl仿真是两码事,C仿真过了,只能说代码的逻辑结构没有问题,不等于硬件逻辑设计没有问题,RTL仿真通过才是安全的。
二、编程需要的事项
1.尽量不要追求通用性:通用性的代价就是性能和资源的双重受限。
FPGA本来就是为了定制而生,你非要做通用设计,那么在对性能和资源要求高的场合,那是并不合适的。
2.数据类型的转换,必须显式表示:ap_fixed,float不要直接做比较,不要直接做赋值,不要直接做运算,
必须要强制转换。
三、II和latency至关重要
1.II=1永远要追求
所以函数规模不能太大,否则II难控制,LUT会爆掉
所以循环规模不能太大,否则II难控制,LUT会爆掉
如果设计II达不到,那么建议拆分函数,然后使用stream + dataflow串联
四、最难排查的就是deadlock挂死问题
死锁:FIFO 深度不足、速率不匹配、Stream 空 / 满。
五、设计模式的推荐
1.大函数推荐拆分为小函数,然后stream串流,再加dataflow/task实现并行;
big_function = multi_little_function + stream + dataflow优化设计
2.设计先宏观架构和时序流程图,然后再coding
