第1章 EDA设计与Verilog HDL语言概述 1
1.1 EDA设计概述 1
1.1.1 EDA技术简介 1
1.1.2 EDA与传统电子系统设计方法 2
1.1.3 可编程逻辑器件对EDA技术的要求 4
1.2 Verilog HDL语言简介 5
1.2.1 硬件描述语言说明 5
1.2.2 Verilog HDL语言的历史 6
1.2.3 Verilog HDL语言的能力 6
1.2.4 Verilog HDL和VHDL语言的比较 7
1.2.5 Verilog HDL和C语言的比较 8
1.3 Veriilog HDL语言的描述层次说明 8
1.3.1 Verilog HDL语言描述能力综述 8
1.3.2 系统级和算法级建模 9
1.3.3 RTL级建模 9
1.3.4 门级和开关级建模 9
1.4 基于Verilog HDL语言的CPLD/FPGA开发流程 10
1.5 Verilog HDL语言的可综合与仿真特性 12
1.5.1 Verilog HDL语句的可综合性说明 12
1.5.2 Verilog HDL语句的仿真特性说明 13
1.6 本章小结 14
1.7 思考题 14
第2章 Verilog HDL基础与开发平台操作指南 15
2.1 Verilog HDL程序开发的必备知识 15
2.1.1 数字的表示形式 15
2.1.2 常用术语解释 17
2.1.3 Verilog HDL程序的优劣判断指标 18
2.2 Verilog HDL程序设计模式 19
2.2.1 自顶向下的设计模式 19
2.2.2 层次、模块化模式 20
2.2.3 IP核的重用 20
2.3 Xilinx Spartan 3E系列FPGA简介 21
2.3.1 Spartan 3E系列FPGA简介 21
2.3.2 Spartan 3E系列FPGA结构说明 22
2.4 ISE快速入门 25
2.4.1 ISE操作基础 25
2.4.2 新建工程 29
2.4.3 Verilog HDL代码的输入与功能仿真 30
2.4.4 Xilinx IP核的使用 34
2.4.5 用户约束输入 39
2.4.6 综合与实现 42
2.4.7 器件配置 44
2.5 ModelSim快速入门 50
2.5.1 ModelSim仿真软件的安装 51
2.5.2 在ModelSim中指定Xilinx的仿真库 53
2.5.3 ModelSim的基本操作 53
2.6 本章小结 55
2.7 思考题 56
第3章 Verilog HDL程序结构 57
3.1 程序模块说明 57
3.1.1 Verilog HDL模块的概念 57
3.1.2 模块的基本结构 57
3.1.3 端口说明 59
3.2 Verilog HDL的层次化设计 59
3.2.1 Verilog HDL层次化设计的表现形式 59
3.2.2 模块例化 59
3.2.3 参数映射 63
3.2.4 在ISE中通过图形化方式实现层次化设计 66
3.3 Verilog HDL语言的描述形式 68
3.3.1 结构描述形式 68
3.3.2 行为描述形式 75
3.3.3 混合设计模式 79
3.4 本章小结 79
3.5 思考题 79
第4章 Verilog HDL语言基本要素 81
4.1 标志符与注释 81
4.1.1 标志符 81
4.1.2 注释 82
4.2 数字与逻辑数值 82
4.2.1 逻辑数值 82
4.2.2 常量 82
4.2.3 参数 83
4.3 数据类型 83
4.3.1 数据类型综述 83
4.3.2 线网类型 84
4.3.3 寄存器类型 88
4.4 运算符和表达式 91
4.4.1 赋值运算符 91
4.4.2 算术运算符 93
4.4.3 逻辑运算符 96
4.4.4 关系运算符 97
4.4.5 条件运算符 99
4.4.6 位运算符 100
4.4.7 拼接运算符 101
4.4.8 移位运算符 102
4.4.9 一元约简运算符 103
4.5 本章小结 104
4.6 思考题 104
第5章 面向综合的行为描述语句 105
5.1 触发事件控制 105
5.1.1 信号电平事件语句 105
5.1.2 信号跳变沿事件语句 106
5.2 条件语句 107
5.2.1 if语句 107
5.2.2 case语句 108
5.2.3 条件语句的深入理解 112
5.3 循环语句 114
5.3.1 repeat语句 114
5.3.2 while语句 116
5.3.3 for语句 117
5.3.4 循环语句的深入理解 119
5.4 任务和函数 124
5.4.1 任务(task)语句 124
5.4.2 函数(function)语句 126
5.4.3 任务和函数的深入理解 128
5.5 本章小结 129
5.6 思考题 129
第6章 面向验证和仿真的行为描述语句 131
6.1 验证与仿真概述 131
6.1.1 代码验证与仿真概述 131
6.1.2 测试平台说明 132
6.1.3 验证测试方法论 134
6.1.4 Testbench结构说明 138
6.2 仿真程序执行原理 139
6.2.1 Verilog HDL语义简介 139
6.2.2 Verilog HDL仿真原理 139
6.3 延时控制语句 141
6.3.1 延时控制的语法说明 141
6.3.2 延时控制应用实例 142
6.4 常用的行为仿真描述语句 144
6.4.1 循环语句 145
6.4.2 force和release语句 146
6.4.3 wait语句 147
6.4.4 事件控制语句 148
6.4.5 task和function语句 149
6.4.6 串行激励与并行激励语句 150
6.5 用户自定义元件 151
6.5.1 UDP的定义与调用 151
6.5.2 UDP应用实例 152
6.6 仿真激励的产生 154
6.6.1 变量初始化 154
6.6.2 时钟信号的产生 158
6.6.3 复位信号的产生 159
6.6.4 数据信号的产生 160
6.6.5 典型测试平台实例 162
6.6.6 关于仿真效率的说明 162
6.7 Xilinx仿真工具ISE Simulator 163
6.7.1 基于波形测试法的仿真 163
6.7.2 基于Verilog HDL测试平台的仿真 165
6.8 Xilinx系统验证工具ChipScope Pro 170
6.8.1 ChipScope Pro工具简介 170
6.8.2 ChipScope Pro开发实例 171
6.9 本章小结 178
6.10 思考题 178
第7章 系统任务和编译预处理语句 179
7.1 系统任务语句 179
7.1.1 输出显示任务 179
7.1.2 文件输入输出任务 185
7.1.3 时间标度任务 190
7.1.4 仿真控制任务 191
7.1.5 仿真时间函数 192
7.1.6 数字类型变换函数 194
7.1.7 概率分布函数 194
7.2 编译预处理语句 196
7.2.1 宏定义′define语句 196
7.2.2 条件编译命令′if语句 198
7.2.3 文件包含′include语句 199
7.2.4 时间尺度′timescale语句 201
7.2.5 其他语句 203
7.3 本章小结 203
7.4 思考题 204
第8章 Verilog HDL可综合设计的难点解析 205
8.1 组合逻辑和时序逻辑 205
8.1.1 组合逻辑设计 205
8.1.2 时序逻辑设计 208
8.1.3 组合逻辑电路中的竞争与冒险 212
8.1.4 时序逻辑的时钟选择策略 216
8.2 同步时序电路和异步时序电路 219
8.2.1 同步时序电路设计 219
8.2.2 异步时序电路设计 223
8.2.3 异步电路和同步电路的比较 226
8.3 阻塞赋值与非阻塞赋值 227
8.3.1 阻塞赋值与非阻塞过程的深入理解 227
8.3.2 组合逻辑中的阻塞与非阻塞 228
8.3.3 时序逻辑中的阻塞与非阻塞 229
8.3.4 编码建议 232
8.4 双向端口 233
8.4.1 双向端口简介 233
8.4.2 双向端口应用实例 234
8.5 锁存器 237
8.5.1 锁存器本质说明 237
8.5.2 锁存器的产生原因和处理策略 237
8.5.3 锁存器的应用规则 239
8.6 消除不确定输入的电路设计 242
8.6.1 初始值不确定态的消除 242
8.6.2 逻辑运算不确定态的消除 242
8.7 面向硬件的设计思维 243
8.7.1 基本的硬件设计模式 243
8.7.2 程序执行顺序 244
8.7.3 时钟是时序电路的控制者 245
8.8 本章小结 247
8.9 思考题 248
第9章 高级逻辑设计思想与代码风格 249
9.1 通用指导原则 249
9.1.1 面积和速度的互换原则 249
9.1.2 模块划分原则 250
9.2 代码风格 250
9.2.1 代码风格的含义 251
9.2.2 通用的代码设计风格 251
9.2.3 通用的代码书写风格 252
9.2.4 Xilinx专用代码设计风格 255
9.3 常用的设计思想与代码设计风格 258
9.3.1 流水线技术原理和Verilog HDL实现 258
9.3.2 逻辑复用与逻辑复制原理和Verilog HDL实现 264
9.3.3 关键路径提取原理和Verilog HDL实现 268
9.3.4 逻辑合并与拆分原理和Verilog HDL实现 269
9.3.5 多时钟域接口设计技巧 270
9.4 本章小结 282
9.5 思考题 282
第10章 可综合状态机开发实例 283
10.1 状态机基本概念 283
10.1.1 状态机工作原理以及分类 283
10.1.2 状态机描述方式 284
10.1.3 状态机设计思想 286
10.2 可综合状态机设计原则 286
10.2.1 状态机开发流程 286
10.2.2 状态编码原则 287
10.2.3 状态机的容错处理 288
10.2.4 常用的设计准则 288
10.3 状态机的Verilog HDL实现 289
10.3.1 状态机实现综述 289
10.3.2 Moore状态机开发实例 293
10.3.3 Mealy状态机开发实例 295
10.4 Xilinx状态机设计工具StateCAD 298
10.4.1 StateCAD基础介绍 298
10.4.2 编辑状态机 299
10.4.3 状态机优化以及HDL代码生成 301
10.4.4 测试状态机 303
10.5 本章小结 305
10.6 思考题 305
第11章 常用逻辑的Verilog HDL实现 307
11.1 时钟处理电路的Verilog HDL实现 307
11.1.1 整数分频模块 307
11.1.2 非整数分频模块 310
11.1.3 同步整形电路 313
11.2 乘加运算的Verilog HDL实现 315
11.2.1 加法器的Verilog HDL实现 315
11.2.2 乘法器的Verilog HDL实现 318
11.2.3 数据的截位与扩位 324
11.3 数码管接口电路的Verilog HDL实现 325
11.3.1 数码管简介 325
11.3.2 数码管显示电路的Verilog HDL实现 326
11.4 按钮接口电路的Verilog HDL实现 328
11.4.1 按钮扫描电路的Verilog HDL实现 328
11.4.2 按钮防抖电路的Verilog HDL实现 332
11.5 CRC编码器的Verilog HDL实现 334
11.5.1 CRC校验码的原理 334
11.5.2 CRC 16编码器的Verilog HDL实现 335
11.6 片内存储器的Verilog HDL实现 337
11.6.1 RAM的Verilog HDL实现 337
11.6.2 移位寄存器的Verilog HDL实现 341
11.7 SPI接口协议的Verilog HDL实现 343
11.7.1 SPI通信协议 343
11.7.2 SPI协议的Verilog HDL实现 345
11.8 本章小结 349
11.9 思考题 349
第12章 Xilinx硬核模块的Verilog HDL调用 351
12.1 差分I/O对管脚的Verilog HDL调用 351
12.1.1 差分I/O对管脚结构说明 351
12.1.2 调用差分I/O的参考设计 354
12.2 DCM模块的Verilog HDL调用 356
12.2.1 DCM模块的说明 356
12.2.2 调用DCM模块的参考设计 359
12.3 硬核乘法器的Verilog HDL调用 362
12.3.1 硬核乘法器结构说明 362
12.3.2 基于IP核调用硬核乘法器 363
12.4 块RAM的Verilog HDL调用 365
12.4.1 块RAM结构说明 365
12.4.2 基于IP核调用块RAM单元 368
12.5 本章小结 374
12.6 思考题 374
第13章 串口接口的Verilog HDL设计 375
13.1 串口以及串口通信协议简介 375
13.1.1 串口接口 375
13.1.2 RS-232通信协议 375
13.2 串口通信控制器的Verilog HDL实现 377
13.2.1 系统功能说明 377
13.2.2 顶层模块的组成结构和Verilog HDL实现 377
13.2.3 波特率发生器模块的Verilog HDL实现 380
13.2.4 发送模块的Verilog HDL实现 381
13.2.5 接收模块的Verilog HDL实现 386
13.3 RS-232设计板级调试 390
13.3.1 板级调试说明 390
13.3.2 配置超级终端 391
13.3.3 添加ChipScope Pro核 392
13.3.4 系统调试结果 396
13.4 本章小结 398
13.5 思考题 398
参考文献 399