第1章 EDA设计与VerilogHDL语言概述1
1.1 EDA设计概述1
1.1.1 EDA技术简介1
1.1.2 EDA与传统电子系统设计方法2
1.1.3 可编程逻辑器件对EDA技术的要求4
1.2 VerilogHDL语言简介5
1.2.1 硬件描述语言说明5
1.2.2 VerilogHDL语言的历史6
1.2.3 VerilogHDL语言的能力6
1.2.4 VerilogHDL和VHDL语言的比较7
1.2.5 VerilogHDL和C语言的比较8
1.3 VerilogHDL语言的描述层次说明8
1.3.1 VerilogHDL语言描述能力综述8
1.3.2 系统级和算法级建模9
1.3.3 RTL级建模9
1.3.4 门级和开关级建模9
1.4 基于VerilogHDL语言的CPLD/FPGA开发流程10
1.5 VerilogHDL语言的可综合与仿真特性12
1.5.1 VerilogHDL语句的可综合性说明12
1.5.2 VerilogHDL语句的仿真特性说明13
1.6 本章小结14
1.7 思考题14
第2章 VerilogHDL基础与开发平台操作指南15
2.1 VerilogHDL程序开发的必备知识15
2.1.1 数字的表示形式15
2.1.2 常用术语解释17
2.1.3 VerilogHDL程序的优劣判断指标18
2.2 VerilogHDL程序设计模式19
2.2.1 自顶向下的设计模式19
2.2.2 层次、模块化模式20
2.2.3 IP核的重用20
2.3 XilinxSpartan3E系列FPGA简介21
2.3.1 Spartan3E系列FPGA简介21
2.3.2 Spartan3E系列FPGA结构说明22
2.4 ISE快速入门25
2.4.1 ISE操作基础25
2.4.2 新建工程29
2.4.3 VerilogHDL代码的输入与功能仿真30
2.4.4 XilinxIP核的使用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章 VerilogHDL程序结构57
3.1 程序模块说明57
3.1.1 VerilogHDL模块的概念57
3.1.2 模块的基本结构57
3.1.3 端口说明59
3.2 VerilogHDL的层次化设计59
3.2.1 VerilogHDL层次化设计的表现形式59
3.2.2 模块例化59
3.2.3 参数映射63
3.2.4 在ISE中通过图形化方式实现层次化设计66
3.3 VerilogHDL语言的描述形式68
3.3.1 结构描述形式68
3.3.2 行为描述形式75
3.3.3 混合设计模式79
3.4 本章小结79
3.5 思考题79
第4章 VerilogHDL语言基本要素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 VerilogHDL语义简介139
6.2.2 VerilogHDL仿真原理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仿真工具ISESimulator163
6.7.1 基于波形测试法的仿真163
6.7.2 基于VerilogHDL测试平台的仿真165
6.8 Xilinx系统验证工具ChipScopePro170
6.8.1 ChipScopePro工具简介170
6.8.2 ChipScopePro开发实例171
6.9 本章小结178
6.1 0思考题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章 VerilogHDL可综合设计的难点解析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 流水线技术原理和VerilogHDL实现258
9.3.2 逻辑复用与逻辑复制原理和VerilogHDL实现264
9.3.3 关键路径提取原理和VerilogHDL实现268
9.3.4 逻辑合并与拆分原理和VerilogHDL实现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 状态机的VerilogHDL实现289
10.3.1 状态机实现综述289
10.3.2 Moore状态机开发实例293
10.3.3 Mealy状态机开发实例295
10.4 Xilinx状态机设计工具StateCAD298
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章 常用逻辑的VerilogHDL实现307
11.1 时钟处理电路的VerilogHDL实现307
11.1.1 整数分频模块307
11.1.2 非整数分频模块310
11.1.3 同步整形电路313
11.2 乘加运算的VerilogHDL实现315
11.2.1 加法器的VerilogHDL实现315
11.2.2 乘法器的VerilogHDL实现318
11.2.3 数据的截位与扩位324
11.3 数码管接口电路的VerilogHDL实现325
11.3.1 数码管简介325
11.3.2 数码管显示电路的VerilogHDL实现326
11.4 按钮接口电路的VerilogHDL实现328
11.4.1 按钮扫描电路的VerilogHDL实现328
11.4.2 按钮防抖电路的VerilogHDL实现332
11.5 CRC编码器的VerilogHDL实现334
11.5.1 CRC校验码的原理334
11.5.2 CRC16编码器的VerilogHDL实现335
11.6 片内存储器的VerilogHDL实现337
11.6.1 RAM的VerilogHDL实现337
11.6.2 移位寄存器的VerilogHDL实现341
11.7 SPI接口协议的VerilogHDL实现343
11.7.1 SPI通信协议343
11.7.2 SPI协议的VerilogHDL实现345
11.8 本章小结349
11.9 思考题349
第12章 Xilinx硬核模块的VerilogHDL调用351
12.1 差分I/O对管脚的VerilogHDL调用351
12.1.1 差分I/O对管脚结构说明351
12.1.2 调用差分I/O的参考设计354
12.2 DCM模块的VerilogHDL调用356
12.2.1 DCM模块的说明356
12.2.2 调用DCM模块的参考设计359
12.3 硬核乘法器的VerilogHDL调用362
12.3.1 硬核乘法器结构说明362
12.3.2 基于IP核调用硬核乘法器363
12.4 块RAM的VerilogHDL调用365
12.4.1 块RAM结构说明365
12.4.2 基于IP核调用块RAM单元368
12.5 本章小结374
12.6 思考题374
第13章 串口接口的VerilogHDL设计375
13.1 串口以及串口通信协议简介375
13.1.1 串口接口375
13.1.2 RS-232通信协议375
13.2 串口通信控制器的VerilogHDL实现377
13.2.1 系统功能说明377
13.2.2 顶层模块的组成结构和VerilogHDL实现377
13.2.3 波特率发生器模块的VerilogHDL实现380
13.2.4 发送模块的VerilogHDL实现381
13.2.5 接收模块的VerilogHDL实现386
13.3 RS-232设计板级调试390
13.3.1 板级调试说明390
13.3.2 配置超级终端391
13.3.3 添加ChipScopePro核392
13.3.4 系统调试结果396
13.4 本章小结398
13.5 思考题398
参考文献399