前言
从我参加工作开始,就一直在使用OVM/UVM,最初是OVM,后来当UVM1.0发布后,我所在的公司迅速切换到UVM。在学习的过程中,自己尝遍艰辛。当时资料非常匮乏(其实今天依然比较匮乏),能够参考的只有两份,一是《OVM Cookbook》(这本英文资料一直没有在国内出版过),二是OVM/UVM官方的英文参考文档。这两份资料所采用的行文方式都是硬生生地不断引入某些概念,并附加一定的代码来阐述这些概念。在这些前后引入的概念之间,几乎没有逻辑关系。有时候看完一整章都不知道该章介绍的内容有何用处,看完整本书也不知道如何搭建一个验证平台。虽然OVM/UVM的发行包中附带了一个例子,但是这个例子对于初学者来说实在太复杂,这种复杂使很多用户望而生畏。身边的同事虽然对OVM/UVM有一定了解,但是并不深入,知其然却不知其所以然。在这种情况下,我只能通过查看源代码的形式来学习OVM/UVM。这个过程非常艰苦,但是使得我对整个UVM的运行了如指掌,同时在这个过程中我充分领悟到了OVM/UVM的设计理念,也为其中的实现拍案叫绝。
我非常渴望将OVM/UVM中的美妙实现分享给所有OVM/UVM用户,这种想法一直在我脑海盘旋。当时,国内没有任何中文的UVM学习文档,同时自己在学习OVM/UVM过程中的痛苦记忆犹新。为了使得后来者能够更加容易地学习OVM/UVM,减轻学习的痛苦,2011年8月初,我忽然有了将我对OVM/UVM的理解记录成一份文档的想法。这个想法在诞生后就迅速壮大,我很快列出了提纲,根据这些提纲,经过4个多月的写作与完善,终于完成了名为《UVM1.1应用指南及源代码解析》的文档,并将其放到网上供广大用户免费下载。
在这份文档中,我一开始就尝试着为广大读者呈现出一个完整的UVM验证平台。这种行文方式主要是为了避免《OVM Cookbook》及OVM/UVM官方参考文档的那种看完整本书都不知道如何搭建验证平台的情况出现。虽然在写作时曾经犹豫过这种方式会有一些激进,但是通过后来读者的反馈证明这种方式是完全可以接受的。
在网上发布这份文档后,我收到了众多用户发来的邮件。有很多用户对我的无私表示感谢,这让我非常欣慰:至少我做的事情帮助了一些人;还有众多的用户指出了整份文档中的一些笔误;除此之外,还有一些用户建议文档的某些部分应该阐述得更加清楚些,并增加某些部分的内容。在这里我衷心地向这些用户表示感谢,由于人数众多,这里不再一一列举出他们的名字。
2013年,当我重新审视自己两年前写的文档时,发现了其中诸多的不足。大量的笔误自不必提,更多的不足来自于内容上。2011年的文档中分为明显的前后两部分,前9章讲述如何使用UVM,后10章讲述UVM的源代码。在给我发来邮件的众多用户中,99%都是只看前9章的。我最初的想法是与广大OVM/UVM用户分享读UVM源代码的心得,所以后10章是我花费大量精力写的,而前9章则是顺手而为。这造成了前9章太简单,同时里面问题较多,而后10章太难、太复杂,没有太多人能看懂。至于介于简单和复杂之间的那部分中等难度的内容,却没有在整本书中覆盖。
恰在此时,机械工业出版社华章公司的张国强编辑联系到我,询问我是否考虑把整份文档出版。在此之前,已经有众多的读者通过邮件询问关于文档的出版情况。在和张编辑沟通并去除某些疑虑后,我和张编辑达成了出版意向。经过几个月的修改,并增添了大量内容后,形成了本书。与电子版的《UVM1.1应用指南及源代码解析》相比,这本书有如下特点:
1)增加了一些中等难度的内容,消除了《UVM1.1应用指南及源代码解析》中太简单内容与太复杂内容之间的空白。比如加入了大量factory模式的内容,详细阐述了寄存器模型中的后门(BACKDOOR)访问等。新增加的内容及例子几乎占据整本书的2/3篇幅。
2)在《UVM1.1应用指南及源代码解析》中,一开始就给出一个验证平台的例子,但是这个例子是以一个整体的形式呈现在读者面前,而没有说明白这个例子为什么会是这样,这好比从0直接跳到了1,中间没有任何过渡。而在本书中,我将此例一步步拆解,从0到0.1,再到0.2,一直慢慢增加到1。在增加每一步时,都尽量讲述明白为什么会这样增加,以方便用户的学习。
3)书中的每一个例子都经过了验证,这些例子都能在本书附带的源代码中找到。用户可以登录华章网站(http://www.hzbook.com)下载这些源代码并在自己的电脑上运行它们,这会极大提高学习的速度。
4)本书第11章专门讲述了从OVM到UVM的迁移。UVM是从OVM迁移来的,虽然很多公司现在使用的是UVM,但是由于一些历史遗留问题,在它们的代码库中依然有很多OVM式的已经被UVM丢弃的用法。通过这一章的学习,用户可以迅速适应这些过时的用法。
这本书能够出版,首先感谢机械工业出版社华章公司给我这样一个机会,特别感谢华章公司的张国强编辑和李燕编辑,没有他们的辛苦工作,这本书不可能与广大读者见面。
我要感谢我的父母和姐姐,是他们一直在背后默默地支持我、鼓励我,无论是高潮和低谷,他们都一直在我的身边。
我要感谢我在上海工作期间的领导和同事:魏斌、向伟、孙唐、宋亚平、王勇、王天、陈晨、赖琳晖、沈晓、胡晓飞、何刚、鲍敏祺、林健、龙进凯、汪永威、常勇。他们给了我很多写作的灵感和素材。
我还要感谢我在杭州工作期间的领导和同事:袁锦辉、吴洪涛、陈国华、梁力、高世超、王旭霞、王兆明、乐东坡、陆礼红、甘滔、潘永斌、陈钰飞、朱明鉴,他们在我写《UVM1.1应用指南及源代码解析》期间给了我各种各样的帮助。
由于时间仓促,同时作者水平所限,书中难免存在错误,恳请广大读者批评指正!
张强
2014年4月