|
一、特点: 异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。 二、各自的优缺点: 1、总的来说,同步复位的优点大概有3条: b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。EDA中国门户网站/R1A9| R!@ 他的缺点也有不少,主要有以下几条: a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。 2、对于异步复位来说,他的优点也有三条,都是相对应的: a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。 c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。 |
对于这个问题,网上有很多讨论。在这里总结一下,提醒自己。
异步复位:
always @(posedge clk or posedge reset)
begin
if(reset)
// reset逻辑
else
// 同步逻辑
end
同步复位:
always @(posedge clk)
begin
if(reset)
// reset逻辑
else
// 同步逻辑
end
ASIC设计中,同步复位要比异步复位多耗资源,但是在FPGA中两者差不多,因为FPGA中的寄存器同步复位和异步复位都提供资源。异步复位会对复位信号上的毛刺产生错误复位。
在ASIC设计中,通常的做法是使用异步复位,在异步复位信号的根部进行总体同步。
2007年十月份,由于工作安排参加了IBM的芯片后端process的培训,了解了IBM关于后端process的流程、阶段定义和tool chain。当问到IBM的工程师关于异步复位还是同步复位的问题时,他们的回答是都可以,对于IBM的technology来说两者都没有问题,不需要设计者特别考虑。真是高人呀!看来二者的争论是没有多大必要的了。一般的foundry厂商对两者都有很好的支持。
2009年3月20号更新
又有新发现。IBM的标准单元中没有同步复位的DFF,使用同步复位综合成如下结果:
所以使用同步reset会增加逻辑(上图中的“与门”)。
如果使用异步复位,综合结果如下:
此时,使用异步复位会得到更好的时序。
所以,之前是被IBM工程师忽悠了。
一般性原则:如果确定了综合的foundry厂的库,先要研究库中DFF的情况。然后决定reset设计。
如果没有库或还不确定制程,比如要写IP,那就用同步reset。
同步复位及异步复位设计
关于复位设计,有多种不同的观点和方案。到底是采用同步复位还是异步复位,全局复位还是局部复位,是由多方面的因素决定的。但良好的复位设计既可以提高系统的可靠性,又可以节省大量的逻辑资源。在实际应用中,笔者也看到过很多因为复位电路设计问题而导致的系统可靠性问题。本节针对这几个问题加以说明,希望读者能够找到适合自己设计的复位设计方案。
复位要解决的问题就是让电路在上电之后有一个确定的初始状态,而很多时候我们设计的复位电路没有能够达到这个效果。
(1)同步复位的优点是同步的。
对于非时钟沿的毛刺不敏感。
对于软件进行的时序分析有好处,可以保证设计在复位的设计上没有时序问题。
(2)同步复位的缺点需要一个时钟。
在某些ASIC和FPGA的设计中要在datapath上插入复位逻辑。
(3)异步复位的优点
不需要在datapath上插入复位逻辑。
(4)异步复位的缺点是异步的。
因为是异步的,所以工具不自动对路径进行时序约束和检查,可能会有时序问题而导致功能不正常。
针对以上同步和异步复位的分析,不同的设计者针对自己的应用有如下两个观点。
(1)坚持同步复位,而忽略其对逻辑资源造成的影响,保证功能第一。笔者以为在FPGA设计中,同步复位的是较为优化的方案。它的一个缺点是需要在datapath上增加额外的逻辑,这点对FPGA来说没有问题。因为FPGA的寄存器都可以选择成同步复位或异步复位,所以不需要在datapath上增加额外的逻辑。也许有人以为,同步复位的时序很难满足,因为复位信号的扇出及延时会很大,我们将在后面详细阐述如何避免这个问题。
(2)异步复位,对于因此可能造成的寄存器复位的初值不对的问题,采用将同步化了的异步复位信号连到寄存器的异步复位端的这种办法来避免,如图所示。
图 异步复位的同步化设计
笔者认为,如果能够约束好reset路径的时延,避开reset撤销沿和时钟的沿,这是一个很好的方案,可以有效去除reset release时导致的寄存器复位状态的错误。但是这个方案的一个问题就是reset路径的延时和skew需要约束,因为是异步复位,约束工具不会自动地来进行约束处理。