您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF548:内存读写错误
本帖共有879个阅读者
发表帖子 发表投票 回复主题
BF548:内存读写错误
sdmylyq(论坛新手)
sdmylyq
头衔:社区公民
帮派:无帮无派
帖数:13
金钱:210
积分:16
注册时间:2012/6/20
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF548:内存读写错误

使用芯片BF548开发环境VDSP5.0 update10,时钟初始化

*pPLL_CTL = 0x1000;//CCLK=200MH 核心时钟
idle();

*pPLL_DIV = 0x2;//SCLK=100MHz,系统时钟
ssync();

*pVR_CTL = 0x40EB;  
ssync();
  
idle();

内存初始化

*pEBIU_AMBCTL0 = 0xffc2ffc2;
*pEBIU_AMBCTL1 = 0xffc2ffc2;
*pEBIU_MBSCTL = 0x0000;//Bank select by AMSx
*pEBIU_MODE = 0x1; //ALL in asynchronous mode
*pEBIU_AMGCTL = 0x0009

此时内存读写正常,但是当我把核心时钟改为300MH或者更高的时候,内存读写会出现错误,求指教。

*pPLL_CTL = 0x1800; // CCLK=300MH 核心时钟
idle();

*pPLL_DIV = 0x2;//SCLK=100MHz,系统时钟
ssync();

*pVR_CTL = 0x40EB;  
ssync();
  
idle();

本人自己分析可能是内存与DSP之间的连线的问题,因为当时没有考虑等长布线的问题,但是板子尺寸不过才4*7cm,问题竟然这么严重,很是纠结,再者核心时钟改变但是内存操作时间没有变,为什么会产生影响。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/9/7 22:03:43
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
帮你改了一下标题。andy帮忙看一下,548我们当初在做的时候我印象中曾经也遇到过内存跑不快,主频跑不快的问题。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/9/7 22:42:37
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

系统时钟和内核时钟是关联的,改变了内核时钟,在其他的寄存器没有变的情况下,系统时钟也是会变的,

*pPLL_CTL = 0x1800; // CCLK=300MH 核心时钟
idle();

*pPLL_DIV = 0x2;//SCLK=100MHz,系统时钟

这个时候其实你的系统时钟是300Mz/2=150MHz

你把代码改成这样:

*pPLL_CTL = 0x1800; // CCLK=300MH 核心时钟
idle();

*pPLL_DIV = 0x3;//SCLK=100MHz,系统时钟





我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/9/10 11:20:00
sdmylyq(论坛新手)
sdmylyq
头衔:社区公民
帮派:无帮无派
帖数:13
金钱:210
积分:16
注册时间:2012/6/20
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

刚才把代码改成核心时钟300MH系统时钟100MHz还是不行,出错位置很固定,我把验证的图片贴上来您看看。

">

*pPLL_CTL = 0x1800; // CCLK=300MH 核心时钟
idle();

*pPLL_DIV = 0x3;//SCLK=100MHz,系统时钟

非常想请教下OP,你们当时遇到BF548遇到内存跑不快,主频跑不快的时候,当时问题是出在哪里?最后怎么解决的?



这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/9/12 13:06:57
sdmylyq(论坛新手)
sdmylyq
头衔:社区公民
帮派:无帮无派
帖数:13
金钱:210
积分:16
注册时间:2012/6/20
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不好意思,刚才的贴图链接貌似有问题补上一张。

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2012/9/12 13:08:27
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

我们在做BF548的时候也碰到过类似这种问题,当时板子是我画的,第一次制板找得一家比较好的板厂,做出来的板子没问题。第二次改版后换了一个便宜的板厂,结果就发现DDR跑不快。我感觉应该还是信号完整性的问题。最后我们把板做大了一些,对板子的容性做了一定的加强,修整了DDR走线,加强了阻抗匹配的考虑,后面再做54X就都没碰到这种情况了。解决的很莫名,信号跟电源完整性问题的发现跟解决让我也感觉很莫名,说不出个因为所以


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2012/9/13 11:33:08
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

理论上倒是有可循的地方。我的理解,整板的噪声分为信号噪声跟电源噪声,你的尺寸4*7,想必上面的器件一定摆放的特别密集。在高速信号理论里,每一个chip都是一个噪声源,单体的器件都对你的信号产生影响,而且会冲击你的电源层,密集器件之间又耦合来耦合去,更是发出强烈冲击。对信号层的直接影响就是信号产生畸变,过冲、欠冲跟抖动严重;而对电源层产生的影响就是电源层不再是稳定的一个平面,而这个不稳定的电源平层又会反馈到信号层,加重对信号的影响。太差的信号质量就导致你的板工作不正常了。

同时,DDR这里又涉及到了另一个叫做同步信号噪声的玩意,当你的这批数据线同时翻转,会对下面的电源层产生一个大的冲击,在此区域的电源平层产生瞬变,直接影响你的整板信号质量。

还有一个可能存在的隐患是差分过电源切割层,切割处因为参考平面的改变,高速线阻抗产生畸变,导致信号质量出现不可容忍的问题。

随便说说,像这种高速信号分析我是外行,不保证言论准确性,仅做参考,免个责先。



我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/9/13 11:49:35
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

DDR布线要求很严谨,两个差分时钟线要按差分布线,严格的话需要控制阻抗,忘记是50欧还是100欧,你查查硬件参考手册对DDR部分的描述。

数据线和重要的时钟及控制线要走等长,长度差异不要超过5mil,这就要求大部分的线走蛇形线。

地址线虽然没有要求走等长,但最好长度控制在与数据线差异50mil以内。

至少6层板走线,要留有独立的电源层和底层,这两层不得布信号线。

DDR的2.5V电源,内核电源需要切割电源层供电,或者给独立的电源层供电。

切割电源层时,切割线不得穿过临近的两个信号层的高速线。如切2.5V电源层时,切割线在电源层不能穿过临近层的DDR走线。

找一家好的板厂制板打样,如新森快捷(非广告,贵点,但板厂制板质量确实不错,适合验证样板)。

整个板子走线,信号线 线宽不得细于4.8mil

按以上标准布线,包你处理器跑400M以上。


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2012/9/15 14:32:54
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159199 Call, 1 Queries, Processed in 0.031250 second(s),