|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2019-5-20 13:56 编辑
2 y; [$ n3 {" {7 u# y' n
/ i- C/ r5 F" J, h$ O* w, G本篇只有目录的一、二部分,其他部分请查看:卷积函数的FPGA实现-------对IPcore进行HLS及bug查找(中)、(下)篇, G6 P1 f/ N! `" q5 F
. J( V% }" w3 x- C/ D
背景:我们编辑了3x3卷积的IPcore,并完成了预编译。程序通过调用3*3卷积的IPcore实现运行。并通过HLS预编译指令实现为硬件结构,现在我们需要对IPcore程序进行HLS。! D: ~. g% h2 [/ w% ?: z) k# \# j" r
; i6 s2 r* ^, x, d# u
目的:对卷积IPcore进行HLS
# u/ @& [7 Q- }2 @# i% a2 B# D7 Z+ i/ j5 M2 H% N1 z/ I# d3 l
目录) G+ N9 ]/ \' J2 k0 J
+ W0 {+ X0 d; [3 l! o) f$ Z8 P* s' R- u$ n
一、testconvBench编写
6 y% u* X" f& W& ~+ ?0 K5 x9 Z
9 e% f, N$ T2 b' o3 \$ G) i* \- E
: V0 {# |" D; D! t. t- { 1.1 linux下用cmake编译运行程序
0 _. ]& a) y6 A! E: s; w, Q" p; J# t6 P$ K9 k: j6 P7 q& T+ h
: a2 P; C+ L3 ^* T8 j! t
1.2 隐患与BUG, m4 ^; e6 ] H& I) m
T |% A2 h3 x2 X) _
5 Y' b" S" u% h- m+ W
1.3 testBench编写# Y' _6 i3 m0 k* b X4 U) w
( T* N! U- ~( `# w# ? u6 s" b
2 e, l2 J# b/ z9 B# s) |& f
卷积尺寸0 K0 T8 K' u; D0 R* u. y+ a: k
- L8 m0 A4 f: v
: _+ D( P$ ~6 m5 N0 S& h* G# U 卷积与结果对比
9 a; u! y! @& P$ ~, z' p* @7 b. D3 E" D6 y0 }
c: {( F. `5 z1 _) e
二、c-simulation
% ]) z; d4 O+ O$ N6 t/ q& K6 b2 ` O/ x$ P' l2 W
; [1 g% @% m& l* k/ ~- v' _
出现bug更改流程6 @! B/ i& |+ b# C. j+ ?
0 U. p, A( w3 `' j2 H8 V7 G
k1 l4 S) g- R5 F. W三、几个bug与解决
# G3 d: I& c/ e- [2 V0 U
! v5 a& ^/ D5 ~9 D8 c; V' c
0 c- _5 l. i' t8 `* r 3.1 reg格式问题
) M6 ~+ {( l! ~# ]6 p. W+ y, B# s" t( L k- C" {7 _7 q
4 `+ U) i: M: l6 M: A 3.2 关于DRAM接口的问题
' m: X4 Y: d& n! b; p. T5 ~- M& w- X# s) H' c
% E2 Q" r; ^0 j: c4 U2 a+ w1 v
3.3 DATAFLOW的错误/ m. Q( ?' V2 g0 F* {6 Q
! v1 k% C' g- a: F$ H7 b
+ S" W0 n' w$ S3 b
3.4 调试N_PE的问题
2 j2 c4 I& M3 O% @8 b5 A8 s9 s* L- R7 b5 D
6 X1 a4 S p# b8 I" u
四、Bug位置查找
- A; d6 {: m# D: g8 v* f; {9 Y+ ~6 d: S* T; e7 w3 c
" Q- u1 U, D( [' R$ b7 u+ G 4.1 processInputChannel
, _1 ^! g3 s) w0 |
9 ]. ~; j2 {$ T4 q& A7 O' c/ l* u& E' K
function instantiate
, z: p! J8 A( o9 D, y; i
0 V# ], T8 @! P" k, d9 ]
/ k# [' |9 q; u$ o) @2 \, c WBRAM4 T( E. Y& x4 q" z9 u; G$ ~& w# H
0 ^. @3 v. g% k5 [$ C
) {5 ] `; D% I# V3 R6 E/ Y; ~1 M
Loop 'L_CH_OUT' in 'processAll_channelOut'
* e% M$ s$ _2 ]& X" E& a0 [8 ?5 e1 @( g* |4 g4 j" c; `5 e
. q+ X9 J0 h) m OBRAM没有生成RTL端口
) n) i- a7 H. y2 s! ?! H4 f H. \# _
, U4 `" S! Z" x+ e0 z! m, B9 [
4.2 整个IPcore的HLS console
# w1 u7 [- ]% t) w+ T* {9 V
4 m- \: t% g7 `3 ?$ L; v* N$ K# U* t( R
6 j/ A1 v3 c3 n" B
* u0 o& S2 U: |0 e( t
6 {$ t1 _7 D' T1 D9 f
8 B; E$ x( p$ z- _, d' d/ ~+ n" h" U% c+ |+ v& b! z7 b& C
: B7 L# F/ w( x; i' W( x5 e: ?0 x# V
: p5 b: m. ]3 \8 @# m- b2 E `一、testconvBench编写& M/ E/ X8 C- X9 _
* D: x* b& n2 b原程序需要调用OpenCV并且调用次数过多,无法当作HLS的testBench,我们需要编写简单的testBench,先确保IPcore无误且可用。9 V" R9 L2 I, Z6 H* }% `
+ q1 j6 b. D$ T8 p
1.1 linux下用cmake编译运行程序' R& `4 d- g5 ~- M7 T6 X
0 R5 |) c: r9 K+ EHLS_test文件夹,里面文件夹src放入相应程序。HLS_test文件夹创建CMakeList.txt文件
% r% J4 {/ v7 ~8 s, _& S% t3 y# K* x! w1 }# ]
2 _. e( l4 g: J3 `# X. |, M& }$ s/ e# k( r3 M. s% D
|
|