在集成电路设计过程中,经常要用到本文描述的一种比较新旧设计的方法,它可以借助现有设计来实现新设计的验证。对不同功能的设计进行比较时,本文介绍了一种管线方法,(中国)集成电路设计和测试工程师可以借鉴这种新的测试方法,用于功能相近的集成电路的改良设计。
Steve Wilson
咨询工程师
Yuri Tatarnikov
技术经理
Intrinsix公司设计中心
在设计过程中,经常会遇到这样的情况,当你刚完成一个新版本客户端小组件控制器的设计,该客户就决定在他们所有的新设计中使用Verilog工具重新设计。因此,在你着手新项目之前,首要任务是把旧的HDL??L%B4%FA%C2%" target="_blank">VHDL代码转换为Verilog代码。你怎样证明转化后的设计是正确的呢?
又比如,你的老板正在阅读他喜爱的EDA杂志,并对“设计复用”特别感兴趣。你的下一个设计任务是,在保留旧功能的前提下,为现有的设计增加新功能。你怎样有效地做到设计复用呢?
第一种情况可以考虑采用形式验证技术, 但第二种情况就不能采用形式验证。
形式验证工具如Avant!的Chrysalis就能够计算证明两个设计是否相同。然而这些工具还不完美,它们比较昂贵,而且不能满足大型设计的要求。
然而,你也可以使用原始测试程序来验证新设计,对于给定的激励,新设计的每一个有效输出都要和过去的设计匹配,本文将介绍一种获得成功应用的设计方法。
对同一个设计的两个不同描述进行比较是人们经常采用的方法。例如,航天飞机在设计中使用了多级冗余设计。这种冗余设计包括硬件和软件两部分。在系统的软件方面,主控制计算机运行一组软件,根据一个中断驱动的优先级方案完成给定的任务。同时,一台运行分时操作系统的后备计算机运行独立的最小软件包,但不执行起飞和降落管理任务。当这两个系统到达相互的检查点(check-point)时,要比较系统是否同时达到该检查点,这个检查点系统类似于下面描述的比较方法。事实上,该方法可以用于调试两个软件系统。
大型复杂设计通常要用高级语言编写一个关于该设计的算法描述,这个描述为基于RTL的设计导出测试向量,当输出向量不匹配时,其差异就表示存在设计问题。当所有的向量都匹配时,就表明设计一致,可以进入生产线。
比较方法
两个版本的模块输入和双向端口都应该连接到原始设计节点,并用测试基准的输入向量驱动。
跟原设计一样,旧模块的输出将保持连接,同时新模块输出连接到比较器的另一侧。运行时比较器也接收旧模块的输出(图1)。当采样比较器的输出时,要用一个“有效”信号将数据从一级转移到下一级,该有效信号对评估样本的质量是必不可少的,它应该同步执行。
两个设计都应该使用完全相同的方法激励。当验证输入来自另一个测试模块的情况下,将旧的设计输出作为新设计的输入。你需要正确的输入,并且假定旧的设计最初是经过验证的。
如果你面临两个不同HDL语言设计的转换时,如果HDL语言是Verilog和VHDL,那么可以采用功能相当强的模拟环境如Mentor Graphics公司的Model Tech环境,该环境可以轻松处理对采用两种HDL编写的模块的仿真。
一旦所有新的测试模块经过全部测试程序验证,你就可以证明对于给定的、由旧的设计测试程序表示的输入集合,新旧设计的输出完全相同。
对于信号运行在模块之间的情况,需要验证新设计的输出是否可以驱动新设计的输入,且最后的输出是否相同。这可以通过每次只对一个模块交换新设计的输入源,并且重复执行测试程序来实现。当你完成了旧设计到新设计的转换过程,你就完成了对新设计的全面测试。
新方法的优点
上述方法有几个优点:1. 两个设计之间的差异在模块级就可立即发现;2. 不需要其它昂贵的工具;3.其它工具不具备这种功能。
由于在新旧设计之间执行循环比较过程中,测试基准都能检测每次发生差异之处,不仅能识别错误信号,而且可识别时钟失效,因此仅需跟踪逻辑图便可确定两个设计的差异,然后校正差异并继续进行比较。
这种方法要增加更多的测试代码,使得测试基准的自检在仿真环境内就能完成,而不再需要其它工具支持。当新旧设计的功能不同时,可以利用管线功能(pipe-lining),此时形式验证方法不适用。
实际应用情况
我们的一个客户最近遇到了这一问题,由于不能使用自动转换工具,因此要把VHDL代码手工转换为Verilog代码,这就要验证近7000行代码。虽然设计工作量不大,但也很可观。
完成模块转化之后,它将与原始VHDL模块并联在一起,并且在所有模块输出之间增加一个比较器。转换过程中就开始测试。如果运行测试程序时发生比较错误,每个比较错误都能得到追踪并加以校正,最后我们在这个并联配置中通过了所有的测试。
下一步,改变一个模块,新设计的输入作为其输入。所有比较器保持不动,再重新运行测试程序一次。重复这个过程,直到新设计的所有新模块的所有输入都轮流充当一次输入。此时,我们已经获得了符合测试基准的同样设计,借助于这种方法,可以直接完成比较。这样可以非常清楚比较的进展情况,并且相当精确地控制工作进度。
另一个实例是客户有一个大型设计,我们使用一个数据路径设计工具来重写几个模块。这个数据路径工具自动插入管线以达到所需的速度目标。新的经过改良的设计以门级和行为级Verilog模块开始比较。
工具的行为级输出与原始设计并联。原始设计的输出根据管线的长度进行延迟,两个向量每个时钟周期比较一次。测试程序在该并联设计上运行,一旦遇到问题即予以纠正。比较方法不仅仅对最初调试有帮助,而且在描述新设计的正确性时很有帮助,因为测试程序还没有用于硅片生产过程。经过转化后的设计成为极好的设计基准。
我们已经两次将这种方法用于不同功能的设计,它具有简单而便宜的优点。在确定新设计的调试进展情况方面它也用得很不错,因为在遇见设计错误的时候,你就已经知道有多少功能测试合格。
Yuri Tatarnikov是Intrinsix公司设计中心的技术经理。他是俄罗斯VHDL用户组的创立者和总监。Steve Wilson是Intrinsix公司设计中心的主要咨询工程师。