|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本篇只有目录的第四部分,其他部分请查看:卷积函数的FPGA实现-------对IPcore进行HLS及bug查找(上)、(中)篇
) o* h) _6 H: V& ^& n
1 r1 I n0 f" p( A- y背景:我们编辑了3x3卷积的IPcore,并完成了预编译。程序通过调用3*3卷积的IPcore实现运行。并通过HLS预编译指令实现为硬件结构,现在我们需要对IPcore程序进行HLS。 _( s" @+ W, u' v
6 H. C5 E' J. i/ p+ U$ y4 Z$ A6 O
目的:对卷积IPcore进行HLS
- O3 a; h1 x1 {0 h W
% F9 B% k4 T A/ }/ N# ^目录
5 z/ F; @# z: I& E# l$ v
! Z- y' r: z: |/ h- ]8 Q x: L
8 G( g* j3 s5 n! O2 D一、testconvBench编写5 x" Q& u: E, }, x
3 ~0 ^1 y, ?( i' C. H5 W: F1 d: J% u/ x3 S+ ^4 E+ q5 s
1.1 linux下用cmake编译运行程序2 v" s0 m3 [/ D1 M, Z/ Z- a
+ F. N2 Z( B" Q/ {& W
) {. y/ m# y/ S, [; L! k 1.2 隐患与BUG
2 V, Q8 ~$ r% [/ i2 \ P
9 D3 s* I4 g) U8 H6 k7 U7 M7 ^. i$ M; ~- r& }* T6 I/ x
1.3 testBench编写1 t! y" d# Q1 {; q& R" L7 {+ l& U
) B- M0 f$ h3 _+ p0 [3 u7 t" S1 ~
9 U* [) Y1 O; J) b% ]9 s8 L S- y
卷积尺寸
0 f1 @1 g! [, P2 c4 Q& R$ w* |
( n/ e) q- v% M E1 |. D& a9 l8 T/ G2 g, T) Y
卷积与结果对比
0 L0 }9 `; K; i5 S/ F+ l5 V" L8 @( J% L3 w% n* \- o4 E* _
2 J' R9 P5 M i# }6 x
二、c-simulation7 [4 a( H% y0 C. N
$ q* h9 [( c; X' [( n
1 L6 s! ^, B( Y! T, u: J; w
出现bug更改流程' `% `0 S6 i) ~. g+ Q# f5 {
& F1 J" j' f9 Z2 e/ Q
! `7 n$ g6 X6 }, m. M三、几个bug与解决
4 {1 x, b- \* Q# y5 {
E! [; l6 f0 T$ t
, o/ Q& t, B* b* ]+ T7 \5 `/ e 3.1 reg格式问题+ ?4 t) g* ?* N
& U2 R6 H4 l* A1 ~
E2 `5 v$ W4 X, U; {% {; e- W
3.2 关于DRAM接口的问题8 w9 ]# ]% Q, G2 x$ q/ B: D2 B
7 |; f. B# s; a) D* ?+ {" O9 ]8 G
% w9 E1 ?4 }2 F 3.3 DATAFLOW的错误
) t8 ^* T' Y5 p( I! I: S5 i3 _0 b: }) o' V7 S, H2 r3 Y, ]$ j
D2 L! r: \8 [9 }/ Y" s 3.4 调试N_PE的问题4 x* ?: i0 N, O3 u" U* E3 J: E
; @0 r, E# Y/ n) V7 u
& a. V+ m" ^) K# G! g2 m' H
四、Bug位置查找 S* l- D5 A( u% O
. W' B& M3 u0 e a0 P }9 d
/ ~! s, H9 L" _+ K 4.1 processInputChannel
. L- \; i5 U; }6 T0 O5 w9 R
0 c- v8 q8 A8 j' k9 C
5 n' Y+ W; y: \ function instantiate |" j& Y2 e+ O$ A9 x. p
% R2 c2 J& g- N6 i! T# [
* c \2 s- _4 _- b [ WBRAM& I! \; \ t% }3 t5 s7 |
& a: I* p) h& q+ r
$ _ _1 H: S. S, e7 d' |- T Loop 'L_CH_OUT' in 'processAll_channelOut') U6 K3 Q) H8 z! `6 \
# u0 h+ {; b. {( c2 D& |$ {) |6 u7 k* ^( c+ {# W
OBRAM没有生成RTL端口, U" o2 b' a% @
( Y' ?1 a8 x' ^, ?6 x" ~* [, V3 L0 S# k$ {. ?/ y3 m/ K
4.2 整个IPcore的HLS console9 I2 @6 v( z. e7 {& Y
) A# ^1 ]! l, T( t
7 S# W2 ?4 M: ]) q2 t6 k( y2 ]% y
6 W0 ~* h5 y0 r3 b$ W. J, e
+ j/ J% a& p4 [2 |$ q5 j0 G0 e3 d6 t( ~7 U5 R' Z* c& y j' _
% V. }# l) G* j6 P
7 `1 X; Q8 Y4 B r4 d% V* O( {四、Bug位置查找
$ e5 a: m, r4 K0 [( K
9 i& y4 v4 b! A( }7 H嵌套IPcore过大,需要将其改小,单独的单元来进行测试。我们将processInputChannel设为top function,然后获得实验结果:% D, v; z1 Q0 v
$ `7 Z; X0 p! t; {% k4 |% y4.1 processInputChannel
, J! V3 A* o, h: U3 Z0 e! M- b" ]$ e; x5 a) Y. |4 q$ _
----------------------------------------: B2 H# b k$ F
6 g* i4 r5 _: C# n L
Starting C synthesis ...8 B9 H5 g8 |, F
- O8 ~3 p! c: }+ _! I
/mnt/workspace/Xilinx/Vivado/2017.4/bin/vivado_hls /home/osrc/Desktop/document/conv_Core/HLS_Conv/conv3x3_IPcore/solution1/csynth.tcl" C, `" A1 ?% M& c7 k5 @9 Y- a& ], o
' ^2 c. k: [2 k+ ?INFO: [HLS 200-10] Running '/mnt/workspace/Xilinx/Vivado/2017.4/bin/unwrapped/lnx64.o/vivado_hls'
. B* P. Q% u# V2 B* T9 F
+ H! Y0 B3 m1 JINFO: [HLS 200-10] For user 'osrc' on host 'osrc-virtual-machine' (Linux_x86_64 version 4.13.0-32-generic) on Wed Dec 12 10:37:09 CST 2018, v- _" l$ a, Z; @; c _7 d
8 }6 t5 Y& t" K6 n3 d; P
INFO: [HLS 200-10] On os Ubuntu 16.04.3 LTS
+ }7 C% p! @( O8 g+ O1 u! w3 z4 j- q! T8 M& l) p/ Z* _" V- z
, H: p5 X0 g3 ]8 ]. x. Q9 N7 a
& Q8 o4 c: i3 m3 a U R$ U6 x: z
! A. v9 p/ l2 y* R3 X) n8 Y9 C+ I9 q1 }6 ~. v8 e
1 h8 i2 X2 d& D8 j
& F: L4 ^8 Q7 ~6 |7 {1 {/ _* m
+ E9 n1 D, W3 Q# z6 K
1 i4 m, X% x8 Y" E Z
+ j0 s6 Z" A" C O# u7 b R2 P |
|