推荐System Verilog作验证

一个多月没有更新blog了。主要原因是没有什么吸引人的事情发生,大部分的时间都花在了无聊的研究上(真的很无聊)。倒是有一些新变化,比如说开始看用于交换机和ATM网络的switching network相关论文和书籍,又去了一趟Bristol开会,找房子搬了家和关于解除我羽毛球小club订场者职务的通知等等。总之是一些无聊或者无趣的事情。这不,这篇又必将只能被少数人读懂,比如那位正在琢磨python给自己弄一个留言板的GWX同学估计就不会明白。

Anyway,先给不明真相的围观群众做一个背景描述。首先这是个关于设计大规模集成数字电路的语言。现在数字集成电路主要由Verilog HDL和VHDL描述,相比VHDL,Verilog好像稍占上风。假设我们设计了一个硬件,用Verilog描述的,那么我们就需要在根据这个描述制造芯片之前验证这个硬件描述是功能正确的,这个过程就叫验证。

为了验证,验证工程是需要编写测试台程序,test bench。测试台程序生成测试激励,用激励驱动被测的硬件描述,称之为design under test DUT,然后根据DUT的输出来寻找错误,我们称之为虫子,bug。恩,就是这样。当前的测试有两种方法,直接测试和随机测试,他们有共同的目标:证明DUT所有的功能都是正常的,专业点的说法就是,功能覆盖100%。

直接测试很简单。比如说一个DUT有3个功能: A, B和C。那么,我们就写3个单独的test bench,分别产生3种激励Ain, Bin和Cin,然后验证Aout, Bout和Cout是正确的。

随机测试比较复杂,对于上一种情况,我们只写一个test bench,这个test bench能随机的产生不同的激励。通过约束,我们可以使这些随机生成的激励属于Ain, Bin或Cin中的一个。然后,test bench通过随机产生的激励类型和DUT的结果来验证。

两种测试方法,随机测试对于大设计会有帮助。比如一个DUT有几十种功能,这些功能还能够互相搭配,这样用直接测试所需要的测试程序会随着功能个数指数上升。如果用随机测试,测试程序只有一个,加一个功能只不过是添加一个验证结果的分支。

最近在学System Verilog,还没开始用,但是已经迫不及待的要推荐一下。要感谢嵌入式实验室,我在那里知道了随机测试,不过当时的工具是e language。从e language的verisity被cadence兼并之后,e language好像没人用了。我最近写了很多verilog,需要大量的测试,手上的选择只有verilog, SystemC和System verilog。

刚刚读到System Verilog关于随机测试的部分,发现System Verilog基本上支持了e language的所有随机测例生成功能。而且,system verilog就是verilog的扩展,和verilog完全兼容。相比systemC,system verilog的OOP显然是幼儿园级的,但是它的随机测例生成确是systemC望尘莫及的。SystemC和verilog的接口也会有困难。所以我郑重的推荐使用System Verilog来做verilog代码的验证工作。

至于仿真工具,我现在知道的:VCS(synopsys), Questa Sim (Mentor)和NC-Verilog (Cadence)。其中ncvlog可能支持得有些不全。

先说到这里吧。我建议现在还在做芯片验证或者是芯片设计的同学,看看system verilog也许会有好处。推荐本书:System Verilog for Verification, Springer 2008. 写得不错,作为验证方法学的书也行。

Advertisements