原创 SOPC设计中多时钟域间的数据传递《转》

2012-1-11 22:32 2347 4 4 分类: MCU/ 嵌入式

1 引言
  
可编程系统芯片SOPC的设计过程中经常会遇到如磁盘控制器、CD/DVD-ROM控制器、调制解调器、网络处理器等不同模块或系统间的数据传输。不同功能模块之间往往使用不同的时钟频率,各模块控制信号和数据总线上的传输速度不同,造成模块接口界面处数据传输速率不匹配,导致控制信息或数据的传输产生错误或者丢失,降低了数据传输的可靠性。因此,研究采用不同时钟的异步电路SOPC即多时钟域中如何有效实现模块互连、保证数据可靠传输是SOPC设计必须关注的问题。
  在SOPC设计中,一般遵循的基本原则是模块内部采用同一时钟,即同步电路的设计策略,各模块间通过接口互连。只要接口符合异步系统要求的时序规范即可实现多时钟域数据的可靠传输,这是多时钟域SOPC设计的前提。

2 多时钟域数据传递中需要解决的主要问题
2.1 多时钟域数据传输中亚稳态的产生
  
触发器是SOPC设计的基本时序元件,其基本参数是数据的建立时间Tset和保持时间Thold。对于上升沿触发的触发器,Tset就是在时钟上升沿到来之前触发器数据端数据保持稳定的最小时间。而Thold是时钟上升沿到来之后触发器数据端数据继续保持稳定的最小时间。在Tset/Thold之间的小“窗口”内,数据是不确定的,使得触发器工作在一个数据不确定的状态,这种不确定状态就称为亚稳态[1]。要保证触发器正常工作,在时钟上升沿前后的这个“窗口”内,触发器数据端数据应该保持不变,否则触发器就会进入亚稳态,如图1所示。

  单时钟域(同步)电路设计中,由于不存在时钟之间的偏移(Skew)和错位,所以Tset和Thold的约束容易满足。而在有非同步性模块的多时钟域里,若两个时钟之间频率、相位差始终是变化的,即时钟之间的延迟不确定,不同时钟间直接传输数据时Tset和Thold的约束难以保证,就会导致亚稳态。亚稳态产生的数据传输失真还可能导致连锁反应,使整个SOPC系统功能失常。SOPC设计必须尽量避免亚稳态。
  触发器进入亚稳态的几率可以用平均无故障时间即触发器采样失败的时间间隔MTBF[2](Mean Time Between Failures)描述。若MTBF很大,就认为该设计在实际工作中能够正常运行,不会因为亚稳态导致整个系统失效。

001%20(106).jpg

图1 多时钟域亚稳态的产生

Fig.1 Generation of metastability in multi-clock domain

MTBF=e(Tr/τ)/T0fα    (1)

  其中Tr为亚稳态最大有效分辨时间,是指触发器能够保持亚稳态输出并不会引起故障的时间(从时钟沿开始)。f为采样时钟频率,即触发器的时钟频率。α为异步事件触发频率,即异步输入每秒变化的次数。τ、T0是由触发器的电气特性决定的参数,可用于表征触发器翻转速度的快慢。
  一般情况下,一个SOPC的Tr和f是给定的,而τ和T0是选定器件的固有参数。所以,只有通过降低输入信号的变化频率α来满足建立时间和保持时间的要求。
  亚稳态发生的概率与时钟频率f无关,但MTBF则与时钟频率f有很大的关系。f越高,MTBF会相应地降低。因此,适当降低时钟频率f能延长MTBF。

2.2 多时钟域数据传输应考虑传输数据类型的不同
  
针对不同的数据传输类型,多时钟域间的数据传递应采取不同的传输方案以适应可靠传输的需要。从时钟速度看,从慢时钟域到快时钟域的数据传输策略与反向的传输策略应有所不同;从传输信号内容看,控制信号和数据流信号、单一信号和总线信号、猝发数据流与恒速数据流在传输方案的选择上也应有所不同。针对单一信号的传输只需要考虑亚稳态、频率、握手等问题;而总线数据传输除要考虑单一信号传输设计的有关问题外,还需要考虑数据“堆积”、带宽匹配、数据传输速度匹配等更为复杂的问题。

3 多时钟域数据传递的同步化策略及其特征分析
  
当系统中有两个或两个以上非同源时钟的时候,数据的Tset和Thold难以保证。为避免亚稳态的产生,最好的解决方法就是将所有的非同源时钟同步化,即对多时钟域SOPC模块间的接口部分进行同步化处理。常用的同步化策略很多,且各有特点,要根据系统特征合理选用。

3.1 使用同步器(双锁存)
  
控制信号的多时钟域传递常采用同步器。同步器的功能是采样异步输入信号,并产生满足同步系统Tset和Thold要求的输出信号。同步器一般采用D触发器来构成。图2所示为最常用的两级同步器[3]。D触发器的每一个时钟触发沿采样异步输入信号,并产生一个同步后的输出信号。要构建更好的同步器可以采用更快速的触发器以减小采样保持时间;或者增加MTBF方程中的Tr值,等信号稳定后再采样,这可以通过延时采样来实现。
  在SOPC的多时钟域数据传输中,完全消除亚稳态是不可能的。设计的基本思路是尽可能减少出现亚稳态的可能性。例如,对74LS74系列器件,T0=0.4s,τ=1.5ns,建立时间Tr=20ns。设时钟频率为10MHz,则同步器分辨时间Tr=80ns。若异步信号变化频率α=100kHz,则一级同步器的平均无故障时间为:

001%20(107).jpg    (2)

  常用的同步器采用两级同步策略,因为两级同步器总体的故障概率是一级同步器故障概率的平方[4]。对上述参数,两级同步器的MTBF为:

[MTBF(80ns)]2=1.296×1023s=1.5×1018d    (3)

  在大部分同步化设计中,两级同步器足以消除几乎所有可能的亚稳态了。而**以上同步器的效果并不能提高多少。
  但是,正如图2所示,这种方法增加了输入信号的一级延时,需要在时钟设计时加以注意。另外,当信号从快时钟域向慢时钟域过渡时,若信号变化太快,慢时钟将可能无法完成信号采样。所以,使用两级时钟同步的前提是原始信号保持时间足够长,能够保证目的时钟域锁存器实现采样。

001%20(108).jpg

图2 两级同步器的构建

Fig.2 Structure of two step synthesizer

3.2 结绳法
  
信号从快时钟域向慢时钟域过渡时,慢时钟将可能无法对变化太快的信号实现正确采样,导致采样失败。如图3所示,clk1的频率比clk2高,由于data1变化太快而使clk2无法采到,导致输出数据data2失真。所以在使用双锁存器法实现多时钟域数据通信时,原始信号应保持足够长的时间,以避免采样失败。一般采用“结绳法”,将快时钟信号通过分频的方式将其周期延长,经双锁存采样后再使其恢复原来的时钟周期。即用“结绳”将信号延长,用“同步”实现双latch采样,用“解绳”还原为原来的时钟,保证另一个时钟域正确采样[5]。接收方用相反的流程送回响应信号。

001%20(109).jpg

图3 快时钟域向慢时钟域数据传递的采样失败

Fig.3 Sampling failure for data transfer from fast clock domain to the slow

  实际上“结绳法”不仅可以解决快时钟域向慢时钟域的过渡,也适合任何时钟域的过渡(clk1,clk2的频率和相位关系可以任意选定)。但是“结绳法”实现较为复杂,特别是其频率不可能太高,所以在速度要求较高的场合应该慎用。

3.3 格雷码
  
由实践可知,同步多个异步输入信号出现亚稳态的概率远远大于同步一个异步信号的概率,因此,读/写地址的多时钟域传递常采用格雷码,因为格雷码每次只变化一位,可以有效地减少亚稳态的产生。采用格雷码还可以很好地节约功耗。
  但采用格雷码编码需要在地址码每一位增加一级异或门,同时在到达目标单元前要把格雷码转换回二进制代码,这样会增大版图设计面积和延时。

3.4 使用FIFO实现数据传输
  
多时钟域的数据块传递采用同步器效果并不佳,因为多位数据的变化将会使同步器的采样错误率大大增加。使用单个保持寄存器亦无法保证传输数据的完整。例如对猝发式数据发送电路,接收电路会来不及采样。而当接收电路采样速度超过传输电路数据发送速度时,可能采样的数据宽度又不够。被广泛运用于网络接口、图像处理等高数据传输率、大流量数据、不同带宽和频率匹配的领域中模块间最有效的数据传输方法是使用带FIFO缓冲存储器(简称FIFO)的数据缓冲模块。如图4所示,一个异步FIFO一般由以下四部分组成:作为数据存储器的双口RAM存储器,在输入端口使用写时钟写数据,在输出端口使用读时钟读数据,完成异步时钟域之间的数据交换;负责产生写信号和地址的写逻辑部分;负责产生读信号和地址的读逻辑部分和负责产生FIFO“空”、“满”标志的地址比较部分。

001%20(110).jpg

图4 异步FIFO基本结构示意图

Fig.4 Schematic diagram of asynchronous FIFO

  用一个时钟把数据放入一块共享存储空间而用另一个时钟来取,理论上看起来很理想,实则并非易事。FIFO较快的端口处理猝发的数据传输,而较慢的端口则维持恒定的数据流。虽然访问方式和速度不同,但进出FIFO的平均数据速率必须是相同的,以保证速度匹配,否则FIFO就会出现上溢或下溢问题[6]。与单寄存器设计相同,FIFO将数据保存在寄存器或存储器中,同时同步状态信号,判断何时可以把数据写入FIFO或从FIFO中读出。
  FIFO设计的难点在于产生精确的“满”和“空”标志。在判断FIFO是满还是空时,要对写和读指针进行一些运算。问题在于这两个指针是在两个不同的时钟域内产生的,在对它们进行运算之前必须进行同步处理目前常用的读写指针同步策略是采用格雷码”、“标志的同步采用双锁存策略。

3.5 使用不同时钟域间的握手信号
  
在比较简单的场合可以选用握手信号实现多时钟域数据传递的控制。在某些场合,只需两根线就足够了。发送端把数据放到总线上,然后发送一个“数据有效”信号给接收端。接收端收到“数据有效”信号后,对数据进行采样(数据应至少稳定了两个发送时钟周期),然后通过一个同步器回传一个“应答”信号。发送端看到“应答”信号后,就可以将新的数据放到总线上。有些情况下,可能会用到第3个控制信号—“准备”信号,这个信号由接收端通过一个同步器发给发送端。“准备”信号在“数据有效”为真时应置为无效,当“数据有效”信号变为无效时,才可以把“准备”信号发给发送端。
  当然,用握手信号的最大缺点就是延迟。控制信号越多,数据传递的延迟就越大。

3.6 使用锁相环
  
在某些FPGA/CPLD芯片内嵌有锁相环(PLL)[7](如ALTERA的Cyclone和Stratix系列),可输出一或多个同步倍频或分频的片内时钟。与外来时钟相比,这种片内时钟可减少时钟延时和时钟变形,消除亚稳态,所以,直接使用片内锁相环效果很好。但并非所有的FPGA都带有PLL,且带有PLL功能的芯片成本较高,所以,除非有特殊要求,一般场合下不建议使用带PLL的FPGA,还是选用同步器和引入高频时钟的方法最为普遍。

4 结语
  由于寄存器亚稳态问题的存在,多时钟域的异步数据传输必须注意对传输数据及控制信号进行同步处理。在系统模块划分时应保证每个模块内部为同步时序电路,以尽量简化结构,减轻布置时钟树的难度,减少时钟偏移;而模块之间通过接口完成跨时钟域的同步;不同同步策略各有特点,实现难易也不同,实践中要根据系统特点适当选择。 

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条