|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本篇只有目录的第四部分,其他部分请查看:卷积函数的FPGA实现-------对IPcore进行HLS及bug查找(上)、(中)篇
* L. i; H6 I$ y) {
% n$ t. Q( i! g/ C; L8 w8 _5 _背景:我们编辑了3x3卷积的IPcore,并完成了预编译。程序通过调用3*3卷积的IPcore实现运行。并通过HLS预编译指令实现为硬件结构,现在我们需要对IPcore程序进行HLS。& B% V' e9 W7 ]) e6 m' _
# `7 x( E0 y- p o+ t5 Y目的:对卷积IPcore进行HLS/ l& C9 w8 q; K) D8 z! O* l
" F1 [; S2 k- H' l
目录
1 Y j! h. l8 p3 {6 [, w% [6 @- @, z2 g: w* P# c8 s9 `, i
/ O' j0 k2 h1 c* A+ E! @2 n) W# B一、testconvBench编写
/ K# p2 ~, b7 j! E3 r4 T* n* k5 ?: n& U( y; z" D% ~5 b+ ?1 N
6 h; Z2 ^3 q3 }' T0 I
1.1 linux下用cmake编译运行程序, S7 w# u/ |- }0 W
* s7 ~2 E; \# V% u. F1 ?
$ f6 H: g4 Z: Q
1.2 隐患与BUG
( ~8 x$ b% E- J7 j' `- L$ Y
% Y; O3 {% r, S* L5 U8 H! S3 b* b& y/ Z
1.3 testBench编写
+ q" e7 O# B3 s8 D! }
8 B k L8 ^0 F/ s5 j: \7 B4 C- H% g7 \$ |, O- q6 G& Q9 ?5 t$ A
卷积尺寸
/ t4 O0 b* O3 M0 j# @$ H0 H" B: D
, t' ^* m$ r& S- x" y
0 R& w' m* ^3 V+ f 卷积与结果对比) \% ~9 A5 T8 B. |8 p3 s$ Y& L J
- G4 k/ S( b: T1 V% F" n
4 g. ?. c. e3 J# D
二、c-simulation7 h+ ~* i3 R# E0 j3 u( F. r
, W; L+ s8 W9 B8 H7 _% T4 s: `$ a
, m& {5 V8 g* Q( B9 m/ n3 Y 出现bug更改流程
E. g* G$ @ Y" h, J& ^. I% a2 G; S! I3 v
, @6 K4 q+ l) E" l
三、几个bug与解决# T6 i; m! F2 ~5 |! `( E C
9 r7 Y9 Q P1 w7 S' `8 g
8 T2 p; I9 H6 p* Y" R$ k( K+ f- H 3.1 reg格式问题0 a7 V. b" z# }* W' Y0 g% F
+ z: o0 P) M# X2 I/ D: l1 [* g' l, b8 P, ^
3.2 关于DRAM接口的问题
8 r1 o6 {/ J6 g. W# S w+ u2 ]& q' `* m S4 H9 X
$ u0 m; L6 }0 j f
3.3 DATAFLOW的错误
; R. H1 D! W" N- V% W/ {/ K+ I/ V; `. p
" C/ G- l% f/ U7 }# Z+ J8 N3 F+ G0 R
3.4 调试N_PE的问题
; ~0 E% N2 h! w+ g Z& Q
: v5 f6 o% s& b$ v7 z
9 C. u% I. b$ w* m四、Bug位置查找
6 v8 i1 U) e4 {! U7 `! w& l
9 |' }) i; Q5 g# U$ j1 i. x8 j6 M. M* m( J1 }- l7 ^
4.1 processInputChannel
) T \2 z$ o$ O W. G- R
8 k L w9 Q! s! i+ s0 {" _
: L% o4 Y2 X. |. G4 r$ e0 ~- Y" ? function instantiate
3 C/ `. a) O0 U# D8 V5 L7 }) q3 ^5 _* [8 c
9 [' a9 _7 Z0 E0 t( V1 O4 r+ [ WBRAM
( b* q2 Z. x1 p' K
8 g' P- W; D$ \1 A1 b4 _0 m& k. ?+ t: p4 g3 y; o
Loop 'L_CH_OUT' in 'processAll_channelOut', u N5 C `! K
2 g3 @0 U% [3 ]9 A* O2 A' Q
- \2 i6 T% }) _$ _7 W OBRAM没有生成RTL端口
( w+ u+ V2 i3 k4 N' w6 E6 |
# w% b6 y0 P+ Q: ^9 y2 M& w& O# g/ E! j/ g% U0 Y7 G
4.2 整个IPcore的HLS console
I8 F0 B0 e4 x# d! F% v
- _ O! c( P( g: c6 L! r; I# }" r5 p1 b4 K& g) n F* g) N
# s- k* j% {/ \) ^0 t& f8 D3 V- k
; P1 a! l& M3 ~. {+ b" V+ d, @* S$ U! d! N1 X/ Q
5 Y# \; F9 t) F8 S- t% [
3 g3 O* \( n/ P3 O四、Bug位置查找& q9 O$ w. K; m* N
/ u0 e* g/ D; v$ T' i& T P- B嵌套IPcore过大,需要将其改小,单独的单元来进行测试。我们将processInputChannel设为top function,然后获得实验结果:
W: A F7 g( e% ]0 a q! B& {9 i" o
4.1 processInputChannel
8 U5 h& a- ^& x% p4 D; t& `' w( A* d! S- U9 z# O8 \! r
----------------------------------------# A' P3 m3 P2 v' ]* N+ ?
- e3 |/ v9 c7 E8 @) R
Starting C synthesis ...
2 v( R) Y! a) H4 z- q7 n" P% h8 k1 f7 k. ^$ c* ?% d" ~# E
/mnt/workspace/Xilinx/Vivado/2017.4/bin/vivado_hls /home/osrc/Desktop/document/conv_Core/HLS_Conv/conv3x3_IPcore/solution1/csynth.tcl
2 n( `% g3 h+ S+ E
. ^: _0 T) O' c; L8 I0 XINFO: [HLS 200-10] Running '/mnt/workspace/Xilinx/Vivado/2017.4/bin/unwrapped/lnx64.o/vivado_hls'
5 |; {7 e9 Z+ Y9 U( `( m/ o1 `( A6 g5 T" b$ n( ?7 D
INFO: [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
0 C9 P& _. e. `: V/ A0 R
! z3 z1 }3 y2 MINFO: [HLS 200-10] On os Ubuntu 16.04.3 LTS
: g2 W% |! ^$ [# v5 F+ g/ k, d
! X: F, Q2 y: T( [8 M9 `) y
( ?. L ]( }2 K H
# W* M) [# X* T. a" H4 W$ B. b6 i$ R$ B$ u$ f8 U+ C) R9 [' @
9 I# z9 f5 u. [* r1 O
* q0 t+ g/ ]3 {& Y3 _
: Z5 b! O6 l6 I5 n% v! C. ~4 }2 g8 ~6 X# a) V K/ h
9 c( K+ w3 t/ ]" t7 _0 H( n3 F
" y# i8 [% F1 E- `" o |
|