高层次综合理念
一、function LOOPfucntion功能RD_OP CMP_OP WR_OP或者Load Compute storeLOOP功能RD_OP CMP_OP WR_OP或者Load Compute storeUSR_ACCESS2原语的核心价值二、HLS工具优化逻辑1.HLS的优化效果高度依赖于编译7器的能力开发者还需要通过添加大量编译指令如Pragma来引导工具生成高效代码因此在实际开发中仍需具备硬件知识的支持2.HLS是没有办法精确控制时序的比如CPU流水线资源优化微观颗粒度设计只能用verilog3.如果做宏观算法沿着功能实现不考虑性能建议使用HLS三、设计注意事项1.HLS高层次综合的特有的数据类型2.原生态数据 新生态数据类型之间的转换3.变量的初始化4.复合数据类型在高层次综合之中的应用5.TB的编写和设计以及覆盖率6.接口的综合分为block-level接口和Port-level接口7.数组的使用和映射8.const,global,static,localvolatile的使用9.循环优化pipeline,unroll,part-unroll,merge,dataflow,multi-loop10.rewind,flush,以及边界处理11.数组partition,map,reshape,map,rom,ram,buffer,window四、高层次综合1.c/c/systemc/matlab对系统建模也就是ESL的设计理念。2.高层次综合工具对特定对下进行优化和映射数组循环函数等。3.Vivado HLS对C代码的转换过程可分为时序安排Scheduling、资源规划Binding和控制逻辑提取Control Logic Extraction三个阶段时序安排用于决定每个时钟周期所执行的操作资源规划用于决定这些操作选用FPGA中的何种资源实现控制逻辑提取用于产生有限状态机Finite State MachineFSM。开发者都说宏观和抽象的设计侧重于图论工具链侧重于翻译映射微观把控IR表调度。五、优化1.循环优化关于循环的unroll展开关于循环的merge融合关于循环的split分割关于循环的改造和拆分目的用于提升数据的吞吐量和计算效率2.数据流路径优化数据流的内存访问效率存储器的访问效率3.并行化设计hls工具编译器会自动的检测推断或者挖掘算法中可能的并行性但是一般是比较保守的。所以不能全靠工具设计者的代码风格要足够好不然工具会对用户设计的代码进行折中优化从而达不到效果或者产生错误的效果。4.流水线设计主要将大操作进行多阶段的拆分5.内存优化访问DDR,访问BRAM,LUT,FF等七、工具