|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-5-20 13:56 编辑
2 ~! Z$ Y( ~" a2 p
6 R# s$ D% @- ]9 m x, B2 @本篇只有目录的一、二部分,其他部分请查看:卷积函数的FPGA实现-------对IPcore进行HLS及bug查找(中)、(下)篇
1 F+ ~% B! M& [: h3 C P2 z- z; s4 X0 f- J x) E( |! i! g
背景:我们编辑了3x3卷积的IPcore,并完成了预编译。程序通过调用3*3卷积的IPcore实现运行。并通过HLS预编译指令实现为硬件结构,现在我们需要对IPcore程序进行HLS。
( Y, a c b5 _& v; P% s5 r) Q# s* c. N4 J& _2 }" i
目的:对卷积IPcore进行HLS
6 Z% T4 I, I. t1 O& {3 a& E1 d0 D0 v( o
目录
$ ~7 K2 A3 p7 w' Y1 `$ R; M2 f- v. c, R' H4 _ ^# _, s
3 S, E! `, \5 {) P1 F一、testconvBench编写- R8 x6 c1 F t7 X" H( |
$ }: J0 ~' m, x$ Q/ `8 Y8 v$ ^
7 O/ V0 } k0 ]- }# \. X
1.1 linux下用cmake编译运行程序2 B- o( \5 N2 y: v; c
) W3 b- H5 C! g% q. \2 G
" a! q+ M* v0 ~: y! t 1.2 隐患与BUG
$ B" q: ]1 p F: U* J4 k$ V# S* |
0 k- T8 U' h5 q3 G: P 1.3 testBench编写
( d# }; M" ]) G" i# p0 a
9 p: [ V6 h" _5 X- V* ?
5 ~% [2 i0 D r6 ~; v7 X$ _) Z 卷积尺寸$ C/ M( i4 F% h& }$ J1 P* K: B# o
8 t/ [5 C7 c- c j, Q
- h5 O% ^* v9 C; ]/ _ 卷积与结果对比* |5 K7 W; K) z1 ~
% |5 ~$ ^! a7 ^2 l8 N, |7 O1 p8 F# v- |# V
二、c-simulation
7 b" F/ o8 T9 z, O2 `7 U& g/ a$ ^- ^' b/ v: R
/ k2 J: D% n' A& k4 w2 i% e
出现bug更改流程" r; W }# }' i7 Z9 Y) N
, N0 \$ [* }; I7 @' S$ j$ W+ N% }1 x0 y* W% r1 B5 X- K
三、几个bug与解决
' ~" ?5 B( g! W1 ]
5 f6 Z2 l; b4 N& ` \2 }
3 E/ K. `9 ]" r 3.1 reg格式问题
8 S: V: ?5 d% c6 ]8 f
9 Q3 U+ d9 d* e" g% Y9 P- t$ ~# \& L8 ^# T( V, M
3.2 关于DRAM接口的问题0 J1 N# ^9 b8 }! h) K! H
N) T% ?+ N* h/ b" m: D5 ?( I5 t
+ v) h* Z3 q8 m8 b* P1 e 3.3 DATAFLOW的错误
# [3 Z. s% n: R: E+ |) r% I
5 ~: S/ ^$ [ g2 U' S
: f, h! g3 A3 F; T/ L( M 3.4 调试N_PE的问题
& A. u! y0 Y4 ~2 k3 y* X# y b2 E4 J' d. f* Q8 z. d" R
. k+ F0 z, G' p7 m( J) e6 w四、Bug位置查找
. d. n2 \+ R. F; T- j
7 E' l/ z: }! {6 u2 z
' d' Q$ V! D1 Q 4.1 processInputChannel
# X8 ~9 c1 R5 J0 K1 S1 M& D; D! T( A7 O% h7 C6 R* e
- b% o Z" l8 T' {; e& K7 t' }6 X
function instantiate
' b6 P0 ^/ ^ \% k+ N; q+ a7 w
* v2 ]5 P {# M( p( d6 P* ]& O( w7 J9 H
WBRAM& H$ y( E% y& W, z9 A
' U. I5 H- M9 X+ @& B! f8 O, w8 o+ d; _; Q
Loop 'L_CH_OUT' in 'processAll_channelOut'% J7 c& m# ~4 n. s0 B/ `7 W( Z/ g
2 ~6 Y7 [; Y; D, D; R. V+ o# g+ }7 a! w/ k: Y/ x( K$ q9 n. F) \
OBRAM没有生成RTL端口
# {: T% a# ]0 A- j$ ?4 ~3 p. \2 m5 p A7 \ y) r' i# b, z2 }
* |$ W) I L% |7 J! X3 l0 \ 4.2 整个IPcore的HLS console8 H0 Y( Y# Q9 Z) q3 ?3 c
" }' d6 _* I8 U" R% Q
# H1 m% s; F/ @$ P: f X, S/ A
a# G+ l9 l8 n& F- F, I* c1 I! h2 j
* ]% n5 C0 _8 P: h; A A; w
& k( k1 R* \8 Y6 X8 q, L7 Y2 x `1 ^9 G
/ c1 x& _0 S$ i: i& Q
; P# P j, K, M
* ^. Y' p* _+ J& `8 n一、testconvBench编写& W V1 E$ u. U" [3 @, H
$ N6 [) S/ K5 ]/ q6 L; u原程序需要调用OpenCV并且调用次数过多,无法当作HLS的testBench,我们需要编写简单的testBench,先确保IPcore无误且可用。
5 B8 W" Z/ x9 A% l# `* i
1 C6 t: [3 Y% s: p1.1 linux下用cmake编译运行程序
6 y6 x! r* B: N7 f+ ?) y
! N# b8 F3 T, p4 J' K& T+ p4 O- QHLS_test文件夹,里面文件夹src放入相应程序。HLS_test文件夹创建CMakeList.txt文件1 N' a$ M; Z: r7 j& T
: i: \/ E1 H: c; [
9 G2 ^5 u$ P5 [, J6 D. q4 v
7 u' P" h+ u1 ] V( R2 G: u |
|