|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本篇只有目录的第二、三部分,其余部分请查看(上)、(下)篇 9 W3 k' j: J9 R1 i, G4 }0 e$ Y
9 i$ v. ^& @. ]背景:很多时候需要PS与PL共享DDR作为global memory,例如卷积之中,PS将weight in与feature写入DDR,然后PL调用DDR进行运算,再将结果写入DDR进行下一次迭代。
8 I: r5 q: J8 c1 C4 o. o5 {" n# M6 @/ k# W( p' Z0 |7 E( h; \0 `& K
目的:1. PS与PL共享DDR,读和写。并且像卷积一样需要三个指针。2. IPcore设置变量,能通过PS能查看到IPcore运行位置。3. 运用BRAM实现一定的数据搬运。
; a; {2 S$ L) j) X0 y+ E* Q, Y0 K. D* R& k
目录2 |/ q3 A+ F9 K! ?
7 [( d( j4 N% [一、IPcore编写
; z2 Y/ o, P4 S2 z# X! j A- O
) i& I7 i8 `6 C7 C6 p4 { 1.1 一种错误的接口, P, O: D/ r: t' U
" \9 r# k8 i) Y 1.2 IPcore代码+ Q- T2 d L( `! S
+ T; C! F$ ?. R4 S$ l( n$ E 1.3 位置信息3 z" ~, w' H( a+ X) e
! ~8 @# k8 F$ \: T+ s
1.4 接口* |3 O( o! d- ?' {
6 n- p; z5 m) r8 w x* p- H" B% m s_axilite
D' G0 I, @ L9 S/ D) E
! E1 p( J9 M- P- } B2 C: L m_axi
& x) r. n8 b( a# s4 Y7 |1 S* B, u' v! \
二、testBench
& q5 _$ {( y/ t+ k; i: m1 }/ `
( @# O; s4 ^" w 2.1 程序编写
* \7 {8 E8 E- R% X
. S0 E! p) A/ _0 W! |7 A 2.2 PS与PL的交互
- S/ g5 R8 H9 F0 G: I' J$ V6 u! _/ Z* ~! A
三、系统搭建与hdf生成2 h) ^; w. e: D0 H$ c" \6 c1 E3 w
; S6 t; z5 M7 ]1 ?8 y
四、SDK
- X" U* E, o4 d6 t5 B- k
4 y( F- o" k# f 4.1 用malloc的方式开辟内存
) g+ x9 C, n1 @" f0 N/ @) g4 T! m# B( S
4.2 指定指针位置
: B- x0 j! W, W5 l& G5 f7 w2 n3 R/ Z5 a4 W9 ^. ^1 X
五、SoC
1 _+ t U/ u: U. x5 m4 k2 _4 W0 {- E. D% W7 @
5.1 交叉编译
. x# p5 k* \' ]% I+ N- H0 i; U/ l& H8 `
5.2 驱动* {9 a7 n1 U, q; F2 t6 W
P; y3 b4 v0 e; |' ?; J, c! w3 b l5 t
5.3 运行! V9 [3 H z G4 f
|
/ i2 G2 J1 P2 F7 c. a% S% B2 w
" p3 [0 p) P6 S1 D& l* X7 \8 z+ Y* D3 N7 x" ^
A3 \: B# \8 L$ f& q6 _' w
- G0 n6 m" W/ w1 t* K% u) c, {8 m
二、testBench
/ D0 Y6 j2 }& h, \" m
3 A* A2 E* a7 ~* G# `2.1 程序编写! Z, t1 }( R7 v8 ]
! C/ e" B" I! d% D. U5 Y' R
----------------------------------------------9 b: j0 A' r# ]2 c5 N( k
$ I9 Q; P6 U+ @; s+ K
#include<stdio.h>; q. O2 e" k7 M' K0 @7 G/ n3 [
$ O+ V) k1 a f- t5 A( U#include<stdlib.h>/ A. y6 C) I* i0 z
. v2 f" G$ o' Q, P3 A" ]8 _& X
int share_dram_core(int write_nums,int read_nums,
) r* C7 m2 W& `
. Q0 H5 |8 R# j1 S volatile float * data_ptr,
6 A! \/ p) z) D# d' Z* s9 Q
3 K! ]* e8 C& x int location_idx,int write_loop_idx,int read_loop_idx,8 f% ~/ E; Z3 s" ]
# \" }/ E/ Y+ L: W5 R/ n
int read_sum);
! [9 D' g4 N) p. ~
4 D" J# K5 t/ l- S! @
9 c5 B4 Y# L/ y5 m( N) ?
: ?9 b2 l; r+ V* T( n: j0 }
k; T- O( N- d; J7 A |
|