关于复位设计,有多种不同的观点和方案。到底是采用同步复位还是异步复位,全局复位还是局部复位,是由多方面的因素决定的。但良好的复位设计既可以提高系统的可靠性,又可以节省大量的逻辑资源。在实际应用中,笔者也看到过很多因为复位电路设计问题而导致的系统可靠性问题。本节针对这几个问题加以说明,希望读者能够找到适合自己设计的复位设计方案。
复位要解决的问题就是让电路在上电之后有一个确定的初始状态,而很多时候我们设计的复位电路没有能够达到这个效果。
(1)同步复位的优点是同步的。
对于非时钟沿的毛刺不敏感。
对于软件进行的时序分析有好处,可以保证设计在复位的设计上没有时序问题。
(2)同步复位的缺点需要一个时钟。
在某些ASIC和FPGA的设计中要在datapath上插入复位逻辑。
(3)异步复位的优点
不需要在datapath上插入复位逻辑。
(4)异步复位的缺点是异步的。
因为是异步的,所以工具不自动对路径进行时序约束和检查,可能会有时序问题而导致功能不正常。
针对以上同步和异步复位的分析,不同的设计者针对自己的应用有如下两个观点。
(1)坚持同步复位,而忽略其对逻辑资源造成的影响,保证功能。笔者以为在FPGA设计中,同步复位的是较为优化的方案。它的一个缺点是需要在datapath上增加额外的逻辑,这点对FPGA来说没有问题。因为FPGA的寄存器都可以选择成同步复位或异步复位,所以不需要在datapath上增加额外的逻辑。也许有人以为,同步复位的时序很难满足,因为复位信号的扇出及延时会很大,我们将在后面详细阐述如何避免这个问题。
(2)异步复位,对于因此可能造成的寄存器复位的初值不对的问题,采用将同步化了的异步复位信号连到寄存器的异步复位端的这种办法来避免,如图所示。
图 异步复位的同步化设计
笔者认为,如果能够约束好reset路径的时延,避开reset撤销沿和时钟的沿,这是一个很好的方案,可以有效去除reset release时导致的寄存器复位状态的错误。但是这个方案的一个问题就是reset路径的延时和skew需要约束,因为是异步复位,约束工具不会自动地来进行约束处理。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。