取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
ywxiao
Explorer
Explorer
420 次查看
注册日期: ‎12-06-2019

PL与PS数据交互出错, 如何查错?

工程背景:

Processor: 7020-2; ADC的读写时序和数据处理由PL完成,之后将处理好的数据给到PS;core0:peta-linux; core1: 裸核;核间通信:open-AMP;

我用AXI 作为数据交换总线,PL端封装为AD7606_IP,包含两个AXI接口:AXI_Lite_Slave, AXI_Full_master; lite用于PS下发配置参数,full用于PL数据写到DDR或OCM。block图见附件;

 
 

经常出现PS读取到的ADC数据不对,主要在几种情况下出现:

1. 同样的软件,运行在不同的硬件;

2. 同样的代码和xsa,在vitis2019上OK,移植到2020版本,出现异常;

3. 在vitis2019上仿真OK的core1.elf文件,下载到添加了uart IP的bitstream的petaliunx;

这个问题,貌似跟硬件,vitis平台,bitstream都有关系,但又相互矛盾,无法解释;请指出调试方法,谢谢

 

 

 

标记 (1)
image.png
0 项奖励
回复
6 回复数
terryn
Xilinx Employee
Xilinx Employee
412 次查看
注册日期: ‎06-19-2019

"经常出现PS读取到的ADC数据不对"

具体是什么不正确?

“PL侧的数据写到PS”

是写到reserve的DDR位置,然后PS再读取吗?然后PS中读取到的就不正确了吗?cache有没有刷新?

如果不跑openamp的话,也会出现相同现象吗?

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
回复
ywxiao
Explorer
Explorer
398 次查看
注册日期: ‎12-06-2019

数据不对指:ADC监测到的正弦信号,由于数据不对,导致波形畸形;如图;该数据是PL写到OCM(0xFFFFFF00,写到reserve的DDR 0x36000000,也会出现),每次写4*16字节(16通道,每通道4字节float数据),写完后PL产生中断通知Core1读取出来的;
PS读取之前有调用,Xil_DCacheFlushRange()刷新数据;
不跑openAMP,在vitis里仿真也会出现。

标记 (1)
1.png
image.png
0 项奖励
回复
terryn
Xilinx Employee
Xilinx Employee
389 次查看
注册日期: ‎06-19-2019

在波形异常的时候,有用ILA抓取过你axi接口上的时序吗?数据是否都正确写入OCM或者DDR了?axi_full接口的实现是否完全符合AXI标准?

我推测可能PL写入过程中,不能总是独占传输通路,从而引起这样的现象。

你可以尝试将数据不直接写入DDR或者OCM中,而是先写入到一个FIFO中,然后再通过DMA将数据搬到OCM或者DDR中,看看是否还会出现问题。

 

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
回复
ywxiao
Explorer
Explorer
317 次查看
注册日期: ‎12-06-2019

AXI时序我是仿真过得,在PL里没问题。

我同意你的推测,怀疑是AXI总线或DDR总线冲突;我写入数据是每40us一次;是频繁占用状态;

如果先写入FIFO,走DMA通道,路径上是避开的吗?PL设计端,有没有例程来实现FIFO,DMA?目前没用过这些IP

0 项奖励
回复
terryn
Xilinx Employee
Xilinx Employee
306 次查看
注册日期: ‎06-19-2019

路径上不会避开,但是你可以利用fifo的中断,当FIFO中的数据累计到一定深度后,通过DMA一次性传输到DDR或OCM中。

好处是这样大数据量传输一是降低了对总线占用的频次,二是采用DMA方式,不用担心总线占用仲裁之类的处理,能保证数据完整性。

参考设计你可以参考以下链接:

https://www.xilinx.com/support/answers/57550.html

https://www.xilinx.com/support/answers/57562.html

 

 

------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------
0 项奖励
回复
ywxiao
Explorer
Explorer
178 次查看
注册日期: ‎12-06-2019

Hi, Terryn
经过测试,推测问题出现在PL层的V文件中,但苦于大家对fpga经验欠缺,仍然无法解决,现在问题卡在这里;
please look into the verilog files and help to find bug. Thanks a lot!

image.png
0 项奖励
回复