找回密码
 注册
关于网站域名变更的通知
查看: 374|回复: 2
打印 上一主题 下一主题

卷积函数的FPGA实现-------WBRAM的重新实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-23 11:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
卷积函数的FPGA实现-------WBRAM的重新实现0 m' z; R1 d+ m

9 c: h9 T$ [, ^! N背景:实测IPcore在FPGA上运行时,错误语句集中于get_9_weights_to_buffer之中,极有可能是WBRAM尺寸的设定出现了问题。% J; i( ]4 A. r; Z! ]
1 U5 T8 p: I; e6 G/ Q/ z8 \% w: n
目的:找出WBRAM尺寸设定的问题,更改代码。/ C& s( R( q6 Q

# a3 U! E9 u3 Q0 s& o  T. p目录
5 B3 g, [; j+ V$ o6 H% N* w& W3 Z& F8 n0 x5 [/ j$ J0 r
! L) q. _- `( x# G; K5 N
一、zynqNet的WBRAM的实现
& ]0 W! [+ Q$ N1 f3 @
8 \. I" \- e: K# M$ `$ e! e( {
9 _% l0 h8 R' [% u8 f* \* Y/ b7 v
       1.1 zynqNet的WBRAM实现方法: n2 I- H  M1 T+ B

. x' [1 I9 |& u/ J4 D/ Z( s: Y       1.2 BRAM 32k的尺寸  G7 a$ n: }* |$ R& f& k

: t) o: z2 c( ]& e  }

3 w6 l, z& j+ l  f+ W二、卷积IPcore的尺寸的推断
' ]. g" f+ H4 s/ {2 o7 W5 `- W8 P( b4 N4 W) m7 B+ |% v( F
       2.1 已有资源2 o4 J# w/ y9 Q5 O* z

* x" q2 g5 t: a  a

. Q  r* N* @% g7 r       2.2 总的网络占用- J5 m0 X8 h& e' j7 o3 }* r" i

/ P% ^+ o' T2 C$ B; u7 g
$ }4 V( s3 _1 l
       2.3 已有BRAM的实验0 F% J8 J, \: p' f2 |! O$ v
0 l8 e: U- Y% {( x/ Q  n- X
, D, g7 p0 K) T$ l  y( G
三、更改方法( ~6 R$ u3 k: i

  l- Z# O  r) R7 [! {/ R) @" ]+ ^. ~
8 y- w' ~* a" m2 Z! S( G; R
       3.1 尺寸的确定( l4 N1 g' P* x7 S# |5 B3 q

( x% Q) h7 ?6 L4 b* s8 l( L3 x# b

2 {) X1 k$ f. I* A0 a1 Y       3.2 WBRAM尺寸的确定
$ F+ ~# g9 S4 B5 K$ z
: R( b0 g( m) w3 m8 A, [. D) E
( |" `2 C) `- d$ C0 `9 N# u
       3.3 当前WBRAM的地址( U. C5 }4 ]4 v3 I
$ y6 N8 R/ y* ~( ?
: _/ q3 D  [0 A# h2 p1 `
       3.4 程序之中的更改
$ [0 F2 R6 M9 ?7 Z* W# W! H4 A# y' x: T  f0 y6 X  U* l' i4 L# G3 _( }& \) ~
( g9 t# {- Q7 H9 M4 Q# n1 u
       3.5 synthesis报告及验证
, J# m8 x3 ~5 }+ r% B. e4 @" Z6 c
: N0 [0 `- ]9 p' c

4 m, O6 X# e9 e- {" |
0 @' `3 O, P) B( ^3 K( }# L
9 l- W1 T" |! @4 u+ a8 f. e# m
- w  R! J  q; x1 h. M

+ G& ]) }: f4 S一、zynqNet的WBRAM的实现
' a% S6 n: d! x9 n, f" ~0 ^
0 u4 s' G# M9 M; o; ]! I1.1 zynqNet的WBRAM实现方法: l1 }+ x0 [7 c- i9 H
# f) \/ Q" ?+ i0 @3 y" V
wegiht_cache.cpp与hpp之中,可能7045的BRAM为BRAM 32k,而我们7035的BRAM为BRAM 18k
, v1 r/ S, r+ R# E. [4 t" G' \2 K# O
其源码尺寸实现为四个维度
! z% U6 T8 {% B' L5 }$ l
4 D4 @* r/ A& j) N4 c2 S1 H-------------------------------------------* U8 V/ ]7 _$ [+ m9 U( M: Q
5 w4 Y& C' A  V, ^
data_t WeightsCache::WBRAM[N_PE][NUM_BRAMS_PER_PE][BLOCK_SIZE][9];
8 X* [3 j. {; `8 {
0 C5 {4 ?0 R/ @0 R" d5 n$ C* v// Depth of single BRAM36 in (1K x 32b) configuration
( o* A( w1 `3 c. ^
! u8 ?8 e; S! ^const int BLOCK_SIZE = 1024;
: V( M* f5 a' N* H: P! ~4 ~9 j3 ?/ ]3 s2 p, f! Z
// Number of BRAM36 needed per PE: B" P5 K" I8 y! e

! p: Q" D# S/ `2 s3 f# nconst int NUM_BRAMS_PER_PE =' H3 y- j8 U( i: d- l- c2 M; I
2 K& |2 M9 W. g( J
    (CEIL_DIV(((MAX_WEIGHTS_PER_LAYER) / 8), BLOCK_SIZE) / N_PE);
4 n4 a% l/ @, `6 n, p/ C
. [. R* F# ?5 K- T: G% p* B. r, K, R# u
-------------------------------------------1 m) w& m5 |3 p, ]
8 D8 ?0 F) E: v9 z" k0 J! W& N5 V
MAX_WEIGHTS_PER_LAYER为最大的层的weight的bit数目,除以8得到byte数目。
; e2 d+ _: G2 V' v
7 A) |" `: ~/ S* ^6 `; w然后除以PE的个数,和block_size的个数即为NUM_BRAMS_PER_PE的个数。
  V  g% P# [+ D+ h/ q6 [
6 g; l9 I! ^/ _( X7 z( r' p: E3 `6 M1.2 BRAM 32k的尺寸
, q; H7 m+ C* M0 p! R# E$ Z4 G; A/ h- u, I5 N) N
为32k个bit,即32*1024个bit,所以有32kb,即4kB
; o: c# F! m4 w; a7 M4 P. W
' ~# y& {0 @9 X每个浮点数为4byte,即32bit,所以每个BRAM刚好能存1024个浮点数- ~) j& X5 o7 Z  ?2 H$ F; B
& u7 d% Q) j  f) D* P" t. e' {
由此推算,BRAM 18k能存 512个浮点数。+ t6 ]4 q7 V& d+ J
. \  [& E) W5 w6 a, P% @
即 0.5k*32bit=16kb<18kb
, e: `, j4 j- H) T3 Z- Z+ A% G4 @8 o, z5 j& {8 [8 V

2 \$ \. _( j  S5 a二、卷积IPcore的尺寸的推断
. [: I) e  U) X2 L$ N2 d' W# I# Z" F7 o
2.1 已有资源
$ l9 [$ K! Q% Y1 W, s9 }6 h* [/ u  Z0 @0 n- q* x7 A1 s
BRAM具体尺寸应该查数据手册,但是我们根据目前已有的项目情况和实验推出
& c! w) i7 A/ g- Z+ e
) N5 g) u! P) x0 G) hBRAM 32k即 32kbit,能存1024个浮点数,. {7 |/ z5 _" {# \- y3 }

  U+ N8 `$ \: Z# d6 \) HBRAM 18k即18k bit,能存512个浮点数。
: h- [7 E. }1 ~; |& Y+ J7 A$ k8 y: j. ^: Y9 W
2.2 总的网络占用
( {# ]; x7 A* ~0 h, `' E3 j5 H. Z( L9 H& y$ T
我们打出过MTCNN网络最大需要卷积的尺寸。2 D) c. H3 B" |2 T0 l: ]# f8 Z4 \1 ~$ i" f( z

" ~+ v0 u- P" U. J5 o3*3滤波器的个数最多为16384,即Onet最后一层128*128*3*3的尺寸。128*128=16384
- h4 w8 N3 a1 A) A6 V, D3 w$ n
- ~$ \* ?& O' C/ K! c7 W在此尺寸之下,设为8PE并行,则每个PE上需要2048个filter,BRAM 18k显然存不下。* x+ r/ {1 u2 D- s3 z2 b

' M; V7 L1 ?% I3 v0 V2.3 已有BRAM的实验* p7 }4 f5 N4 D  J4 }) J

7 Y6 L' }" u% E4 z1 TOBRAM设为8个并行,每个BRAM的大小为 MAX_CO /N_PE,OBRAM的最大的输出通道设置为512,每个PE上所存的浮点数为 512/8= 64个。
! w9 K, V3 n/ x. \, I! d; `( M( ?. S% d; R
下表中这样理解,为了更好的并行,每个OBRAM在PE上实现为2个BRAM 18k,每个PE上存64个浮点数,则每个BRAM上面32个浮点数,即每两个BRAM 18k在一个PE上,有64个浮点数(words),每个浮点数(word)占用32bit(4byte*8bit)- e! v, I' ?" q% P; m- J
/ _) [, j% M7 j! {
+ v) W  A1 w( P9 O7 E2 R* D9 P

0 Q! R5 O' `) K$ s关于IBRAM,最初的程序之中最大为3904,现在为8704。(3904的实现,HLS用了8个BRAM来实现)每个BRAM上488个浮点数字。这里,word就被当作了字节。
2 r4 y! l* ~0 B& B0 ]  g8 x$ h& Y$ Y8 [; ^# H* ^
但是对于WBRAM而言,报告里面生成了64*2个WBRAM 18k.,每两个WBRAM存有了1024个浮点数。
/ m' {4 W: j' K! f. [# R; S+ P
2 c% O% V* g- i+ N64*1024=65536个浮点数,与预想的权重浮点数 8PE*1024per_PE*9=73728相比少了。WBRAM的内存溢出。- i+ N8 t) F9 ?$ ?

1 t5 z) ^, |& w8 s. ]9 I2 m% I三、更改方法+ v; Y  v# ^4 f
! R- D  n  \  w% ?, c
3.1 尺寸的确定
1 e1 Z9 q: r( S& T
7 x5 f4 d2 S# M' K0 s/ h我们需要确定最终需要的尺寸的大小,
" B7 J3 j2 t  u0 f- \& h! E* ~# H) A7 v/ o" P6 V  \
-------------------------------------------
& h' }& F+ y( Z/ k5 K) W$ \4 d7 H# D) n$ l5 w, y* Z
游客,如果您要查看本帖隐藏内容请回复

8 H5 G# O  g/ X$ j; T
6 v- ?$ O: @- C- u
/ Z. u- p( ^" Q) b0 l/ z& U. {  K: _' ?* M* b" n3 _

该用户从未签到

2#
发表于 2019-5-23 16:32 | 只看该作者
回复看看是什么东东
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-12 04:47 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表