简介
本书以实例讲解的方式对HDL语言的设计方法进行介绍。全书共分9章,第1章至第3章主要介绍了Verilog HDL语言的基本概念、设计流程、语法及建模方式等内容;第4章至第6章主要讨论如何合理地使用Verilog HDL语言描述高性能的可综合电路;第7章和第8章重点介绍了如何编写测试激励以及Verilog的仿真原理;第9章展望HDL语言的发展趋势。
本书配有一张光盘,光盘中收录了书中示例的工程文件、设计源文件及说明文件等。另外为了配合读者进一步学习,光盘中还提供了Verilog 1995和Verilog 2001这两个版本的IEEE标准文献,读者可以从中查阅Verilog的语法细节。
本书围绕设计和验证两大主题展开讨论,内容丰富,实用性强,可作为高等院校通信工程、电子工程、计算机、微电子和半导体等相关专业的教材,也可作为硬件工程师和IC工程师的参考书。
目录
第1章 HDL设计方法简介 1
1.1 设计方法的变迁 1
1.2 Verilog语言的特点 2
1.2.1 Verilog的由来 2
1.2.2 HDL与原理图 2
1.2.3 Verilog和 VHDL 3
1.2.4 Verilog和C语言 4
1.3 HDL的设计与验证流程 5
1.4 问题与思考 7
第2章 Verilog语言基础 9
2.1 Top-Down和Bottom-Up 9
2.2 Verilog的3种描述方法 10
2.2.1 实例 10
2.2.2 3种描述方法 13
2.3 基本词法 14
2.4 模块和端口 15
2.5 编译指令 16
2.6 逻辑值与常量 17
2.6.1 逻辑值 17
2.6.2 常量 18
2.7 变量类型 19
2.7.1 线网类型 19
2.7.2 寄存器类型 19
2.7.3 变量的物理含义 20
2.7.4 驱动和赋值 20
2.8 参数 22
2.9 Verilog中的并发与顺序 22
2.10 操作数、操作符和表达式 23
2.10.1 操作符 23
2.10.2 二进制数值 26
2.10.3 操作数 26
2.11 系统任务和系统函数 28
2.11.1 显示任务 28
2.11.2 文件输入/输出任务 28
2.11.3 其他系统任务和系统函数 29
2.12 小结 29
2.13 问题与思考 29
第3章 描述方式和设计层次 31
3.1 描述方式 31
3.2 数据流描述 31
3.2.1 数据流 31
3.2.2 连续赋值语句 31
3.2.3 延时 33
3.2.4 多驱动源线网 34
3.3 行为描述 36
3.3.1 行为描述的语句格式 36
3.3.2 过程赋值语句 40
3.3.3 语句组 43
3.3.4 高级编程语句 44
3.4 结构化描述 50
3.4.1 实例化模块的方法 52
3.4.2 参数化模块 53
3.5 设计层次 57
3.5.1 系统级和行为级 57
3.5.2 RTL级 59
3.5.3 门级 60
3.5.4 晶体管级 60
3.5.5 混合描述 60
3.6 实例:CRC计算与校验电路 60
3.6.1 CRC10校验,行为级 61
3.6.2 CRC10计算电路,RTL级 62
3.7 小结 64
3.8 问题与思考 64
第4章 RTL概念与RTL级建模 65
4.1 RTL与综合的概念 65
4.2 RTL级设计的基本要素和步骤 65
4.3 常用的RTL级建模 67
4.3.1 阻塞赋值、非阻塞赋值和连续赋值 67
4.3.2 寄存器电路建模 68
4.3.3 组合逻辑建模 70
4.3.4 双向端口与三态信号建模 72
4.3.5 Mux建模 73
4.3.6 存储器建模 74
4.3.7 简单的时钟分频电路 75
4.3.8 串并转换建模 77
4.3.9 同步复位和异步复位 77
4.3.10 使用case和if...else语句建模 81
4.3.11 可综合的Verilog语法子集 87
4.4 设计实例:CPU读写PLD寄存器接口 87
4.5 小结 92
4.6 问题与思考 92
第5章 RTL设计与编码指导 93
5.1 一般性指导原则 93
5.1.1 面积和速度的平衡与互换原则 94
5.1.2 硬件原则 103
5.1.3 系统原则 105
5.2 同步设计原则和多时钟处理 107
5.2.1 同步设计原则 107
5.2.2 亚稳态 109
5.2.3 异步时钟域数据同步 111
5.3 代码风格 113
5.3.1 代码风格的分类 113
5.3.2 代码风格的重要性 113
5.4 结构层次设计和模块划分 114
5.4.1 结构层次化编码(Hierarchical Coding) 114
5.4.2 模块划分的技巧(Design Partitioning) 115
5.5 组合逻辑的注意事项 116
5.5.1 always组合逻辑信号敏感表 116
5.5.2 组合逻辑反馈环路 117
5.5.3 脉冲产生器 118
5.5.4 慎用锁存器(Latch) 119
5.6 时钟设计的注意事项 120
5.6.1 内部逻辑产生的时钟 120
5.6.2 Ripple Counter 121
5.6.3 时钟选择 121
5.6.4 门控时钟 121
5.6.5 时钟同步使能端 122
5.7 RTL代码优化技巧 123
5.7.1 使用Pipelining技术优化时序 123
5.7.2 模块复用与资源共享 123
5.7.3 逻辑复制 125
5.7.4 香农扩展运算 127
5.8 小结 129
5.9 问题与思考 130
第6章 如何写好状态机 131
6.1 状态机的基本概念 131
6.1.1 状态机是一种思想方法 131
6.1.2 状态机的基本要素及分类 133
6.1.3 状态机的基本描述方式 133
6.2 如何写好状态机 134
6.2.1 评判FSM的标准 134
6.2.2 RTL级状态机描述常用的语法 135
6.2.3 推荐的状态机描述方法 138
6.2.4 状态机设计的其他技巧 151
6.3 使用Synplify Pro分析FSM 154
6.4 小结 157
6.5 问题与思考 157
第7章 逻辑验证与Testbench编写 159
7.1 概述 159
7.1.1 仿真和验证 159
7.1.2 什么是Testbench 160
7.2 建立Testbench,仿真设计 161
7.2.1 编写仿真激励 162
7.2.2 搭建仿真环境 172
7.2.3 确认仿真结果 173
7.2.4 编写Testbench时需要注意的问题 175
7.3 实例:CPU接口仿真 177
7.3.1 设计简介 177
7.3.2 一种Testbench 178
7.3.3 另外一种Testbench 182
7.4 结构化Testbench 183
7.4.1 任务和函数 184
7.4.2 总线功能模型(BFM) 184
7.4.3 测试套具(Harness) 185
7.4.4 测试用例(Testcase) 185
7.4.5 结构化Testbench 186
7.5 实例:结构化Testbench的编写 188
7.5.1 单顶层Testbench 188
7.5.2 多顶层Testbench 191
7.6 扩展Verilog的高层建模能力 192
7.7 小结 193
7.8 问题与思考 193
第8章 Verilog语义和仿真原理 195
8.1 从一个问题说起 195
8.2 电路与仿真 196
8.2.1 电路是并行的 196
8.2.2 Verilog是并行语言 197
8.2.3 Verilog仿真语义 197
8.3 仿真原理 198
8.3.1 Verilog的仿真过程 198
8.3.2 仿真时间 202
8.3.3 事件驱动 203
8.3.4 进程 203
8.3.5 调度 204
8.3.6 时序控制(Timing Control) 205
8.3.7 进程、事件和仿真时间的关系 205
8.3.8 Verilog语言的不确定性 205
8.4 分层事件队列与仿真参考模型 206
8.4.1 分层事件队列 206
8.4.2 仿真参考模型 206
8.5 时序模型与延时 207
8.5.1 仿真模型(Simulation Model) 207
8.5.2 时序模型(Timing Model) 208
8.5.3 案例分析 208
8.5.4 在Verilog语言中增加延时 210
8.6 再谈阻塞与非阻塞赋值 213
8.6.1 本质 213
8.6.2 案例分析 216
8.7 如何提高代码的仿真效率 219
8.8 防止仿真和综合结果不一致 219
8.9 小结 220
8.10 问题与思考 220
第9章 设计与验证语言的发展趋势 221
9.1 设计与验证语言的发展历程 221
9.1.1 HDL语言 221
9.1.2 C/C++和私有的验证语言 222
9.1.3 Accellera和IEEE的标准化工作 222
9.2 硬件设计语言的发展现状和走向 223
9.2.1 HDL的竞争 223
9.2.2 一些尝试 223
9.2.3 下一代的Verilog语言 223
9.2.4 SystemC 224
9.3 验证语言的发展现状和走向 225
9.3.1 验证方法 225
9.3.2 HVL标准化进程 225
9.3.3 HVL的新需求 226
9.4 总结和展望 226
9.5 小结 226
9.6 问题与思考 226
附录 Verilog关键字列表 227
1.1 设计方法的变迁 1
1.2 Verilog语言的特点 2
1.2.1 Verilog的由来 2
1.2.2 HDL与原理图 2
1.2.3 Verilog和 VHDL 3
1.2.4 Verilog和C语言 4
1.3 HDL的设计与验证流程 5
1.4 问题与思考 7
第2章 Verilog语言基础 9
2.1 Top-Down和Bottom-Up 9
2.2 Verilog的3种描述方法 10
2.2.1 实例 10
2.2.2 3种描述方法 13
2.3 基本词法 14
2.4 模块和端口 15
2.5 编译指令 16
2.6 逻辑值与常量 17
2.6.1 逻辑值 17
2.6.2 常量 18
2.7 变量类型 19
2.7.1 线网类型 19
2.7.2 寄存器类型 19
2.7.3 变量的物理含义 20
2.7.4 驱动和赋值 20
2.8 参数 22
2.9 Verilog中的并发与顺序 22
2.10 操作数、操作符和表达式 23
2.10.1 操作符 23
2.10.2 二进制数值 26
2.10.3 操作数 26
2.11 系统任务和系统函数 28
2.11.1 显示任务 28
2.11.2 文件输入/输出任务 28
2.11.3 其他系统任务和系统函数 29
2.12 小结 29
2.13 问题与思考 29
第3章 描述方式和设计层次 31
3.1 描述方式 31
3.2 数据流描述 31
3.2.1 数据流 31
3.2.2 连续赋值语句 31
3.2.3 延时 33
3.2.4 多驱动源线网 34
3.3 行为描述 36
3.3.1 行为描述的语句格式 36
3.3.2 过程赋值语句 40
3.3.3 语句组 43
3.3.4 高级编程语句 44
3.4 结构化描述 50
3.4.1 实例化模块的方法 52
3.4.2 参数化模块 53
3.5 设计层次 57
3.5.1 系统级和行为级 57
3.5.2 RTL级 59
3.5.3 门级 60
3.5.4 晶体管级 60
3.5.5 混合描述 60
3.6 实例:CRC计算与校验电路 60
3.6.1 CRC10校验,行为级 61
3.6.2 CRC10计算电路,RTL级 62
3.7 小结 64
3.8 问题与思考 64
第4章 RTL概念与RTL级建模 65
4.1 RTL与综合的概念 65
4.2 RTL级设计的基本要素和步骤 65
4.3 常用的RTL级建模 67
4.3.1 阻塞赋值、非阻塞赋值和连续赋值 67
4.3.2 寄存器电路建模 68
4.3.3 组合逻辑建模 70
4.3.4 双向端口与三态信号建模 72
4.3.5 Mux建模 73
4.3.6 存储器建模 74
4.3.7 简单的时钟分频电路 75
4.3.8 串并转换建模 77
4.3.9 同步复位和异步复位 77
4.3.10 使用case和if...else语句建模 81
4.3.11 可综合的Verilog语法子集 87
4.4 设计实例:CPU读写PLD寄存器接口 87
4.5 小结 92
4.6 问题与思考 92
第5章 RTL设计与编码指导 93
5.1 一般性指导原则 93
5.1.1 面积和速度的平衡与互换原则 94
5.1.2 硬件原则 103
5.1.3 系统原则 105
5.2 同步设计原则和多时钟处理 107
5.2.1 同步设计原则 107
5.2.2 亚稳态 109
5.2.3 异步时钟域数据同步 111
5.3 代码风格 113
5.3.1 代码风格的分类 113
5.3.2 代码风格的重要性 113
5.4 结构层次设计和模块划分 114
5.4.1 结构层次化编码(Hierarchical Coding) 114
5.4.2 模块划分的技巧(Design Partitioning) 115
5.5 组合逻辑的注意事项 116
5.5.1 always组合逻辑信号敏感表 116
5.5.2 组合逻辑反馈环路 117
5.5.3 脉冲产生器 118
5.5.4 慎用锁存器(Latch) 119
5.6 时钟设计的注意事项 120
5.6.1 内部逻辑产生的时钟 120
5.6.2 Ripple Counter 121
5.6.3 时钟选择 121
5.6.4 门控时钟 121
5.6.5 时钟同步使能端 122
5.7 RTL代码优化技巧 123
5.7.1 使用Pipelining技术优化时序 123
5.7.2 模块复用与资源共享 123
5.7.3 逻辑复制 125
5.7.4 香农扩展运算 127
5.8 小结 129
5.9 问题与思考 130
第6章 如何写好状态机 131
6.1 状态机的基本概念 131
6.1.1 状态机是一种思想方法 131
6.1.2 状态机的基本要素及分类 133
6.1.3 状态机的基本描述方式 133
6.2 如何写好状态机 134
6.2.1 评判FSM的标准 134
6.2.2 RTL级状态机描述常用的语法 135
6.2.3 推荐的状态机描述方法 138
6.2.4 状态机设计的其他技巧 151
6.3 使用Synplify Pro分析FSM 154
6.4 小结 157
6.5 问题与思考 157
第7章 逻辑验证与Testbench编写 159
7.1 概述 159
7.1.1 仿真和验证 159
7.1.2 什么是Testbench 160
7.2 建立Testbench,仿真设计 161
7.2.1 编写仿真激励 162
7.2.2 搭建仿真环境 172
7.2.3 确认仿真结果 173
7.2.4 编写Testbench时需要注意的问题 175
7.3 实例:CPU接口仿真 177
7.3.1 设计简介 177
7.3.2 一种Testbench 178
7.3.3 另外一种Testbench 182
7.4 结构化Testbench 183
7.4.1 任务和函数 184
7.4.2 总线功能模型(BFM) 184
7.4.3 测试套具(Harness) 185
7.4.4 测试用例(Testcase) 185
7.4.5 结构化Testbench 186
7.5 实例:结构化Testbench的编写 188
7.5.1 单顶层Testbench 188
7.5.2 多顶层Testbench 191
7.6 扩展Verilog的高层建模能力 192
7.7 小结 193
7.8 问题与思考 193
第8章 Verilog语义和仿真原理 195
8.1 从一个问题说起 195
8.2 电路与仿真 196
8.2.1 电路是并行的 196
8.2.2 Verilog是并行语言 197
8.2.3 Verilog仿真语义 197
8.3 仿真原理 198
8.3.1 Verilog的仿真过程 198
8.3.2 仿真时间 202
8.3.3 事件驱动 203
8.3.4 进程 203
8.3.5 调度 204
8.3.6 时序控制(Timing Control) 205
8.3.7 进程、事件和仿真时间的关系 205
8.3.8 Verilog语言的不确定性 205
8.4 分层事件队列与仿真参考模型 206
8.4.1 分层事件队列 206
8.4.2 仿真参考模型 206
8.5 时序模型与延时 207
8.5.1 仿真模型(Simulation Model) 207
8.5.2 时序模型(Timing Model) 208
8.5.3 案例分析 208
8.5.4 在Verilog语言中增加延时 210
8.6 再谈阻塞与非阻塞赋值 213
8.6.1 本质 213
8.6.2 案例分析 216
8.7 如何提高代码的仿真效率 219
8.8 防止仿真和综合结果不一致 219
8.9 小结 220
8.10 问题与思考 220
第9章 设计与验证语言的发展趋势 221
9.1 设计与验证语言的发展历程 221
9.1.1 HDL语言 221
9.1.2 C/C++和私有的验证语言 222
9.1.3 Accellera和IEEE的标准化工作 222
9.2 硬件设计语言的发展现状和走向 223
9.2.1 HDL的竞争 223
9.2.2 一些尝试 223
9.2.3 下一代的Verilog语言 223
9.2.4 SystemC 224
9.3 验证语言的发展现状和走向 225
9.3.1 验证方法 225
9.3.2 HVL标准化进程 225
9.3.3 HVL的新需求 226
9.4 总结和展望 226
9.5 小结 226
9.6 问题与思考 226
附录 Verilog关键字列表 227
设计与验证Verilog HDL[电子资源.图书]
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!