第1章 概述 1
1.1 CPLD/FPGA发展演变 1
1.2 乘积项结构的基本原理 3
1.3 查找表结构的基本原理 5
1.4 Virtex UltraScale+系列FPGA简介 7
1.5 CPLD/FPGA设计与验证流程 8
1.5.1 系统级功能定义与模块划分 8
1.5.2 寄存器传输级与门级描述 9
1.5.3 系统综合编译 10
1.5.4 布局规划与布线 11
1.5.5 仿真 11
1.5.6 程序设计下载配置 12
1.5.7 测试与验证 15
1.6 CPLD/FPGA开发平台简介 16
1.7 硬件描述语言的介绍 16
1.8 硬件语言与软件语言的区别 20
本章小结 20
思考与练习 21
第2章 Verilog HDL入门指南 22
2.1 模块 22
2.2 模块端口及声明 24
2.3 注释 25
2.4 数据流描述 26
2.4.1 连续赋值语句 27
2.4.2 时延 29
2.5 行为级描述 31
2.5.1 initial语句 31
2.5.2 always语句 32
2.5.3 时序控制 36
2.6 结构化描述 39
2.6.1 门级建模及描述 39
2.6.2 用户定义原语(UDP) 42
2.6.3 模块例化 46
2.7 混合描述 49
本章小结 51
思考与练习 52
第3章 Verilog HDL语法要素 53
3.1 标识符 53
3.2 数值集合 54
3.2.1 数字 54
3.2.2 字符串 56
3.2.3 参数 56
3.3 数据类型 56
3.3.1 线网类型 57
3.3.2 变量类型 60
3.4 数组 63
3.5 内建门级原语 64
3.6 操作数 66
3.6.1 常数、参数、线网与变量 66
3.6.2 位选择及部分位选 67
3.6.3 存储单元 68
3.6.4 功能调用 68
3.7 操作符 68
3.7.1 算术操作符 70
3.7.2 关系操作符 71
3.7.3 相等操作符 71
3.7.4 逻辑操作符 72
3.7.5 按位操作符 72
3.7.6 缩减操作符 73
3.7.7 移位操作符 74
3.7.8 条件操作符 75
3.7.9 拼接复制操作符 76
3.8 编译指令 76
3.9 实例:带可预置数据的8位自增/减计数器设计 79
本章小结 80
思考与练习 80
第4章 Verilog HDL语法进阶描述 82
4.1 语句块 82
4.1.1 顺序语句块 82
4.1.2 并行语句块 83
4.2 过程赋值语句 85
4.2.1 阻塞赋值语句 85
4.2.2 非阻塞赋值语句 88
4.2.3 过程赋值语句的使用原则 90
4.3 过程性连续赋值语句 91
4.4 高级程序设计语句 93
4.4.1 条件语句 93
4.4.2 case语句 97
4.4.3 循环语句 101
4.4.4 generate语句 105
4.5 参数化设计 111
4.6 实例:基于 SFF8485规格的SGPIO协议的Verilog HDL实现 116
4.6.1 SGPIO协议简介 116
4.6.2 SGPIO协议接收者的Verilog HDL代码设计 118
本章小结 129
思考与练习 129
第5章 任务及函数 130
5.1 任务 130
5.1.1 任务声明 130
5.1.2 任务调用 131
5.2 函数 132
5.2.1 函数声明 132
5.2.2 函数调用 133
5.3 系统任务和系统函数 133
5.3.1 显示任务 134
5.3.2 仿真控制任务 135
5.3.3 文件输入输出任务 135
5.3.4 变换函数 138
5.3.5 概率分布函数 138
5.3.6 仿真时间函数 139
5.4 命名事件 139
5.5 层次路径名 140
5.6 共享任务和函数 141
5.7 实例:带可预置数据的8位自增/减计数器设计 143
本章小结 146
思考与练习 146
第6章 SystemVerilog基础语法 147
6.1 基本数据类型 147
6.1.1 logic类型 148
6.1.2 2值数据类型 149
6.1.3 枚举类型 150
6.1.4 typedef 155
6.1.5 结构体和共同体 157
6.2 数组 161
6.2.1 多维数组 161
6.2.2 动态数组 162
6.2.3 关联数组 164
6.2.4 队列 166
6.2.5 数组的基本操作方法 168
6.2.6 字符串 170
6.3 过程语句 172
6.3.1 always_comb语句和assign语句 172
6.3.2 always_latch语句 174
6.3.3 always_ff语句 175
6.3.4 final语句 176
6.4 unique和priority 176
6.4.1 unique 176
6.4.2 priority 178
6.5 循环语句 180
6.5.1 while循环 180
6.5.2 do…while循环 181
6.5.3 foreach循环 182
6.5.4 continue和break 183
6.6 模块例化 184
6.7 实例:采用System Verilog实现汉明码的编码设计 187
本章小结 189
思考与练习 189
第7章 有限状态机设计 191
7.1 有限状态机的基本概念 191
7.1.1 Mearly 型状态机 193
7.1.2 Moore型状态机 194
7.2 有限状态机的算法描述 194
7.3 有限状态机描述的基本语法 195
7.4 状态初始化 198
7.5 状态编码 202
7.5.1 二进制码(Binary码) 203
7.5.2 格雷码(Gray码) 203
7.5.3 独热码(one-hot码)和独冷码(one-cold码) 205
7.5.4 状态编码原则和编译指导 205
7.6 Full Case与Parallel Case 206
7.7 状态机的描述 210
7.7.1 一段式状态机 211
7.7.2 两段式状态机 213
7.7.3 三段式状态机 219
7.7.4 小结 221
7.8 实例:交通信号灯控制系统的SystemVerilog程序设计 222
本章小结 229
思考与练习 229
第8章 同步数字电路与时序分析 231
8.1 同步数字电路的基本概念 231
8.1.1 同步数字电路 231
8.1.2 时钟域 233
8.2 D触发器的工作原理 234
8.3 亚稳态的产生原理及同步寄存器 236
8.4 同步数字系统的时序约束 244
8.5 时钟 246
8.5.1 时钟偏斜与抖动 246
8.5.2 F max 249
8.6 IO时序分析 249
8.6.1 输入时序分析 250
8.6.2 输出时序分析 251
8.7 时序例外 252
8.7.1 False Path 253
8.7.2 MultiC ycle Path 253
8.8 PLL 256
8.9 时序优化 257
8.10 实例:采用SystemVerilog实现对开关信号的消抖设计 259
本章小结 265
思考与练习 265
第9章 硬件线程与接口 267
9.1 硬件线程的基本概念 267
9.1.1 数据路径 268
9.1.2 硬件线程的算法描述 271
9.2 硬件线程的连接 272
9.3 硬件线程的同步 273
9.4 实例:基于串并转换的硬件线程连接实现 276
9.4.1 Master_Interface硬件线程介绍 278
9.4.2 Slave_Interface硬件线程介绍 280
9.4.3 代码实现 281
9.5 异步硬件线程的连接 289
9.6 接口 292
9.6.1 接口声明和例化 293
9.6.2 modport 294
9.7 实例:采用接口实现SGPIO的数据传送 294
9.7.1 SGPIO简介 294
9.7.2 SGPIO程序设计 296
本章小结 301
思考与练习 302
第10章 SystemVerilog仿真基础 303
10.1 仿真简介 303
10.1.1 仿真入门 303
10.1.2 仿真器原理 306
10.1.3 测试平台 308
10.2 program 310
10.3 面向对象编程与类 312
10.3.1 面向对象编程简介 312
10.3.2 类简介 313
10.3.3 静态变量与静态方法 316
10.3.4 this 317
10.3.5 类的内嵌 318
10.3.6 对象的基本操作 318
10.3.7 类的继承与多态 322
10.4 随机化 326
10.4.1 随机化基础 326
10.4.2 randcase 330
10.4.3 randsequence 330
10.4.4 随机约束基础 332
10.4.5 权重分布 334
10.4.6 约束操作符 335
10.5 并行线程 341
10.5.1 wait 345
10.5.2 Disable 346
10.5.3 mailbox 347
10.5.4 命名事件 350
10.5.5 semaphore 353
10.6 实例:简单的多口路由仿真程序设计 355
本章小结 361
思考与练习 361
第11章 断言与功能覆盖 362
11.1 断言 362
11.1.1 立即断言 363
11.1.2 时序操作符 365
11.1.3 序列 367
11.1.4 属性 368
11.1.5 并行断言 369
11.1.6 重复操作符 371
11.1.7 逻辑操作符 374
11.1.8 条件操作符 376
11.1.9 断言系统函数 377
11.2 覆盖率介绍 379
11.2.1 代码覆盖率 380
11.2.2 断言覆盖率 381
11.2.3 功能覆盖率 381
11.3 功能覆盖 382
11.3.1 覆盖点与覆盖组 382
11.3.2 交叉覆盖 384
11.3.3 仓 385
11.3.4 翻转覆盖 388
11.3.5 覆盖选项 390
11.3.6 采样函数 393
11.3.7 覆盖率数据分析 394
11.4 实例:对有限状态机进行功能覆盖设计 395
本章小结 399
思考与练习 399
参考文献 401