1.0版本
add_top.cpp
#include "add_top.h"
#define MAXNUM 50
void vector_add_top(D32 A[MAXNUM],D32 B[MAXNUM],D32 C[MAXNUM])
{
for(int i=0;i<MAXNUM;i++)
{
#pragma HLS UNROLL
C[i] = A[i]+B[i];
}
}
add_top.h
#include "ap_fixed.h"
typedef ap_fixed<32,16,AP_RND,AP_SAT> D32;
资源消耗
问题:这里已经是使用unroll将其展开了,但是还是需要26个时钟周期,原因是没有考虑到硬件问题
通过分析发现,一个时钟周期最多读两个数据,这里是因为双端口ram最多一次读两个。
关键:RAM最多是双端口,支持两个数据的同时读写
改进版本2.0
把所有数据完全展开
从资源可以看出,0个周期就可以实现,完全使用组合逻辑电路,但是资源消耗特别大。
改进版本3.0
使用部分展开,2个为一个组,可以看到,时钟直接比1.0缩小了一半。
所以,UNROLL要配合数据展开方法才能更好的优化。