微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 异步复位同步释放

异步复位同步释放

时间:10-02 整理:3721RD 点击:
假设系统是上升沿采样,现在需要对复位信号做异步复位同步释放的操作。那么复位信号的同步释放是采用上升沿触发还是采样下降沿触发?
哪一种实际工程上用的更多一些,理由是什么?

recoverremoval检查 同沿吧

我个人更倾向于同沿这种做法,不过师姐说用下降沿更好一点,意见不同。所以我就想问一下外面做工程或者实际流片更倾向于哪种做法?

1、建议同沿靠工具检查;负沿其实就是两个时钟,我觉得是不对的;2、大芯片里那种大IP,比如Arm cortexA9,一般是有clockoff的,就先放复位,复位释放的时候是没有时钟的,不存在recovery removal问题,复位释放后,再把clock放出来;

你这里说的clockoff是不是可以理解成类似于门控时钟?

还有一点就是,如果按照同沿这种做法,还是需要工具去检查是否会存在recovery/removal问题,也就是说同沿这种做法并不能消除recovery/removal问题?不知道我的理解对不对,望指正

1、先回答你第一个关于clock off的大IP时钟复位都是通过某个时钟复位模块送过去的,时钟和复位都是可控,先放复位再放时钟,此IP就没有recovery和removal的问题;
2、关于同沿检查recovery和removal的问题,你用负沿一样会检查的,你还的去想想工具怎么检查,你得去想想正反两个时钟的关系,怎么检查才能保证没有recovery 和removal的问题。所以,我觉得用负沿是给自己找难受!
你要理解这个事情,时序检查是为了保证:在时钟采样点和复位释放的时间窗,不要撞一起。
你想想看你用负沿的时钟和正沿时钟在PR以后的关系你得保证吧,否则你怎么保证他们时间窗不撞车。

第一个问题基本明白,我觉得我可以参照这种思路来设计复位和时钟,反正时钟是要做门控的。
关于第二个问题,我的理解是:如果单纯的采用异步复位,那么复位的释放是不可预测的,那么就有可能违反D触发器的setup或者hold的要求,也就是这里说的rst的recovery/removal。
另外在问一个问题:在verilog模块中同时采用上升沿触发和下降沿触发的触发方式,会有什么影响?我在网上查阅资料,大多都是说这种做法不好,但是会有什么影响,我不太明白。

从FPGA设计角度,说一下我的个人理解:
1.异步复位,同步释放,只解决了复位信号产生的问题。换句话说,这种复位信号的产生方法:
a.避免了Trst<Tclk,采不到复位信号的问题。
b.避免了clk和reset之间没有相位关系造成的recovery的问题。
c.产生了一个至少两个sync到clk时钟域的复位信号,这样为后续的综合和时序分析提供了基础和可能。
2.具体到复位,只有两种:同步复位 和 异步复位
a.xilinx推荐同步复位,因为寄存器本身没有异步复位端,因为已同步到本地时钟域,时序问题表现为set up 和 hold.
b.Altera推荐异步复位,因为寄存器本身有异步复位端,但是毕竟是异步复位,时序问题表现为recovery和removal的问题.
3.顺便说下上升沿和下降沿的问题,上升沿和下降沿混用,在时序分析的时候,可能造成时序紧张的局面。
举个栗子: a.不考虑skew, 下降沿打出的数据,上升沿采,留给数据的延时只有Tclk/2;
b.上升沿和下降沿还受时钟占空比的影响,uncertainty也要留够足够的裕量,这又进一步收紧了
时序收敛的条件。
c.有的时候,我们必须要用下降沿去解决一些时序问题,比如遇到了保持时间不好满足的情况,
但是时钟的约束,要做好。
最后说下实际工程中,异步复位同步释放真的好吗?
举个栗子: IO送来硬复位,常规做法倒是先打三拍同步到本地时钟域,然后再送去寄存器做异步或者同步复位信号。
你在这里使用异步复位同步释放的方式产生复位信号,如果遇到复位信号上的毛刺干扰怎么办?反倒是产生了我们不愿意看到的复位信号产生。教科书上的栗子,在实际中要具体问题具体分析。
好了,以上仅是个人理解,不对之处欢迎大家指正。
最后,师姐说下降沿采样好,那就下降沿呗,你还要装作一本正经的样子,盯着师姐的眼睛懊恼的说,我怎么没想到,哈哈。

(1)
一个模块中什么上升沿触发下降沿触发,比较教条吧。实际中还是会有。但我们实际中不会这么说,可能就直接认为这是两个时钟,至于这两个时钟的关系看实际设计了。
我大概碰到两种这样情况,
1、SPI的模块,涉及到正反两个时钟;
2、降低峰值功耗,特意用两个反向时钟来躲避峰值功耗;

(2)再补充下上面一位大牛的涉及到的问题
其实有些IP为了节约面积,是没有用异步复位的寄存器,都是全同步设计,两个好处吧
1、不需要平衡复位树;
2、节约面积
关于外部复位信号进来以后glitch的问题
1、可以选择滤glith的IO
2、自己内部电路做去抖动,有办法的

我讲的基本都是芯片设计,FPGA设计我不太熟悉,仅仅是做过原型验证,基本上不太关心面积。


做过了SPI模块,有时候总有一个疑问,数据在上升沿改变,下降沿采样,这样是不是更稳定,看了上面那位大牛的解释之后,现在是明白了。目前关于这个复位的问题的疑问也基本解决,感谢

讲的很清楚,Altera和Xilinx两家的FPGA都用过,但是没有仔细去了解过两家的区别,关于你说的Xilinx同步复位和Altera异步复位,这点学习到了。
第二点:你说的双沿去做的话,最后造成了时序更加紧张,也意外解答了我学习SPI之后一直以来的疑问。
第三点:我个人确实过于死板了,书上的东西没有拿到具体环境中去分析,有时候可能知道不能这么做,但是并不知道具体原因。
最后非常感谢你的解答

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top