广告

不容忽视的跨时钟域设计

2011-3-26 16:06 3390 0 4 分类: FPGA/CPLD

不容忽视的跨时钟域设计

         最近挺忙的,也没什么时间打理博客。但是再忙,也应该在适当的时候停下来做一点回顾,过去做过的对的不对的都应该做一些记录。一个项目中碰到了一系列跨时钟域设计中非常典型的问题,技术细节恐怕不会说得太详细,但是一定会说到点上。

         从一个题外话开始吧,周三晚上家里电脑挂了,其实之前就有些症状,只不过我现在忙得都“懒”得去理它了,也最怕去折腾它了,因为很浪费时间。经常开机不久就蓝屏,周三晚上算是“病入膏肓”了,一度无法进入系统中。其实初步的定位是一直以来怀疑硬盘有坏道导致的。当时重装系统也是常常认不到光驱或是无法重新启动硬盘,于是不停的重复着应该算是“小概率”事件的进入系统桌面,然后在蓝屏前赶紧的把最重要的数据拷贝出来。还好虽然硬盘里躺着估计100多个G的Byte,但是认为应该存活下来的也不过20来个G。今天上午完成了这个重大任务,于是大刀阔斧的准备低格它。但是看到关于蓝屏现象,网络上大伙都说和外设连接导致异常有关,要么是线连接问题,要么是外设本身有问题。而如果按照我的猜想只是硬盘“挂了”,那么为什么光驱boot成功也是小概率事件,带着这个疑问,决定先对主机彻底的“清理”一遍。打开布满灰尘的机箱,看到那条唯一的IDE线有些老化了,感觉应该先让他Out试试。这一试不要紧,在重新上电后,一上午不再发生曾经大概率的蓝屏症状了。俺的低格计划也就暂时搁浅把,问题应该就是这样了(不管是那个经常超负荷工作的光驱本身还是那条嫌疑最大的排线,总之问题的根源应该就是它们了)。这点问题其实也没什么,生活中我们常常要面对,工作上也是。而问题的解决可能非常的简单,一点不像出现的症状那么吓人。

         再回到标题上来,不可小视的跨时钟域设计。跨时钟域是逻辑设计中不变的话题。特权同学的《深入浅出玩转FPGA》一书有专门的篇幅有板有眼的介绍这方面的解决办法。而实践中即便是自己也还是常常要在这方面吃一些“一不小心”的亏。问题定位的过程就像咱的电脑蓝屏一样,绕了一大圈才发现问题出在了最简单的地方。

         同样的跨时钟问题在一个项目的类似设计中出现多次,教训可谓深刻。首先一个问题是出在了CPU工作时钟和软件代码运行的FLASH上,CPU需要运行的软件程序必须从FLASH读出,而这个CPU本身只给出了一组RAM运行代码的总线接口,而FLASH运行软件的代码是直接使用了官方给出的源代码。因此,一开始只是想当然的将二者按照实例“对接”上了。却忽视了例化中供给二者的时钟不同,CPU跑得频率是FLASH频率的3倍多。于是在实际调试中,出现了很多说不清道不明的“幽灵”现象。通常断电较长时间后若给芯片供电,第一次没反应,第二次通常就起来了,然后不停的上下电,一般也都能够起来,我们笑称“是不是这个芯片要充电啊”。但是从始至终居然有那么一个样机(一共有四套)非常坚挺的从来不出这个症状。开始我们一直怀疑是芯片厂商提供的所谓“工程样片”有猫腻,但是随着调试不断的深入,工程代码改进后不断产生新的编译结果,有些工程的逻辑编译居然无论如何都无法让工程跑起来,对比前后能跑和不能跑的工程,改动的地方确认是一些无关紧要的逻辑。和FAE谈到这些比较怪异的症状,并且我们也聊到了软件是运行在FLASH上,聊到了它们的时钟频率,FAE给了我一些启发和灵感。于是深入的去解析那份“舶来品”,发现了CPU读写代码接口中的等待信号非常可能就是罪魁祸首。我们做了一个假设,比如CPU以100M在跑,FLASH操作是20M。CPU需要每若干个时钟周期执行一次软件代码读操作,FLASH要响应这样一次操作要慢很多,因此FLASH就是通过wait信号来拖长CPU的操作时间,以保证完成这样的一次读操作。那么wait信号是由FLASH的时钟产生的,它会比CPU的时钟慢很多。存在那么一种情况,当CPU执行第一个读操作时,好不容易等到了FLASH模块的wait信号,然后发出第二次的读操作,而此时由于这个wait信号保持的时间还未结束,那么CPU误以为是给它的wait信号了,所以接着往下走了。如此一来,软件就大乱了。这般推测后,特权同学适时的对这个wait信号的产生逻辑做了一些处理,此后经过恩天的验证果然不再有芯片在上电后无法运行的情况了。

另外,由于项目中涉及CPU与内部逻辑的接口,说白了接口方式就两类,一类是CPU内部扩展的专用并行总线,一类是CPU的IO口直接连接控制。在出现问题的时候,一直非常关注前一种接口,因为习惯上认为CPU的IO口控制的比较简单,肯定能够把数据送出去,但是并没有考虑到它们对内部的逻辑而言也是不折不扣的“外星人”。在无数次改进并行接口方式确保稳定工作无果后,静下心来也就着问题找到这些也算是异步并习惯认为不用关心的IO接口时,只是抱着试试的态度对它们用逻辑时钟做了一拍锁存来同步后,问题居然意外的得到了解决,数天之内也确实不再复现。

         这一连串的异步问题困扰了特权同学数周,想说的还是那句话“不容忽视的异步设计”。但,也许很多时候,那些项目这些问题都是要在我们亲身经历了才愈发有感觉。

 

 

广告

文章评论 4条评论)

登录后参与讨论

1361739547_568353986 2015-11-26 23:48

特权哥,我刚学FPGA,怎样才能学的精通呢?给点建议吧

ilove314_323192455 2015-11-24 20:21

恐怕你不是用我们的开发板吧,可能是你的时钟频率和我们不一样所致,建议你改改分频计数值。

billzhu_345737527 2015-11-21 19:38

不行啊,特权哥,这个Verilog写出来重影好严重

dljlpz515698_501515077 2012-2-2 14:10

特权师兄你好,我看你08年发的日志上边写的你那一年在成都参加过fpga的高级培训,你当时是在哪一家培训机构呀?因为我也在成都上学,所以想业余时间参加培训班学习fpga。 期待您的答复!

mafan88_214646288 2012-1-30 14:53

受教了,我也因为忽视这个问题耗费了大量的时间

852021738_435556343 2011-3-27 21:15

嗯,受教了。 最近在研究FPGA与PC机通过并口通信,也要注意异步时钟域的问题!

zhounachu_209467008 2011-3-26 21:11

是啊,很多问题都是自己亲力亲为解决之后才觉得印象深刻,,
相关推荐阅读
ilove314_323192455 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
ilove314_323192455 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
ilove314_323192455 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
ilove314_323192455 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
ilove314_323192455 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
ilove314_323192455 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
4
0
广告