|

FPGA的HLS案例开发|基于Kintex-7、Zynq-7045_7100开发板$ M* {4 e9 ]3 m& ]+ M" [
5 _3 n& v6 N; M8 }1 M% P
( y9 r1 b! _- d4 N/ v
2 }9 u* \9 E: s% p( n: h前 言
1 ~5 X/ P( J. [: \# w
4 a( H R+ N9 n5 g7 ~. u本文基于创龙科技TLK7-EVM开发板,是一款基于Xilinx Kintex-7系列FPGA设计的高端评估板,由核心板和评估底板组成。核心板经过专业的PCB layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。( r' A D, g1 K/ Y; F2 y
评估板接口资源丰富,引出FMC、SFP+、PCIe、SATA、HDMI等接口,方便用户快速进行产品方案评估与技术预研。2 X+ n [0 D2 Q
6 k9 p$ o4 a+ n) v6 H8 a
% ~# }/ @% K. x; `9 F$ J
: l3 q/ V8 E6 |2 [8 L
' O" z% g1 H2 z/ [1 ]) e' `" E3 `# L* G ​
- D- Q6 K, e' N7 f. R
3 S" S5 L9 ?! r" e x; |/ o7 i; \2 l
( |0 c" I1 _) V8 `图1 TLK7-EVM评估板
$ {! L3 h7 u# Q9 o9 y
: `3 G+ n; Q* J7 h9 a3 c% o/ M- b# G) b H/ g( r& f4 v4 H7 ^8 [
开发案例主要包括:
$ q: Y& f s3 L4 Jl CameraLink、SDI、HDMI、PAL视频输入/输出案例
# h' t/ Y& V) I! T5 M S2 Kl 高速AD(AD9613)采集+高速DA(AD9706)输出案例
- x) e) g& k K5 Y5 Pl AD9361软件无线电案例' T8 g+ w( S/ _$ z7 M! ?% }- c5 X
l UDP(10G)光口通信案例
9 B! Z1 c' U& P3 K3 Ql UDP(1G)光口通信案例; D- U% L& g5 c, ^4 _
l Aurora光口通信案例
) I8 {4 Q ^+ l3 q- @8 A% R9 Jl PCIe通信案例
0 {- K, x8 K. q5 F/ h9 Y. [l 案例源码、产品资料(用户手册、核心板硬件资料、产品规格书):site.tronlong.com/pfdownload" p. g5 J. J3 m! S# h
; ?* a% }9 ~, N, T6 Z, t+ ~
4 T- {) R: S4 g( S3 {# K& a: d
) }7 a4 u/ |# d7 ^1 u
9 h. S$ m8 R' b5 I2 _3 A2 h* x本文主要介绍HLS案例的使用说明,适用开发环境:Windows 7/10 64bit、Xilinx Vivado 2017.4、Xilinx VivadoHLS 2017.4、Xilinx SDK 2017.4。$ W! Q. l2 \4 S7 j9 {
Xilinx Vivado HLS(High-Level Synthesis,高层次综合)工具支持将C、C++等语言转化成硬件描述语言,同时支持基于OpenCL等框架对Xilinx可编程逻辑器件进行开发,可加速算法开发的进程,缩短产品上市时间。
. q& t$ p6 v: \! {$ t
; M/ P- N: k3 i8 ~
2 l- z3 d6 R; E4 hHLS基本开发流程如下:
; _5 n# i- a' k# c(1) HLS工程新建/工程导入" ~- ^# Z3 x A3 C) p- P6 ]+ K
(2) 编译与仿真
) ?$ N8 X2 f- P. B(3) 综合
; R6 R9 E6 R6 \! B2 _(4) IP核封装/ i2 a. d: t8 F- g m. @+ y, C
(5) IP核测试
1 k; ? S% z5 K% l8 x+ F1 u5 q0 ^+ D
+ \3 x4 D, E& b5 c* U& y2 ?* aHLS案例位于产品资料“4-软件资料\Demo\FPGA-HLS-demos\”目录下,案例目录详细说明如下表。
1 c& m/ t; V% |4 ]! O# k
: E- A( j7 c% b) C- ~7 J9 g7 t& g9 C4 q
表1
& f: D3 V0 G# q% m5 |2 p! X. hhls_ip_demo
2 T/ `* H% B& U8 i6 c9 Z+ H9 M8 C | bin# h/ u% }3 E; q
| IP核测试程序可执行文件
! b! [( Q$ @4 h1 i- ?! C: j$ A+ \ | project* W$ z* J6 \- f
| IP核测试程序Vivado工程- _* w: s5 n4 ^ L* N9 ^& F9 s
| vivado_hls
% ~" x% M" `$ q/ A | ip_package
3 H& ^( C, \& B4 Z9 \ | IP核
t4 p, m, D2 P2 c7 _8 e | poject
6 b) e: |2 w" w: @2 E: Q6 { | solution1- B" u* o6 B" v5 u" v" l
| 仿真方案, w. F& J' o7 s" p* U L2 k ]( `
| src, X; ~/ j+ ]# a
| HLS工程源码6 Z- V6 `0 Y( Q/ {& L6 d
| test_bench
1 X' o! d$ C/ K | HLS工程仿真程序或测试文件
1 Z' E! s8 T5 a5 g, f3 P | vivado_hls.app8 w6 y# X2 R4 n: A6 `# h
| HLS工程文件9 V5 n" F; a" O# P3 l& g5 T
| HLS详细开发说明可参考产品资料“6-开发参考资料\Xilinx官方参考文档\”目录下的《ug871-vivado-high-level-synthesis-tutorial.pdf》和《ug902-vivado-high-level-synthesis.pdf》。
( B$ i- ~$ C: G+ ^+ A4 q
, L: |2 l" P% t( w' _) E% l- l3 x \2 x4 m! h/ [! [) g+ i. f
1 D& [( f! C2 H* C. w: b* s5 [. [
) L1 n0 a6 `+ v8 H$ k HLS工程导入' s5 p6 A- r9 q
1 _. @9 k/ {* \: ]! N, U
双击桌面如下图标打开Xilinx Vivado HLS 2017.4,并在弹出的界面中点击“Open Project”选择案例“vivado_hls\project\”目录,然后点击“确定”导入HLS工程。- Q" ~1 r# M0 R+ e5 g3 M/ D
( H9 s! g6 V& w: T3 j, n$ p
( l$ M3 x4 K: Q& p7 h4 c ​
y. f8 \0 V6 r1 J" Z4 H图26 e8 u! p0 B! K6 Q% H- v
! T, I! l" e$ q$ w# o3 \
) {3 P* p+ w$ e8 A: {6 E" a+ L ​
, w6 n7 E% n; j3 s8 g2 |3 N$ t, z图3
; [) v" S) q8 u! Y# O$ v) p
- i1 \6 f3 J- A6 c: E1 k" j; H1 U8 h5 @
 ​
8 E/ j9 |& Q9 z1 v& f9 v图46 ^# R0 ]* j0 Q+ W4 h4 X$ A/ Z
亦可新建HLS工程,并使用C/C++等语言进行程序编写。& b, d* p% D# \- g
7 e k+ q0 J5 d8 z9 j
3 f9 ^; \+ M2 m8 R& t6 h
" u6 d* I2 Q" j) N% l) }% H! i' D0 J6 `% E; m
综合
# H9 j; ~ V: G8 N) B8 h
8 U% E9 {9 w5 c1 }: f本小节演示将C/C++等程序综合成为RTL设计,并生成综合报告。; i6 U" n% `% _0 J* e. i
点击界面右上角Synthesis返回至工程界面,然后点击进行综合。
4 O; C8 |/ n; g1 Q( x" J% g4 a! p4 ^ }: L4 ^- m
2 n, v& T7 J- X4 g) f
 ​% c4 M/ H' P! H' u9 ]$ p, K. R
图8
: |% B8 o% D" Z% _2 i" }3 }5 B* r+ |8 t
5 o* `5 d- q. s0 p( b( B. {( W# @
 ​
( b/ L% ^8 n9 E& Z
* ^! u& L4 s2 w$ b9 O
& R/ y% R- A; c2 x3 ?3 x( G图9
+ r' |9 x+ c0 a* F* G, B& f5 Q. {$ P4 |0 L
6 x# ^0 [- @ M2 P
综合完成后,报表文件将自动打开。
0 j s. {3 l/ K5 s! E0 w8 E* O# E; `+ k* w' u3 ]* @; l
+ k8 w* i; r$ Q1 S( w
 ​# c* I8 a! A) ?
图10
7 [3 Y* @- V% K) x* G! ^7 I2 E' V$ {- X b U! `9 ?
6 h& ~8 I9 _# r& X0 d+ F
通过报表文件可查看本设计的时延、资源占用等信息。
; N3 y, B9 ^" n& x3 S" m& b7 ^' V
5 `- ~/ @4 X5 o3 N% \ ​
7 Z0 @. q! c5 V7 j
3 K8 n6 G' q' B) K2 |) `' u' g& @+ w" D3 z
3 C0 o! f9 J4 E `# t; m0 A( x图113 E: S" M* Y1 w$ y( W/ X
( p4 y: I) D$ z# I8 x, B
]! ?5 o/ F9 `
编译和仿真C代码
% G3 x; Z; k/ v4 A% G) H- @6 B1 D
仿真程序位于工程的test_bench目录下,用于验证src目录下的HLS工程源码。5 H7 ~2 k) V- C0 a/ k" @' S
导入HLS工程后,点击(Run C Simulation)进行编译与仿真。
( {7 R) P2 Z/ B" R) z4 q5 i Y& b( I4 {) p+ t1 f
' i" y8 }2 f0 G. x. a9 [% x ​
, R/ s4 |; i& t2 `! B图5. b7 P, O# `& V5 }
' ^; X. I4 x2 H# S7 @: V) I
8 d5 o8 ]6 i" [+ u弹出如下界面,勾选“Launch Debugger”,并点击OK。
9 K3 ?) R( a% ?) L8 v+ V6 e2 e; L4 w1 F3 y' K
( ]; G' U( X: w
 ​
2 A8 N5 C8 | g* u m) h图67 i9 y% C. n# r) E& o9 P! z
( m/ R U9 }- u# ?1 H; }5 G
4 S0 O/ h/ ~% R' F% d# u$ \编译完成后即可全速或单步运行仿真代码。2 V( E! r8 a1 \: o/ U6 i) O
 ​, Y4 I7 g8 T) V- c4 @! \# e
图79 g x0 E7 P) t( k: M
: k4 u \9 C0 ]* ?! r5 b/ ]* d
! d4 K+ Y3 X# e( F# S
, F5 F" N7 l7 u. G, h( i e& H IP核测试, L* I! n; q B6 [' o
* H; r% t* s: b进入案例“hls_ip_demo\project\”的IP核测试程序Vivado工程目录,双击.xpr文件打开工程,工程默认已添加待测试的IP核。1 r* W9 T7 p1 L$ m; _/ v+ ~
0 n; X4 V- y( @% l) |* {
, p+ j- W' \* J( u
 ​+ @1 N6 u- }2 w0 h
1 c/ X! L. t8 P4 X) K7 N; i3 n% j- ]# P# n# y& L- d
图17* {* h( W" ^" Q! {2 w
如需自行导入IP核,请参考如下步骤。
/ E2 R1 [( M& g2 c9 x- ~" A3 J
3 }, N& H: x7 ~; Y, ^) }# c' k( r5 m% i4 U: d0 }8 t# u# I
(1) 请点击“IP Catalog -> User Repository -> Add IP to Repository…”,在弹出的界面中选择IP核后点击OK。' V1 c4 C3 M, v' t
 ​
0 g( f3 h" B, b
4 ^& Q4 R# W6 W1 e8 U
( d4 ?2 K, n6 y* R; E6 Y, T+ g图18) H% _2 `. f2 R1 s/ X
 ​' p- l6 R! m b H9 r, W% }
图193 U* K3 z1 F" S8 M; V
(2) 右击“User Repository”后点击“Refresh Repository”,即可看到添加的IP核。
% D& }! x, m& q ​$ K6 R- ~# _8 y0 [9 P: h- L
4 ~; O0 p( x: v. k/ f( p( a
4 [0 @' {3 ?* \2 i! p. N图20
) Y/ v. \) ^8 Q ​) t; e( y. W( a* ~8 X0 N
图21
9 v3 _/ @2 e" V# l& s
: T6 U0 M) Y! `, S1 `2 u1 r8 }2 C( y$ [8 ~# Q
(3) 如需添加Vivado自带的IP核,点击“Open Block Design”,在弹出的界面中点击,并选择所需IP核将其导入工程。: y6 f0 p$ g) y: X2 a4 h3 O4 s
9 c/ @/ E9 O i; `2 e2 f
# @0 Y7 P* J' W2 R( `9 N0 O ​8 ~# a) }- G1 C `" G
/ E$ i/ {0 X' ?" m7 T
/ y$ `, Z$ `2 n( ^% ^图22
+ a0 D: y3 t2 u3 e ​
& m& k! w; m( A4 m图230 y7 L% d' l# N, B: c
点击Vivado界面左侧的“Generate Bitstream”选项,在弹出的界面中点击OK进行IP核测试程序Vivado工程编译。- g; H! W) a3 t% B) q
 ​
. F2 T* a w, A N2 L; t
# T, V, c" f3 g7 F- |# b6 l g6 R/ l, n) W' Z$ Z: Y; \8 p) E5 Z( C
|9 C6 d' H* \$ d3 R N" F' c- q2 u; K8 v) Z
图24
' W9 v* o/ G% E8 e1 F: A& K+ C8 a* E" N) q. N! L$ x6 v4 r- L: K1 u
4 |6 U6 ~" U3 w* [. g
 ​% f K& S* E2 M
图256 C& R5 z9 u* K6 e6 b
6 I; h! i6 l% T @$ @, h, ^" o
# C1 \% l" t- e$ _/ }1 ^5 ]编译完成后,将会在工程“led_flash.runs\impl_1\”目录下生成.bit和.bin格式可执行文件。
& k; n$ w& v9 t* _$ W" ~! a5 ?9 V; `
+ _: f5 W3 c1 E" }/ ?2 F) N
 ​$ a- M5 w2 I3 L- R
- ~/ u0 z2 ^* Z
7 e- B9 t0 \' I0 H! U
图26. ~9 ~* _ s: ]$ j
. L$ j: a `9 B( ?! W% o; I
5 @; \& u* @. X4 U请参考基于Vivado的FPGA程序加载与固化手册加载.bit格式可执行文件,即可看到评估底板的LED2进行闪烁。
# q. k7 m8 ~) l$ d& ?3 dIP核封装
# Y3 d* l2 E) j; V. ^6 T0 I1 z
- E0 E$ z2 ~7 w& b综合完成后,点击生成IP核。
9 l# b; H3 R/ z5 C2 W0 {% B @ ​
' C$ p9 p+ q6 Z( f/ z2 b* v- b+ |. U- N3 k1 u- O3 S1 s
3 v. j9 a j! b$ I. v4 G图12
3 h/ S. M6 Y- e' M5 Y; y9 z
@+ K9 n# v# H4 z3 I3 x! d q4 ?* f! K6 q
 ​% r( N* t" X" u2 |& r* f3 {' E
图13$ V+ r! U/ R8 {- U# C; C6 F# O
 ​
8 @! r8 {( K/ a图14' c, M% k/ [, a$ ~% N
运行完成后,将会在案例“vivado_hls\project\solution1\impl\ip\”目录下生成IP核。$ q! g8 Q1 l2 x6 |
 ​! E0 X$ c6 Y2 m3 N4 f4 L8 A
! d$ q, p7 T+ {2 f" L" s1 @
* i0 T0 w6 d! V1 f5 _
图15
# @* M8 w+ [; v3 s- ]- Z- p ​
8 S# y0 \8 N) J; q2 y1 F- \图160 I9 F; O9 ^, Z1 X5 P& J2 p; G9 x
- t5 E, o, q2 a+ W9 y. C+ X# |; m( h3 ]/ n8 @- s- h, P
l 更多推荐
& b; f U3 Y/ j/ X) e! F h+ z# {* d- ^ X( j- G1 R
 ​6 ~# h' Y) e- ~0 T. x
9 i9 b5 R( c; |4 J2 M% Y% v( z
3 o, D: y5 m: j; S+ [1 f
图27
: e: J# k: w$ u
9 V r% ?3 M! i( ]0 X( r |
|