好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

11页
  • 卖家[上传人]:大米
  • 文档编号:557201005
  • 上传时间:2023-07-14
  • 文档格式:DOC
  • 文档大小:225KB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 跨时钟域信号同步方法6种ASIC中心1引言基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免如果对跨时钟域带来的亚稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行本文总结出了几种同步策略来解决跨时钟域问题2异步设计中的亚稳态触发器是FPGA设计中最常用的基本器件触发器工作过程中存在数据的建立(setup)和保持(hold)时间对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间而保持时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时间我们把这段时间成为setup-hold时间(如图1所示)在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态(Metastability)[矗lupLijn^*HcULimoJ可能回升到高电平,也有可能降低到低电平输出信号处于中间状态到恢复为逻辑〃1〃或逻辑〃0〃的这段时间,我们称之为亚稳态时间。

      触发器进入亚稳态的时间可以用参数MTBF(MeanTimeBetweenFailures)来描述,MTBF即触发器采样失败的时间间隔,表示为:[MTBFJ=其中fclock表示系统时钟频率,fdata代表异步输入信号的频率,tmet代表不会引起故障的最长亚稳态时间,Cl和C2分别为与器件特性相关的常数如果MTBF很大,就认为这个设计在实际工作中是能够正常运行的,不会因为亚稳态导致整个系统的失效当触发器处于亚稳态,且处于亚稳态的时间超过了一个时钟周期,这种不确定的状态还会影响到下一级的触发器,最终导致连锁反应,从而使整个系统功能失常3同步策略在异步设计中,完全避免亚稳态是不可能的因此,设计的基本思路应该是:首先尽可能减少出现亚稳态的可能性,其次是尽可能减少出现亚稳态并给系统带来危害的可能性以下是根据实际工作总结出来的几种同步策略3.1电平同步器为了避免进入亚稳态,应当使参数MTBF尽可能大通常采用的方法是双锁存器法,即在一个信号进入另一个时钟域之前,将该信号用两个锁存器连续锁存两次(如图3所示)理论研究表明这种设计可以将出现亚稳态的几率降低到一个很小的程度,但这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意。

      对于上面的双锁存器法,如果a_clk的频率比b_clk的频率高,将可能出现因为dat变化太快,而使b_clk无法采样的问题即在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对该信号进行正确的采样,所以在使用双锁存器法的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确地对其进行采样3.2边沿同步器如果我们需要用跳变沿而不是电平又该怎样处理呢,在电平同步器之后再加一级触发器,用第二级触发器的输出和第三级触发器的输出来进行操作这种结构叫做边沿同步器always@(posedgeClk)begininputs_regl<=inputs;inputs_reg2<=inputs_reg1;inputs_reg3<=inputs_reg2;if(inputs_reg2==1'b1&&inputs_reg3==1'bO)beginendend以上两种同步器在慢时钟域信号同步入快时钟域时工作的很好,但是反过来的话,可能就工作不正常了举一个很简单的例子,如果被同步的信号脉冲只有一个快时钟周期宽,且位于慢时钟的两个相邻跳变沿之间,那么是采不到的这时就需要采用脉冲同步器。

      这种同步器也是由3个触发器组成,同时需要对发送信号做一些处理3.3脉冲同步器脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路(下图)每当翻转电路接收到一个脉冲时,它就会在高、低电平间进行转换,然后通过电平同步器到达异或门的一个输入端,而另一个信号经一个时钟周期的延迟进入异或门的另一端,翻转电路每转换一次状态,这个同步器的输出端就产生一个单时钟宽度的脉冲图:脉冲同步器的输入信号是一个单时钟宽度脉冲,它触发原时钟域中的一个翻转电路脉冲同步器的基本功能是从某个时钟域取出一个单时钟宽度脉冲,然后在新的时钟域中建立另一个单时钟宽度的脉冲脉冲同步器也有一个限制,即输入脉冲之间的最小间隔必须等于两个同步器时钟周期如果输入脉冲相互过近,则新时钟域中的输出脉冲也紧密相邻,结果是输出脉冲宽度比一个时钟周期宽当输入脉冲时钟周期大于两个同步器时钟周期时,这个问题更加严重这种情况下,如果输入脉冲相邻太近,则同步器就不能检测到每个脉冲3.4结绳法由于双锁存器法在快时钟域向慢时钟域过渡中可能存在采样失效的问题,我们引入了一种安全的跨时钟域的方法:结绳法结绳法适合任何时钟域的过渡(clkl,clk2的频率和相位关系可以任意选定,如图4所示。

      鼻斗匸oikdfetvidclk2d3t_acl^cjjc1图4结绳法波形示意图4中的_clkl表示该信号属于clkl时钟域,_clk2的信号表示该信号属于clk2时钟域在两次src_req_clkl之间被src_vld_clkl结绳(Pluse2Toggle)将src_vld_clk1用双锁存器同步以后,该信号转换为dst_req_clk2(Toggle2Pluse)同理,用dst_vld_clk2将dat_req_clk2结绳,dst_vld_clk2表明在clk2时钟域中,src_dat_clkl已经可以进行正确的采样了最后将dst_vld_clk2转换为dst_ack_clk1(SynchronizerandToggle2Pluse)dst_ack_clk1表明src_dat_clk1已经被clk2正确采样了,此后clk1时钟域就可以安全地传输下一个数据了可以看出,结绳法的关键是将信号结绳以后,使其保持足够长的时间,以便另一个时钟可以正确采样图5描述了结绳法的具体实现,主要包括3个基本单元:Pluse2Toggle、Synchronizer和Toggle2PlusePluse2Toggle模块负责将两个脉冲信号结绳,即将单脉冲信号延长;Synchronizer模块用双锁存器法将得到的信号过渡到另一个时钟域;Toggle2Pluse模块与Pluse2Toggle功能相对,即将延长的脉冲信号还原为单脉冲,这里用到了异或门。

      整体的设计思想就是用Pluse2Toggle将信号延长,用Synchronizer过渡,再用Toggle2Pluse还原,以保证另一个时钟域可以正确采样,而接收方用相反的流程送回响应信号结绳法可以解决快时钟域向慢时钟域过渡的问题,且适用的范围很广但是结绳法实现较复杂,在设计要求较高的场合应该慎用3.5握手协议在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线和控制总线都会同时跨域传输工程师们用一些其它的手段来处理这些情况,如握手协议等当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信例如,仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲裁方法来决定哪个电路可以获得总线的访问权,例如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)同样可以用经验估算法确定时序,即信号跨越一个时钟域要花两个时钟周期并且在跨越时!3XUrN疋SL;rr«±LlLLKr用仙低电路B则以一个单图5,在一种部分握手方法中,电路A发出它的请求信号时钟宽度脉冲作为响应全部的序列为A时钟域最多三个周期加上B时钟域最多五个周期。

      这种部分握手方法比全握手方法在A、B两个时钟域分别少用了两个和一个时钟周期如果采用第二种部分握手方法可以再减少一些时钟周期,此时电路A用一个单时钟宽度脉冲发出它的请求,而电路B也用一个单时钟宽度脉冲响应这个请求这种情况下,两个电路都需要保存状态,以指示请求正待处理图6,这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替(图6)完整的时序是:A时钟域最多两个周期加上B时钟域最多三个周期所以这种部分握手技术与全握手方法相比,在A时钟域少用三个时钟周期,在B时钟域也少用三个时钟周期同时,也比第一种部分握手方法分别在A、B时钟域快了一个和两个周期这些握手协议针对的都是跨越时钟域的单一信号但当几组信号要跨越时钟域时,设计人员就需要使用更加复杂的信号传送方法3.6异步FIFO在现代的集成电路芯片中,随着设计规模的不断扩大,一个系统中往往含有数个时钟多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路异步FIFO(FirstInFi。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.