《跨越鸿沟:同步世界中的异步信号》论文精读

前言:

        最近我的老师推荐了一篇论文《跨越鸿沟:同步世界中的异步信号》由Mike Stein撰写,主要探讨了在多时钟域设计中如何处理异步信号的问题,CNKI上可直接下载PDF,笔者自己比较喜欢按照问答的结构对文章需要展开的点进行梳理。

1、 IC、ASIC、FPGA设计中遇到的挑战——跨时钟域传输

什么是异步信号?

        只有最初级的逻辑电路才使用单一时钟,大多数与数据相关的应用都是从一个时钟域传输到另一个时钟域,那么当一组信号从一个时钟域传送到另一个时钟域时,出现在新时钟域的信号就是异步信号。

为什么要对异步信号进行同步?

        同步可以防止第一级储存单元(触发器)的亚稳态在新的时钟域中蔓延。

什么是亚稳态,为什么要避免?

        亚稳态是指触发器 无法在某个规定时间段内达到一 个可确认的状态 。 当一个触发器进人亚稳态时 , 既无法预测该单元的输出电平,也无法预测 何时输出才能稳定在某个正确的电平上。在这个稳定期间 , 触发器输出一些中间级电平,或者可能处于振荡状 态 , 并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去,这样对整个电路的影响将是巨大的。听着有点抽象,想要搞明白这一点,首先我们要了解时序分析的一些基本知识。

        寄存器要想稳定实现预期功能,就要满足建立时间t_{su}、保持时间t_{h}的要求,相关知识我会在《FPGA之道》第七章更新。如图1.1就是一个正常的传输过程。也就是说,输入数据在有效时钟沿到来变化之前,要维持一段时间,变化之后也要维持一段时间,假如现在不满足要求输入D直接在建立时间+保持时间之内变化,就会触发亚稳态,如图1.2.

图1.1

图1.2

什么是MTBF?

        厂商用MTBF来标识合格的触发器并且确定他们的特性, MTBF(平均无故障时间)用统计方法描述了一个触发器的亚稳态特性,即确定某个触发器出现故障的概率 。从公式定义来看,其与频率成反比,也就是说,频率越高,越容易出问题,我觉的这可能也是FPGA无法工作在太高频率的一个原因之一。

2、信号同步

如何应对异步信号?

        信号同步,信号同步的目的是防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响 。最简单的同步器就是由两个触发器串联而成,如图2.3。

图2.3

为什么两个触发器就能做到消除亚稳态?

        首先我们来看第一个触发器,第一个触发器来自第一个时钟域,在输出信号到第二个时钟域的时候出现了亚稳态,刚才说过,亚稳态表现为无法确定其具体状态,也就是说,亚稳态最终会恢复到一个稳定的状态。知道这一点我们来看第二个触发器,我们假设亚稳态就是图1.2中的震荡,那么这种震荡从第二个触发器输出后经过一段时间趋于平稳,那么对于第三个触发器,他的输入就有机会可以满足建立时间t_{su}、保持时间t_{h}了,如果我们通过设计确保其满足,那么第三个触发器就不会再输出亚稳态信号了。当然输出的信号只是稳定了,并不一定正确,毕竟亚稳态输出最后恢复成什么样的电平是不确定的。

为什么不能从第一个时钟域的出口直接进入同步器,而是先经过一个触发器,再进入同步器?

        这点很重要,我们为了让同步电路正常工作,要求第一个时钟域的出口先经过一个触发器,然后不经过任何组合逻辑,直接进入同步电路,这是因为,组合逻辑通常会有产生毛刺,而同步器的第一个触发器对毛刺信号非常敏感,如果现在有一个足够长到满足t_{su}t_{h}的要求,那么触发器就会放行,给后续逻辑一个虚假信号,这对后续逻辑是非常有害的。除此之外还要注意,信号在成为新时钟域的有效信号之前还要经过一定的延时,差不多两个时钟,在设计是要考虑到这一点。

同步器大致分为几种,都有什么特点?

        同步器大致分为电平、边沿检测、脉冲三种,网上有详细的说明,简单说说其特点。

        电平同步器在跨时钟域的信号要在新时钟域保持两个以上时钟的高/低电平,这种电路的要求是在再次成为有效信号前要先变成无效状态,每次信号有效时,接受逻辑都会把它看作一个单一事件,而不管有效状态持续了多久,这种电路是所有同步器的核心。

        边沿检测同步器,用于慢时钟域进入快时钟域,反之则没用。

        脉冲同步器和边沿相反。

3、握手与FIFO

        跨时钟域不止会传输简单的信号,各种总线也会跨时钟传输,这时我们就要用到握手协议和FIFO等手段来处理了。当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信。例如,仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲裁方法来决定哪个电路 可以获得总线的访问权,例如或高级微控制器总线架构。每个电路都发出一个请求信号,由仲裁 逻辑决定谁是 “ 赢家 ” 。 获胜的电路会收到一个应答,表示它可以访问总线。该电路于是中断请求,开始使用总线。

什么是仲裁总线结构?

        仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲裁方法来决定哪个电路可以获得总线的访问权,例如或高级微控制器总线架构。每个电路都发出一个请求信号,由仲裁逻辑决定谁是 “ 赢家 ”。获胜的电路会收到一个应答,表示它可以访问总线。该电路于是中断请求,开始使用总线

什么是全握手、部分握手?

        全握手:举个例子,现在A和B要握手,双方在声明和中止自己的信号前,必须要等待对方的信号。比如,A先发出请求,B收到后发出响应,当A检测到相应后,中断请求,B检测到A的请求信号无效后,中断自己的响应信号,这时A除非检测到B的相应信号无效,否则不会再发出新的请求。

        部分握手:AB不用等对方相应就中断各自的信号。

这和我们之前学的跨时钟与传输有什么关系?

        如全握手,采用的是电平同步器,AB相当于两个时钟域在传输信号,那么最少需要11个时钟周期(A域5个、B域6个)才能完成握手。至于为什么是11个,因为全握手要求,请求电路延迟下一个请求,直到检测到响应信号无效,如图3.1,当然了,快也意味着没有全握手可靠。

图3.1 

      部分握手:A以有效电平声明请求信号,B以单时钟宽度脉冲作为响应,B不关心A什么时候中止请求,A的中止信号至少要有一个周期长否则B区分不了前一个请求和新的请求。这种握手方法中,B为A的请求信号用了一个电平同步器,A为B的响应信号用了一个脉冲同步器。如图3.2

图3.2 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值