找回密码
 注册
关于网站域名变更的通知
查看: 372|回复: 2
打印 上一主题 下一主题

FPGA实践(八)PS与PL共享DDR(中)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-22 11:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本篇只有目录的第二、三部分,其余部分请查看(上)、(下)篇
9 W3 k' j: J9 R1 i, G4 }0 e$ Y
FPGA实践(八)PS与PL共享DDR(中)

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 F
0 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 @" f
0 N/ @) g4 T! m# B( S
       4.2 指定指针位置
: B- x0 j! W, W5 l& G5 f7 w2 n3 R/ Z
5 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

该用户从未签到

2#
发表于 2019-5-22 18:15 | 只看该作者
看看楼主怎么说的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 20:05 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表