验证的方法篇之三:开发环境
本文转自:http://www.eetop.cn/blog/html/28/1561828-438527.html
如果我们将影响验证编码效率的因素分为“硬件因素”和“软件因素”,那么硬件因素的配置在短期是可以补齐的,而软件因素则会设计到验证人员的技术能力、调试能力和其它软实力。所以从实用的角度上来看,如果准备在验证道路上长期深耕的话,更早地提高硬件环境配置是一笔越早投入收益越大的事情。
如果这是一篇知乎上的文章我的笔风可能是这样的——
-
首先你的保证你的手、肩、颈、腰在十年以后还是你的。
-
其次你需要养成深度编码的习惯——论如何不受打扰的方法。
-
最后回到编码本身,如何可以“键步如飞”,让你的键盘跟上你的脑速。
实际上我们作为稍显严肃的一个订阅号,要跟大家分享的验证师日常会是下面这样——
-
为什么你需要一组合适的鼠标、键盘、座椅和显示器?
-
编码的时候怎么屏蔽周围的环境对你的影响?——什么样的耳机、音乐对你有帮助?
-
一套完备的验证开发环境对你的重要性究竟有多大?
如果是软文,我们会主要讨论前两个问题,不过这显然不符合我们的气质。有多少位涉世未深的青年在一开始在对SV编码时,手足无措,跟大圣一样手头缺少一件像样的兵器。我们这篇文愿抛砖引玉,将验证人员日常SV编码的开发环境做一个介绍。实际上,我们之前也介绍过验证人员需要掌握其它的软件语言例如C/C++或者脚本语言,这些语言也需要不同的开发环境,只是这一部分并不在我们这篇的讨论范围内。
Vim开发环境
大多数Unix用户的编辑器无外乎使用Vim或者Emacs,而自打有了这两样编辑神器以来,两路的铁粉们从未就孰优孰劣达成一致,这也反映了两种编辑器都有着广大的用户群体。由于我们团队是重度Vim使用者,所以我们就着Vim开发SV的环境配置做一些介绍。下面介绍的环境配置中,大量的插件来自于Vim官方网站,有一小部分是用户自定义的设置。
由于Vim添加插件、用户自定义方法很方便,所以,我们Vim的开发环境包括的特性有:
-
浏览方式
-
版本控制
-
代码编辑
-
语法高亮
浏览方式
好的浏览方式的简单衡量办法就是看你在键盘和鼠标之间的切换频率有多少,切换地越频繁也就越影响效率(其实也影响你的手部腱肌健康)。所以,我们建议初学者首先配置好浏览文件的环境,这其中要考虑的因素有:
-
通过快捷键在不同子窗口之间实现跳转,比如在上面显示图中实现三个子窗口的跳转而无需通过鼠标的点击。
版本控制
对文件版本有严格控制的项目,需要文件在编辑之前签出(checkout),而在文件编辑完成之后签入(checkin),通过这种方式实现团队内部文件资源的协作。由于版本控制需要额外的软件,例如SVN、Git、Clearcase,我们在签出签入时需要在Shell命令行键入相应的命令,这又引入了额外的手续。在这里我们也建议通过Vim官网下载相应的文件版本控制的插件,来实现版本控制命令同Vim的绑定。
例如,我们团队在使用Clearcase版本控制工具,通过Clearcase的插件实现了新工具栏和命令的绑定,实现了文件操作环境保持在Vim中,也无需切换环境。
代码编辑
到了代码编辑部分,是我们投入最多的阶段。在这一过程中,我们需要考虑的跟SV编辑相关的部分有:
-
实现FILE.svh同FILE.sv之间的*切换。这是由于一些项目中验证人员习惯将类的方法声明同方法实现分别放入到.svh和.sv两份文件中,通过快捷命令可以实现这两份文件之间的切换。
-
通过ctags和taglist的插件实现SV的标识符跳转。这项功能对于快速浏览SV类的方法、编辑很有帮助。
-
学会使用折叠。折叠对于大文本的文件会给你带来清爽的感觉。
-
学会使用语法的域跳转。例如实现module到endmodule、task到endtask、begin到end的快速跳转。
-
学会使用录制(record)和宏(macro)操作。这对于批量操作文件有明显效果,省时省力。
语法高亮
语法高亮是减少编码错误的有效方式,由于Vim默认安装包中没有SV/OVM/UVM的语法高亮,所以用户需要自己在Vim网站上下载这些插件。
实际上,有效武装Vim的插件还有很多,有些小而美的插件在上面的介绍中没有提到,但是它们却可以帮你的大忙。我相信,高效的验证人员一定有着自己习惯的Vim/Emacs环境配置。不同的环境配置实际上都是朝着高效解决问题而去的,如果你愿意分享你的环境配置,欢迎与我们联系和投稿。
商业SV开发环境DVT
DVT(Design and Verification Tools)是面向e、SystemVerilog、Verilog、VHD的集成开发环境,它同VisualStudio、NetBeans一样拥有完善的开发特性。DVT是在Eclipse的开放框架基础上开发的,所以如果你已经熟悉如何在Eclipse环境中建立项目、编译、运行和调试的话,那么DVT对你来讲也一定不会陌生。DVT就是来克服设计验证编码中缺少强有力的开发工具现状的,它包含的主要特性有:
-
加快新代码开发的速度和质量:通过完善的编辑环境。
-
简化调试和仿真分析:自动进行语法检查和OVM/UVM框架检查,同时跟NCSim、Specman、VCS和Questa仿真器有良好接口,从而实现在DVT的窗口通过智能记录窗口来分析仿真结果。
-
使得分析复杂源代码变得更为容易:提取类的UML图、继承关系、成员变量和方法、验证框架的结构图(在未编译的情况下就可以分析得出)、层次组成和连接、驱动和负载分析,这些分析都是动态的方式,而且无需仿真器的介入即可完成。
-
简化维护旧有代码和可复用库:通过项目的管理方式维护代码。
-
加快语言的方法学的学习:环境中的快速链接可以直接跳转到目标类定义、方法定义,实现应用层和框架层(OVM/UVM源包)之间的跳转,方便学习。
-
提高为代码编辑文档的体验:自带的文档生成工具可以帮助提取文本的注释,从而生成可读性更好的HTML文档。
-
缩短项目进程:由于DVT本身可以同Clearcase、SVN、Git等版本控制插件以及同缺陷跟踪系统例如Bugzilla完成集成,所以对于项目而言它是一个中心化的项目实施平台。
此外,DVT的调试器是开发环境的高级功能,它可以使得在DVT上直接调试代码,无需在仿真器上面做转换调试,这种方式降低了调试的复杂程度。用户可以通过调试器,直接在DVT中进行:
-
设置断点:设置、使能、关闭断点或者条件断点。
-
查看变量:可以在断点停止的当前运行栈内查看局部变量、类成员和模块信号,也可以修改变量。
-
表达式窗口:用户可以自定义表达式,并且观察表达式的值变化。
-
输出窗口:观察仿真输出,也允许用户敲入仿真器支持的命令来与仿真器互动。
在基础的语言编辑和调试基础之上,DVT的验证平台语义检查器(testbench linter)可以通过静态代码分析发现不合适的语句、代码风格、无用语句、与OVM/UVM相悖的使用方式和性能问题。它可以通过改进验证代码的可靠性和维护性来更好地协助验证人员完成验证任务。通常的编译器会检查代码是否符合语言规范,而报告出语法错误,但是编译错误不会给出代码可靠性和维护性的报告,也不会给出建议如何使得代码与方法学保持一致性。
此外,DVT自带的文档生成器可以用来从代码中的注释自动生成准确的HTML文档。这种方式使得设计人员和验证人员只需花费更少的精力来维护一份组织良好的设计和验证文档。或者设计验证人员也可以在原有的代码基础上通过注释方式生成一份更直观的文档,文档的内容可以包括文字描述、继承树、设计结构、UML类图和验证框架等。