首页 > 赛迪观察 > 正文

基于FPGA的跨时钟域分析验证流程的研究

来源:军工处  作者:张宇晨  投稿时间:2017-12-27


  使用异步FIFO可以在两个不同时钟系统之间快速而方便地传输实时数据。在网络接口、图像处理等方面,异步FIFO得到了广泛的应用。异步FIFO是一种先进先出的电路,使用在需要产时数据接口的部分,用来存储、缓冲在两个异步时钟之间的数据传输。
 

  在异步电路中,由于时钟之间周期和相位完全独立,因而数据的丢失概率不为零。由图1可以看出:整个系统分为两个完全独立的时钟域——读时钟域和写时间域;FIFO的存储介质为一块双端口RAM,可以同时进行读写操作。在写时钟域部分,由写地址产生逻辑产生写控制信号和写地址;读时钟部分由读地址产生逻辑产生读控制信号和读地址。在空/满标志产生部分,由读写地址相互比较产生空/满标志。
 

  在编写工程代码时可以调用异步FIFO的IP核,进而可以节省开发时间。
 

  2)握手协议
 

  在许多应用中,跨时钟域传送的不只是简单的信号,数据总线、地址总线和控制总线都会同时跨域传输。工程师们用一些其它的手段来处理这些情况,如握手协议等。
 

  当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信。例如,仲裁总线结构可以让一个以上的电路请求使用单个的总线,用仲裁方法来决定哪个电路可以获得总线的访问权,例如PCI或AMBA(高级微控制器总线架构)。每个电路都发出一个请求信号,由仲裁逻辑决定谁是“赢家”。获胜的电路会收到一个应答,表示它可以访问总线。该电路于是中断请求,开始使用总线。
 

  不同时钟域电路使用的握手协议有两种基本类型:全握手(Full-handshake)和部分握手(partial-handshake)。每种类型的握手都要用同步器,每种都各有自己的优缺点。对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应
 

  不同时钟域电路使用的握手协议有两种基本类型:全握手(Full-handshake)和部分握手(partial-handshake)。每种类型的握手都要用同步器,每种都各有自己的优缺点。对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应(图3-6)。首先,电路A声明它的请求信号,然后,电路B检测到该请求信号有效后,声明它的响应信号。当电路A检测到响应信号有效后,中止自己的请求信号。最后,当电路B检测到请求无效后,它中止自己的响应信号。除非电路A检测到无效的响应信号,否则它不会再声明新的请求信号。对全握手信号,双方电路在声明或中止各自的握手信号前都要等待对方的响应。

预览区
 图3-6握手信号示意图
 

  这种类型的握手使用了电平同步器。设计人员将这种技术用在如下情况:响应电路(电路B)需要告知请求电路(电路A)它可以处理请求。这种握手方法要求请求电路延迟它的下一个请求,直到它检测到响应信号无效。可以用经验估算法判断这个协议的时序:信号跨越一个时钟域要花两个时钟周期的时间,信号在跨越多个时钟域前被电路寄存。全部的时间序列是:A时钟域中最多五个周期加上B时钟域最多六个周期。全握手类型很强健,因为通过检测请求与响应信号,每个电路都清楚地知道对方的状态。这种方式的不足之处是完成所有交互的整个过程要花费很多时钟周期。
 

  另一种类型是部分握手,它可以缩短这些事件的过程。使用部分握手信号时,通信双方的电路都不等对方的响应就中止各自的信号,并继续执行握手命令序列。部分握手类型比全握手类型在健壮性方面稍弱,因为握手信号并不指示各自电路的状态,每一电路都必须保存状态信息(在全握手信号里这个信息被送出去)。但是,由于无需等待其它电路的响应,完整的事件序列花费时间较少。当使用部分握手信号方式时,响应的电路必须以正确的时序产生它的信号。如果响应电路要求先处理完一个请求,然后才能处理下一个请求,则响应信号的时序就很重要。电路用它的响应信号来指示它的处理任务何时完成。一种部分握手方法混合了电平与脉冲信号,而其它的方法则只使用脉冲信号。在第一种部分握手方法中,电路A以有效电平声明其请求信号,电路B则以一个单时钟宽度脉冲作为响应。此时,电路B并不关心电路A何时中止它的请求信号。但为了使这种方法成立,电路A中止请求信号至少要有一个时钟周期长,否则,电路B就不能区别前一个请求和新的请求。在这种握手方式下,电路B为请求信号使用一个电平同步器,电路A为响应信号使用一个脉冲同步器。只有当电路B检测到请求信号时才发出响应脉冲。这种情况可以使电路A通过控制其请求信号的时序,控制同步器接收到的脉冲间隔(图3-7)。同样可以用经验估算法确定时序,即信号跨越一个时钟域要花两个时钟周期并且在跨越时钟域前被电路寄存。

预览区
 3-7部分握手信号示意图
 

  在一种部分握手方法中,电路A发出它的请求信号,电路B则以一个单时钟宽度脉冲作为响应。
 

  全部的序列为A时钟域最多三个周期加上B时钟域最多五个周期。这种部分握手方法比全握手方法在A、B两个时钟域分别少用了两个和一个时钟周期。如果采用第二种部分握手方法可以再减少一些时钟周期,此时电路A用一个单时钟宽度脉冲发出它的请求,而电路B也用一个单时钟宽度脉冲响应这个请求。这种情况下,两个电路都需要保存状态,以指示请求正待处理。

预览区
 3-8全握手示意图
 

  这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替。这种握手类型使用的是脉冲同步器,但如果其中一个电路时钟比另一个电路时钟快两倍,则可以用边沿检测同步器来代替(图3-8)。完整的时序是:A时钟域最多两个周期加上B时钟域最多三个周期。所以这种部分握手技术与全握手方法相比,在A时钟域少用三个时钟周期,在B时钟域也少用三个时钟周期。同时,也比第一种部分握手方法分别在A、B时钟域快了一个和两个周期。这些握手协议针对的都是跨越时钟域的单一信号。但当几组信号要跨越时钟域时,设计人员就需要使用更加复杂的信号传送方法。
 

  3)电平同步器
 

  为了避免进入亚稳态,应当使参数MTBF尽可能大。通常采用的方法是双锁存器法,即在一个信号进入另一个时钟域之前,将该信号用两个锁存器连续锁存两次(如图3-9所示)。理论研究表明这种设计可以将出现亚稳态的几率降低到一个很小的程度,但这种方法同时带来了对输入信号的一级延时,需要在设计时钟的时候加以注意
 

  图3-9电平同步器解决亚稳态
 

  对于上面的双锁存器法,如果a_clk的频率比b_clk的频率高,将可能出现因为dat变化太快,而使b_clk无法采样的问题。即在信号从快时钟域向慢时钟域过渡的时候,如果信号变化太快,慢时钟将可能无法对该信号进行正确的采样,所以在使用双锁存器法的时候,应该使原始信号保持足够长的时间,以便另一个时钟域的锁存器可以正确地对其进行采样。
 

  4、结束语
 

  随着FPGA产品规模的不断扩大,FPGA产品对稳定性要求也越来越高,跨时钟域分析已经成为开发、测试流程中不可缺少的一环。避免跨时钟域问题可以通过加异步FIFO、添加握手协议、添加同步器等方式来避免跨时钟域问题的产生。通过跨时钟域分析可以保证验证的准确性,还可以保证被测系统稳定性,使测试更有效、可靠的完成,提高被测FPGA产品的稳定性。

共2页 |< 首页 < 上一页 1 2 下一页 > 尾页 >|

【上一篇】: 来,了解下数据跨境流动管理    【下一篇】: 智能制造呼吁提升制造业基础能力和水平

  中国电子信息产业发展研究院(赛迪集团)是直属于国家工业和信息化部的一类科研事业单位。成立二十多年来,一直致力于面向政府、面向企业、面向社会提供研究咨询、评测认证、媒体传播与技术研发等专业服务。形成了政府决策与软科学研究、传媒与网络服务、咨询与外包服务……[详细]

赛迪专家更多

打造工业互联网平台“双创”升级版

7月2日,在北京工业互联网创新发展论坛上,中国电子..

陆峰:新型互联网应用点亮智慧生活

互联网作为20世纪人类最伟大发明,已经深刻改变了人..

赛迪机构

咨询业 媒体业 评测业 信息技术服务业 会展培训业 其他(分支机构)