当前位置:   article > 正文

【ZYNQ7020_实现yoloV3】加法器的实现_zynq实现yolo

zynq实现yolo

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];
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

add_top.h

#include "ap_fixed.h"
typedef ap_fixed<32,16,AP_RND,AP_SAT> D32;

  • 1
  • 2
  • 3

资源消耗
在这里插入图片描述

问题:这里已经是使用unroll将其展开了,但是还是需要26个时钟周期,原因是没有考虑到硬件问题
在这里插入图片描述
通过分析发现,一个时钟周期最多读两个数据,这里是因为双端口ram最多一次读两个。
关键:RAM最多是双端口,支持两个数据的同时读写
在这里插入图片描述

改进版本2.0

把所有数据完全展开
在这里插入图片描述
从资源可以看出,0个周期就可以实现,完全使用组合逻辑电路,但是资源消耗特别大。
在这里插入图片描述

改进版本3.0

使用部分展开,2个为一个组,可以看到,时钟直接比1.0缩小了一半。
在这里插入图片描述

在这里插入图片描述
所以,UNROLL要配合数据展开方法才能更好的优化。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/984797
推荐阅读
相关标签
  

闽ICP备14008679号