
跨越鸿沟_同步世界中的异步信号.doc
10页跨越鸿沟:同步世界中的异步信号跨越鸿沟:同步世界中的异步信号只有最初级的逻辑电路才使用单一的时钟大多数与数据传输相关的应用都有与生俱来的挑战,即跨越多个时钟域的数据移动,例如磁盘控制器、CDROM/DVD 控制器、调制解调器、网卡以及网络处理器等当信号从一个时钟域传送到另一个时钟域时,出现在新时钟域的信号是异步信号 在现代 IC、 ASIC 以及 FPGA 设计中,许多软件程序可以帮助工程师建立几百万门的电路,但这些程序都无法解决信号同步问题设计者需要了解可靠的设计技巧,以减少电路在跨时钟域通信时的故障风险 基础基础 从事多时钟设计的第一步是要理解信号稳定性问题当一个信号跨越某个时钟域时,对新时钟域的电路来说它就是一个异步信号接收该信号的电路需要对其进行同步同步可以防止第一级存储单元(触发器)的亚稳态在新的时钟域里传播蔓延 亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
对任何一种触发器,在时钟触发沿前后的一个小时间窗口内,输入信号必须稳定这一时间窗口是多种因素的函数,包括触发器设计、实现技术、运行环境以及无缓冲输出上的负载等输入信号陡峭的边沿可以将此窗口减至最小随着时钟频率的升高,会出现更多有问题的时间窗口,而随着数据频率的提升,这种窗口的命中概率则会增加 FPGA 制造商和 IC 晶片厂用“MTBF”来标识合格的触发器,并且确定它们的特性MTBF”(平均无故障时间)用统计方法描述了一个触发器的亚稳态特性,即确定某个触发器出现故障的概率在计算 MTBF 时,制造商部分基于输入信号改变导致触发器不稳定期间的时间窗口长度另外,MTBF 的计算还使用了输入信号的频率以及驱动触发器的时钟频率 在一个 ASIC 或 FPGA 库中,每种触发器都有时序要求,以帮助你确定容易出问题的窗口建立时间”(Setup time)是指在时钟沿到来之前,触发器输入信号必须保持稳定的时间保持时间”(Hold time)则是指在时钟沿之后,信号必须保持稳定的时间这些指标通常比较保守,以应对电源电压、工作温度、信号质量以及制造工艺等各种可能的差异如果一个设计满足了这些时序要求,则触发器出现错误的可能性可以忽略不计。
现代 IC 与 FPGA 设计中使用的综合工具可以保证设计能满足每个数字电路触发器对建立与保持时间的要求然而,异步信号却给软件提出了难题对新的时钟域来说,从其它时钟域传来的信号是异步的大多数综合工具在判定异步信号是否满足触发器时序要求时遇到了麻烦因为它们不能确定触发器处于非稳态的时间,所以它们也就不能确定从一个触发器通过组合逻辑到达下一个触发器的总延迟时间所以,最好的办法是使用一些电路来减轻异步信号的影响 信号同步信号同步 信号同步的目的是防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响简单的同步器由两个触发器串联而成,中间没有其它组合电路这种设计可以保证后面的触发器获得前一个触发器输出时,前一个触发器已退出了亚稳态,并且输出已稳定设计中要注意将两个触发器放得尽可能近,以确保两者间有最小的时滞(clock skew) IC 制造厂提供同步单元,帮助完成信号同步工作这些单元通常包括一个有非常高增益的触发器,它比普通触发器耗电更高,也比较大这种触发器降低了对输入信号建立-保持时间的要求,并且当输入信号导致亚稳态时,它可以防止出现振荡另一种同步器单元包括两个触发器,省去了将两个单独触发器靠近放置的工作,也防止设计人员误在两个触发器间加入任何其它的组合逻辑。
为了使同步工作能正常进行,从某个时钟域传来的信号应先通过原时钟域上的一个触发器,然后不经过两个时钟域间的任何组合逻辑,直接进入同步器的第一个触发器中(图 1)这一要求非常重要,因为同步器的第一级触发器对组合逻辑所产生的毛刺非常敏感如果一个足够长的信号毛刺正好满足建立-保持时间的要求,则同步器的第一级触发器会将其放行,给新时钟域的后续逻辑送出一个虚假的信号 图 1,在一个全同步器电路中,从某个时钟域传来的信号应先通过原时钟域上的一个触发器,然后不经过原触发器和同步器的第一个触发器两个时钟域间的任何组合逻辑,直接进入同步器的第一个触发器中 一个经同步后的信号在两个时钟沿以后就成为新时钟域中的有效信号信号的延迟是新时钟域中的一到两个时钟周期一种粗略的估算方法是同步器电路在新时钟域中造成两个时钟周期的延迟,设计者需要考虑同步延迟将对跨时钟域的信号时序造成的影响 同步器有许多种设计方法,因为一种同步器不能满足所有应用的需求同步器的类型基本上有三种:电平、边沿检测和脉冲(表 1)虽然还存在着其它类型的同步器,但这三种类型的同步器可以解决设计者遇到的多数应用问题在电平同步器中,跨时钟域的信号在新时钟域中要保持高电平或低电平两个时钟周期以上。
这种电路的要求是,在再次成为有效信号前,信号需要先变成无效状态每一次信号有效时,接收逻辑都会把它看作一个单个事件,而不管信号的有效状态保持了多久这种电路是所有同步器电路的核心 表 1 边沿检测同步器在电平同步器的输出端增加了一个触发器(图 2)新增触发器的输出经反相后和电平同步器的输出进行与操作这一电路会检测同步器输入的上升沿,产生一个与时钟周期等宽、高电平有效的脉冲如果将与门的两个输入端交换使用,就可以构成一个检测输入信号下降沿的同步器将与门改为与非门可以构建一个产生低电平有效脉冲的电路 图 2,边沿检测同步器在电平同步器的输出端增加了一个触发器 当一个脉冲进入更快的时钟域中时,边沿检测同步器可以工作得很好这一电路会产生一个脉冲,用来指示输入信号上升或下降沿这种同步器有一个限制,即输入脉冲的宽度必须大于同步时钟周期与第一个同步触发器所需保持时间之和最保险的脉冲宽度是同步器时钟周期的两倍如果输入是一个单时钟宽度脉冲进入一个较慢的时钟域,则这种同步器没有作用,在这种情况下,就要采用脉冲同步器 脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路(图 3)每当翻转电路接收到一个脉冲时,它就会在高、低电平间进行转换,然后通过电平同步器到达异或门的一个输入端,而另一个信号经一个时钟周期的延迟进入异或门的另一端,翻转电路每转换一次状态,这个同步器的输出端就产生一个单时钟宽度的脉冲。
图 3,脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路 脉冲同步器的基本功能是从某个时钟域取出一个单时钟宽度脉冲,然后在新的时钟域中建立另一个单时钟宽度的脉冲脉冲同步器也有一个限制,即输入脉冲之间的最小间隔必须等于两个同步器时钟周期如果输入脉冲相互过近,则新时钟域中的输出脉冲也紧密相邻,结果是输出脉冲宽度比一个时钟周期宽当输入脉冲时钟周期大于两个同步器时钟周期时,这个问题更加严重这种情况下,如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲 握手与握手与 FIFO 在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线和控制总线都会同时跨域传输工程师们用一些其它的手段来处理这些情况,如握手协议和 FIFO 等 当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信例如,仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲裁方法来决定哪个电路可以获得总线的访问权,例如 PCI 或 AMBA(高级微控制器总线架构)每个电路都发出一个请求信号,由仲裁逻辑决定谁是“赢家”获胜的电路会收到一个应答,表示它可以访问总线该电路于是中断请求,开始使用总线。
不同时钟域电路使用的握手协议有两种基本类型:全握手(Full-handshake)和部分握手(partial-handshake)每种类型的握手都要用同步器,每种都各有自己的优缺点对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应(图 4)首先,电路 A 声明它的请求信号,然后,电路 B 检测到该请求信号有效后,声明它的响应信号当电路 A 检测到响应信号有效后,中止自己的请求信号最后,当电路 B 检测到请求无效后,它中止自己的响应信号除非电路 A 检测到无效的响应信号,否则它不会再声明新的请求信号 图 4,对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应这种类型的握手使用了电平同步器设计人员将这种技术用在如下情况:响应电路(电路 B)需要告知请求电路(电路 A)它可以处理请求这种握手方法要求请求电路延迟它的下一个请求,直到它检测到响应信号无效可以用经验估算法判断这个协议的时序:信号跨越一个时钟域要花两个时钟周期的时间,信号在跨越多个时钟域前被电路寄存全部的时间序列是:A 时钟域中最多五个周期加上 B 时钟域最多六个周期全握手类型很强健,因为通过检测请求与响应信号,每个电路都清楚地知道对方的状态。
这种方式的不足之处是完成所有交互的整个过程要花费很多时钟周期 另一种类型是部分握手,它可以缩短这些事件的过程使用部分握手信号时,通信双方的电路都不等对方的响应就中止各自的信号,并继续执行握手命令序列部分握手类型比全握手类型在健壮性方面稍弱,因为握手信号并不指示各自电路的状态,每一电路都必须保存状态信息(在全握手信号里这个信息被送出去)但是,由于无需等待其它电路的响应,完整的事件序列花费时间较少 当使用部分握手信号方式时,响应的电路必须以正确的时序产生它的信号如果响应电路要求先处理完一个请求,然后才能处理下一个请求,则响应信号的时序就很重要电路用它的响应信号来指示它的处理任务何时完成一种部分握手方法混合了电平与脉冲信号,而其它的方法则只使用脉冲信号 在第一种部分握手方法中,电路 A 以有效电平声明其请求信号,电路 B 则以一个单时钟宽度脉冲作为响应此时,电路 B 并不关心电路 A 何时中止它的请求信号但为了使这种方法成立,电路 A 中止请求信号至少要有一个时钟周期长,否则,电路 B 就不能区别前一个请求和新的请求在这种握手方式下,电路 B 为请求信号使用一个电平同步器,电路 A 为响应信号使用一个脉冲同步器。
只有当电路 B 检测到请求信号时才发出响应脉冲这种情况可以使电路 A 通过控制其请求信号的时序,控制同步器接收到的脉冲间隔(图 5)同样可以用经验估算法确定时序,即信号跨越一个时钟域要花两个时钟周期并且在跨越时钟域前被电路寄存 图 5,在一种部分握手方法中,电路 A 发出它的请求信号,电路 B 则以一个单时钟宽度脉冲作为响应全部的序列为 A 时钟域最多三个周期加上 B 时钟域最多五个周期这种部分握手方法比全握手方法在 A、B 两个时钟域分别少用了两个和一个时钟周期如果采用第二种部分握手方法可以再减少一些时钟周期,此时电路 A 用一个单时钟宽度脉冲发出它的请求,而电路 B 也用一个单时钟宽度脉冲响应这个请求这种情况下,两个电路都需要保存状态,以指示请求正待处理 图 6,这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替(图 6)完整的时序是:A 时钟域最多两个周期加上 B 时钟域最多三个周期所以这种部分握手技术与全握手方法相比,在 A 时钟域少用三个时钟周期,在 B 时钟域也少用三个时钟周期。
同时,也比第一种部分握手方法分别在 A、B 时钟域快了一个和两个周期(表 2)这些握手协议针对的都是跨越时钟域的单一信号但当几组信号要跨越时钟域时,设计人员就需要使用更加复杂的信号传送方法表 2 数据路径设计数据路径设计在进行信号同步时。
