取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
xudakang
Adventurer
Adventurer
521 次查看
注册日期: ‎01-23-2021

zynq HP2 和 HP3接口读DDR出错, 而HP0和HP1正常, 为什么??

论坛出错了, 我没办法在原贴回复, 这种情况出现了好几次了, 希望官方能解决一下, 论坛老出毛病.

论坛出错了,我没办法回复, 发这情况生好几次了.gif

因此开新帖, 原贴内容如下:

使用ZYNQ-7020clg484-2, 当我同时使用4个HP接口去DDR进行读写时, 我在ILA中发现, HP0和HP1正常工作(读出的数据==写入数据), 而HP2和HP3工作不正常, 读出的数据有一半等于写入而另一半是0. 

我4个AXI Master是独立的, 几乎是同时发送写请求和读请求, 它们的读写ID是分开的, 没有重合部分. 

想问一下同一时间4个HP不能同时工作吗? 还是对DDR的读写同一时间只能2次, 第3/4次就不对了? 或者我怎么设置一下让DDR支持同时4次读写?

HP0_3.pngDDR 信息.png

两片SK Hynix公司的DDR3 SDRAM芯片(每片512MB),型号为 H5TQ4G63AFR-PBI并联(共1GB), 兼容的芯片型号是

MT41J256M16 RE-125, 时钟速度533MHz, 位宽为32bit. 带宽 = 533*32*2 Mbps = 34112Mbps. 每秒可传输1066M个32位数据.

而我的数据来源是一个24位的ADC, 它的传输时钟是20MHz, 共4个通道, 传输带宽最大为80Mbps, 每传一个24位数据中间还会有间隔, 还达不到80Mbps, 大概只有40Mbps的样子. DDR3传输这些数据应该没有压力.

AXI Master是我自己写的, 用4个AXI Master通过4个AXI Interconnect分别接4个HP接口. 突发长度是32, Master的功能是往DDR中写,但我加了一个写完马上读的功能,将读出的数据与写入的数据比较,来确保写入是正确的.

相关ILA观测到的波形如下:

read error.png

可以看到读出的数据有一半是0,另一半与写入相同是ff800000是正确的. 

而且出错的HP2和HP3的读是分两次读完的(rvalid信号 高->低->高),第一次读16个数据,第二次再读16个, 而HP0和HP1是一次读完32个数据. 如下图:

两次读.png

还有一个点是, 我工程有四个AXI Master, AXI Master_2原本连接HP2, AXI Master_3原本连接HP3, 后面我它们调换了, Master_3接HP2, Master_2接HP3, 我发现读数据出问题的是接HP3的Master_2, 也就排除了AXI Master间的差异导致的问题, 应该就是HP间的差异导致的问题, 但HP间有差异吗? 

因为我4个Master的写读请求是几乎是同时的, 但DDR同时应该只能进行一次写或者读, 也就是说同时有8个请求到来了,DDR只能处理其中一个,另外的要排队执行, 我的这个理解有问题没? 是不是DDR或者PS内部的DDR控制器对这种同时到来的读写请求处理有问题, 导致最后两次读出错?

谢谢帮助!

0 项奖励
6 回复数
chaoz
Xilinx Employee
Xilinx Employee
467 次查看
注册日期: ‎09-14-2018

Hi @xudakang 

1. DDR由仲裁器对多个Master的同时读写进行仲裁,按照仲裁的顺序进行依次操作。从理论上处理多个master的请求是没有问题的。

2. 第一次读16个数据,第二次再读16个这个应该也属于正常,slave繁忙时先拉低握手信号,等空闲后继续传输。

3. 没记错的话zynq7000 HP口是AXI3, 最大 burst length应该是16?

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

0 项奖励
xudakang
Adventurer
Adventurer
435 次查看
注册日期: ‎01-23-2021

S_AXI_HP0.png

HP接口是AXI3接口, 而我的AXI master是AXI4接口, 突发长度设为32, 但HP0~1也能正常传输, 应该是AXI interconnect这个IP核有AXI4~AXI3转换的功能, 突发32分解为2个突发16来实现, 这里怪就怪在HP0和HP1正常, 而HP2和HP3出错.  没想通为什么. 

0 项奖励
chaoz
Xilinx Employee
Xilinx Employee
434 次查看
注册日期: ‎09-14-2018

@xudakang 可以加ILA再看下axi-interconnect 之后的总线信号,看看问题出在哪个环节。

另外也建议再比对下amba手册看看master是否由什么和spec违例的地方,从以前经验看很多问题都出在自己写的master逻辑上。

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

 

0 项奖励
xudakang
Adventurer
Adventurer
388 次查看
注册日期: ‎01-23-2021

slot.png写入时刻.png读出数据.png

将与HP2~3相连的AXI Master改为了AXI3,突发长度设为16,用ILA观测了下直接连到HP接口的AXI信号(slot10),写入的数据如果在图示时刻写入错误数据0x00000000_007fffff的话,那么读出来的数据就正好是0x00000000_007fffff,所以怀疑是写入出错,因为写入的数据在写入发生的时刻变化,而valid,ready信号与wdata信号是并行的,如果时序有偏差的话,就可能导致应该写入0x007ffff_007fffff时错误的写入了0x00000000_007ffff,导致了这种情况发生。

用ILA观测自编写的Master(slot6),如下:

写入正常.png

这里的写入没有问题。所以就应该是AXI Interconnect这个IP的写入时序问题。

chaoz
Xilinx Employee
Xilinx Employee
335 次查看
注册日期: ‎09-14-2018

可以把axi interconnect替换为SMC(smart connector) IP试试看。

 

----------------------------------------------------------------------------------------------
如果帖子有帮助,别忘“接受为解决方案”或“奖励”。谢谢!
Don't forget to "Accept as solution" or "Kudo" if it helps. Thanks!
----------------------------------------------------------------------------------------------

0 项奖励
xudakang
Adventurer
Adventurer
264 次查看
注册日期: ‎01-23-2021

使用SMC也不能使HP2~HP3正常工作。最后我将同样的工程改了一下芯片型号,原本的芯片是XC7Z020CLG484-2,改之后是XC7Z020CLG400-2,烧入新的板卡发现HP2~3工作正常了,再也没有错误。

反复试验了确认了一点,之前板卡的HP2~3读取问题应不是程序软件的问题,可能是硬件问题,写入没有问题,只是读取有问题。

0 项奖励