编辑推荐
《Verilog编程艺术》更加注重Verilog编程的方法论和实用性,深入地探讨编码风格、语言特性、简洁高效和时钟复位等实际问题,深入探讨如何避免使用易混淆和易错误的语句,如何避免前后仿真不一致,如何充分发挥Verilog-2001的特性。内容简介
《Verilog编程艺术》深入地探讨了Verilog编程,分为七个部分:设计原则、语言特性、书写文档、高级设计、时钟和复位、验证之路、其他介绍。《Verilog编程艺术》对这些部分做了重点的探讨:Verilog编码风格、Verilog-2001的新特性、简洁高效的编程、容易出错的语言元素、可配置设计、时钟生成、复位设计、验证方法等。另外,《Verilog编程艺术》还对SystemVerilog做了简单的介绍。作者简介
魏家明,具有多年的Verilog设计经验,参与了多个芯片的设计工作,重点在前端设计(设计、验证、综合、和STA等)。精彩书评
《电子技术应用》副总编杨晖、与非网创始人苏公雨、电子发烧友CEO陈遂伯、电子创新网CEO张国斌、中国电子顶开发网(EETOP)创始人毕杰、北京化工大学教师何宾、景略半导体(上海)有限公司郭雄飞、知名Verilog专家特权同学、知名Verilog专家阿东、畅销书作者原子联合力荐!
看得出,作者是一位将美学思想贯穿于代码设计的爱“美”人士,其实,美学思想贯穿于我们生活的方方面面,从简单的烹饪家居到复杂的设计装潢,都有美的体现,代码编写也不例外,要通过Veilog编程做出美的设计,离不开好的编码风格,《Verilog编程艺术》是作者多年编程经验的总结,对于那些开始学习或者已经在进行Veilog编程的设计师来说,这些分享非常实用且无比宝贵。
——电子创新网CEO张国斌
很喜欢作者的写作风格,摆事实讲道理的过程中安插了许多有趣的故事,让枯燥的学习立刻生动起来。看得出来,作者是下了很多功夫的。书中还安排了很多作者的宝贵经验和设计心得,非常实用。这是一本有个性的图书,将Verilog编程思想艺术化地奉献给了读者。
——电子发烧友CEO陈遂伯
作者魏家明具有多年实际工程设计和Verilog编程经验。《Verilog编程艺术》从工程设计角度对Verilog编程从编码风格、语言特性、IP设计、时钟复位、验证等进行了深入阐述,并探讨了在设计中可能遇到的问题,提出了相应的解决办法。《Verilog编程艺术》可以作为学习和提升Verilog的语法书籍,有助于读者形成“简单和谐、整洁有序”的编程风格。
《电子技术应用》副总编杨晖
仔细读了《Verilog编程艺术》前5章,有一种文艺范的感觉,编程就是一门艺术,就应该讲究美感,去除冗余!越往后读,笔者注重的编程艺术越重,甚至连文档该怎么写都是一种艺术。如果你正在用Verilog,推荐你阅读此书,对于你的帮助会很大!
——中国电子开发网(EETOP)创始人毕杰
作者在《Verilog编程艺术》中分享了他在IC设计领域多年的经验,在这个经验至上的行业,如果说Verilog是我们手中的剑,那么这《Verilog编程艺术》或许就是你成为“人剑合一”的武林高手过程中的武林秘籍。作者同时也鼓励读者养成良好的编码和书写文档的习惯,这都是成为一个工程师的必要条件。不论是对初学者还是有多年经验的设计人员,这都是一本不可多得的好书。
——景略半导体(上海)有限公司郭雄飞
当我拿到《Verilog编程艺术》这《Verilog编程艺术》的时候,细细品味,觉得眼前一亮。《Verilog编程艺术》作者将Verilog的国际标准和自己多年的实践经验相结合,将Verilog语言写得生动活泼。《Verilog编程艺术》内容浅显易懂,这将帮助初学者快速学习和系统掌握Verilog语言。为了兼顾Verilog语言高层次设计者的需求,书中还介绍了Verilog的高级设计方法。这些高级设计方法,将对设计者提高灵活运用Verilog的水平起到很好的帮助作用,使得他们能通过Verilog语言设计出复杂高效的数字系统
——北京化工大学何宾老师目录
第一部分设计原则
第1章美的设计
1.1美学观点
1.2美是修养
1.3专业术语
第2章高效之道
2.1敏捷开发
2.2代码质量
2.3版本控制
2.4提早集成
第3章组织管理
3.1植物分类
3.2SoC特性
3.3设计流程
3.4仔细规划
3.5管理表格
3.6模块层次
3.7目录组织
第4章使用工具
4.1使用Emacs
4.2使用Shell
4.3使用CVS
第5章编码风格
5.1干干净净
5.2代码划分
5.3代码要求
5.4名字定义
5.5书写格式
5.6添加注释
5.7参数化
5.8lint检查
第二部分语言特性
第6章Verilog特性
6.1Verilog标准
6.2抽象级别
6.3可综合子集
6.4保持一致
第7章常数
7.1整数(integer)
7.2实数(real)
7.3字符串(string)
7.4标识符(identifier)
第8章数据类型
第9章表达式
第10章赋值操作
10.1连续赋值
10.2过程赋值
第11章门级和开关级模型
第12章用户定义原语
12.1UDP定义
12.2组合UDP
12.3电平敏感时序UDP
12.4沿敏感时序UDP
第13章行为模型
13.1概览
13.2过程赋值
13.3过程连续赋值
13.4条件语句
13.5循环语句
13.6过程时序控制
13.7块语句
13.8结构化过程
13.9always有关的问题
第14章case语句
第15章task和function
第16章调度和赋值
16.1仿真过程
16.2事件仿真
16.3仿真参考模型
16.4分层事件队列
16.5确定性和不确定性
16.6赋值的调度含义
16.7阻塞赋值和非阻塞赋值
16.8赋值使用原则
16.9自己触发自己
16.10仿真零延迟RTL模型
16.11惯性延迟和传输延迟
16.12延迟线模型
16.13使用#1延迟
16.14多个公共时钟和竞争条件
16.15避免混杂阻塞赋值和非阻塞赋值
16.16RTL和门级混合仿真
16.17带有SDF延迟的门级仿真
第17章层次结构
17.1模块
17.2参数
17.3端口
17.4Generate语句
17.5实例数组
17.6层次名字
第18章系统任务和函数
18.10波形记录
第19章编译指令
第20章Specify块
20.1specify块声明
20.2speparam
20.3模块路径声明
20.4模块路径延迟
第21章时序检查
21.1概览
21.2使用稳定窗口的时序检查
21.3时钟和控制信号的时序检查
21.4使用notifier响应时序违反
21.5使用条件事件
21.6时序检查中的Vector
21.7Negativetimingcheck
第22章反标SDF
22.1SDF标注器
22.2SDFconstruct到Verilog的映射
22.3$sdf_annotate
22.4SDF文件例子
第23章编程语言接口
23.1DirectC
23.2SystemVerilog
第24章综合指令
第三部分书写文档
第25章书写文档
25.1文档格式
25.2定义文档
25.3应用文档
25.4设计文档
25.5备份文档
25.6GPIO设计
第26章GPIO应用文档
26.1Overview
26.2RegisterDescription
26.3ProgramGuide
第27章GPIO设计文档
27.1文件列表(见表27-1)
27.2端口列表(见表27-2)
27.3配置参数(见表27-3)
第四部分高级设计
第28章使用IP
第29章代码优化
29.1代码可读
29.2简洁编码
29.3优化逻辑
29.4优化迟到信号
29.5括号控制结构
第30章状态机设计
30.1状态机类型
30.2状态编码方式
30.3二进制编码FSM
30.4独热码编码FSM
30.5寄存器输出
第31章可配置设计
31.1格雷码转换
31.2通用串行CRC
31.3FIFO控制器
31.4RAMWrapper例子
31.5可配置的GPIO设计
31.6可配置的BusMatrix
31.7可配置的AndesCoreN801
31.8可配置的ARM926EJS
31.9灵活的coreConsultant
第32章可测性设计
32.1内部扫描
32.2内建自测
32.3边界扫描
第五部分时钟和复位
第33章异步时序
33.1亚稳态
33.2MTBF
33.3同步器
33.4同步多位数据
33.5异步FIFO
33.6DesignWare
33.7DW_fifoctl_s2_sf
33.8门级仿真
第34章时钟生成
34.1同步电路
34.2设计原则
34.3分频器
34.4时钟切换
34.5时钟生成
第35章时钟例子
第36章复位设计
第六部分验证之路
第37章验证之路
37.1整洁验证
37.2验证目标
37.3验证流程
37.4验证计划
37.5随机验证
37.6直接验证
37.7白盒验证
37.8模块验证
37.9系统验证
37.10DFT验证
37.11网表验证
37.12高级抽象
37.13灵活验证
37.14ARM926EJS的Validation环境
37.15AHBBusMatrix的验证
37.16某芯片的SoC验证环境
第七部分其他介绍
第38章SystemVerilog特性
参考文献
关于版权精彩书摘
"程序设计是一门艺术"这句话有两个意思:一方面是说,程序设计像艺术设计一样,深不可测,奥妙无穷;另一方面是说,程序员像艺术家一样,也有发挥创造性的无限空间[梁肇新]。
DonaldKnuth认为"计算机科学"不是科学,而是一门艺术。它们的区别在于:艺术是人创造的,而科学不是;艺术是可以无止境提高的,而科学不能;艺术创造需要天赋,而科学不需要。所以DonaldKnuth把他的4卷本巨著命名为《计算机程序设计艺术》(TheArtofComputerProgramming)。
DonaldKnuth不仅是计算机学家、数学家,而且是作家、音乐家、作曲家、管风琴设计师。他的独特的审美感决定了他的兴趣广泛、富有多方面造诣的特点,他的传奇般的生产力也是源于这一点。对于DonaldKnuth来说,衡量一个计算机程序是否完整的标准不仅仅在于它是否能够运行,他认为一个计算机程序应该是雅致的,甚至可以说是美的。计算机程序设计应该是一门艺术,一个算法应该像一段音乐,而一个好的程序应该如一部文学作品一般。
BjarneStroustrup,C++语言发明者,说"我喜欢优雅和高效的代码。代码逻辑应当直截了当,让缺陷难以隐藏;应当减少依赖关系,使之便于维护;应当依据分层战略,完善错误处理;应当把性能调至最优,省得引诱别人做没规矩的优化,搞出一堆混乱来"。他特别使用"优雅"一词来说明"令人愉悦的优美、精致和简单"[RobertC.Martin]。
一个人的美学观点会影响他的程序设计,因为Knuth有这么多的艺术爱好,所以他把程序设计看成艺术设计,在程序设计中要体现出程序的美。同样,当BjarneStroustrup编写优雅且高效的代码的时候,他也是在程序设计中寻求美。
我的美学观点是简单和谐、整洁有序;某导演的美学观点是宏大华丽、空洞无味;还有些人的美学观点是乱七八糟、凑合了事;你的美学观点是什么呢?有些人很自负,感觉良好,以为领悟到了编程的真谛,看到代码可以运行,就洋洋得意,可是却对自己造成的混乱熟视无睹。那堆"可以运行"的程序,就在眼皮底下慢慢腐坏,然后废弃扔掉。
因为Verilog编程就是一种程序设计,所以Verilog编程也应该像设计艺术作品一样,要仔细打磨、精雕细琢,要经历痛苦与无奈,也要经历快乐与自得。设计要有自己的方法论,要体现自己的奇思妙想,要让自己的设计有更长的生命力,而不是豆腐渣工程。
为什么那么多人对Apple的手机和计算机情有独钟?因为它们都是美的设计,因为它们的设计者都在追求美。同理,我们在做Verilog编程的时候也要追求美,也要设计出美的Verilog程序。
……前言/序言
《Verilog编程艺术》来源于实际工程的设计,是从工程设计方面对Verilog编程的反馈。《Verilog编程艺术》既包含作者对Verilog编程规范的总结,也包含作者对多年工程设计的经验总结。
《Verilog编程艺术》更加注重Verilog编程的方法论和实用性,深入地探讨编码风格、语言特性、简洁高效和时钟复位等实际问题,深入探讨如何避免使用易混淆和易错误的语句,如何避免前后仿真不一致,如何充分发挥Verilog-2001的特性。《Verilog编程艺术》主要分为以下几大部分:
1.开发原则:探讨高效开发的原则、开发的组织管理、开发工具的使用和切实可行的编码风格等。作者对开发的原则、管理、工具和风格做了详细的介绍,强调只有把它们有机地结合在一起,我们才能做出好的设计。作者对各种编码风格(书本上的和网上的,好的和差的)做了较为详尽的总结,强调只有在好的编码风格约束下,我们才能写出美的Verilog程序。
2.语言特性:探讨Verilog语言的特性,重点在Verilog-2001标准、always语句、case语句、task和function、循环语句、调度和赋值等。作者对Verilog-1995和Verilog-2001做了对比,探讨如何发挥Verilog-2001的新特性,如何用其编写出简洁的代码。作者对某些语言元素做了详细的说明,例如signed应用、loop语句、disable语句、task和function等。作者对Verilog中各种容易混淆和错误的地方(例如,敏感列表、case语句、静态函数等)做了详细的说明,探讨如何避免混淆和出错,探讨如何避免前后仿真不一致。作者对赋值和调度做了详细的探讨,因为它们是理解仿真执行和避免竞争条件的关键。
3.书写文档:探讨如何写出优秀的应用文档和设计文档,并以GPIO文档为实例。作者强调Verilog编程只是设计的一部分,写出优秀的文档也是非常重要的。
4.高级设计:探讨IP使用、代码优化、状态机设计、可配置设计和可测性设计,并给出大量的示例代码。作者在此介绍IP分类、选择和使用,介绍几种优化代码的方法,介绍状态机的分类和如何编写出强壮的状态机,介绍可测性设计的方法。作者着重地探讨可配置设计的实现方法,并用不同例子说明这些实现方法。
5.时钟复位:探讨异步设计、亚稳态、时钟生成和复位设计。作者在此探讨异步设计中的亚稳态和对应的解决方法,探讨时钟生成的方法和实际例子,探讨同步复位、异步复位、复位同步器、复位分布树等问题。
6.验证之路:探讨整洁验证、验证方法和验证环境。作者对验证方法做了一些介绍,探讨验证中可能遇到的问题(例如,网表验证、灵活验证等),并以实际例子说明如何搭建验证环境。
7.其他介绍:介绍SystemVerilog的特点,介绍相对于Verilog的增强,还对VMM、OVM和UVM做了对比。作者强调为了加强我们的设计和验证,我们必须要从Verilog过渡到SystemVerilog。
《Verilog编程艺术》参考并引用了著名的Verilog专家CliffCummings写的一些论文,这些论文探讨了我们在设计中可能遇到的各种问题和相应的解决办法,探讨了如何写出简洁严谨一致的Verilog代码,作者在此向他表示致敬。如果读者对原文感兴趣,可以到http://www.sunburst-design.com下载这些论文,非常值得一读。
另外,作者在编写《Verilog编程艺术》的时候,充分地考虑了阅读的友好性,直接用1、2、3…列出来各种特性和要点,而且特意在一些地方增加了空行以便于阅读,总之要让人看着舒服,看得明白。
衷心地感谢北京君正集成电路股份有限公司的CTO张紧先生,他在百忙之中为《Verilog编程艺术》题写了序言,在我走向IC设计的道路上,我从他那里学习到了很多的东西。
衷心感谢我的以前的同事们,因为我的很多思想来源于你们,因为我们在一起工作的日子很快乐,这么多年的同事,不容易呀,我总是要经常地想起你们。
衷心感谢我的朋友燕雪松、刘会娟、张奇辉、张茜歌、卢海平、杜文杰等人帮我审稿,帮我找到好多的缺陷和错误。
衷心感谢我的网上的朋友们,因为我采用了很多的网上资料,感谢你们的无私奉献。
衷心感谢电子工业出版的支持,正是由于责任编辑王敬栋的密切联系和各位编辑的认真工作,才使得《Verilog编程艺术》得以顺利地与读者见面。
如果您在《Verilog编程艺术》中发现有缺陷或者错误的地方,或者您对《Verilog编程艺术》存有模糊或者疑惑的地方,请通过QQ或者邮件与我联系,我的QQ号码是943609120,您的任何反馈都是令人欢迎的。
魏家明
2013-10-16