UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

取消
显示结果 
搜索替代 
您的意思是: 
Participant jhon
Participant
371 次查看
注册日期: ‎11-27-2018

PL和PS的linux程序共享一段DDR RAM该怎么做?

Zynq7020的PL部分负责采集ADC的数据,每帧大概4M字节,放到片外的DDR RAM中,然后ARM程序对数据进行处理。 目前裸跑已经实现了基本功能,关闭了cache,ARM程序采用定时的方式启动PL的采集,延时若干ms后,认为采集完成了,直接去读写采集到的数据。 现在想把程序移植到petalinux,感觉裸跑的方法不行了。PL中数据采集完后还会做一些处理,打开cache会降低速度,但是linux默认是打开cache的,能否对这一小段4M字节的数据关闭cache?有没有具体的实例? 我看了一些文档,可能的流程是先在设备树中定义一段reserve_memory,在用户程序中用mmap映射,但是这只能实现PS和PL对该段RAM的共享,如何防止访问冲突,如何处理cache问题,就不清楚了。 另外,PL采集和处理完数据后,如何启动一个中断,告知linux应用程序数据采集完毕? 谢谢!
0 项奖励
1 条回复1
Xilinx Employee
Xilinx Employee
313 次查看
注册日期: ‎09-14-2018

回复: PL和PS的linux程序共享一段DDR RAM该怎么做?

Hi @jhon

供参考:

1. 裸机下有cache ivalidate和cache flush的接口函数,linux下也有类似的系统调用,可以进行单次的cache操作;

2. DDR访问冲突不会发生,DDR控制器有对多个master访问的仲裁机制。但是数据同步性需要程序自己保证,如你所说可以通过中断保证;

3. 启动中断: PL部分需要逻辑中输出一个中断信号连接到PS的PL中断接口。linux部分,需要自己编写相关驱动程序(包含中断),或者使用UIO的方式。

4. 因为有ADC采集,是否有实时性要求?如果实时性要求较高Linux下可能无法保证,可以考虑AMP架构,实时部分放在实时核上处理。

----------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
----------------------------------------------------------------------------------------------

0 项奖励