其实验证也是这一种设计
黄乐天  |  2011-01-18  |  电子技术应用网  |  461次阅读

很早就想写这篇技术文章,但是一直没有心情来整理思路。今天终于可以空闲下来写一写这方面的内容了。

 

很多FPGA/IC设计菜鸟或者不那么菜的鸟普遍存在着一种重设计,轻验证的思想,总是想怎么快点HDL代码写出来,至于仿真验证这些在他们看来是一种额外的负担。所以经常听到有很多菜鸟发出疑问:怎么样才能简单快速得到仿真结果呢?这也是为什么经过了这么多年,maxplusII这种古董级的设计工具还能够大行其道。很多人对验证的理解也还仅仅停留在画波形、看波形这种原始的层次。

 

但随着技术的发展,实际上验证工作已经成为FPGA/IC设计中最重要的工作。比较能说明问题的一点就是:HDL语言中关于设计的语法在2001年以后几乎就没有更新的改进,虽然几大EDA工具公司喊了很多年的高层次综合,要把C语言直接综合成硬件电路。但10多年来几乎没有任何进步。这是因为一方面技术难度确实很大,另外一方面也是需求驱动不明显。因为随着技术的进步,掌握EDA工具和现代电子设计技术的人越来越多了。如果在02、03年会用FPGA的人那就是牛人,现在会用FPGA的人只能算是牛毛了。当系统复杂了以后,所带来的问题其实是两个:一、如何把复杂的系统划分成简单的系统的组合,二、如何确保整个系统在各种条件下完整的实现预先要求的功能。

 

至于第一个问题,那是需要采用更好的系统建模技术以及有更优秀的系统工程师。这不是本文的重点,这里就不多加阐述了。第二个问题在系统愈加复杂的情况下就显得愈加突出。现代电子系统一定是一个规模庞大的时序系统。有一点数字电路常识的人都应该知道,时序系统的输出不但取决于当前的输入,而且取决于电路当前的状态。系统的规模增大,不是模块简单的堆砌,其内部结构和模块之间相互关联的复杂度是指数级增大,系统内部的状态也成几何级数的增加。如何充分的考虑到在不同的输入和不同的状态下FPGA/IC能够正常的完成工作,就需要对其进行充分的验证,以确保万无一失。而这就导致了验证的工作时间已经占到了整个项目时间的80%以上。可以说,如何设计已经不是很难的问题,难的是如何确定整个设计是完全正确的。

 

因此,现代的验证工作,绝对不是简单的输入激励看波形,甚至也不是用点testbench就可以解决的。在最近10年中,大量最新的验证技术不断的涌现,如什么断言、systemVerilog等等。验证技术发展至今,已经非常复杂。从某种意义上来说,做验证已经变成了另外一种设计,一种和RTL级设计等价的设计工作。

 

为什么这样说呢?因为验证工作的作用就是检验设计中是否存在错误或者是缺陷。当系统复杂了以后,光靠人肉眼判断是根本无法进行检查的。光那乱七八糟的波形、数据,看10多分钟就看晕了。如果要验证大型系统怎么办?首要的一点就是要搭建完整的验证平台,或者换句话说就是要搭建一个自动化的验证环境,运用现在已经非常成熟的EDA技术,运用各种验证手段来检查错误。

 

所谓验证平台又是什么东西?说白了验证平台就是三大块构成:输入激励产生模块,正确结果求解模块,对比判断模块。如果要去验证一个设计是否是正确的,那么就首先要知道到底什么是正确的。在无从知道什么是正确的时候,就没有验证这一说法。因此搭建验证平台,本质上是一个设计过程。就是用高层抽象的HDL语言或者是C/C++语言,构造一个“正确的”设计。由于不考虑可综合性和可实现性,可以采用任何的HDL语法和高层语言语法来构建这一设计。只是构造这个设计的过程中考虑的不是如何实现、如何提高速度、如何减少资源等等,而是要充分考虑到各种不同的输入、电路状态以及输出结果。考虑到如何才能够充分的检查到大型系统中的每一种情况,如何才能覆盖到HDL中的每一条语句。这样算下来,验证的方向是无穷无尽的,验证工作的创造性也是设计无法比拟的。因为验证要考虑各种各样稀奇古怪的场景。而设计,只是按照正常的设计思路往下走。这也是为什么现在一定要强调验证人员和设计人员分开:一旦走上设计的思路,就很难跳出来了。而验证工作需要充分发挥想象力,构建出完善而全部的验证平台。这一设计过程的难度可以说是远超过设计电路本身的。

 

之所以形成现在这种轻验证,重设计的情况,其主要原因是由于中国的FPGA/IC设计还停留在非常初级的阶段,包括某些公司的工程师和某些高校教师对此都认识不足。看看maxplusII这种早就该淘汰掉的东西现在还在很多高校教学中大行其道,很多高校教师交给学生的验证理念还是在用maxplusII画波形,然后看看结果这种极其低端的层次。这就造成了目前国内号称学过FPGA/IC设计的人多如牛毛,但是真正掌握现代FPGA/IC设计流程和现代电子系统设计方法学的人凤毛麟角。更加郁闷的是这种错误的教学理念造成的就是大量学生对FPGA/IC设计的肤浅认识,认为写几句Verilog,画几个波形就叫懂FPGA/IC设计了。这一肤浅认识自然就造成了他们认为验证时可有可无的东西。在研究生层面,目前的研究生论文片面强调所谓的“创新性”,总认为设计一个东西才是创新,验证一个东西不算创新。也在一定程度上助长了这种错误的认识。

 

正确认识验证的性质,改变的验证的态度,是目前广大FPGA/IC设计菜鸟们需要非常注意的问题。以后这一行业的发展趋势必然是对合格的验证人员的需求增长远远大于设计人员的增长,但从目前招聘的情况看愿意做验证并且能够做得好验证的人其实是远远不够的。


文章原载于作者的电子技术应用网文章,所述内容属作者个人观点,不代表本平台立场。
本文经过系统重新排版,阅读原内容可点击 阅读原文