SoC FPGA嵌入式设计和开发教程 作者:梅雪松,宋士权,陈云龙编著出版时间: 2019年版内容简介 本书以Intel Cyclone v SoC FPGA系列器件为例,介绍了SoC FPGA 器件的架构特点、常用电路设计以及软硬件开发流程和开发技巧。内容编排按照开发一个基于SoC FPGA 的应用系统所需掌握的基本的知识路线展开,从基本的Linux系统操作到分析一个基础的应用系统框架,然后基于该应用系统框架,详细讲解应用系统的构建、BSP文件的生成、启动引导文件的更新、Ubuntu虚拟机安装配置、Linux内核配置与编译。接着介绍如何在嵌入式Linux系统环境下,使用虚拟地址映射的方式编写相应的应用程序来实现该应用系统中各个功能IP的编程控制和调试。最后以两个实际的例子展示如何通过HPS和FPGA的片上通信桥实现软硬件联合开发的过程,包括FPGA侧逻辑开发, IP总线封装,Linux驱动程序的编写编译,Linux应用程序的编写与运行等。本书既可作为工程类应用、电子信息类专业本科生以及相关专业专科生的嵌入式系统基础类课程的教材,也可作为SoC FPGA自学人员以及从事SoC FPGA开发的工程技术人员的培训教材和参考用书。目录第1章 SoC FPGA软硬件系统开发概述 … 11.1 Intel SoC FPGA系列 11.1.1 Cyclone Ⅴ SoC FPGA … 21.1.2 Arria Ⅴ SoC FPGA 21.1.3 Arria 10 SoC FPGA 21.1.4 Stratix 10 SoC FPGA 31.1.5 SoC FPGA应用领域与前景 31.2 Intel Cyclone Ⅴ SoC FPGA介绍 … 41.2.1 什么是SoC FPGA … 41.2.2 SOPC … 41.2.3 SoC FPGA与SOPC之间的差异 51.2.4 SoC FPGA架构的优势 … 61.3 Cyclone Ⅴ SoC FPGA器件硬件设计概述 91.3.1 FPGA I/O和时钟 … 101.3.2 SoC FPGA JTAG电路设计 … 121.4 AC501-SoC开发板介绍 131.4.1 布局及组件 … 131.4.2 轻触按键 141.4.3 用户LED 151.4.4 时钟输入 161.4.5 GPIO接口 … 171.4.6 DDR3SDRAM 181.4.7 通用显示扩展接口… 191.4.8 USB转 UART 211.4.9 以太网收发器 211.5 本章小结 23第2章 SoC FPGA开发板的使用 … 242.1 安装SoC FPGA开发工具 242.2 SoC FPGA的配置数据烧写与固化 242.2.1 SoC FPGA启动配置方式介绍 242.2.2 sof文件的烧写方式 262.2.3 Jic文件的生成和烧写 … 282.3 在SoC FPGA上运行Linux操作系统 … 322.3.1 SoC FPGA中的 HPS启动流程介绍 322.3.2 HPS启动方式介绍 332.3.3 制作启动镜像SD卡 342.3.4 准备硬件板卡 352.3.5 开机测试 392.4 开发板Linux系统常用操作 … 402.4.1 查看目录 402.4.2 设置和修改用户密码 402.4.3 查看和编辑文件 … 412.4.4 设置IP地址 … 432.4.5 挂载SD卡的FAT32分区 452.4.6 挂载 U盘 462.4.7 文件操作 472.4.8 目录操作 482.4.9 停止某个进程 492.4.10 重启和关机 … 502.5 本章小结 50第3章 SoC FPGA开发概述 … 513.1 SoC FPGA开发流程 … 513.1.1 硬件开发 513.1.2 软件开发 533.2 AC501-SoC FPGA开发板的黄金参考设计说明 533.2.1 GHRD … 533.2.2 打开和查看GHRD 543.2.3 组件参数配置详解… 573.3 本章小结 62第4章 手把手修改GHRD系统 634.1 修改GHRD工程 … 634.1.1 打开GHRD工程 … 634.1.2 添加UART IP 644.1.3 关于 HPS与FPGA数据交互… 644.1.4 连接UART IP信号端口 654.1.5 分配组件基地址 … 674.1.6 生成 Qsys系统的 HDL文件 … 684.1.7 添加uart_1的端口到 Quartus工程中 694.1.8 分配FPGA引脚 … 714.1.9 生成配置数据二进制文件 724.2 制作Preloader Image … 724.2.1 打开SoC EDS工具 734.2.2 生成bsp文件 744.2.3 编译Preloader和 U-Boot 774.2.4 更新Preloader和 U-Boot 794.2.5 Win 10下更新失败问题… 804.2.6 使用新的 U-Boot启动SoC … 814.3 制作设备树 … 824.3.1 设备树制作流程 … 824.3.2 准备所需文件 824.3.3 生成.dts文件 834.3.4 生成.dtb文件 844.4 运行修改后的工程 854.5 本章小结 87第5章 使用DS-5编写和调试SoC的Linux应用程序 885.1 启动DS-5 …885.2 创建C工程 … 915.3 编译工程 945.4 建立SSH远程连接 955.4.1 创建远程连接 955.4.2 复制文件到目标板 1015.4.3 运行应用程序 1025.5 远程调试 … 1035.5.1 GDB设置 … 1035.5.2 GDB连接和调试 … 1065.6 使用 WinSCP实现多系统传输文件 1085.6.1 为什么要使用 WinSCP 1085.6.2 安装 WinSCP 1095.6.3 建立远程主机连接 1095.6.4 新建远程连接 1125.6.5 调用PuTTY终端 1125.7 本章小结 … 113第6章 基于虚拟地址映射的Linux硬件编程 1146.1 什么是虚拟地址映射 … 1146.2 虚拟地址映射的实现 … 1156.3 基于虚拟地址映射的PIO编程应用 1176.3.1 PIO外设的虚拟地址映射 1176.3.2 在DS-5中建立PIO应用工程 1186.3.3 添加和包含 HPS库文件 1196.3.4 添加FPGA侧外设硬件信息… 1216.3.5 PIO IP核介绍 1246.3.6 PIO核寄存器映射 1256.3.7 PIO IP核应用实例 1286.3.8 合理的程序退出机制 … 1316.3.9 关于按键消抖 1336.4 基于虚拟地址映射的 UART编程应用… 1346.4.1 UART核介绍 1346.4.2 UART寄存器映射 1346.4.3 UART IP核应用实例 … 1366.4.4 UART IP核板级调试 … 1446.4.5 小 结 1456.5 基于虚拟地址映射的I2C编程应用 1456.5.1 OpenCores I2C IP简介… 1466.5.2 OpenCores I2C IP寄存器映射 1466.5.3 I2C IP核应用实例 1496.5.4 小 结 1616.6 本章小结 … 161第7章 基于Linux应用程序的HPS配置FPGA … 1627.1 制作 Quartus工程 1637.2 生成rbf格式配置数据 1637.3 编译Linux配置FPGA应用程序… 1657.4 在系统重配置FPGA实验 … 1667.5 本章小结 … 168第8章 编译嵌入式Linux系统内核 1698.1 安装 VMware … 1708.2 安装 Ubuntu系统 1718.2.1 使用现成的 Ubuntu系统镜像 1718.2.2 安装全新的 Ubuntu系统 1758.3 下载Linux系统源码 … 1828.4 设置交叉编译环境 1858.5 配置和编译内核 … 1898.5.1 快速配置内核 1898.5.2 保存内核配置文件 1958.5.3 编译内核 1958.5.4 使用内核启动开发板 … 1978.6 本章小结 … 199第9章 Linux设备树的原理与应用实例 2009.1 什么是设备树 2009.2 设备树基本格式 … 2019.3 设备树加载设备驱动原理 … 2069.4 编写I2C控制器设备节点 … 2089.5 加载 OC_I2C驱动 2119.6 使用RTC … 2129.7 使用EEPROM … 2169.8 编写SPI控制器设备节点 … 2179.9 本章小结 … 219第10章 基于Linux标准文件I/O 的设备读/写 … 22010.1 什么是文件I/O 22010.2 基于文件I/O操作的一般方法 … 22010.2.1 文件描述符 22010.2.2 打开设备(open)… 22110.2.3 向设备写入数据(write) 22110.2.4 读取设备数据(read)… 22210.2.5 杂项操作(ioctl)… 22210.2.6 关闭设备(close)… 22310.2.7 其他操作 … 22310.3 使用文件I/O实现I2C编程 22310.4 本章小结 … 226第11章 FPGA与HPS高速数据交互应用 … 22711.1 FPGA与 HPS通信介绍 … 22711.1.1 H2F_LW_AXI_Master桥 … 22911.1.2 H2F_AXI_Master桥 … 22911.1.3 F2H_AXI_Slave桥 23011.2 AXI与 Avalon-MM 总线的互联… 23011.3 Avalon-MM 总线 23011.4 Avalon-MM Slave接口 23211.5 基本Avalon-MM Slave IP设计框架 … 23411.5.1 端口定义 … 23411.5.2 寄存器和线网定义 23511.5.3 Avalon总线对寄存器的读/写 23511.5.4 用户逻辑使用寄存器 … 23611.6 PWM 控制器设计 23711.6.1 PWM IP核端口设计 … 23811.6.2 PWM IP核寄存器定义 23911.6.3 读/写PWM 寄存器 … 23911.6.4 Platform Designer中封装PWM IP 24111.7 Avalon-MM Master接口 … 25511.7.1 常见的通用Avalon-MM Master主机 … 25611.7.2 DMA Controller 25611.7.3 Scatter-Gather DMA Controller … 25611.7.4 Modular Scatter-Gather DMA 25811.7.5 Avalon-MM Master模板 … 26011.8 高速数据采集系统 … 26311.8.1 安装Avalon-MM Master模板 26311.8.2 完善 Qsys系统 … 26511.8.3 修改 Quartus中的 Qsys例化 26911.8.4 测试逻辑设计 … 27111.9 本章小结 … 275第12章 Linux驱动编写与编译 … 27612.1 基本字符型设备驱动… 27612.1.1 字符型设备驱动框架 … 27712.1.2 PWM 控制器驱动的完整源码 28612.1.3 驱动编译 Makefile 29112.1.4 Ubuntu下编译设备驱动 29212.1.5 字符型设备驱动验证 … 29312.2 基于DMA的字符型设备驱动 … 29712.2.1 Avalon-MM Master Write驱动 … 29812.2.2 Avalon-MM Master Write测试 … 30412.3 本章小结 … 311附录A 外设地址映射 312附录B HPS GPIO映射 … 314 上一篇: RADAR-87国际雷达会议录 曾俭恭主编 1988年版 下一篇: TD-LTE系统原理与无线网络优化 盛东亮责任编辑 (中国)窦中兆,王公仆,冯穗力 2019年版