本书包含FPGA技术基础篇、FPGA开发方法篇和人工智能应用篇三大板块,共计11章,以FPGA基础知识为切入点,通过对开发方法和设计思路的讲解,帮助读者快速掌握FPGA开发技术及FPGA在人工智能上的应用。本书可作为FPGA和其他开发人员进行FPGA设计和应用的参考用书。
本书主要从技术基础、开发方法和人工智能应用三个方面介绍FPGA的开发方法,围绕FPGA的基础知识,Verilog硬件描述语言,FPGA在Quartus中的开发流程,FPGA的SOPC、HLS、OpenCL设计方法,FPGA在人工智能领域的应用等方面进行阐述,使开发人员能理解FPGA的核心知识,掌握FPGA的开发方法和开发工具。本书包含FPGA技术基础篇、FPGA开发方法篇和人工智能应用篇三大板块,共计11章,以FPGA基础知识为切入点,通过对开发方法和设计思路的讲解,帮助读者快速掌握FPGA开发技术及FPGA在人工智能上的应用。本书可作为FPGA和其他开发人员进行FPGA设计和应用的参考用书。
第一部分 FPGA技术基础篇
第1章 FPGA的特点及其历史 002
1.1 无处不在的FPGA 002
1.2 创造性地解释FPGA 003
1.2.1 珠串法 004
1.2.2 乐高积木法 004
1.3 FPGA的可定制性 005
1.4 早期的逻辑功能实现 006
1.4.1 数字设计与TTL逻辑 007
1.4.2 从TTL到可编程逻辑 008
1.5 可简单编程逻辑器件(PAL) 009
1.5.1 可编程阵列逻辑优势 009
1.5.2 PAL编程技术 010
1.6 可编程逻辑器件(PLD) 011
1.7 复杂可编程逻辑器件(CPLD) 012
1.7.1 普通CPLD逻辑块的特点 012
1.7.2 CPLD的一般优势 013
1.7.3 非易失FPGA 014
1.8 现场可编程逻辑门阵列(FPGA) 015
第2章 FPGA架构 017
2.1 FPGA全芯片架构 017
2.2 FPGA逻辑阵列模块 018
2.2.1 查找表(LUT) 019
2.2.2 可编程寄存器 019
2.2.3 LABs和LE:更进一步的观察 022
2.2.4 自适应逻辑模块(ALM) 023
2.3 FPGA嵌入式存储 024
2.3.1 存储资源的利用 024
2.3.2 M9K资源介绍 025
2.4 时钟网络 027
2.4.1 FPGA时钟架构 027
2.4.2 PLL(锁相环) 028
2.5 DSP模块 028
2.6 FPGA布线 029
2.7 FPGA编程资源 030
2.8 FPGA I/O元件 031
2.8.1 典型的I/O元件逻辑 031
2.8.2 高速收发器 032
2.9 英特尔FPGA SoC 033
第3章 Verilog HDL 035
3.1 Verilog HDL概述 035
3.1.1 Verilog HDL的介绍 035
3.1.2 Verilog HDL的发展历史 036
3.1.3 Verilog HDL的相关术语 037
3.1.4 Verilog HDL的开发流程 038
3.2 Verilog HDL基础知识 040
3.2.1 程序结构 040
3.2.2 程序实例 041
3.2.3 数据类型 041
3.2.4 模块例化 043
3.2.5 运算符 044
3.3 Verilog HDL的基本语法 048
3.3.1 if-else语句 048
3.3.2 case语句 049
3.3.3 for循环 050
3.3.4 Verilog HDL常用关键字汇总 050
3.4 Verilog HDL高级知识点 051
3.4.1 阻塞与非阻塞的区别 051
3.4.2 assign语句和always语句的区别 054
3.4.3 锁存器与寄存器的区别 054
3.4.4 状态机 055
3.5 Verilog HDL开发实例篇 059
3.5.1 汉明码编码器 059
3.5.2 数码管译码器 063
3.5.3 双向移位寄存器 066
3.5.4 冒泡排序 069
第4章 Quartus Prime基本开发流程 081
4.1 Quartus Prime软件介绍 081
4.1.1 英特尔FPGA软件与硬件简介 081
4.1.2 Quartus Prime标准版设计软件简介 083
4.1.3 Quartus Prime主窗口界面 085
4.1.4 Quartus Prime默认操作环境 085
4.1.5 Quartus Prime主工具栏 086
4.1.6 Quartus Prime内置帮助系统 087
4.1.7 Quartus Prime可分离的窗口 088
4.1.8 Quartus Prime任务窗口 088
4.1.9 Quartus Prime自定义任务流程 090
4.2 Quartus Prime开发流程 091
4.2.1 典型的FPGA开发流程 091
4.2.2 创建Quartus Prime工程 094
4.2.3 设计输入 100
4.2.4 编译 106
4.2.5 分配管脚 111
4.2.6 仿真 112
4.2.7 器件配置 113
4.3 实验指导 116
4.3.1 流水灯实验 116
4.3.2 按键实验 128
4.3.3 PLL实验 136
第二部分 PGA开发方法篇
第5章 FPGA设计工具 145
5.1 编译报告 145
5.1.1 源文件读取报告 147
5.1.2 资源使用报告 147
5.1.3 动态综合报告 149
5.2 网表查看工具 149
5.2.1 RTL Viewer 149
5.2.2 Technology Map Viewer 150
5.2.3 State Machine Viewer 152
5.3 物理约束 153
5.3.1 物理约束设计 153
5.3.2 Assignment Editor 154
5.3.3 QSF文件设置 156
5.4 时序分析工具 158
5.4.1 TimeQuest Timing Analyzer的GUI图形交互界面 158
5.4.2 任务窗格(Tasks) 159
5.4.3 创建时序数据库(Netlist Setup) 159
5.4.4 常用的约束报告 160
5.4.5 报告窗格(Report Pane) 161
5.4.6 时序异常(Exceptions) 162
5.4.7 关于SDC的最后说明 164
5.5 功耗分析工具 164
5.5.1 功耗和热考虑因素 164
5.5.2 功耗分析工具比较 165
5.5.3 EPE电子表格 165
5.5.4 Power Analyzer 166
5.6 片上调试工具 167
5.6.1 Quartus Prime软件中的片上调试工具 167
5.6.2 Signal Probe Pin(信号探针) 168
5.6.3 SignalTap Ⅱ嵌入式逻辑分析仪 170
第6章 基于英特尔FPGA的SOPC开发 175
6.1 SOPC技术简介 175
6.2 IP核与Nios处理器 176
6.2.1 基于IP硬核的SOPC 176
6.2.2 基于IP软核的SOPC 177
6.3 构建SOPC系统 178
6.3.1 Platform Designer 178
6.3.2 SOPC设计工具 180
6.4 SOPC开发实战 181
6.4.1 SOPC系统设计 181
6.4.2 SOPC硬件设计 182
6.4.3 SOPC软件设计 199
第7章 基于英特尔FPGA的HLS开发 203
7.1 HLS的基本概念 203
7.2 HLS的基本开发流程 204
7.2.1 HLS的安装 204
7.2.2 核心算法代码 205
7.2.3 功能验证 205
7.2.4 生成硬件代码 206
7.2.5 模块代码优化 208
7.2.6 HLS的Modelsim仿真 211
7.2.7 集成HLS代码到FPGA系统 211
7.2.8 HDL实例化 212
7.2.9 添加IP路径到Qsys系统 213
7.3 HLS的多种接口及其使用场景 215
7.3.1 标准接口 215
7.3.2 隐式的Avalon MM Master接口 217
7.3.3 显式的Avalon MM Master接口 219
7.3.4 Avalon MM Slave接口 220
7.3.5 Avalon Streaming接口 224
7.4 HLS简单的优化技巧 226
第8章 基于英特尔FPGA的OpenCL异构技术 227
8.1 OpenCL基本概念 227
8.1.1 异构计算简介 227
8.1.2 OpenCL基础知识 228
8.1.3 OpenCL语言简介 231
8.2 基于英特尔FPGA的OpenCL开发环境 234
8.2.1 英特尔FPGA的OpenCL解决方案 234
8.2.2 系统要求 236
8.2.3 环境安装 237
8.2.4 设置环境变量 237
8.2.5 初始化并检测OpenCL环境 238
8.3 主机端Host程序设计 239
8.3.1 建立Platform环境 239
8.3.2 创建Program与Kernel 242
8.3.3 Host与Kernel的交互 243
8.3.4 OpenCL的内核执行 246
8.3.5 Host端程序示例 247
8.4 设备端Kernel程序设计流程 248
8.4.1 Kernel编译 248
8.4.2 功能验证(-march=emulator,x86平台仿真) 253
8.4.3 静态分析(-rtl,分析HTML报告) 253
8.4.4 动态分析(-profile) 255
第三部分 人工智能应用篇
第9章 人工智能简介 259
9.1 FPGA在人工智能领域的独特优势 259
9.1.1 确定性低延迟 260
9.1.2 灵活可配置 260
9.1.3 针对卷积神经网络的特殊优化 261
9.2 人工智能的概念 261
9.3 人工智能的发展史 262
9.3.1 早期的兴起与低潮 262
9.3.2 人工智能的诞生 263
9.3.3 人工智能的“冬天” 263
9.3.4 交叉学科的兴起 263
9.3.5 云计算与大数据时代的来临 264
9.4 人工智能的应用 264
9.4.1 智能决策 264
9.4.2 最优路径规划 264
9.4.3 智能计算系统 265
9.5 人工智能的限制 265
9.6 人工智能的分类 265
9.6.1 弱人工智能 266
9.6.2 强人工智能 266
9.6.3 超人工智能 266
9.7 人工智能的发展及其基础 267
9.7.1 矩阵论 267
9.7.2 应用统计 268
9.7.3 回归分析与方差分析 268
9.7.4 数值分析 268
第10章 深度学习 269
10.1 深度学习的优势 269
10.2 深度学习的概念 271
10.3 神经网络的基本构成 272
10.3.1 神经元的基本原理 273
10.3.2 全连接神经网络 274
10.3.3 卷积神经网络 275
10.3.4 常见的卷积神经网络 277
10.4 常见的深度学习数据集 279
10.5 深度学习的应用挑战 280
第11章 基于英特尔FPGA进行深度学习推理 282
11.1 视频监控 282
11.2 视觉系统架构 283
11.2.1 物理特征的捕捉 283
11.2.2 预处理 283
11.2.3 高级处理 284
11.3 计算机视觉的常见任务 285
11.3.1 图形图像分割 286
11.3.2 对象检测 286
11.3.3 对象分类 287
11.3.4 面部识别 287
11.3.5 其他任务 288
11.4 计算机视觉的基础 289
11.4.1 深度学习框架 290
11.4.2 OpenCL 291
11.4.3 OpenCV 292
11.4.4 OpenVINO 292
11.5 使用OpenVINO工具在英特尔FPGA上部署深度学习推理应用 293
11.5.1 OpenVINO工具 293
11.5.2 端到端机器学习 295
11.5.3 OpenVINO安装 295
11.5.4 模型优化器 297
11.5.5 推理引擎 302
后记 313