tag 标签: 异步复位

相关博文
  • 热度 29
    2014-12-11 15:35
    1164 次阅读|
    0 个评论
    对FPGA设计中常用的复位设计方法进行了分类、分析和比较。针对FPGA在复位过程中存在不可靠复位的现象,提出了提高复位设计可靠性的4种方法,包括清除复位信号上的毛刺、异步复位同步释放、采用专用全局异步复位/置位资源和采用内部复位。上述方法可有效提高FPGA复位的可靠性。 对FPGA芯片而言,在给芯片加电工作前,芯片内部各个节点电位的变化情况均不确定、不可控,而这种不确定且不可控的情况会使芯片在上电后的工作状态出现错误。因此,在FPGA的设计中,为保证系统能可靠进进入工作状态,以及避免对FPGA输出关联的系统产生不良影响,FPGA上电后要进行复位,且为了消除电源开关过程中引起的抖动影响,复位信号需在电源稳定后经过一定的延时才能撤销,FPGA的复位信号需保证正确、稳定、可靠。 在FPGA的设计中,多数情况下复位电路的功能虽能够正常完成,但电路并未得到精确合理的设计,仍存在可靠性设计缺陷。为确保系统复位的可靠性,有必要对FPGA复位的可靠性设计方法进行研究。 1 复位设计方法分类 复位的目的是在仿真时将设计强制定位在一个可知状态,合理选择复位方式是电路设计的关键。根据与系统时钟域的关系,复位电路可分为同步复位和异步复位。同步复位是指复位信号只在时钟沿到来时,才有效。否则,无法完成对系统的复位工作。异步复位是指无论时钟沿是否到来,只要复位信号有效,使对系统进行复位。 根据是否存在外部复位端口,复位电路又可分为外部复位和内部复位。外部复位是指复位信号主要来自外部引脚的输入,如复位按钮、电源模块输出等。内部复位信号则是主要由FPGA内部电路产生。 2 复位设计方法的比较 2.1 同步复位与异步复位 2.2.1 同步复位 指定同步复位时,always的敏感表中仅有一个时钟沿信号,只有当时钟沿采集到同步复位的有效电平时,才会在时钟沿到达时刻进行复位操作。若目标器件或可用库中的触发器本身包含同步复位端口,则在实现同步复位电路时可直接调用同步复位端。然而多数目标器件的触发器本身并不包含同步复位端口,需使复位信号与输入信号组成某种组合逻辑,然后将其输入到寄存器的输入端。为了提高复位电路的优先级,通常在电路描述时使用带有优先级的if…else结构,复位电路在第一个if下描述,其他电路在else或else…if分支中描述。复位电路综合后的RTL图如图1所示。 图1 同步复位电路图 根据同步电路的特点,其电路优点有:(1)同步复位有利于基于周期机制的仿真器进行仿真。(2)使用同步复位可设计100%的同步时序电路,有利于时序分析,其综合结果的频率较高。(3)同步复位仅在时钟的有效沿生效,可有效避免因毛刺造成的亚稳态和错误。毛刺信号是由FPGA内部结构特征决定的,同步复位在进行复位和释放复位信号时,仅当时钟沿采到复位信号电平变化时进行相关操作,若复位信号树的组合逻辑出现了某种毛刺,此时时钟沿采到毛刺的概率较低,由此通过时钟沿采样,可有效过波复位电路组合逻辑产生的毛刺,增强了电路稳定性。 同步复位的缺点有:(1)多数目标器件库的触发器本身并不包含同步复位端口,使用同步复位会增加更多逻辑资源。(2)同步复位的最大问题在于必须保证复位信号的有效时间,需要一个脉宽延展器以确保复位信号有一定脉冲宽度,由此才能保证所有触发器均能有效复位。由于同步复位仅当时钟沿采到复位信号时才会进行复位操作,所以其信号的持续时间要大于设计的最长时钟周期,以保证所有时钟的有效沿都能采样到同步复位信号。事实上,仅保证同步复位信号的持续时间大于最慢的时钟周期是不够的,设计中还需考虑到同步复位信号树通过所有相关组合逻辑路径时的延时,以及由于时钟布线产生的偏斜。只有同步复位大于时钟最大周期,加上同步信号穿过的组合逻辑路径延时和时钟偏斜延时,才能确保同步复位的可靠。 2.2.2 异步复位 指定异步复位时,只需在always的敏感表中加人复位信号的有效沿即可,当复位信号有效沿到达时,无论时钟沿是否有效,复位均会立即发挥其功能。 大多数目标器件和ASIC库的触发器均包含异步复位端口,异步复位会直接接人触发器的异步复位端口,综合后的RTL图如图2所示。 图2 异步复位电路图 根据异步电路的特点,异步复位的优点有:(1)由于多数目标器件库的触发器都包含异步复位端口,异步复位会节约逻辑资源。(2)异步复位设计简单。(3)对于多数FPGA,均有专用的全局异步复位/置位资源(GSR,Global Set Reset),还可使用GSR资源,异步复位到达所有寄存器的偏斜最小。 异步复位的缺点如下:(1)异步复位的作用和释放与时钟沿并无直接关系,异步复位生效时问题并不明显;但当释放异步复位时,若异步复位信号释放时间和时钟的有效沿到达时间几乎一致,则容易造成触发器输出为亚稳态,形成逻辑错误。(2)若异步复位逻辑树的组合逻辑产生了毛刺,则毛刺的有效沿会使触发器误复位,造成逻辑错误。 2.3 外部复位和内部复位 外部复位,复位信号主要来自外部引脚的输人。复位信号在电路板上可能会受到来自其他线路的串扰,因此可能产生毛刺,在无需复位系统时,毛刺信号可能导致系统误复位。 内部复位,FPGA上电配置完成后,由FPGA内部电路产生复位信号,复位信号与时钟同步。通常内部复位的设计方法是:设计一个初始值为0X0000的SRL16,将其输人接高电平,输出作为复位信号。 3 复位可靠性设计方法 3.1 消除复位信号上的毛刺 在系统设计中,若采用低有效复位信号,可按照图3所示方法对复位信号中的毛刺进行消除。延时器件对数据进行延时的长度决定复位毛刺消除电路所能避免的毛刺长度,而延时器件的延时长度也决定需要提供有效复位信号的最短时间。 如果复位信号高有效,则将图3中的或门改为与门使用。为更好地消除毛刺,可在复位毛刺消除电路后再加上寄存器对复位信号进行时钟同步。在通常复位电路的设计中,毛刺的长度一般情况下1个时钟周期,16个时钟周期。为节省资源,延时器件通常选用SRL16。SRL16可设置初始值,但不带复位功能16bit移位寄存器,能够通过A0~A3的4根地在线选择从第几个寄存器输出。通常将其作为一个普通的16bit移位寄存器使用。 3.2 异步复位同步释放 在有些应用中,复位信号需要在时钟尚未给出或不稳定的情况下传到后级,在时钟稳定之后,再撤去复位信号。此时需使用异步复位来实现。由于异步复位时,时钟和复位关系的不确定性,易造成触发器输出亚稳态,引起逻辑错误。为确保其复位的可靠性,通常采用异步复位,同步释放的方式。 所谓异步复位,同步释放就是在复位信号到达时不受时钟信号的同步,而是在该信号释放时受时钟信号的同步。通过一个复位信号综合器便可实现异步复位,同步释放。综合后的RTL图如图3所示,其仿真结果表明该电路能有效的实现复位及脱离复位。 图3异步复位、同步释放电路图 3.3 采用专用全局异步复位/置位资源 全局异步复位/置位资源的主要作用是对系统中存在的所有触发器、锁存器、查找表单元的输出寄存器进行复位,不会占有额外的布线资源。使用GSR资源,异步复位到达所有寄存器的偏斜最小。 3.4 采用内部复位的设计方法 在无需复位信号先于时钟信号产生的应用中,为避免外部复位毛刺的影响、异步复位电路可能引起的亚稳态以及减少资源的使用率,可通过FPGA产生内部复位,然后采用异步的方式对其的内寄存器进行复位。由于该复位信号由FPGA内部产生,不会因外部干扰而产生毛刺,同时又与时钟同步,不存在因异步复位导致的亚稳态现象,因此可确保系统可靠复位。 4 结束语 FPGA的可靠复位是保证系统能够正常工作的必要条件,本文对FPGA设计中常用的复位设计方法进行了分类、分析和比较,并针对各种复位方式的特点,提出了如何提高复位设计可靠性的方法。在工程实践中,上述方法可以有效减少或消除FPGA复位所产生的错误。
  • 热度 25
    2014-8-25 20:16
    1175 次阅读|
    1 个评论
    对FPGA设计中常用的复位设计方法进行了分类、分析和比较。针对FPGA在复位过程中存在不可靠复位的现象,提出了提高复位设计可靠性的4种方法,包括清除复位信号上的毛刺、异步复位同步释放、采用专用全局异步复位/置位资源和采用内部复位。上述方法可有效提高FPGA复位的可靠性。 对FPGA芯片而言,在给芯片加电工作前,芯片内部各个节点电位的变化情况均不确定、不可控,而这种不确定且不可控的情况会使芯片在上电后的工作状态出现错误。因此,在FPGA的设计中,为保证系统能可靠进进入工作状态,以及避免对FPGA输出关联的系统产生不良影响,FPGA上电后要进行复位,且为了消除电源开关过程中引起的抖动影响,复位信号需在电源稳定后经过一定的延时才能撤销,FPGA的复位信号需保证正确、稳定、可靠。 在FPGA的设计中,多数情况下复位电路的功能虽能够正常完成,但电路并未得到精确合理的设计,仍存在可靠性设计缺陷。为确保系统复位的可靠性,有必要对FPGA复位的可靠性设计方法进行研究。 1 复位设计方法分类 复位的目的是在仿真时将设计强制定位在一个可知状态,合理选择复位方式是电路设计的关键。根据与系统时钟域的关系,复位电路可分为同步复位和异步复位。同步复位是指复位信号只在时钟沿到来时,才有效。否则,无法完成对系统的复位工作。异步复位是指无论时钟沿是否到来,只要复位信号有效,使对系统进行复位。 根据是否存在外部复位端口,复位电路又可分为外部复位和内部复位。外部复位是指复位信号主要来自外部引脚的输入,如复位按钮、电源模块输出等。内部复位信号则是主要由FPGA内部电路产生。 2 复位设计方法的比较 2.1 同步复位与异步复位 2.2.1 同步复位 指定同步复位时,always的敏感表中仅有一个时钟沿信号,只有当时钟沿采集到同步复位的有效电平时,才会在时钟沿到达时刻进行复位操作。若目标器件或可用库中的触发器本身包含同步复位端口,则在实现同步复位电路时可直接调用同步复位端。然而多数目标器件的触发器本身并不包含同步复位端口,需使复位信号与输入信号组成某种组合逻辑,然后将其输入到寄存器的输入端。为了提高复位电路的优先级,通常在电路描述时使用带有优先级的if…else结构,复位电路在第一个if下描述,其他电路在else或else…if分支中描述。复位电路综合后的RTL图如图1所示。 图1 同步复位电路图 根据同步电路的特点,其电路优点有:(1)同步复位有利于基于周期机制的仿真器进行仿真。(2)使用同步复位可设计100%的同步时序电路,有利于时序分析,其综合结果的频率较高。(3)同步复位仅在时钟的有效沿生效,可有效避免因毛刺造成的亚稳态和错误。毛刺信号是由FPGA内部结构特征决定的,同步复位在进行复位和释放复位信号时,仅当时钟沿采到复位信号电平变化时进行相关操作,若复位信号树的组合逻辑出现了某种毛刺,此时时钟沿采到毛刺的概率较低,由此通过时钟沿采样,可有效过波复位电路组合逻辑产生的毛刺,增强了电路稳定性。 同步复位的缺点有:(1)多数目标器件库的触发器本身并不包含同步复位端口,使用同步复位会增加更多逻辑资源。(2)同步复位的最大问题在于必须保证复位信号的有效时间,需要一个脉宽延展器以确保复位信号有一定脉冲宽度,由此才能保证所有触发器均能有效复位。由于同步复位仅当时钟沿采到复位信号时才会进行复位操作,所以其信号的持续时间要大于设计的最长时钟周期,以保证所有时钟的有效沿都能采样到同步复位信号。事实上,仅保证同步复位信号的持续时间大于最慢的时钟周期是不够的,设计中还需考虑到同步复位信号树通过所有相关组合逻辑路径时的延时,以及由于时钟布线产生的偏斜。只有同步复位大于时钟最大周期,加上同步信号穿过的组合逻辑路径延时和时钟偏斜延时,才能确保同步复位的可靠。 2.2.2 异步复位 指定异步复位时,只需在always的敏感表中加人复位信号的有效沿即可,当复位信号有效沿到达时,无论时钟沿是否有效,复位均会立即发挥其功能。 大多数目标器件和ASIC库的触发器均包含异步复位端口,异步复位会直接接人触发器的异步复位端口,综合后的RTL图如图2所示。 图2 异步复位电路图 根据异步电路的特点,异步复位的优点有:(1)由于多数目标器件库的触发器都包含异步复位端口,异步复位会节约逻辑资源。(2)异步复位设计简单。(3)对于多数FPGA,均有专用的全局异步复位/置位资源(GSR,Global Set Reset),还可使用GSR资源,异步复位到达所有寄存器的偏斜最小。 异步复位的缺点如下:(1)异步复位的作用和释放与时钟沿并无直接关系,异步复位生效时问题并不明显;但当释放异步复位时,若异步复位信号释放时间和时钟的有效沿到达时间几乎一致,则容易造成触发器输出为亚稳态,形成逻辑错误。(2)若异步复位逻辑树的组合逻辑产生了毛刺,则毛刺的有效沿会使触发器误复位,造成逻辑错误。 2.3 外部复位和内部复位 外部复位,复位信号主要来自外部引脚的输人。复位信号在电路板上可能会受到来自其他线路的串扰,因此可能产生毛刺,在无需复位系统时,毛刺信号可能导致系统误复位。 内部复位,FPGA上电配置完成后,由FPGA内部电路产生复位信号,复位信号与时钟同步。通常内部复位的设计方法是:设计一个初始值为0X0000的SRL16,将其输人接高电平,输出作为复位信号。 3 复位可靠性设计方法 3.1 消除复位信号上的毛刺 在系统设计中,若采用低有效复位信号,可按照图3所示方法对复位信号中的毛刺进行消除。延时器件对数据进行延时的长度决定复位毛刺消除电路所能避免的毛刺长度,而延时器件的延时长度也决定需要提供有效复位信号的最短时间。 如果复位信号高有效,则将图3中的或门改为与门使用。为更好地消除毛刺,可在复位毛刺消除电路后再加上寄存器对复位信号进行时钟同步。在通常复位电路的设计中,毛刺的长度一般情况下1个时钟周期,16个时钟周期。为节省资源,延时器件通常选用SRL16。SRL16可设置初始值,但不带复位功能16bit移位寄存器,能够通过A0~A3的4根地在线选择从第几个寄存器输出。通常将其作为一个普通的16bit移位寄存器使用。 3.2 异步复位同步释放 在有些应用中,复位信号需要在时钟尚未给出或不稳定的情况下传到后级,在时钟稳定之后,再撤去复位信号。此时需使用异步复位来实现。由于异步复位时,时钟和复位关系的不确定性,易造成触发器输出亚稳态,引起逻辑错误。为确保其复位的可靠性,通常采用异步复位,同步释放的方式。 所谓异步复位,同步释放就是在复位信号到达时不受时钟信号的同步,而是在该信号释放时受时钟信号的同步。通过一个复位信号综合器便可实现异步复位,同步释放。综合后的RTL图如图3所示,其仿真结果表明该电路能有效的实现复位及脱离复位。 图3异步复位、同步释放电路图 3.3 采用专用全局异步复位/置位资源 全局异步复位/置位资源的主要作用是对系统中存在的所有触发器、锁存器、查找表单元的输出寄存器进行复位,不会占有额外的布线资源。使用GSR资源,异步复位到达所有寄存器的偏斜最小。 3.4 采用内部复位的设计方法 在无需复位信号先于时钟信号产生的应用中,为避免外部复位毛刺的影响、异步复位电路可能引起的亚稳态以及减少资源的使用率,可通过FPGA产生内部复位,然后采用异步的方式对其的内寄存器进行复位。由于该复位信号由FPGA内部产生,不会因外部干扰而产生毛刺,同时又与时钟同步,不存在因异步复位导致的亚稳态现象,因此可确保系统可靠复位。 4 结束语 FPGA的可靠复位是保证系统能够正常工作的必要条件,本文对FPGA设计中常用的复位设计方法进行了分类、分析和比较,并针对各种复位方式的特点,提出了如何提高复位设计可靠性的方法。在工程实践中,上述方法可以有效减少或消除FPGA复位所产生的错误。
  • 热度 39
    2013-9-1 11:19
    1075 次阅读|
    0 个评论
    一、特点: 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用 Verilog 描述如下:            always @ (posedge clk) begin                  if (!Rst_n)                    ...                      end      异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下:               always @ (posedge clk or negedge Rst_n) begin                      if (!Rst_n)                   ...                   end   二、各自的优缺点: 1、总的来说,同步复位的优点大概有3条:  a、有利于仿真器的仿真。 b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。 c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。他的缺点也有不少,主要有以下几条: a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。 b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。       2、对于异步复位来说,他的优点也有三条,都是相对应的        a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。   b、设计相对简单。   c、异步复位信号识别方便,而且可以很方便的使用 FPGA 的全局复位端口GSR。  缺点:          a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。          b、复位信号容易受到毛刺的影响。   三、总结:       所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。
  • 热度 24
    2013-7-1 13:39
    2971 次阅读|
    1 个评论
    异步复位          长时间以来,异步复位在电路设计中经常被采用,特别是ASIC设计中。这样的设计非常受欢迎,比如一个异步输入到器件,然后给该异步信号分配全局布线资源,并连接这个异步信号到器件中每一个(几乎所有)寄存器的异步复位引脚。在某些情况下,这种方法有它的优点,但是它并不是没有缺陷。比如并不是每一个设计,器件中的每一个寄存器都需要复位的。所以说这个方法也不是完全不需要消耗布线资源以及LAB范围控制信号,最好的做法是只将复位连接到那些需要复位的寄存器。          异步复位的一个最大优点是,它们没有象同步复位那样插入到数据路径中。因此,异步复位对寄存器之间的数据到达时间不产生任何负面影响。另一个优点是,它们一般都是即刻生效。只要寄存器收到复位脉冲,寄存器将被即刻复位,而不管相对于时钟的时序关系。所以异步复位不象同步复位那样依赖于时钟。          电路使用异步并没有任何问题,只是在复位被释放的时候可能会出现问题,所谓的复位释放(Release)有时候也被称为复位去除(Removal)。当复位撤除时,它必须满足异步微建立时间,即µt SU 。这个可以在TimeQuest里使用Recovery时间检查来得到确认。此外,复位撤除时,它也必须要满足微保持时间,即µt H 。同样可以在TimeQuest使用Removal时间检查来得到确认。总之,上述两种Check被称为Rcovery/Removal分析。          当复位信号为置无效(Deasserted)时,并且不能通过时序分析里的Recovery和Removal检查时,那么复位信号边沿就会很可能落入了一个亚稳态区域,如图1所示。     图1:亚稳态曲线          亚稳态带来的后果是寄存器的输出(基于输入到寄存器的输入数据)需要花费更多的时间来回复到其正确的状态。这个额外增加的时间可能会导致寄存器下一级的建立时间失败,从而导致系统错误。显然,需要不惜一切代价来避免这种情况。          避免亚稳态的方法之一是在寄存该异步复位的寄存器后增加一系列寄存器,然后使用这些寄存器的输出作为设计的复位。后面增加的寄存器通过将数据同步到时钟的方式来去除亚稳态问题。设计中后续寄存器越接近这些寄存器越好,这样可以最大限度减少布线延时,降低了数据的到达时间,从而增加了平均无故障时间(MTBF)。需要注意,重要的是这些额外增加的寄存器本身不但没有被复位,而且有几个时钟周期通过“冲刷”掉它们当前或者初始状态而被初始化。图2显示了这样一个电路的例子。   图2:异步复位跟随几个寄存器的原理图          在一般情况下,象图12所示的没有反馈电路的流水线设计,它不依赖于时序电路的初始状态,并如果电路能够在跳出复位状态后等待几个周期才开始运作的话,这种类型的复位还是可以接受的。          图2所示电路的Verilog代码如图3所示。请注意与同步复位代码的差异。现在,复位的有效沿已经位于进程的敏感列表中了。同样重要的是,后续两个寄存器不是在第一个进程的“else”部分,而是位于另外一个进程中,因为如果位于第一个进程的“else”部分,复位信号取反后被连接到寄存器的时钟使能端口,从而将会被推导出时钟使能。可以看到后面两个寄存器在第二个进程中使用了非阻塞赋值。     图3:异步复位跟随寄存器代码          约束一个异步复位非常简单,根据定义,异步复位和它们将要复位的寄存器的时钟域之间没有任何确定的时间关系。因此,对这些复位进行静态时序分析是不太可能,它们通常在SDC文件中使用set_false_path语句来进行切割,如图4所示。由于寄存器的复位和时钟之间的时序关系是未知的,所以在TimeQuest中无法对这些路径进行Recovery和Removal分析,即使试图尝试这样做,也不会获得期望的路径报告。即使没有使用假路径约束语句对路径进行切割,也不会有这些路径上的Recovery和Removal报告。     图4:SDC中对异步复位的约束          异步复位除了上述潜在的亚稳态问题,另一个问题是它们对噪声的易感染性。一个“嘈杂”的异步复位,很可能导致虚假的复位。出于这个原因,对异步复位进行滤波和去抖是非常重要的。如前所述,由于同步复位经过了时钟寄存,所以同步复位是不太容易出现此问题(虽然不是绝对免疫)。后面我们将看到的同步化的异步复位,会讨论完全避免这个问题的方法。          同样的,异步复位最大的问题也许还是涉及到复位的释放(移除)。除了潜在的亚稳态问题外,无法保证每个寄存器的异步复位和时钟之间时序关系都是一样的,因为这些寄存器被布局布线于整个器件的各处。如此带来的影响是有些寄存器会及时复位,而有些寄存器不会,而是要等到下一个时钟周期才能复位。对于类似这种一个寄存器的下一个输出依赖与其它寄存器的当前输出反馈电路将带来潜在的灾难性影响。一个常见的例子就是带状态机的电路。One-Hot状态机尤其会有这种问题,因为其一次只有一个状态位被设置。由于有些状态位跳出复位状态,而其它状态位没有,那么就会有多于一个状态位被置高(即有效),这样这个状态机就会进入非法状态。如果使用二进制编码状态机,它可以创建未使用的状态来过渡到复位状态,这使得其成为一个确定性的状态机。这样就允许一个非法的或者闲置的状态得到完美的恢复。 注:现在的Quartus II 软件中有一个“Safe State Machine ”的综合设置,可以用来保证设计的状态机从非法状态完美恢复。只是这个设置默认是没有打开的。          尽管我们看到有办法解决异步复位产生的这些问题,但是还是尽可能避免使用异步复位。如何避免上述复位的问题,只能是改变复位的结构,后面我们将会看到一种不同的复位机制,即同步化的异步复位。  
  • 热度 28
    2011-2-17 22:45
    3361 次阅读|
    0 个评论
    It is the opinion of the authors that in general, every flip-flop in an ASIC should be resettable whether or not it is required by the system. Furthermore, the authors prefer to use asynchronous resets following the guidelines detailed in this paper. There are exceptions to these guidelines.   In some cases, when follower flip-flops (shift register flip-flops) are used in high speed applications, reset might be eliminated from some flip-flops to achieve higher performance designs. This type of environment requires a number of clocks during the reset active period to put the ASIC into a known state. Many design issues must be considered before choosing a reset strategy for an ASIC design, such as whether to use synchronous or asynchronous resets, will every flip-flop receive a reset, how will the reset tree be laid out and buffered, how to verify timing of the reset tree, how to functionally test the reset with test scan vectors, and how to apply the reset among multiple clock zones. 1.   Synchronous resets There are some advantages to using synchronous resets, but there are also disadvantages. The same is true for asynchronous resets.   The designer must use the approach that is appropriate for the design. Synchronous resets are based on the premise that the reset signal will only affect or reset the state of the flip-flop on the active edge of a clock. The reset can be applied to the flip-flop as part of the combinational logic generating the d-input to the flip-flop. If this is the case, the coding style to model the reset should be an if/else priority style with the reset in the if condition and all other combinational logic in the else section. If this style is not strictly observed, two possible problems can occur. First, in some simulators, based on the logic equations, the logic can block the reset from reaching the flip-flop. This is only a simulation issue, not a hardware issue, but remembers, one of the prime objectives of a reset is to put the ASIC into a known state for simulation. Second, the reset could be a “ late arriving signal” relative to the clock period, due to the high fan-out of the reset tree. Even though the reset will be buffered from a reset buffer tree, it is wise to limit the amount of logic the reset must traverse once it reaches the local logic. This style of synchronous reset can be used with any logic or library. Example 3 shows an implementation of this style of synchronous reset as part of a loadable counter with carry out. module ctr8sr ( q, co, d, ld, rst_n, clk);   output q;   output       co;   input   d;   input        ld, rst_n, clk;   reg      q;   reg          co;   always @(posedge clk)     if       (!rst_n) {co,q} = 9'b0;      // sync reset     else if (ld)      {co,q} = d;         // sync load     else            {co,q} = q + 1'b1; // sync increment endmodule Example 3a - Verilog code for a loadable counter with synchronous reset Figure 3 - Loadable counter with synchronous reset 1.1 Advantages of synchronous resets Synchronous reset will synthesize to smaller flip-flops, particularly if the reset is gated with the logic generating the d-input. But in such a case, the combinational logic gate count grows, so the overall gate count savings may not be that significant. If a design is tight, the area savings of one or two gates per flip-flop may ensure the ASIC fits into the die. However, in today’s technology of huge die sizes, the savings of a gate or two per flip-flop is generally irrelevant and will not be a significant factor of whether a design fits into a die. Synchronous reset can be much easier to work with when using cycle based simulators. For this very reason, synchronous resets are recommend in section 3.2.4(2 nd edition, section 3.2.3 in the 1 st edition) of the Reuse Methodology Manual (RMM) . Synchronous resets generally insure that the circuit is 100% synchronous. Synchronous resets insure that reset can only occur at an active clock edge.   The clock works as a filter for small reset glitches; however, if these glitches occur near the active clock edge, the flip-flop could go meta-stable. In some designs, the reset must be generated by a set of internal conditions.   A synchronous reset is recommended for these types of designs because it will filter the logic equation glitches between clocks. By using synchronous resets and a number of clocks as part of the reset process, flip-flops can be used within the reset buffer tree to help the timing of the buffer tree keep within a clock period. 1.2 Disadvantages of synchronous resets Synchronous resets may need a pulse stretcher to guarantee a reset pulse width wide enough to ensure reset is present during an active edge of the clock . A designer must work with pessimistic vs. optimistic simulators. This can be an issue if the reset is generated by combinational logic in the ASIC or if the reset must traverse many levels of local combinational logic. During simulation, based on how the reset is generated or how the reset is applied to a functional block, the reset can be masked by X’s. A large number of the ESNUG articles addressed this issue. Most simulators will not resolve some X-logic conditions and therefore block out the synchronous reset . By its very nature, a synchronous reset will require a clock in order to reset the circuit. This may not be a disadvantage to some design styles but to others, it may be an annoyance. The requirement of a clock to cause the reset condition is significant if the ASIC/FPGA has an internal tri-state bus.   In order to prevent bus contention on an internal tri-state a tri-state bus when a chip is powered up, the chip must have a power on asynchronous reset . 2 Asynchronous resets Asynchronous resets are the authors preferred reset approach. However, asynchronous resets alone can be very dangerous. The biggest problem with asynchronous resets is the reset release, also called reset removal. The subject will be elaborated in detail later. Asynchronous reset flip-flops incorporate a reset pin into the flip-flop design. The reset pin is typically active low(the flip-flop goes into the reset state when the signal attached to the flip-flop reset pin goes to a logic low level.) 2.1 Coding style and example circuit The Verilog code of Example 5a shows the correct way to model asynchronous reset flip-flops.   Note that the reset is part of the sensitivity list. For Verilog, adding the reset to the sensitivity list is what makes the reset asynchronous. In order for the Verilog simulation model of an asynchronous flip-flop to simulate correctly, the sensitivity list should only be active on the leading edge of the asynchronous reset signal. Hence, in Example 5a, the always procedure block will be entered on the leading edge of the reset, then the if condition will check for the correct reset level. module async_resetFFstyle (q, d, clk, rst_n);   output q;   input   d, clk, rst_n;   reg     q;   // Verilog-2001: permits comma-separation   // @(posedge clk, negedge rst_n)   always @(posedge clk or negedge rst_n)     if (!rst_n) q = 1'b0;     else         q = d; endmodule Example 5a - Correct way to model a flip-flop with asynchronous reset using Verilog 2.2 Advantages of asynchronous resets The biggest advantage to using asynchronous resets is that, as long as the vendor library has asynchronously reset-able flip-flops, the data path is guaranteed to be clean. Designs that are pushing the limit for data path timing, cannot afford to have added gates and additional net delays in the data path due to logic inserted to handle synchronous resets. Of course this argument does not hold if the vendor library has flip-flops with synchronous reset inputs and the designer can get Synopsys to actually use those pins. Using an asynchronous reset, the designer is guaranteed not to have the reset added to the data path. The code in Example 7 infers asynchronous resets that will not be added to the data path. module ctr8ar ( q, co, d, ld, rst_n, clk);   output q;   output        co;   input   d;   input         ld, rst_n, clk;   reg     q;   reg           co; always @(posedge clk or negedge rst_n)     if       (!rst_n) {co,q} = 9'b0;      // async reset     else if (ld)      {co,q} = d;         // sync load     else              {co,q} = q + 1'b1; // sync increment endmodule Example 7a- Verilog code for a loadable counter with asynchronous reset Figure 4 - Loadable counter with asynchronous reset Another advantage favoring asynchronous resets is that the circuit can be reset with or without a clock present. The experience of the authors is that by using the coding style for asynchronous resets described in this section, the synthesis interface tends to be automatic. That is, there is generally no need to add any synthesis attributes to get the synthesis tool to map to a flip-flop with an asynchronous reset pin. 2.3 Disadvantages of asynchronous resets There are many reasons given by engineers as to why asynchronous resets are evil. The Reuse Methodology Manual (RMM) suggests that asynchronous resets are not to be used because they cannot be used with cycle based simulators. This is simply not true. The basis of a cycle based simulator is that all inputs change on a clock edge. Since timing is not part of cycle based simulation, the asynchronous reset can simply be applied on the inactive clock edge. For DFT, if the asynchronous reset is not directly driven from an I/O pin, then the reset net from the reset driver must be disabled for DFT scanning and testing. This is required for the synchronizer circuit shown later. Some designers claim that static timing analysis is very difficult to do with designs using asynchronous resets. The reset tree must be timed for both synchronous and asynchronous resets to ensure that the release of the reset can occur within one clock period. The timing analysis for a reset tree must be performed after layout to ensure this timing requirement is met. The biggest problem with asynchronous resets is that they are asynchronous, both at the assertion and at the de-assertion of the reset. The assertion is a non issue, the de-assertion is the issue. If the asynchronous reset is released at or near the active clock edge of a flip-flop, the output of the flip-flop could go metastable and thus the reset state of the ASIC could be lost. Another problem that an asynchronous reset can have, depending on its source, is spurious resets due to noise or glitches on the board or system reset. See section later for a possible solution to reset glitches. If this is a real problem in a system, then one might think that using synchronous resets is the solution. A different but similar problem exists for synchronous resets if these spurious reset pulses occur near a clock edge, the flip-flops can still go metastable. This article abstracted from CummingsSNUG2002SJ_Resets , the original author is Clifford E. Cummings and Don Mills.      
相关资源