尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

HLS高层次设计综合技巧--数组优化设计(二)

HLS高层次设计综合技巧--数组优化设计(二) 一、数组优化概述1.HLS高层次综合的三大部件函数循环和数组2.可见数组在HLS高层次综合中的重要性二、数组对应硬件1.数组综合后通常作为RAM,ROM,FIFO来实现2.顶层函数接口的数组作为RTL端口来进行综合的其内存都是外挂的三、数组对于HLS优化设计存在瓶颈1.数组的访问通常会造成性能瓶颈2.数组的优化设计至关重要3.数组作为RAM,ROM或者FIFO端口数量是至关重要的4.数组端口的数量是对设计的性能和瓶颈至关重要端口的数量并不是越多越好端口太多会造成LUT资源爆炸5.数组的初始化至关重要是否要初始化如何进行初始化都是一门学问6.数组初始化如未谨慎执行则可能导致 RTL 中不必要的长时间复位和初始化。7.如果要进行读写指定为RAM如果只读指定为ROM四、数组优化1.使用数组最优化指令Array_Partition、Array_Map 或 Array_Reshape来重新配置数组结构从而重新配置 I/O 端口数量。2.使用数组备份的方式来进行优化间接的扩大数组的的端口数量3.赛灵思建议但并不强制将数组指定为作为含静态 (static) 限定符的内存来实现。这不仅可确保 Vivado®HLS 以 RTL 中的内存来实现数组还允许使用静态类型的初始化行为。五、数组案例1.案例一int coeff[8] {-2, 8, -4, 10, 14, 10, -4, 8, -2};这个代码默认是RAM来实现默认为单口RAM所以每次运行函数都会执行这个初始化那么由于是单口RAM那么需要8个clock周期来初始化这个数组2.案例二static int coeff[8] {-2, 8, -4, 10, 14, 10, -4, 8, -2};如果使用static限定符来定义coeff数组那么该数组开始执行时会使用指定的值进行初始化每次执行该函数时coeff 数组都会保留上次执行的值。静态数组在 C 语言代码中的行为与 RTL 中的内存行为相同。使用了static限定符后那么vivdo hls会对RTL设计和FPGA的比特流中的变量进行初始化因此无需经历多个时钟周期来初始化内存并且可确保大型内存初始化不会产生任何运算开销。3.注意不管是staic修饰还是没有static修饰coeff,如果执行复位就是需要额外的时钟开销如果执行复位操作后内存将返回初始状态则会导致运算开销并且需要经历多个周期才能完成值的复位。每个值都必须写入每个内存地址。六、数组实现ROM1.ROM 的自动推断的一般规则是局部静态非全局数组先写入后读取。在代码中遵循下列实践有助于推断 ROM
返回列表