首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

认识FPGA触发器的亚稳态(2)

认识FPGA触发器的亚稳态(2)

亚稳态的危害
   目前主流的FPGA都是基于同步设计思想。一个良好的子模块设计都是同步于同一个时钟的子系统。当不同时钟域的多个模块进行通信时,就可能会发生亚稳态。
    另外,同一个时钟域内,如果时序不满足,比如由于组合逻辑和走线的延时过大,导致源寄存器的跳变到达目的寄存器的时刻刚好位于时钟的跳变沿,也会发生亚稳态。当然,在同步模块中,对于一个时序收敛良好的设计,不会存在亚稳态的情况。
    1. 理论上讲,如果亚稳态不能够在一个时钟周期内返回到稳定态,那么目的寄存器也会发生亚稳态。这就是亚稳态的传播。
    2. 亚稳态的毛刺直接输出,有可能导致系统错误。比如毛刺信号送给CPU做中断,可能导致CPU产生错误的中断响应。
    3. 采样到错误的电平,导致功能错误。这是逻辑设计人员最容易遇到的问题。最典型的例子是,假设有一个4bitsone-hot编码的状态机。正常的功能只有四个状态0,2,4,8。但是这个状态机的有多个异步输入信号,那么就会发生亚稳态。我们知道,亚稳态返回到1或者0是随机的,这样就会出现状态机的输入有非法的组合,导致状态机进入到非法状态{1,3,5,6,7,9,10….}。如果状态机没有安全编码保护,状态机就会挂死在非法状态。
    4.  破坏BlockRAM的内容。在读取RAM时,如果生成读地址的时钟和RAM的读时钟是异步的,那么读取也会破坏RAM的内容。基本上是因为读RAM会伴随一个自动的回写动作,这是大多数CMOSFPGA的特性。回写的时候,由于在地址上发生了亚稳态,导致某一个地址的内容回写到了另外的地址上,从而破坏了RAM的内容。

亚稳态的处理
   
理论上讲,异步信号输入到一个同步系统,亚稳态是不可避免的。现实问题是如何降低亚稳态带来的危害,如何降低亚稳态发生的概率。
   亚稳态最终会返回到稳定态,因此只要等足够的时间,就可以免受亚稳态的危害。亚稳态返回的时间tR(resolutiontime)是个很复杂的问题,取决于系统的MTBF要求和器件本身。总的来是很短的。对于90nm或者更小的工艺,在可以接受的MTBF如10年内,tR大约在1nS左右;MTBF如1000年内,tR大约在2nS左右,具体可以咨询响应的FPGA制造商。
    1.降低亚稳态发生的概率。
    经典的处理方法是多拍同步。参见图5的Correct Method.


   异步信号经过第一个寄存器,如果发生了亚稳态,2nS(假设MTBF=1000Y)左右返回到稳定态,如果时钟周期大于2ns(时钟频率小于500MHz),那么显然第二个寄存器就没有亚稳态发生了。此时亚稳态的唯一影响就是不能在最准确的时刻识别到异步信号,有可能早一拍,或者晚一拍识别。
   多说一点,为了处理亚稳态,识别异步信号需要的时间就较长(2拍或者更多),这就是目前流行的同步设计的代价。异步设计较好的解决了这个问题,异步设计靠硬件握手机制来反馈什么时候识别成功。有兴趣的朋友可以了解一下一个新兴的FPGA公司Achronix。   
   作为对比,我们看看图5中的wrong method.第一拍触发器在接收异步信号后,产生了亚稳态。由于经过了组合逻辑和走线的延时,亚稳态传播到目的寄存器的时间增大很多。这种情况下,只有在很低速的时钟频率时,第二拍触发器才可以避免亚稳态。因此是不正确的处理方法。

2. 降低亚稳态带来的危害。
   一个良好的设计必须有好的容错能力,让设计对亚稳态不敏感。如果亚稳态出现,至少要有能力恢复。
   1. 状态机如果有异步信号输入,一定要多拍处理异步信号,并且使用安全状态机,任何情况下不可以让状态机挂死在非法状态。
   2.  异步接口不可能做到准确地定时,在预算精度时,必须容忍+/-1拍的延时。
   3.  异步FIFO两个时钟域的地址交互时,使用格雷码计数器并多拍处理,可减低对亚稳态的敏感.
   4. 能用低的频率实现的功能,不要用高的频率。频域较高时,要用三拍或者更多的触发器来降低亚稳态的危害。
   5.  较陡的信号边沿(包括数据和时钟)有利于降低发生亚稳态的概率。

小结
   
亚稳态是一个逻辑设计者必须知道的知识点。搞清楚亚稳态的响应,并采取措施防范是一个良好的逻辑设计的基本要求,必须在编码过程中加倍小心。而不是在亚稳态对设计产生了危害之后,再花费大量资源去找出根因。做正确的事情远比把事情做正确要重要的多。希望本文对你的工作有所帮助。
继承事业,薪火相传
返回列表