本书以Intel CycloneⅣ E系列FPGA 为例,系统介绍了FPGA 的硬件结构、电路设计以及逻辑设计和验证流程。书中以若干个具有工程实用意义的案例为背景,详细介绍了FPGA 数字逻辑设计中常见的功能模块设计思路、FPGA 片上资源的使用方法、开发软件中各种调试工具的使用,包括SignaltapⅡ、In System Sources and Probes Editor、In System Memory Content Editor。本书最后通过若干个综合性实例,讲解了复杂数字系统的设计方法和验证思路。作为实用型FPGA 教程,本书的每一个实验都有完整的仿真和验证过程,即强调了仿真验证在FPGA设计中的重要作用。
本书可作为工程应用类、电子信息类专业本科生以及相关专业专科生的EDA 基础类课程的教材;也可作为FPGA自学人员,以及从事FPGA开发的工程技术人员的培训教材和参考用书。
第1章 从头认识FPGA ……………………………………………………………… 1
1.1 CycloneⅣ EFPGA原理与应用 ……………………………………………… 1
1.1.1 CycloneⅣ E概述 ………………………………………………………… 1
1.1.2 CycloneⅣ E扩展资源介绍 ……………………………………………… 4
1.1.3 重点电路设计 ……………………………………………………………… 5
1.2 IntelFPGA开发环境 ………………………………………………………… 17
1.2.1 Quartus软件的发展史 …………………………………………………… 18
1.2.2 QuartusPrime的下载 …………………………………………………… 18
1.2.3 QuartusPrime的安装 …………………………………………………… 21
1.2.4 QuartusPrime软件的基本使用 ………………………………………… 27
第2章 FPGA开发软硬件平台介绍 ………………………………………………… 39
2.1 AC620开发套件………………………………………………………………… 39
2.1.1 AC620开发板的功能特点 ………………………………………………… 39
2.1.2 AC620开发板的使用 ……………………………………………………… 43
2.2 IntelFPGA开发流程 ………………………………………………………… 57
2.2.1 建立工程 …………………………………………………………………… 57
2.2.2 设计输入 …………………………………………………………………… 61
2.2.3 分析和综合 ………………………………………………………………… 61
2.2.4 功能仿真 …………………………………………………………………… 62
2.2.5 综合与布局布线 …………………………………………………………… 66
2.2.6 时序仿真 …………………………………………………………………… 66
2.2.7 I/O分配以及生成配置文件 ……………………………………………… 67
2.2.8 配置FPGA下载…………………………………………………………… 67
2.3 FPGA设计的烧写与投产 ……………………………………………………… 68
2.3.1 FPGA固件存储方案 ……………………………………………………… 68
2.3.2 CycloneⅣ EFPGA固件烧写方案 ……………………………………… 69
2.3.3 烧写文件JIC的产生 ……………………………………………………… 70
第3章 FPGA基本数字逻辑设计 …………………………………………………… 74
3.1 组合逻辑电路设计———译码器 ………………………………………………… 74
3.1.1 译_码器工作原理 …………………………………………………………… 74
3.1.2 译码器Verilog实现 ……………………………………………………… 75
3.1.3 激励创建及仿真测试 ……………………………………………………… 76
3.2 时序逻辑电路设计———计数器 ………………………………………………… 79
3.2.1 计数器工作原理 …………………………………………………………… 80
3.2.2 计数器Verilog实现 ……………………………………………………… 81
3.2.3 仿真及板级验证 …………………………………………………………… 82
3.3 IP核应用———计数器 ………………………………………………………… 85
3.3.1 IP核创建流程 ……………………………………………………………… 85
3.3.2 仿真及板级验证 …………………………………………………………… 89
3.3.3 已生成IP核的参数修改 ………………………………………………… 90
3.3.4 QuartusⅡ中IP核参数的修改…………………………………………… 94
3.4 BCD计数器设计与验证 ……………………………………………………… 95
3.4.1 BCD码原理 ………………………………………………………………… 95
3.4.2 BCD计数器的 Verilog实现 ……………………………………………… 96
3.4.3 激励创建及仿真测试 ……………………………………………………… 97
3.4.4 级联BCD计数器设计与仿真 …………………………………………… 98
3.5 阻塞赋值与非阻塞赋值原理分析 …………………………………………… 103
3.5.1 不同赋值方式的对比与实现 …………………………………………… 103
3.5.2 不同赋值方式的仿真及测试 …………………………………………… 105
3.6 状态机设计实例 ……………………………………………………………… 108
3.6.1 状态机工作原理 ………………………………………………………… 108
3.6.2 字符串检测状态机实现 ………………………………………………… 110
3.6.3 激励创建及仿真测试 …………………………………………………… 113
3.7 独立按键消抖设计与验证 …………………………………………………… 115
3.7.1 按键的物理结构及电路设计 …………………………………………… 115
3.7.2 硬件电路实现按键消抖 ………………………………………………… 116
3.7.3 状态机实现按键消抖 …………………………………………………… 118
3.7.4 激励创建及仿真测试 …………………………………………………… 124
3.7.5 任务及随机函数的使用 ………………………………………………… 125
3.8 模块化设计基础———加减法计数器 ………………………………………… 129
3.8.1 模块功能划分 …………………………………………………………… 129
3.8.2 模块功能设计 …………………………………………………………… 129
3.8.3 仿真及板级验证 ………………………………………………………… 132
3.9 8位7段数码管驱动设计与验证 …………………………………………… 134
3.9.1 数码管驱动原理 ………………………………………………………… 134
3.9.2 三线制数码管电路设计 ………………………………………………… 137
3.9.3 数码管动态扫描驱动设计 ……………………………………………… 138
3.9.4 ISSP生成及使用 ………………………………………………………… 145
3.9.5 板级调试与验证 ………………………………………………………… 149
3.9.6 QuartusⅡ中ISSP的使用方法 ………………………………………… 152
3.10 串口发送模块设计与验证 …………………………………………………… 153
3.10.1 异步串行通信原理及电路设计 ………………………………………… 154
3.10.2 UART异步串行通信发送模块设计与实现…………………………… 157
3.10.3 激励创建及仿真测试 …………………………………………………… 162
3.10.4 按键控制串口发送设计 ………………………………………………… 163
3.11 串口接收模块的设计与验证 ………………………………………………… 165
3.11.1 串口接收原理分析 ……………………………………………………… 166
3.11.2 UART异步串行通信接收模块设计与实现…………………………… 167
3.11.3 仿真及板级验证 ………………………………………………………… 171
第4章 FPGA片上专用资源使用 …………………………………………………… 176
4.1 嵌入式RAM 的使用———双端口RAM …………………………………… 176
4.1.1 CycloneⅣ体系结构及嵌入式存储器原理 ……………………………… 176
4.1.2 IP核使用———dpram …………………………………………………… 178
4.1.3 激励创建及仿真测试 …………………………………………………… 182
4.2 搭建串口收发与双口RAM 存储的简易应用系统 ………………………… 185
4.2.1 系统模块功能划分及接口设计 ………………………………………… 185
4.2.2 顶层文件设计 …………………………………………………………… 185
4.2.3 控制模块设计 …………………………………………………………… 186
4.2.4 仿真及板级验证 ………………………………………………………… 187
4.3 嵌入式RAM 的使用———ROM ……………………………………………… 190
4.3.1 IP核使用———ROM ……………………………………………………… 191
4.3.2 激励创建及仿真测试 …………………………………………………… 193
4.3.3 SignaTapⅡ使用及板级验证 …………………………………………… 195
4.4 嵌入式块RAM 的使用———FIFO …………………………………………… 201
4.4.1 FIFO的相关知识 ………………………………………………………… 202
4.4.2 IP核的使用———FIFO…………………………………………………… 204
4.5 PLL锁相环介绍与简单应用 ………………………………………………… 213
4.5.1 PLL相关知识 …………………………………………………………… 213
4.5.2 IP核使用———PLL ……………………………………………………… 215
4.5.3 仿真及板级验证 ………………………………………………………… 219
第5章 FPGA进阶数字逻辑设计 …………………………………………………… 223
5.1 无源蜂鸣器驱动设计与验证 ………………………………………………… 223
5.1.1 无源蜂鸣器电路设计 …………………………………………………… 223
5.1.2 无源蜂鸣器驱动原理 …………………………………………………… 224
5.1.3 PWM 发生器模块设计…………………………………………………… 225
5.1.4 仿真及板级验证 ………………………………………………………… 227
5.2 线性序列机与串行接口DAC驱动设计与验证……………………………… 232
5.2.1 DAC芯片概述及电路设计 ……………………………………………… 232
5.2.2 TLV5618型DAC芯片输出电压计算原理 …………………………… 234
5.2.3 TLV5618型DAC接口时序 …………………………………………… 235
5.2.4 线性序列机设计思想与接口时序设计 ………………………………… 236
5.2.5 基于线性序列机的DAC驱动设计 ……………………………………… 238
5.2.6 仿真及板级测试 ………………………………………………………… 241
5.3 线性序列机与串行接口ADC驱动设计与验证……………………………… 243
5.3.1 ADC芯片概述及电路设计 ……………………………………………… 244
5.3.2 ADC128S022型ADC接口时序 ………………………………………… 245
5.3.3 ADC128S022接口时序设计 …………………………………………… 247
5.3.4 基于线性序列机的ADC驱动设计 ……………………………………… 249
5.3.5 仿真及板级测试 ………………………………………………………… 252
5.4 HT6221红外遥控解码设计与验证 ………………………………………… 257
5.4.1 红外遥控系统组成及电路设计 ………………………………………… 257
5.4.2 红外遥控协议分析(NEC协议)………………………………………… 258
5.4.3 红外解码模块设计 ……………………………………………………… 260
5.4.4 仿真及板级验证 ………………………………………………………… 265
5.5 TFT显示屏驱动设计与验证 ………………………………………………… 267
5.5.1 TFT触摸屏驱动电路设计 ……………………………………………… 268
5.5.2 RGB接口TFT屏扫描方式……………………………………………… 270
5.5.3 RGB接口TFT屏时序分析……………………………………………… 271
5.5.4 RGB接口TFT屏驱动设计……………………………………………… 272
5.5.5 仿真及板级验证 ………………………………………………………… 275
第6章 FPGA综合数字系统设计 …………………………………………………… 280
6.1 八通道数字电压表 …………………………………………………………… 280
6.1.1 数字电压表功能划分 …………………………………………………… 280
6.1.2 按键输入模块 …………………………………………………………… 281
6.1.3 通道选择模块 …………………………………………………………… 281
6.1.4 ADC控制模块———ADC128S022 ……………………………………… 282
6.1.5 数据预处理模块 ………………………………………………………… 282
6.1.6 码制转换模块 …………………………………………………………… 284
6.1.7 数码管驱动模块 ………………………………………………………… 287
6.1.8 顶层设计 ………………………………………………………………… 288
6.1.9 基于查找表的数据电压换算 …………………………………………… 289
6.2 双通道幅频相可调DDS信号发生器 ………………………………………… 292
6.2.1 DDS原理与实现 ………………………………………………………… 293
6.2.2 数/模转换器(DAC)驱动模块设计 ……………………………………… 299
6.2.3 串口命令接收与解析 ……………………………………………………303
6.2.4 信号发生器顶层设计 …………………………………………………… 315
6.2.5 系统测试 ………………………………………………………………… 316
6.3 串口读/写EEPROM ………………………………………………………… 317
6.3.1 I2C基本概念 ……………………………………………………………… 317
6.3.2 I2C协议时序介绍 ………………………………………………………… 318
6.3.3 I2C器件地址 ……………………………………………………………… 319
6.3.4 I2C存储器地址 …………………………………………………………… 320
6.3.5 I2C写时序 ………………………………………………………………… 321
6.3.6 I2C单字节读时序 ………………………………………………………… 323
6.3.7 I2C读/写器件控制器设计 ……………………………………………… 325
6.3.8 I2C控制器仿真验证 ……………………………………………………… 335
6.3.9 串口读/写EEPROM 系统设计 ………………………………………… 341
6.3.10 串口读/写 EEPROM 仿真验证 ……………………………………… 351
6.3.11 串口读/写EEPROM 板级验证 ……………………………………… 355
6.4 基于串口猎人的虚拟示波器 ………………………………………………… 359
6.4.1 系统结构 ………………………………………………………………… 359
6.4.2 模块详解 ………………………………………………………………… 361
6.4.3 仿真验证 ………………………………………………………………… 375
6.4.4 基于串口猎人的板级验证 ……………………………………………… 385
6.5 SDRAM 控制器设计 ………………………………………………………… 391
6.5.1 SDRAM 基本概念………………………………………………………… 391
6.5.2 SDRAM 存取原理………………………………………………………… 392
6.5.3 SDRAM 器件引脚说明…………………………………………………… 394
6.5.4 SDRAM 特性 …………………………………………………………… 395
6.5.5 SDRAM 操作命令介绍…………………………………………………… 396
6.5.6 SDRAM 操作时序………………………………………………………… 403
6.5.7 SDRAM 控制器设计……………………………………………………… 418
6.5.8 SDRAM 控制器仿真验证………………………………………………… 425
6.5.9 SDRAM 控制器设计优化………………………………………………… 430
6.5.10 优化控制器仿真验证 ……………………………………………………436
6.6 串口传图帧缓存设计 ………………………………………………………… 440
6.6.1 系统结构 ………………………………………………………………… 440
6.6.2 仿真验证 ………………………………………………………………… 446
6.6.3 板级验证 ………………………………………………………………… 450
参考文献………………………………………………………………………………… 454