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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3131|回复: 11

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

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

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

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

x

刚哥专栏001.异步信号(1)

“大嘴兄,请教个技术问题。”我喊了一声。

大嘴兄噌的一声窜出了房间,兴奋得搓着双手,“说吧,说吧,帮助晚辈后进是我的责任。”

要不是有求与他,真想踹他一脚。

大嘴兄和我合租的房子,因为比我大几岁,总以前辈自居,经常满嘴胡说八道,跟我吹牛。今天试试他吹的是真牛还是假牛。

“我用FPGA做的设计,碰到了问题,有时不太稳定。”

“哪家FPGA?”

“Xilinx,一个小FPGA”

“好,Xilinx我最熟悉了。什么问题?”

“我要截取一段定长的采样数据进行处理,由外部信号触发计数器进行控制,计数步长是可以设置的。现在发现采样数据长度偶尔会出错。时钟是50M,时序也没有错误。”

“这么慢的速率呀!外部信号是哪里来的?和FPGA本地处理时钟有什么关系?”

“外部触发电路产生的,和时钟没关系。”

“噢,是一个异步信号。这个信号怎么用的?”

“直接就用了,对计数器进行置位。”

“这么简单的问题!”大嘴兄撇着嘴,鄙视地看着我道:“你的信号是异步的,所以要先进行处理,才能使用,否则很不可靠。”

“为什么会不可靠呢?我这个触发信号宽度是好几个时钟周期呢,应该是肯定能采到的。”

“宽一万个周期也不行。和你这个类似的问题我在很多年前就解决过,当时是做一个DDS,DDS的复位信号来自另一个时钟域。小case。”

“那太好了,为什么宽也不行?”

“先回答我,什么是异步信号?”

“就是——非同步信号”我弱弱的答道。

“正确而没有意义!那什么是同步信号?”

同步信号我在书上见过定义,好像很复杂的样子,哪里记得住啊?只好摇摇头道:“就是时钟处理的信号吧?说不太清楚。”

“我教你一个简单的定义。什么是同步信号?就是相位关系可以预测的信号。什么是异步信号?就是相位关系不可预测的信号。这个你需要慢慢体会。”大嘴兄拍了拍我的肩膀。

“有点道理!”我装作很懂的样子。

“你这个异步信号和时钟相位关系是不确定的,可能有的电路先采到,有点电路后采到,而且先后有可能差几个时钟周期。”

“可我后边只有一个计数器呀?只有一个电路,没有先后的问题,只要能采到变化就行。”

“只有一个电路?小朋友,那是你认为。计数器有很多位,在FPGA里实现,每个位都有一个触发器,加上查找表进位链,是很多电路,可不是一个电路。你说变化,说到这个问题的症结了。你信号很宽,确实能有效置位,但后边电路开始工作是在这个异步信号变化时,这时,如果有先有后,你的计数器,其实是加法器,有的位早一拍开始相加,有的位晚一拍甚至几拍开始相加,你觉得会产生什么后果?”

“那肯定就不对了!”我答道,恍然大悟的样子,又问道:“那我加个约束,设个最大延迟。是否可以解决问题?”

“加约束用处也不大,可能改善一点,但解决不了问题。因为异步的关系,不可避免有一部分电路前一周期采到,一部分电路后面周期采到。”

“那我先用触发器把这个异步信号打一拍再用,这个触发器肯定是一个电路,没有先后问题,异步信号也同步到本地时钟上了。是不是就可以了?”

“还不够。标准的同步处理,就是异步信号同步化,需要拿两个触发器用本地时钟打两拍。”

“为什么要多打一拍呢?”


“因为第一个触发器时钟沿可能落在信号变化的时候,可能会采到一个非0非1的中间态信号,换句话说输入信号满足不了触发器的建立保持时间要求。这时,触发器输出可能会是一个非0非1的信号,就是亚稳态信号。亚稳态信号传递到后面电路,后面电路有人认为这是0,有人认为这是1,也可能有部分电路把亚稳态继续传递下去。这样,一个信号同时出现两个或三个状态,出乎设计者的意料,结果也会出乎意料。还是会导致有的位早一拍开始相加,有的位晚一拍开始相加,还是会错。”

“噢,原来如此。”

“不过,这个亚稳态信号最终自己会变成稳态,也就是亚稳态不能长期保持,会自动变成0或1,但需要一些时间。放第二个触发器,是在下一个时钟沿采样第一个触发器的输出,就相当于给了一个时钟周期的时间,让这个亚稳态信号恢复成稳态。第二个触发器采到恢复成稳态的信号,就是稳态输出了,是0是1无所谓,不过是早一拍晚一拍的问题,但只有一个稳定的状态。”

“这样就完全可靠了吧?”

“小同学,世界上没有完全可靠这件事,只有可靠性达到什么量级。就这个同步处理电路而言,亚稳态恢复成稳态需要多少时间是概率事件,和晶体管工艺、门限电压、时钟频率等因素都有关系。这个太复杂了,说了你也不懂。”

“是你也不知道吧!”

“嘻嘻!确实不记得了。”这家伙倒一点儿都不觉得不好意思,又道:“不过,在你所用的FPGA工艺可以支持的最快时钟下,打两拍就基本可以认为是可靠的了。”

“噢,那如果再打一拍,把第二拍可能的落网之鱼都消除掉,是不是更可靠了?”

“对,打的拍数越多,就越可靠。但是——”他故意顿了顿,道:“经过计算,打两拍出问题的概率已经降到了非常低,平均出问题的间隔可达到几年时间。所以,两拍在工程上就足够了,多打无益。”

“是,一个设备还不知道能用几年呢?一次开机时间好像也到不了几年。”

“还有,一定记住,两个触发器在FPGA内部距离越近越好,也就是它们之间布线延迟越小越好,并且他们之间不能有任何组合逻辑。”

“为什么呢?”

“前面说给了一个时钟周期的时间让它恢复,这是没有延迟的情况,如果有延迟,需要把延迟时间扣除掉。比如两个触发器之间有一个时钟周期的布线延迟,那么第二个触发器采样时看到的是一个时钟周期之前的信号,第一个触发器输出亚稳态,第二个触发器在下一个时钟沿看到的就是一个周期前的亚稳态,根本看不到它恢复成稳态,第二个触发器就没有作用了。中间加组合逻辑,道理是类似的。所以,有延迟实际上是减少了可用的恢复时间,增加了出问题的概率。”

“噢,明白了。那要怎么保证呢?”

“就是加约束喽。当然,你的电路频率才50M,很低,你的FPGA容量也小,不加约束也没问题。”

“好,我明天试试。问题要是解决了,我请客。”

“嗯,看来你FPGA经验还不足啊,如果你表现好,我可以考虑晚上偶尔给你上上课。”

看来,我以后得对这个家伙好点儿了。



转载自公众帐号“xxx”
发表于 2015-8-18 18:48:53 | 显示全部楼层
很精彩啊!
发表于 2015-8-18 21:50:00 | 显示全部楼层
深入浅出,好东西!
发表于 2015-8-18 22:17:00 | 显示全部楼层
回复 1# GGgangge


    你好,这个字体颜色太淡了,看不太清,能不能改下。
发表于 2015-8-19 08:29:02 | 显示全部楼层
多写写实际遇到的问题,长知识!
发表于 2015-8-19 08:51:02 | 显示全部楼层
解释的挺好
发表于 2015-8-19 17:44:09 | 显示全部楼层
论坛禁止发布任何QQ群号、微信公众号。
发表于 2015-8-19 19:52:01 | 显示全部楼层
这个风格我很喜欢
发表于 2015-8-20 09:36:39 | 显示全部楼层
谢谢楼主,学习了
发表于 2015-8-20 22:02:53 | 显示全部楼层
不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-29 03:32 , Processed in 0.039033 second(s), 10 queries , Gzip On, Redis On.

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