第1章 SoC FPGA软硬件系统开发概述 1
1.1 Intel SoC FPGA系列 1
1.1.1 Cyclone Ⅴ SoC FPGA 2
1.1.2 Arria Ⅴ SoC FPGA 2
1.1.3 Arria 10 SoC FPGA 2
1.1.4 Stratix 10 SoC FPGA 3
1.1.5 SoC FPGA应用领域与前景 3
1.2 Intel Cyclone Ⅴ SoC FPGA介绍 4
1.2.1 什么是SoC FPGA 4
1.2.2 SOPC 4
1.2.3 SoC FPGA与SOPC之间的差异 5
1.2.4 SoC FPGA架构的优势 6
1.3 Cyclone Ⅴ SoC FPGA器件硬件设计概述 9
1.3.1 FPGA I/O和时钟 10
1.3.2 SoC FPGA JTAG电路设计 12
1.4 AC501-SoC开发板介绍 13
1.4.1 布局及组件 13
1.4.2 轻触按键 14
1.4.3 用户LED 15
1.4.4 时钟输入 16
1.4.5 GPIO接口 17
1.4.6 DDR3 SDRAM 18
1.4.7 通用显示扩展接口 19
1.4.8 USB转UART 21
1.4.9 以太网收发器 21
1.5 本章小结 23
第2章 SoC FPGA开发板的使用 24
2.1 安装SoC FPGA开发工具 24
2.2 SoC FPGA的配置数据烧写与固化 24
2.2.1 SoC FPGA启动配置方式介绍 24
2.2.2 sof文件的烧写方式 26
2.2.3 jic文件的生成和烧写 28
2.3 在SoC FPGA上运行Linux操作系统 32
2.3.1 SoC FPGA中的H PS启动流程介绍 32
2.3.2 HPS启动方式介绍 33
2.3.3 制作启动镜像SD卡 34
2.3.4 准备硬件板卡 35
2.3.5 开机测试 39
2.4 开发板Linux系统常用操作 40
2.4.1 查看目录 40
2.4.2 设置和修改用户密码 40
2.4.3 查看和编辑文件 41
2.4.4 设置IP地址 43
2.4.5 挂载SD卡的FAT32分区 45
2.4.6 挂载U盘 46
2.4.7 文件操作 47
2.4.8 目录操作 48
2.4.9 停止某个进程 49
2.4.10 重启和关机 50
2.5 本章小结 50
第3章 SoC FPGA开发概述 51
3.1 SoC FPGA开发流程 51
3.1.1 硬件开发 51
3.1.2 软件开发 53
3.2 AC501-SoC FPGA开发板的黄金参考设计说明 53
3.2.1 GHRD 53
3.2.2 打开和查看GHRD 54
3.2.3 组件参数配置详解 57
3.3 本章小结 62
第4章 手把手修改GHRD系统 63
4.1 修改GHRD工程 63
4.1.1 打开GHRD工程 63
4.1.2 添加UART IP 64
4.1.3 关于HPS与FPGA数据交互 64
4.1.4 连接UART IP信号端口 65
4.1.5 分配组件基地址 67
4.1.6 生成Qsys系统的HDL文件 68
4.1.7 添加uart_1的端口到Quartus工程中 69
4.1.8 分配FPGA引脚 71
4.1.9 生成配置数据二进制文件 72
4.2 制作Preloader Image 72
4.2.1 打开SoC EDS工具 73
4.2.2 生成bsp文件 74
4.2.3 编译Preloader和U-Boot 77
4.2.4 更新Preloader和U-Boot 79
4.2.5 Win 10系统下更新失败问题 80
4.2.6 使用新的U-Boot启动SoC 81
4.3 制作设备树 82
4.3.1 设备树制作流程 82
4.3.2 准备所需文件 82
4.3.3 生成.dts文件 83
4.3.4 生成.dtb文件 84
4.4 运行修改后的工程 85
4.5 本章小结 87
第5章 使用DS-5编写和调试SoC的Linux应用程序 88
5.1 启动DS-5 88
5.2 创建C工程 91
5.3 编译工程 94
5.4 建立SSH远程连接 95
5.4.1 创建远程连接 95
5.4.2 复制文件到目标板 101
5.4.3 运行应用程序 102
5.5 远程调试 103
5.5.1 GDB设置 103
5.5.2 GDB连接和调试 106
5.6 使用WinSCP实现多系统传输文件 108
5.6.1 为什么要使用WinSCP 108
5.6.2 安装WinSCP 109
5.6.3 建立远程主机连接 109
5.6.4 新建远程连接 112
5.6.5 调用PuTTY终端 112
5.7 本章小结 113
第6章 基于虚拟地址映射的Linux硬件编程 114
6.1 什么是虚拟地址映射 114
6.2 虚拟地址映射的实现 115
6.3 基于虚拟地址映射的PIO编程应用 117
6.3.1 PIO外设的虚拟地址映射 117
6.3.2 在DS-5中建立PIO应用工程 118
6.3.3 添加和包含HPS库文件 119
6.3.4 添加FPGA侧外设硬件信息 121
6.3.5 PIO IP核介绍 124
6.3.6 PIO核寄存器映射 125
6.3.7 PIO IP核应用实例 128
6.3.8 合理的程序退出机制 131
6.3.9 关于按键消抖 133
6.4 基于虚拟地址映射的UART编程应用 134
6.4.1 UART核介绍 134
6.4.2 UART寄存器映射 134
6.4.3 UART IP核应用实例 136
6.4.4 UART IP核板级调试 144
6.4.5 小结 145
6.5 基于虚拟地址映射的I2 C编程应用 145
6.5.1 OpenCores I2 C IP简介 146
6.5.2 OpenCores I2 C IP寄存器映射 146
6.5.3 I2 C IP核应用实例 149
6.5.4 小结 161
6.6 本章小结 161
第7章 基于Linux应用程序的HPS配置FPGA 162
7.1 制作Quartus工程 163
7.2 生成rbf格式配置数据 163
7.3 编译Linux配置FPGA应用程序 165
7.4 在系统重配置FPGA实验 166
7.5 本章小结 168
第8章 编译嵌入式Linux系统内核 169
8.1 安装VMware 170
8.2 安装Ubuntu系统 171
8.2.1 使用现成的Ubuntu系统镜像 171
8.2.2 安装全新的Ubuntu系统 175
8.3 下载Linux系统源码 182
8.4 设置交叉编译环境 185
8.5 配置和编译内核 189
8.5.1 快速配置内核 189
8.5.2 保存内核配置文件 195
8.5.3 编译内核 195
8.5.4 使用内核启动开发板 197
8.6 本章小结 199
第9章 Linux设备树的原理与应用实例 200
9.1 什么是设备树 200
9.2 设备树的基本格式 201
9.3 设备树加载设备驱动原理 206
9.4 编写I2 C控制器设备节点 208
9.5 加载OC_I2 C驱动 211
9.6 使用RTC 212
9.7 使用EEPROM 216
9.8 编写SPI控制器设备节点 217
9.9 本章小结 219
第10章 基于Linux标准文件I/O的设备读/写 220
10.1 什么是文件I/O 220
10.2 基于文件I/O操作的一般方法 220
10.2.1 文件描述符 220
10.2.2 打开设备(open) 221
10.2.3 向设备写入数据(write) 221
10.2.4 读取设备数据(read) 222
10.2.5 杂项操作(ioctl) 222
10.2.6 关闭设备(close) 223
10.2.7 其他操作 223
10.3 使用文件I/O实现I2 C编程 223
10.4 本章小结 226
第11章 FPGA与HPS高速数据交互应用 227
11.1 FPGA与HPS通信介绍 227
11.1.1 H2F_LW_AXI_Master桥 229
11.1.2 H2F_AXI_Master桥 229
11.1.3 F2H_AXI_Slave桥 230
11.2 AXI与Avalon-MM总线的互联 230
11.3 Avalon-MM总线 230
11.4 Avalon-MM Slave接口 232
11.5 基本Avalon-MM Slave IP设计框架 234
11.5.1 端口定义 234
11.5.2 寄存器和线网定义 235
11.5.3 Avalon总线对寄存器的读/写 235
11.5.4 用户逻辑使用寄存器 236
11.6 PWM控制器设计 237
11.6.1 PWM IP核端口设计 238
11.6.2 PWM IP核寄存器定义 239
11.6.3 读/写PWM寄存器 239
11.6.4 Platform Designer中封装PWM IP 241
11.7 Avalon-MM Master接口 255
11.7.1 常见的通用Avalon-MM Master主机 256
11.7.2 DMA Controller 256
11.7.3 Scatter-Gather DMA Controller 256
11.7.4 Modular Scatter-Gather DMA 258
11.7.5 Avalon-MM Master模板 260
11.8 高速数据采集系统 263
11.8.1 安装Avalon-MM Master模板 263
11.8.2 完善Qsys系统 265
11.8.3 修改Quartus中的Qsys例化 269
11.8.4 测试逻辑设计 271
11.9 本章小结 275
第12章 Linux驱动编写与编译 276
12.1 基本字符型设备驱动 276
12.1.1 字符型设备驱动框架 277
12.1.2 PWM控制器驱动的完整源码 286
12.1.3 驱动编译Makefile 291
12.1.4 Ubuntu下编译设备驱动 292
12.1.5 字符型设备驱动验证 293
12.2 基于DMA的字符型设备驱动 297
12.2.1 Avalon-MM Master Write驱动 298
12.2.2 Avalon-MM Master Write测试 304
12.3 本章小结 311
附录A 外设地址映射 312
附录B HPS GPIO映射 314
参考文献 315