跨时钟域信号同步方法6种

上传人:ni****g 文档编号:486834244 上传时间:2023-01-16 格式:DOCX 页数:9 大小:350.79KB
返回 下载 相关 举报
跨时钟域信号同步方法6种_第1页
第1页 / 共9页
跨时钟域信号同步方法6种_第2页
第2页 / 共9页
跨时钟域信号同步方法6种_第3页
第3页 / 共9页
跨时钟域信号同步方法6种_第4页
第4页 / 共9页
跨时钟域信号同步方法6种_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《跨时钟域信号同步方法6种》由会员分享,可在线阅读,更多相关《跨时钟域信号同步方法6种(9页珍藏版)》请在金锄头文库上搜索。

1、跨时钟域信号同步方法6种ASIC中心1引言基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时 钟系统。但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块 与外围芯片的通信中,跨时钟域的情况经常不可避免。如果对跨时钟域带来的亚 稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行。 本文总结出了几种同步策略来解决跨时钟域问题。2异步设计中的亚稳态触发器是FPGA设计中最常用的基本器件。触发器工作过程中存在数据的 建立(setup)和保持(hold)时间。对于使用上升沿触发的触发器来说,建立时间 就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小

2、时间。而保持 时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时 间。我们把这段时间成为setup-hold时间(如图1所示)。在这个时间参数内, 输入信号在时钟的上升沿是不允许发生变化的。如果输入信号在这段时间内发生 了变化,输出结果将是不可知的,即亚稳态(Metastability)! g牡-Llti LiJH * Util 诅 1IIH:J1 /Il.i Lpholl ti Hdi图1一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存, 那么采样的结果将可能是亚稳态。这也就是信号在跨时钟域时应该注意的问题。 如图2所示。图2触发器产生亚稳态信号dat经过一个锁

3、存器的输出数据为a_dat。用时钟b_clk进行采样 的时候,如果a_dat正好在b_clk的setup-hold时间内发生变化,此时b_ dat 就既不是逻辑1,也不是逻辑0,而是处于中间状态。经过一段时间之后,有 可能回升到高电平,也有可能降低到低电平。输出信号处于中间状态到恢复为逻 辑1或逻辑0 的这段时间,我们称之为亚稳态时间。触发器进入亚稳态的时间可以用参数MTBF(Mean Time BetweenFailures)来描述,MTBF即触发器采样失败的时间间隔,表示为:其中fclock表示系统时钟频率,fdata代表异步输入信号的频率,tmet代表不 会引起故障的最长亚稳态时间,C1

4、和C2分别为与器件特性相关的常数。如果MTBF 很大,就认为这个设计在实际工作中是能够正常运行的,不会因为亚稳态导致整 个系统的失效。当触发器处于亚稳态,且处于亚稳态的时间超过了一个时钟周期, 这种不确定的状态还会影响到下一级的触发器,最终导致连锁反应,从而使整个 系统功能失常。3同步策略在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路应 该是:首先尽可能减少出现亚稳态的可能性,其次是尽可能减少出现亚稳态并给 系统带来危害的可能性。以下是根据实际工作总结出来的几种同步策略。3.1电平同步器为了避免进入亚稳态,应当使参数MTBF尽可能大。通常采用的方法是双 锁存器法,即在一个信号进入

5、另一个时钟域之前,将该信号用两个锁存器连续锁 存两次(如图3所示)。理论研究表明这种设计可以将出现亚稳态的几率降低到一 个很小的程度,但这种方法同时带来了对输入信号的一级延时,需要在设计时钟 的时候加以注意。图3双锁存器法解决亚稳态问题对于上面的双锁存器法,如果a_clk的频率比b_clk的频率高,将可能 出现因为dat变化太快,而使b_clk无法采样的问题。即在信号从快时钟域向慢 时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对该信号进行正确的 采样,所以在使用双锁存器法的时候,应该使原始信号保持足够长的时间,以便 另一个时钟域的锁存器可以正确地对其进行采样。3.2边沿同步器如果我们需

6、要用跳变沿而不是电平又该怎样处理呢,在电平同步器之后再 加一级触发器,用第二级触发器的输出和第三级触发器的输出来进行操作。这种 结构叫做边沿同步器。always (posedge Clk)begininputs_reg1 = inputs;inputs_reg2 = inputs_reg1;inputs_reg3 = inputs_reg2;if (inputs_reg2 = 1b1 & inputs_reg3 = 1b0)begin end end以上两种同步器在慢时钟域信号同步入快时钟域时工作的很好,但是反过来 的话,可能就工作不正常了。举一个很简单的例子,如果被同步的信号脉冲只有 一个快

7、时钟周期宽,且位于慢时钟的两个相邻跳变沿之间,那么是采不到的。这 时就需要采用脉冲同步器。这种同步器也是由3个触发器组成,同时需要对发送 信号做一些处理。3.3脉冲同步器脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻 转电路(下图)。每当翻转电路接收到一个脉冲时,它就会在高、低电平间进行 转换,然后通过电平同步器到达异或门的一个输入端,而另一个信号经一个时钟 周期的延迟进入异或门的另一端,翻转电路每转换一次状态,这个同步器的输出 端就产生一个单时钟宽度的脉冲。图:脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻 转电路脉冲同步器的基本功能是从某个时钟域取出

8、一个单时钟宽度脉冲,然后在新 的时钟域中建立另一个单时钟宽度的脉冲。脉冲同步器也有一个限制,即输入脉 冲之间的最小间隔必须等于两个同步器时钟周期。如果输入脉冲相互过近,则新 时钟域中的输出脉冲也紧密相邻,结果是输出脉冲宽度比一个时钟周期宽。当输 入脉冲时钟周期大于两个同步器时钟周期时,这个问题更加严重。这种情况下, 如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲。3.4结绳法由于双锁存器法在快时钟域向慢时钟域过渡中可能存在采样失效的问 题,我们引入了一种安全的跨时钟域的方法:结绳法。结绳法适合任何时钟域的 过渡(clk1,clk2的频率和相位关系可以任意选定),如图4所示。跚4结绳法波形示

9、意该信号 属于clk2时钟域。在两次src_req_clk1之间被src_vld_clk1结绳 (Pluse2Toggle)。将src_vld_clk1用双锁存器同步以后,该信号转换为 dst_req_clk2(Toggle2Pluse)。同理,用 dst_vld_clk2 将 dat_req_clk2 结绳, dst_vld_clk2表明在clk2时钟域中,src_dat_clk1已经可以进行正确的采样了。 最后将 dst_vld_clk2 转换为 dst_ack_clk1(Synchronizer and Toggle2Pluse)。 dst_ack_clk1表明src_dat_clk1已

10、经被clk2正确采样了,此后clk1时钟域就 可以安全地传输下一个数据了。可以看出,结绳法的关键是将信号结绳以后,使 其保持足够长的时间,以便另一个时钟可以正确采样。图5描述了结绳法的具体 实现,主要包括 3 个基本单元:Pluse2Toggle、Synchronizer 和 Toggle2Pluse。靖的实现一理图Pluse2Toggle模块负责将两个脉冲信号结绳,即将单脉冲信号延长; Synchronizer模块用双锁存器法将得到的信号过渡到另一个时钟域; Toggle2Pluse模块与Pluse2Toggle功能相对,即将延长的脉冲信号还原为单脉 冲,这里用到了异或门。整体的设计思想就是

11、用Pluse2Toggle将信号延长,用 Synchronizer过渡,再用Toggle2Pluse还原,以保证另一个时钟域可以正确采 样,而接收方用相反的流程送回响应信号。结绳法可以解决快时钟域向慢时钟域过渡的问题,且适用的范围很广。 但是结绳法实现较复杂,在设计要求较高的场合应该慎用。3.5握手协议在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线 和控制总线都会同时跨域传输。工程师们用一些其它的手段来处理这些情况,如 握手协议等。当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效 的通信。例如,仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲 裁方法

12、来决定哪个电路可以获得总线的访问权,例如PCI或AMBA(高级微控制 器总线架构)。每个电路都发出一个请求信号,由仲裁逻辑决定谁是“赢家”。 获胜的电路会收到一个应答,表示它可以访问总线。该电路于是中断请求,开始 使用总线。不同时钟域电路使用的握手协议有两种基本类型:全握手(Full-handshake) 和部分握手(partial-handshake)。每种类型的握手都要用同步器,每种都各有 自己的优缺点。对全握手信号,双方电路在声明或中止各自的握手信号前都要等 待对方的响应(图4)。首先,电路A声明它的请求信号,然后,电路B检测 到该请求信号有效后,声明它的响应信号。当电路A检测到响应信号

13、有效后, 中止自己的请求信号。最后,当电路B检测到请求无效后,它中止自己的响应 信号。除非电路A检测到无效的响应信号,否则它不会再声明新的请求信号。crarrA.rm图4,对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的 响应。这种类型的握手使用了电平同步器。设计人员将这种技术用在如下情况:响 应电路(电路B)需要告知请求电路(电路A)它可以处理请求。这种握手方法 要求请求电路延迟它的下一个请求,直到它检测到响应信号无效。可以用经验估 算法判断这个协议的时序:信号跨越一个时钟域要花两个时钟周期的时间,信号 在跨越多个时钟域前被电路寄存。全部的时间序列是:A时钟域中最多五个周期

14、加上B时钟域最多六个周期。全握手类型很强健,因为通过检测请求与响应信 号,每个电路都清楚地知道对方的状态。这种方式的不足之处是完成所有交互的 整个过程要花费很多时钟周期。另一种类型是部分握手,它可以缩短这些事件的过程。使用部分握手信号时, 通信双方的电路都不等对方的响应就中止各自的信号,并继续执行握手命令序 列。部分握手类型比全握手类型在健壮性方面稍弱,因为握手信号并不指示各自 电路的状态,每一电路都必须保存状态信息(在全握手信号里这个信息被送出 去)。但是,由于无需等待其它电路的响应,完整的事件序列花费时间较少。当使用部分握手信号方式时,响应的电路必须以正确的时序产生它的信号。 如果响应电路

15、要求先处理完一个请求,然后才能处理下一个请求,则响应信号的 时序就很重要。电路用它的响应信号来指示它的处理任务何时完成。一种部分握 手方法混合了电平与脉冲信号,而其它的方法则只使用脉冲信号。在第一种部分握手方法中,电路A以有效电平声明其请求信号,电路B则 以一个单时钟宽度脉冲作为响应。此时,电路B并不关心电路A何时中止它的请求信号。但为了使这种方法成立,电路A中止请求信号至少要有一个时钟周 期长,否则,电路B就不能区别前一个请求和新的请求。在这种握手方式下, 电路B为请求信号使用一个电平同步器,电路A为响应信号使用一个脉冲同步 器。只有当电路B检测到请求信号时才发出响应脉冲。这种情况可以使电路

16、A 通过控制其请求信号的时序,控制同步器接收到的脉冲间隔(图5)。同样可以 用经验估算法确定时序,即信号跨越一个时钟域要花两个时钟周期并且在跨越时ic削;rr唯仲聒图5,在一种部分握手方法中,电路A发出它的请求信号,电路B则以一个单 时钟宽度脉冲作为响应。全部的序列为A时钟域最多三个周期加上B时钟域最多五个周期。这种部 分握手方法比全握手方法在A、B两个时钟域分别少用了两个和一个时钟周期。 如果采用第二种部分握手方法可以再减少一些时钟周期,此时电路A用一个单 时钟宽度脉冲发出它的请求,而电路B也用一个单时钟宽度脉冲响应这个请求。 这种情况下,两个电路都需要保存状态,以指示请求正待处理。图6,这种握手类型使用的是脉冲同步器,但

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号