第1章 什么是“编程陷阱” 1
什么是Verilog和SystemVerilog 1
什么是陷阱 1
Verilog和SystemVerilog标准 2
第2章 声明以及字符表述类陷阱 5
陷阱1:字母大小写的敏感性 5
陷阱2:网表的隐式声明 7
陷阱3:默认的1 bit内部网 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_来加载存储器模型 150
陷阱99:非标准语言扩展 151
陷阱100:数组常量的级联 153
陷阱101:传输浮点数值(实数类型)的模块端口 154