|
上篇推文为大家介绍了创龙科技(Tronlong)最新推出的DSP + ZYNQ评估板TL6678ZH-EVM,由核心板和底板构成,核心板(SOM-TL6678ZH)集成了C6678和Zynq-7045/7100两款不同架构的处理器。8 N# w& G' ^2 T9 y
* G( v4 _, V; a- O6 |5 b2 L# S! d6 l: p5 v8 |
那么这款DSP + ZYNQ核心板,是如何实现核间通讯呢?" b' m) y) L0 J7 [9 O$ X
2 r9 O, z5 I$ }! W* X: a' h! G9 `; ]: \2 t
 ​
, o2 J; g! k, N( ^6 }
, T+ V/ S6 E w F
4 v' N+ |- T6 u! z' B核心板简介
: v8 j; i% V' u3 ]; YSOM-TL6678ZH是一款基于TIKeyStone架构C6000系列TMS320C6678八核C66x定点/浮点DSP,以及Xilinx Zynq-7000系列XC7Z045/XC7Z100 SoC处理器设计的高端异构多核工业级核心板。TMS320C6678每核心主频可高达1.25GHz,XC7Z045/XC7Z100集成PS端双核ARM Cortex-A9 + PL端Kintex-7架构28nm可编程逻辑资源。核心板内部DSP与ZYNQ通过SRIO通信总线连接,并通过工业级高速B2B连接器引出千兆网口、PCIe、HyperLink、EMIF16、USB、CAN、UART、GTX等通信接口。
/ U7 x% `$ V5 c$ E. p( T R ​
3 W e9 o, _: j. \9 I ​ X0 r9 O' k; ?7 x8 [& O0 L+ [
( F; q8 _* Z5 G& ]5 F1 ^8 e$ g
$ d( M, s" ~: w: o: y; M& }
: |8 \4 E/ l$ U' Y7 a: _, E# H; U; m7 T: j4 v
本文主要介绍DSP + ZYNQ基于SRIO的通信案例。3 w! a$ s' j5 s- [8 w
案例源码、产品资料(用户手册、核心板硬件资料、产品规格书)可点site.tronlong.com/pfdownload。: L3 B* O7 x$ d8 d0 ~, ?
5 d, X2 E! @9 i7 g; N7 j, |/ k
, |6 o3 a! y- n" R6 e) S. E _2 [% g8 b# P9 r3 m: D$ a h I
( K: M9 S' D; C7 j$ O$ [1 SRIO简介SRIO(Serial Rapid I/O)是高速串行RapidIO通信接口,常用于DSP与DSP、DSP与FPGA之间的数据高速传输。SRIO引脚占用数量少,支持多点传输,速率可配置为1.25Gbps、2.5Gbps、3.125Gbps和5Gbps。4 z& X4 _& v" |: K0 s
SRIO包含三层结构协议,即物理层、传输层、逻辑层。
# I% `3 t( C+ n% p1 `(1) 逻辑层:定义包的类型、大小、物理地址、传输协议等必要配置信息。
9 V R2 J& w/ t; Z: d$ F(2) 传输层:定义包交换、路由和寻址规则,以确保信息在系统内正确传输。' S) h. F' d( [" l5 w- n
(3) 物理层:包含设备级接口信息,如电气特性、错误管理数据和基本流量控制数据等信息。6 Q+ }8 Q7 O/ @1 s5 s
RapidIO体系结构如下:, w, W& E" ], c7 e8 U+ V) ?
2 T( K' h x; g! O% j
7 f* S- [1 i$ e( Y6 Q& c3 Q4 l/ v* Q F
, A6 ~; \7 g9 B! E% ~* o& a2 P+ e
 ​
7 X% J7 w! t( @1 {4 r! w. p# S8 P; u ​
' A* ]9 k( G* ~1 H4 m+ Z& T$ C2 A' b& P
5 n2 U$ o$ O' i" m, ?: _, S# j
2 SRIO通信案例
R# T+ c7 ?' a; q5 e6 s& e2 w* [, o! l
! K. j0 b8 ~5 N5 k* ]6 c0 K1 R$ d; M) r
2.1 关键代码2.3.1 DSP工程(1) 程序配置说明。& a9 v% L$ ?2 ?& i. ?
 ​* s% U: r4 b0 p5 q
l7 L! |! ?) ?- Y, @% \) [) n% Q$ R3 h- Z X$ v, n3 h) _
/ t& X5 V3 u4 Q& k" v
* j1 Q& _* ~( t( l. K( c
) ~3 o \& \; y: X+ x
7 u2 w* O. J- [) e' s- {3 g(2) 使能SRIO PSC,初始化SRIO子系统,SRIO通信测试。
" k5 h/ Q- M# ^" f/ K7 o# e6 s( a7 _: s7 S, M
! Y, F1 s s) P' `
 ​
' M% Z4 T& g) {' g- i
0 c( l9 @7 }& d; i- d- T: `2 w5 ]- R
% I* d/ P n- i3 X) ]% S
+ c- {2 j( e. u& f) D# H. f
7 z( `6 S9 k, ]' S
9 P0 \: u V. l/ u ​
9 A- [8 Q" B2 P6 y+ _0 D0 Y5 b" R1 W$ B2 U& i
% z5 l( A( A, w% C5 ~) |1 q- C# z& s R# h- B" x- J
# G: A j5 {1 j. o! F3 N ​
% `- Q; F# G+ G+ ~: `/ x3 h( X8 }/ i) Y- K# Q+ L
+ ~, K1 x! c' j/ z$ O3 _" O. R# _: r: ]9 c
+ ?2 C4 }& g e4 ]' `- ?. T' Y# g+ d/ w! g* D0 q4 M
% m' }# V% j& _
(3) 以NWRITE + NREAD和SWRITE + NREAD模式进行SRIO通信测试,单次读写大小为transfer_size,单位为Byte。w_format_type写格式类型在main函数中调用srio_test()传入。) D& y* W8 W7 R H9 A& T% Z
6 Q# a. Q) K( b" _% k, }6 `
8 G! ~: X0 c" k2 Y2 l# l
' `# v& X1 j6 A' g* b8 C/ u9 ^# E' @8 Y' A. k8 J7 U6 O
 ​
5 F( ?2 `# |, l1 @6 ~* o& Q( F' V8 P- k9 Q" H$ n
# G: i# j8 `) l8 ^) w, ]! c' H+ ?6 f0 _8 I* F+ V9 X
! y0 M; P% t$ o% b& ?4 j
7 N' S2 J( ^) ^+ u7 _, i, N0 i/ J1 n' ?& a' o
(4) SRIO写测试流程。
7 B- L/ b! E# m o& q# Z9 d0 n
5 H1 j7 U3 G% t% E$ N1 Q/ z0 i2 ^5 D, t8 K
4 r2 f! L5 X S* v
4 r. r: A' g7 G- m, @ ​4 q! `6 A5 W! B( `* O" ^- u7 I
 ​
# R, S( q* ?5 g1 Q ​
/ Q- i% m+ u1 C) p1 V$ p7 E; }- E
# k1 p' f, v. g/ L) g. _$ A, J! g7 W7 p t9 k5 S' _' ^
}' _5 x: p* O- W$ h T/ j, ~- k/ g
+ }$ q8 q8 D" b, j: N8 e8 v
3 J7 d1 e. Q: H" w7 `- U7 e- o4 z: m
; z Q6 Z: }) w* i2 `1 j. y(5) SRIO读测试流程。
/ ^' I# B) f0 N8 y+ V+ }' K8 k0 x
( m: T# R, A4 C9 r+ o% O1 u
4 i! w7 r3 C! ?. t' L
8 |; Z- Y5 X& x- r! @
/ l8 n5 c# j6 p9 b* m- } ​
6 z1 E) F Y$ ?( } z ​
* G% [( _. E: E4 n ^ T ​
+ x' z A2 `+ e
( Z7 [2 n) x) X; Z4 A& \/ G9 D+ m# P0 G' _$ _4 I
) a9 `* |+ W# B! r. }, i& Q* {2 A/ x0 a' u) ?- c, U
3 y1 ~0 O1 C, F0 V# o% b( n8 l: U
* O+ W/ B2 A$ Y7 ~0 w$ r W- Q& o
* Y! E, Y5 A+ w, u
2.3.2 ZYNQ工程(1) 端口定义。# I6 f. F2 L) \; u0 T
$ K1 _& c: P4 G6 n) G! x9 B
, N6 _* w) l2 J0 W- d8 ?5 f$ j3 Z3 |6 T7 I1 \ j
; a; ?0 \; F" a4 m t* `/ E3 n: d ​: k4 ?" U" ]# x. H; [& e4 X1 E
; a% z& U* X K1 r
8 u' h1 d# m9 v4 D6 N" ^
* }. R: I) L$ e
! J% P2 N% h! \# U; }
3 ?1 @) t, A3 M F4 C9 E: o1 e7 p1 h, R7 _
(2) 使用STARTUPE2原语提供的EOS作为系统复位信号,CFGMCLK(65MHz)作为系统时钟。. U( p* d4 i( g, e- N
5 `% W0 T! T0 ]+ j$ {
! T F, X8 v% p# c5 P4 }, Y
- q) r$ n2 |4 H) r: X% c# B
6 g1 l' W2 t& H: v) U( i ​) n; l' B3 {0 M2 k4 k: E
$ \# J. b: D1 T
: y+ T' L0 l& g% e, C, G/ O# X+ f+ s; ]% i) G
3 [, g% x0 v' }3 f- O9 N g0 }3 s
) c8 `: G0 ?( ^' k( E
* J9 Z, |5 |- e B(3) 例化Serial RapidIO Gen2 IP核。$ `) c3 B1 U( B8 a+ M
Z# }6 U X$ i- M& g
& N$ U! W' z% @9 ~& D9 `. r( S- i, ?
' R, l; I/ a$ A2 R5 U
 ​# m3 G4 b( _" g; T/ q
5 y9 U; n) k5 @+ h$ ]+ C8 L
9 V% K* x/ V7 O2 z1 J& ]- w
/ o7 Q2 y; E; k s, F2 k) U1 F5 O7 ~
4 m# y3 i1 W1 q8 O8 ?" e6 A$ {; Y) d U
$ [, y; d) H+ Q/ Z+ D5 \% Z
2 |: G+ O5 v/ g2 J% L* s5 O7 e7 J$ _
3 ^% ]' Y c! j% s% i* M
 ​5 _" U1 F) t- B2 Q- j0 [* T
( c: B7 D4 |4 A4 j# h6 g
' _- R2 P. J$ X4 Y6 F" g1 Z- `# o9 }
6 g/ h6 E" k) M
( V* d* `: H1 L5 V# U4 F$ m% w3 H3 ]
* o# |( e3 Z3 {# H+ x' B
 ​! h+ t! e3 N" C0 b! F, q; S
: D1 O, ~8 X/ r+ z7 B% J" M
" n, W0 a, q0 E: L* \
% j$ M! M9 M; u6 L
) T. e/ A& W3 X0 D- n- H- [3 f7 V, h, ~+ q
/ V8 a/ n0 }" t: w6 q其中Serial RapidIO Gen2 IP核输出的log_clk为125MHz。3 Z7 y) ]4 m! ~$ E( {1 D
6 p0 a7 G) O+ n
# h$ W' h' _* L3 }, w. [4 _; `$ B, G5 \* L
. m, U$ N5 P4 P( x ​ G* ?# x% @/ F, x8 [
7 n. t' ^# P5 o5 g; l2 s% V- R- J* |( Q( l: M% F8 |9 g
5 \/ n# N( d. s4 _
0 j# e" L% [6 [- `1 R# C/ Q
4 O' e; ?* Z0 I2 ~% @& V
4 k" K0 E* ~) h
(4) 调用srio_response_gen模块,其接口与Serial RapidIO Gen2 IP核连接。
0 `# _5 @2 ^$ i- R- n) D2 W( p; W
' G$ M5 i# q% Q+ _1 [
5 V$ v: o1 H2 }$ J0 b& \
$ ^ ]* p, V2 q2 W- Z4 S+ g3 I) ~* o% A1 P
 ​
/ ~3 E8 a9 H% e# V2 P. l7 k( c- |4 B0 q# j( u5 D
' {. I: X8 `3 l3 r' i
- a( U2 {$ O; x
& |8 n7 e& k2 J+ } ​
" D) f1 }8 J* Q7 e ​
: V3 o7 k* }& O0 ^! \ s1 \( A( D+ q s( |8 t+ T* g$ g
+ w Z3 [& n, |6 b1 m; u4 {: ESRIO详细开发说明请参考产品光盘“6-开发参考资料\TI官方参考文档\”目录下的《Serial Rapid IO (SRIO) User Guide.pdf》文档。) t1 P6 ]! Z0 K! ?5 [
备注:关于本案例涉及的IP核、模块的配置详细说明,可下载产品资料进行查看。
" x" g$ c+ l9 V
2 ?1 V4 C0 r* q/ Q, K9 |, y4 F6 ]3 x/ } k% j, ^, U0 t
$ i; E! M5 t$ O- u3 U2.2 案例功能评估板DSP端和ZYNQ PL端进行SRIO通信测试,并统计读写速率。评估板DSP端作为Initiator,评估板ZYNQ PL端作为Target。SRIO默认配置为x4模式,每个通道速率5Gbps,并分别使用NWRITE + NREAD和SWRITE + NREAD模式进行测试。ZYNQ PL端使用一个36Kbit的BRAM作为设备存储空间,将DSP端发送的过来数据储存至BRAM。! _% J; b$ S( O5 p+ `1 d3 W N
2.3 案例测试先加载运行ZYNQ PL端程序,再运行DSP端程序,CCS Console窗口将打印测试结果。
1 u4 q" W: T; F' M- d, NNWRITE + NREAD模式:NWRITE= 12.50Gbps NREAD= 7.74Gbps$ l, ?8 ^# @: d$ O [
SWRITE + NREAD模式:SWRITE= 12.49Gbps NREAD= 7.74Gbps
5 K5 K" D) i! n* Y2 T备注:由于写测试仅统计发送数据至SRIO FIFO的时间,读测试统计发送读请求并等待Target发送数据完成的时间,因此写速率将比读速率高。
: R: d8 L3 [2 m3 N
) P# b! {1 _; }+ @, x
- z0 [' f# n4 Y* [ U
4 x: e1 H6 @, w! @: N6 Y5 y* ?& H1 ~* E; e; b; t1 y0 \
 ​- ^8 H5 a- K' X; Q& ^* j/ {
8 ^: }, v$ \8 g; v5 t
) t3 W0 L5 P* p! \* z- d& R
4 c$ M/ \, t. S0 B, C N7 O, S' x* X$ d" o5 ?1 W
+ e' u/ M ~, R/ N# C+ S. Z5 X# _7 t
5 _6 i. ^: V) e/ g5 v2 d% |7 f/ }, x- I) N- m# X8 y
​
* l- f! h5 u' P/ S+ k ​4 @# K4 m# F D( D# u, `* t1 P2 M
' C2 X. H4 \& I0 d3 b6 [. U4 s
) k4 a9 C g; e* @# ?" @, V
5 |1 o4 {# M ?7 u" f0 @/ Y
* i( |. v0 N, m% d8 s" v |
|