系统级芯片(SoC)设计人员面临的众多验证挑战中,时钟域交叉(CDC)的难度名列前茅。CDC已成为设计错误的头号诱因。错误甚至可能出现在硅技术层面,从而迫使设计进行返工。与CDC有关的两大棘手问题包括基于FIFO的同步机制和基于握手的同步机制。这两者都难以或不可能通过仿真来进行精确验证。传统的静态CDC分析工具过于忽略实际的设计错误,却又报告了太多的伪违规,从而让用户陷入在没完没了的除错中。
静态CDC验证工具的成功与否关键在于两项指标―CDC验证的签核时间及其完整性。传统CDC分析会产生噪声(伪违规),延长验证周期,而且致使综合CDC同步方案的收敛性很差。而有一类新的CDC工具,它利用静态分析技术,首次针对上述问题提供了有效的自动化解决方案。这些新工具结合功能分析和结构分析来确认和验证FIFO与握手同步器,同时清除了伪违规。
要把真正的CDC问题隔离出来,必需对各种不同的同步方案进行检测―不仅有基本的两跳或多跳同步器,还有更加综合性的复杂机制,比如分别基于握手和FIFO的方案。一旦经过检测,这些同步器需要在正确工作时被验证。
在彻底完成了检测和验证时,就可以放心地宣称时钟域交叉是正确的了。然后,这一点可用来滤除一般在工具不能正确识别同步交叉时出现的伪违规。
许多工具都缺乏检测握手结构的能力,更谈不上对之进行功能验证了。因为在大型设计模块中,普遍有高达80%的CDC为握手方式所控制,伪违规可能数以百计。FIFO同步器也存在类似问题。握手方案的自动确认和验证功能可以消除大量的伪违规。这需要:
a. 握手识别。要正确识别一个握手方案,必须识别它的数据传输和所有构成部件。ID包括交叉检测、mux或触发器激活检测、源和目标控制器确认,最后还有请求和应答确认。所有部件的检测需要十分彻底灵活的结构和功能分析。
b. 握手验证。在其功能性被证明正确之前,这种交叉还不能算是安全的。握手功能性的两个方面可被验证:
1) 请求和应答行为。每一个请求都应该在一定的时间帧内获得应答。这个时间帧可以在握手识别期间被检测,在实际验证之前设计人员可能被提示验证其准确性。请求和应答信号可以是有源低或高信号,也可以在握手检测期间被分析。
2) 数据捕获窗口的检查。发送请求时,数据应该稳定,并在宣称应答以及请求取消之前不能改变。虽然满足这种要求就可以证实源是正确的,并与交叉问题没有直接关系,然而违规却表明设计中存在严重的功能问题。
静态验证技术是彻底执行上述验证的理想方式。或者也可以利用仿真和用户定义的测试基准来进行验证,不同的是这种仿真方法需要进行大量手工操作,无法彻底验证这些方案。
FIFO一般用来把数据源产生的数据传输到目标,源和目标工作在不同的或可变的速率下。源和目标通常位于不同的时钟域,这时需要异步FIFO。在某些情况下,当源和目标处于同一个时钟域时,也可以采用同步FIFO。异步FIFO涉及了多个CDC ,用于空标志(empty flag)和满标志(full flag)计算以及把数据读取到目标域。在一个FIFO中,这些交叉并非总是利用传统的同步方法进行同步,而有可能被错误地报告为非同步。
FIFO同步器的CDC验证可通过以下步骤来完成:
a. FIFO检测。可通过观察寄存器组和/或总线价差时钟域周围的逻辑来自动检测FIFO。要检查FIFO的所有构成部件,需要彻底的结构分析和功能分析。
b. FIFO验证。一旦被识别,可对FIFO的上溢和下溢状态进行有效验证。利用静态功能验证可把所有功能性完全覆盖在内。采用某种智能验证方案只需要读写指针就能够完成这种验证,设计人员无需再费劲设定FIFO属性,比如FIFO深度。
尽管基于FIFO和基于握手的时钟域交叉同步方案给设计验证带来了一些特殊问题,但一类新的工具应运而生,其结合了结构分析和功能分析,首次给出了有效的自动解决方案来解决这些问题。
这类工具能够自动检测和验证FIFO及握手CDC问题,填补了系统级芯片验证领域的一大空白。
作者:Shaker Sarwary
工程总监
Atrenta公司