在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7735|回复: 16

[求助] 关于DDR3乒乓操作

[复制链接]
发表于 2017-7-17 17:51:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
我想要用MIG核控制两片同样的DDR3芯片进行乒乓操作。现在程序逻辑都已经没有问题了,但是关于时钟有一点不是很明白。
程序中首先将数据写入fifo中,再从FIFO进入DDR3.但是调用MIG控制两片DDR3时,会出现两个用户时钟,在我的MIG配置中,这两个用户时钟是同样的频率。但是在控制c0_app_wdf_data,c0_app_addr,c1_app_wdf_data,c1_app_addr时候应该选用哪个时钟呢。我之前用的是各自的时钟控制,仿真没有问题,但是上板测试后发现时对时错。错误的原因是另一片DDR的控制信号没有按照预想的状态改变,感觉应该是这两个用户时钟之间有相位差造成的。想问一下这个问题应该怎么解决?是将他们的控制信号放在同一个时钟的时序下控制吗?
 楼主| 发表于 2017-7-18 10:02:51 | 显示全部楼层
没人吗?
别沉啊。。。求各位大神赐教
发表于 2017-7-18 14:54:42 | 显示全部楼层
系统时钟用的是同一个时钟吗?
系统时钟是同一个时钟的情况下,在线调试的时候,自己写几个测试的数据测试一下,看看有没有偏差
 楼主| 发表于 2017-7-18 15:39:34 | 显示全部楼层
回复 3# tiancaijiameng


输入给核的输入时钟和参考时钟肯定是一样的。现在上板调试之后发现的结果是有时候对有时候错。错都是错在读写状态切换的时候,一片从写到读了另一片没切换,感觉就是没有两片DDR的ui_clk,不太同步啊
 楼主| 发表于 2017-7-19 11:07:28 | 显示全部楼层
别沉别沉
发表于 2017-7-20 10:56:54 | 显示全部楼层
楼主的pingpong 操作是怎么实现的呢?
例化了两个Mig core, 地址和控制信息是独立的吗?

说一下我个人的想法:
1.两个mig core 同源的话, user clock 是应该有个固定的相位差的,对每个mig core的控制应该使用相应的user clock.
2.楼主说,每个mig core 使用自己独立的user clock,功能不对,为什么不对?这里我不能理解。
3.关于时钟,楼主可以合并两个mig core的时钟网络,用一个PLL去产生mem_refclk/freq_refclk/sync_pulse/user clock;具体如何改IP可以参考手册clock 部分。
但是我认为即便两个user clock合并为一个后,楼主的问题也不一定能解决,仅供参考。
 楼主| 发表于 2017-7-21 09:14:40 | 显示全部楼层
回复 6# 冲出藩篱


我的实现方法是调用一个IP core控制两个DDR3。程序的逻辑是一片读的同时另一片在写,当一片写够我要求的数据量后,拉高一个标志位,切换两片的读写命令。现在我遇到的问题是:如果分别选用两片DDR的时钟进行控制,因为两个时钟不同步,导致两个命令切换的时间不同,而一片DDR命令切换后,在命令切换的同时也会清空标志位。上板出错就是因为切换命令时一片DDR的命令正常切换,而另一片DDR的命令没有切换成功(因为在这个时钟到来的时候标志位已经被清除了)。
发表于 2017-7-21 09:45:45 | 显示全部楼层
回复 7# bjh552125624
我看了下xilinx的IP的例化,7 series是不支持ping-pong phy的设置的。
而且你使用ping-pong phy的话,外部的controler也是要自己写的。

从你的描述看,你应该使用的是MIG 7series的 Multi-core, 不知道我理解的对不对。
如果是
Multi-core的话,那么就是两个IP了,只不过给你一次例化了,如果这样的话,你就可以改时钟网络了。


对于你的描述理解的不清楚,希望能有帮助。  
 楼主| 发表于 2017-7-27 12:00:21 | 显示全部楼层
回复 8# 冲出藩篱


请问时钟网络怎么修改,能不能就现在我出现的这个问题给一个解决的思路呢
发表于 2017-9-16 20:09:01 | 显示全部楼层
首先,你的乒乓系统时钟一定是唯一一个pp_clk,而2个DDR缓存逻辑,一定是要具备独立的输入和输出FIFO,换句话说,肯定是有c0_in_fifo和c0_out_fifo,还有c1_in_fifo和c1_out_fifo,所有in_fifo的写入时钟是pp_clk,所有out_fifo的读出时钟是pp_clk,而in_fifo的读出时钟以及out_fifo的写入时钟肯定是根据c0还是c1来单独用c0_clk或者c1_clk,记住,2个DDR肯定是独立用户时钟,不能用同一个!
乒乓系统,必须保证读端大于等于写端,而且一定是写端控制读端,你首先在乒乓写端向c0写入一段数据,传递信息(当前写入的是c0)至乒乓读端端,乒乓读端根据信息把c0的数据读走,然后你在乒乓写端向c1写入一段数据,传递信息(当前写入的是c1)至乒乓读端,乒乓读端根据信息把c1的数据读走,如此往复,就是连贯的乒乓操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-18 21:13 , Processed in 0.036688 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表