标题:
ALTERA器件中复位电路实现之-异步复位同步化
[打印本页]
作者:
wxg1988
时间:
2013-8-8 07:35
标题:
ALTERA器件中复位电路实现之-异步复位同步化
为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化的异步复位,我们称其为第三类复位。这种复位完全结合了异步复位和同步复位的优势,我们知道异步复位的优势是不参与数据路径,所以不影响数据路径速度,而复位几乎是瞬间起作用;而同步复位的优势是百分百地同步时序分析且具有抗噪声性能。这种复位其实就是通常我们所说的异步复位同步释放。就如同我之前讨论的那样,异步地进入复位是最好的,只是异步地退出复位会导致一些类似亚稳态和由同步电路参与反馈而引起不想要的状态之类的危害等问题。
后面我们会讨论如何来实现这样的同步化的异步复位。我先来如图
1
所示的电路,同步寄存器(
Synchronizer Register
)象同步复位那样被使用,不过被同步后的异步复位和原始异步复位经过门控以后用来异步地复位后续寄存器。这个电路中异步复位信号异步地复位后续电路,并且复位是异步地释放。它的缺点就是复位路径上引入了门电路的延迟。
图
1
:带门控的同步化异步复位原理图
一种更好的实现方法如图
2
所示,这个电路去除了图
1
中复位路径上门电路延迟。异步复位输入直接连接到同步寄存器(
Synchronizer Register
)的
CLRN
端口上,这样复位立即生效。当复位撤除(释放)时,一个逻辑“
1
”从同步器(
Synchronizer
)被时钟打出用来同步地释放后续寄存器的复位。
图
2
:不带门控的同步化异步复位原理图
图
2
等效的
Verilog
代码如图
3
所示,第一个进程模块用来产生同步复位输出
rst_n
,
rst_n
作为第二个进程模块的异步复位。两个进程模块的复位信号都位于各自的敏感列表中。其实第一个进程模块就是将系统输入的异步复位进行同步,产生一个后续逻辑使用的同步化了的异步复位,所以我们看到第二个进程模块里将这个已经同步化了的复位信号当作异步复位使用。
图
3
:同步化异步复位的
Verilog
代码
同样,为了减少亚稳态对上述同步器中的两个寄存器的影响,同时也是为了增加平均无故障时间(
MTBF
),这两个寄存器应该在
FPGA
中被放置的越靠近越好,以尽量减少在器件中的布线延迟。
Quartus II
的
fitter
将会自动认识到这些寄存器是用于同步器,所以会自动地进行上述处理,作为本例这两个寄存器将会被布局到同一个
LAB
中。
尽管
reset_n
已经进行了上述同步化处理,时序约束的时候还是要使用
set_false_path
命令将其进行切割,而从同步寄存器输出的复位
rst_n
现在可以使用
TimeQuest
进行准确地
Recovery
和
Removal
分析。本设计的
SDC
约束和异步复位一样(如笔者上一篇关于异步复位博文中图
4
所示),所以现在我们在
Quartus II
中编译这个设计并运行
TimeQuest
时序分析器,那么我们将会得到这个电路的
Recovery
和
Removal
的
slack
报告
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0