|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本篇只有目录的第二、三部分,其余部分请查看(上)、(下)篇 0 V: }3 f1 u1 C# m% p
( s- ?7 U/ e: U1 I( H: r
背景:很多时候需要PS与PL共享DDR作为global memory,例如卷积之中,PS将weight in与feature写入DDR,然后PL调用DDR进行运算,再将结果写入DDR进行下一次迭代。
* @% q6 C9 E+ E9 X) }' }
$ v. n [4 F$ _目的:1. PS与PL共享DDR,读和写。并且像卷积一样需要三个指针。2. IPcore设置变量,能通过PS能查看到IPcore运行位置。3. 运用BRAM实现一定的数据搬运。6 {7 G0 @& z& C- R3 E
+ A" A& D' y! t0 a2 w目录. n. a6 ?; f; f; N: l
& d7 A- p) d& i+ @1 c+ W6 b
一、IPcore编写
( j5 \# ?2 ~. U$ ^9 E% y
3 \5 D& c- T5 [) J 1.1 一种错误的接口
$ n9 O% w( D9 b W }: K) N( ^& j V$ k" ^2 k) o$ i2 ^: h
1.2 IPcore代码# _: I/ e4 G" G' q1 R [
8 f! @9 D% B. k 1.3 位置信息
" P7 ?" ?" V) K3 j; m8 M' X$ P5 c) V6 Z0 s/ g0 Y
1.4 接口( O7 H; E$ g1 t, M" _0 q
9 ?, i4 \$ X1 ], t* a$ v3 c N s_axilite
* B# M% q( k' H, d6 e4 y& S n. T2 |3 R0 m. Y
m_axi- b" W4 \( O/ T
/ d5 Z% T- W# s8 d7 J二、testBench9 L% L8 {; Q! \9 A: y4 p
1 B& e/ Q, H2 Y1 ?; e& b
2.1 程序编写
! D l- C! V& k" s' M$ }3 ^. Z! \5 }/ B% S4 k4 _4 M+ ^
2.2 PS与PL的交互
) q+ U) e3 i$ o1 U* T) H/ r; f+ v1 G" Q
三、系统搭建与hdf生成
3 x. i G% M7 P7 T) {
E& i5 E1 X& m$ O: `四、SDK
; m Z/ g: z( K r
+ {# R6 `/ Z y+ X8 { 4.1 用malloc的方式开辟内存: {$ {0 c* V$ u, B P4 O( `8 ^
# M3 M0 {" x! c0 _7 Q m 4.2 指定指针位置
& P; m# a" w9 v* l2 ^. N2 v {
! Z1 X% b7 \! ~五、SoC
) ^+ x; A0 O3 C$ u, u# b9 s, Q) |- i3 c- \" M
5.1 交叉编译9 E2 m' S t0 j7 e
5 x4 H1 X& y/ ?( h: M( R: S 5.2 驱动
( _+ y5 i9 j6 u5 j4 i( G* Y+ t6 \& U/ o, g
5.3 运行
( H. O4 |* c+ _3 Q# X0 o | 4 k" l/ J* T; q/ `* `& ]
6 o+ y& u) L; M2 [, w6 ^. ~4 q5 R4 _9 D/ T
9 c8 D- J2 z8 q/ U' e7 ]2 g! I, ?# w2 N1 [* O1 C0 l$ W
; M) {/ h6 t$ B2 U- |' Y
二、testBench5 c: U! _: y5 y/ P
% A/ u5 u, N/ P& l2.1 程序编写
) E1 U% s) @+ o U" H7 v9 {" r: j2 B2 h- W5 j N7 T! @! c" O
----------------------------------------------
O8 w" I% e4 D; A3 M2 ~. b- w; y/ T
- o$ K3 m7 m- y- `#include<stdio.h>
2 Z& P* ~' k7 o
% P: o {2 W+ x0 P# b5 B#include<stdlib.h>
/ {6 s! Q1 v1 p$ W" K7 J# J+ O/ L2 W( X# Z7 G
int share_dram_core(int write_nums,int read_nums,
8 D9 \4 U( i) g4 E
$ |3 G: z" S5 i( g volatile float * data_ptr,- X }; o7 m1 N+ i7 ]( d( S: f
; ~: G& {. ~4 A: p int location_idx,int write_loop_idx,int read_loop_idx,
9 b3 j: C b! a9 p+ `) o+ S8 h) x/ r( ]) V9 o
int read_sum);
" g! M) I# f& W7 y* k! e9 ~7 p
' r, A9 O. s: A- N/ {) E0 l- p; ?2 n4 n+ M* t- @# A$ H
8 s* T9 z% q& R7 f
b# p) B( n( f4 g* Y1 ~, b! ^+ i$ | |
|