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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1740|回复: 3

[转贴] 刚哥专栏--FPGA技术--异步信号02

[复制链接]
发表于 2015-8-18 16:11:44 | 显示全部楼层 |阅读模式

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

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

x

刚哥专栏002.异步信号(2)

大嘴兄教的方法真管用,问题解决,测试非常稳定,老板看我的眼神也温柔多了。


新项目的FPGA设计又复杂了些,异步信号难免还会遇到。信号从接口时钟域送到系统时钟域,两个时钟同源,频率都是65M。有了上次的经验,我信心满满,跨时钟域的信号全部用系统时钟打两拍进行同步。可是,一测试,发现,数据经常有错误。用ChipScope看接口数据都是对的,可到系统时钟域再看就会有错误。估计是同步处理出了问题。上个项目用的好好的,怎么到这里就不行呢?百思不得其解,回去找大嘴兄算账。


“大嘴兄,你的办法怎么时灵时不灵啊?”我问道。

“怎么会不灵?心诚则灵,一定是你心不诚。再者说,人非圣贤,孰能无过?我偶尔范点小小的错误,也是正常的。”这家伙摇头晃脑的,先把我嘴堵上了,又向我问道:“什么办法灵不灵的?”

“就是那个同步处理电路,这次就不管用了。”我答道。

“还有这等事情?说来听听。”他一脸不以为然的道。

我道:“这次是从接口进来的65MHz,12位数据,同步到系统时钟域,系统时钟和接口时钟是同源的65M。12位数据我都打了两拍,可经常出现错误。用ChipScope在接口看是对的,到了系统时钟域用系统时钟看就会有错误。”

大嘴兄满脸的不屑,道:“孺子不可教也!我上次教你的你肯定没有吃透,才会范如此低级错误。上次我说如果出现亚稳态时,第二个触发器输出什么?”

“稳态信号啊!”我答道。

“什么稳态信号?0还是1?”他又问道。

“好像都有可能。”我有点犹豫。

“那你想想吧,都有可能,12位信号,是什么状态?”他盯着我问道。

我一激灵,豁然开朗,道:“噢,原来是这么回事,出现亚稳态的时候,第二个触发器输出的数据内容是不定的,和输入数据十有八九是不同的,所以就出现错误。”

他微微点头道:“孺子可教也!”

我笑道:“到底可教还是不可教?”

他晃晃脑袋道:“在可教和不可教之间徘徊,嗯,亚稳态!”

大嘴兄仿佛心情大好,乘这个机会赶紧让他多讲点儿。

“大嘴兄,那是不是只有单根信号才可以用打两拍的同步处理?”我问道。

“不准确,应该是,在同一时刻只有单根信号变化的情况才可以用这个处理。”他停了停,继续道:“比如说格雷码,虽然有很多位,但在同一时刻只有一位变化,所以可以这样进行同步处理。或者其它情况,只要你能确保是单根信号变化,也可以。但是一般都是针对状态或控制信号,并且要仔细分析亚稳态时的影响,确认确实没问题。如果是数据信号,一般不能这样处理,即使只有一个bit变化。”

“原来如此!”我思考了一下,感觉理解了一点儿,又问道:“那多位变化的情况怎么办呢?”

他想了想,答道:“多位变化嘛!这要看情况。如果可以通过控制信号保证数据在某个时刻是稳定不变的,那就只对这个控制信号进行同步处理,由同步后的控制信号使能数据信号,即可,而数据信号不做同步处理。但这一般只适用数据交互比较慢、带宽比较低的情况。通用的、高速的处理方式是使用异步fifo或双端口RAM,简单可靠。”

我想起来了,异步FIFO或双端口RAM本身就有两个时钟。我又想到一个问题,问道:“异步FIFO也是逻辑电路搭建的,它内部对异步的跨时钟域的多位数据是怎么处理的呢?”

大嘴兄答道:“好问题!异步FIFO功能虽然简单,要做好可真有点儿考验功力的!简单说,它内部主要也是一个双口RAM进行循环存取,再加上状态信息,比如空、满等状态信号。关键是这些状态信号同时需要两个时钟域的RAM端口地址才能计算出来,这就又涉及跨时钟域多位信号传输了,这当然不能再用一个FIFO来解决,怎么办呢?一般就是使用前面说的格雷码。当然还要加约束,就是我们前面讲的,要给亚稳态恢复稳态留出足够时间。你如果感兴趣,可以自己找资料研究研究。”

听了大嘴兄的讲解,我突然对异步FIFO产生了兴趣,有空儿一定要好好研究研究。

大嘴兄话锋一转,道:“但是,使用异步FIFO也有人经常犯错误。”

我有些不以为然道:“这么简单,会犯什么错误?”

他看了看我,道:“貌似简单,犯了错误就不简单了!FIFO的满标志信号一般是写时钟域产生的,空标志信号一般是读时钟域产生的。而有些人经常不注意,在读时钟域直接使用满标志信号,在写时钟域直接使用空标志信号。在这种情况下,这些都是异步信号,却没进行任何处理,就可能导致莫名其妙的错误,而且错误非常难捕捉定位,有人就埋怨FIFO不稳定,甚至认为芯片有问题。当然,如果撞了狗屎运,虽然用错了也没发现出问题。但是,设计有很大隐患。”

我听得心里一惊,道:“哎呀,我以前也用过异步FIFO,可是从来没注意过这个问题,犯了错误也不知道,可能都有隐患啊!?以后真的真的要特别注意这方面的问题。”

我现在对大嘴兄还真有点儿越来越佩服了。

“别用这么崇拜的目光看我,”他又有些飘飘然,道:“呆会儿我再多给你讲点儿。先给我老人家上点儿水。”

“好嘞!”


转载自公众帐号“xxx”
发表于 2015-8-18 20:11:42 | 显示全部楼层
好文章!
发表于 2015-8-19 17:44:37 | 显示全部楼层
论坛禁止发布任何QQ群号、微信公众号。
发表于 2015-8-19 20:03:30 | 显示全部楼层
求公众号地址
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-28 21:05 , Processed in 0.036162 second(s), 9 queries , Gzip On, Redis On.

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