Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误.pdf

Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误.pdf
 

书籍描述

内容简介
这本书可以帮助工程师写出更好的Verilog/SystemVerilog的设计和验证代码,书中阐述了使用Verilog和SystemVerilog语言时超过100个常见的编码错误;每一个例子都详细说明了错误的症状、错误的语言规则以及正确的编码方式。这本书能帮助数字设计工程师和验证工程师有效地识别与避免这些常见的编码错误。书中列举的这些错误许多是非常微妙的,有可能需要花费几个小时或几天的时间才能发现或调试。

作者简介
关 于 作 者Stuart Sutherland是IEEE 1800工作组的成员,该工作组负责起草Verilog和SystemVerilog标准。早在1993年也就是Verilog标准的诞生之际,他就已经涉足其标准的定义。同时他参与SystemVerilog标准也可追溯到2001年。此外,Stuart是IEEE官方Verilog和SystemVerilog语言参考手册的技术编辑。Stuart先生作为独立Verilog顾问,专注提供针对Verilog HDL、SystemVerilog 和PLI的综合性专家训练。Stuart是《SystemVerilog for Design》《Verilog-2001:A Guide to the New Features in the Verilog Hardware Description Language》的合著者,也是《The Verilog PLI Handbook》和颇受推崇的《Verilog HDL Quick Reference Guide》及《Verilog PLI Quick Reference Guide》的作者。Stuart同时发表了诸多涉及Verilog和SystemVerilog的技术文章。
Don Mills从1986年开始涉足ASIC的设计。在此期间,他参与了超过30个ASIC项目。Don从1991开始使用自顶向下的设计方法(综合设计编译器1.2)。Don在几个公司开发并实施了自顶向下的ASIC设计流程。他精通工具整合和流程自动化。Don作为SystemVerilog和Verilog内部咨询师服务于美国微芯技术公司。Don是IEEE Verilog和SystemVerilog委员会的成员,该委员会致力于Verilog和SystemVerilog语言的发布和完善。Don是多篇文章的作者或合著者,例如《SystemVerilog Assertions are for Design Engineers Too!》及《RTLCoding Styles that Yield Simulation and Synthesis Mismatches》。

目录
目 录
译者序

关于作者
第1章 什么是“编程陷阱” / 1
什么是Verilog和SystemVerilog / 1
什么是陷阱 / 1
Verilog和SystemVerilog标准 / 2
第2章 声明以及字符表述类陷阱 / 5
陷阱1:字母大小写的敏感性 / 5
陷阱2:网表的隐式声明 / 7
陷阱3:默认的1bit内部网 / 9
陷阱4:单文件和多文件编译的$unit声明 / 11
陷阱5:局部变量的声明 / 12
陷阱6:分层路径的转义名称 / 13
陷阱7:自动变量的分层引用 / 15
陷阱8:未命名模块中的变量分层引用 / 17
陷阱9:分层引用一个导入的包项目 / 19
陷阱10:从程序包中导入枚举类型 / 19
陷阱11:导入多个程序包 / 20
陷阱12:默认的整数进制 / 21
陷阱13: 有符号整数 / 23
陷阱14:有符号数的位宽扩展 / 24
陷阱15:变量位宽与赋值位宽的不一致 / 26
陷阱16:将矢量全置为1 / 27
陷阱17:合并数组和并置 / 28
陷阱18:端口连接的几点规则 / 29
陷阱19:后驱动端口 / 32
陷阱20:实型(浮点型)数字的端口间传送 / 34
第3章 RTL建模中的陷阱 / 37
陷阱21:包含函数调用的组合逻辑灵敏度列表 / 37
陷阱22:灵敏度列表中的数组 / 39
陷阱23:时序逻辑灵敏度列表中的向量 / 41
陷阱24:灵敏度列表中的操作 / 42
陷阱25:使用begin...end的时序逻辑块 / 43
陷阱26:带复位的顺序逻辑块 / 45
陷阱27:异步设置/复位触发器仿真和综合 / 46
陷阱28:顺序程序块中的阻塞赋值 / 47
陷阱29:要求阻塞赋值的顺序逻辑 / 48
陷阱30:组合逻辑中的非阻塞赋值 / 50
陷阱31:错误顺序的组合逻辑赋值语句 / 52
陷阱32:case表达式中casez/casex掩码用法 / 54
陷阱33:不完备的判决语句 / 55
陷阱34:重叠判决语句 / 58
陷阱35:不恰当使用unique 条件语句 / 59
陷阱36:2-状态模型的复位 / 61
陷阱37:枚举类型锁定状态机的建模 / 63
陷阱38:4-状态逻辑中隐藏的设计问题 / 65
陷阱39:2-状态类型中隐藏的设计问题 / 66
陷阱40:越界数组访问中的隐藏问题 / 68
陷阱41:枚举类型的越界赋值 / 69
陷阱42:模块中未检测到共享变量 / 71
陷阱43:在接口和程序包中未见共享变量 / 72
第4章 运算符陷阱 / 74
陷阱44:表达式的赋值 / 74
陷阱45:操作符的自定义和上下文定义 / 75
陷阱46:赋值语句中的运算位宽和符号扩展 / 77
陷阱47:有符号数的算数运算规则 / 80
陷阱48:基于位选择的操作 / 82
陷阱49:递增、递减和赋值运算符 / 83
陷阱50:前加与后加运算 / 84
陷阱51:一条语句中变量的多次改变 / 86
陷阱52:运算求值短路 / 86
陷阱53:逻辑非(!)与按位求反符(~) / 88
陷阱54:数组的运算 / 88
陷阱55:针对数组子集的运算 / 89
第5章 常见的编程陷阱 / 91
陷阱56:验证零时刻的异步和同步复位 / 91
陷阱57:if...else嵌套语块 / 95
陷阱 58:4-状态值下等号求值 / 96
陷阱 59:事件触发竞争条件 / 97
陷阱 60:使用信号量的同步 / 99
陷阱61:使用邮箱的同步 / 101
陷阱 62:时钟块的触发 / 103
陷阱63:判断语句后错误使用分号 / 103
陷阱 64:for循环语句中分号的错误使用 / 105
陷阱65:死循环 / 106
陷阱66:由于并发for循环引起的死锁 / 106
陷阱67:循环控制变量的引用 / 108
陷阱68:函数返回默认的位宽 / 109
陷阱69:任务/功能函数的默认值 / 110
陷阱70:为避免毛刺而采用延迟的连续赋值 / 111
第6章 面向对象和多线程编程中的陷阱 / 113
陷阱71:类定义的编程语句 / 113
陷阱72:基于面向对象接口的测试平台 / 114
陷阱73:邮箱中的所有对象具有相同的值 / 115
陷阱74:使用input或ref参数的句柄传递 / 116
陷阱75:构建一个基于对象的数组 / 117
陷阱76:静态任务和功能的非可重入性 / 118
陷阱77:静态变量与自动变量的初始化 / 119
陷阱78:叉型编程线程需要自动变量 / 121
陷阱79:禁用fork将终止多个线程 / 123
陷阱80:禁用一个语句块却未如所愿 / 124
陷阱81:仿真在测试完毕前过早退出 / 127
第7章 随机化、覆盖率和断言类陷阱 / 129
陷阱82:随机化声明的变量并未随机化 / 129
陷阱83:未被检测的随机化失败 / 130
陷阱84:$assertoff 可以禁止随机化 / 131
陷阱85:两个以上随机变量的布尔约束条件 / 133
陷阱86:不必要的负随机值 / 134
陷阱87:覆盖报告默认基于组而非箱 / 135
陷阱88:覆盖率始终报告0% / 136
陷阱89:覆盖报告将所有实例混在一起 / 138
陷阱90:覆盖组的参数方向具有粘黏性 / 138
陷阱91:断言传递语句与空成功一同执行 / 139
陷阱92:程序块中的并发断言 / 141
陷阱93:assert...else语句中的不匹配 / 142
陷阱94:不能失败的断言 / 143
第8章 工具兼容性陷阱 / 145
陷阱95:默认的仿真时间单位和精度 / 145
陷阱96:程序包链接 / 147
陷阱97:不同工具的随机数生成不一致 / 149
陷阱98:使用always_latch/always_ff来加载存储器模型 / 150
陷阱99:非标准语言扩展 / 151
陷阱100:数组常量的级联 / 153
陷阱101:传输浮点数值(实数类型)的模块端口 / 154

序言
序人的爱好各有不同,有人喜欢收集棒球卡片,有人喜欢收集老旧的汽车杂志,也有人喜欢收集橡皮鸭子,而我喜欢收集Verilog方面的书籍。
这要追溯到1989年一本用三孔夹夹着的活页《VERILOG-XL Reference Manual Version 1.5a》复印版。当时的Verilog相对简单——令人难以相信的是,现如今已经可以用一种类型的程序分配来设计芯片(在当时非阻塞式分配还不是一种语言)。不仅如此,当时我们只能在VAX或阿波罗工作站上仿真。
从那时起,我几乎买下了关于Verilog的每一本书。我所写过的书中已经包含了一些综合性的书。将来我将写一本VHDL的必备手册,又或者是一本介绍硬件描述性语言历史的书,当然书的内容大多是有关Verilog的。
对于这些书,有一件有趣的事儿。在我翻阅它们后,就会把它们放在架子上,很少再次翻阅。我承认当你看到我装满Verilog书的书架时,你会对此留下很深的印象。目光敏锐的客人会注意到我的书是崭新的。确实,我没用过它们,没读过它们,因为它们对我帮助很少。
令人失望的是,我很难找到一本对应用工程师实用的书。我想要的是一本每天带在身边,及时和有效地助我迈出第一步的书。
Stu和Don编著了本书。我们认识很多年了,他们在Verilog上有很深的造诣。他们将毕生所学的精华总结成这本非常实用的书。本书一定不会让你失望。
如果你是一个通过惨痛教训而跳出Verilog陷阱的内行,微笑着对自己说:“太好了,我曾经在这出过问题。”
欢迎刚开始学习Verilog和SystemVerilog的朋友们!通过阅读本书,你可以拥有向这个领域的两个顶级专家学习的机会。如果你有机会参加这两位专家中任意一位的课程,一定要报名。我保证你不会后悔。
顺便提一下,我最喜欢的陷阱是“陷阱65:死循环”。因为我曾经犯过这样的错误。相信我,如果你曾经因为建模错误致使打坏计算机,那么这辈子你都不会忘记错误的原因。可是你比我幸运,因为本书可以帮助你。将这本书放在手边,经常翻阅,那么你的模型都可以通过编译,循环都可以终止。
Steve Golson

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多