本书分为基础篇和进阶篇两大部分,基础篇主要介绍Zynq SOC架构,ARM Cortex-A9 处理器, 开发工具链等,器件Boot过程,并配备了大量基础实验,包括板卡的启动,编译嵌入式Linux系统,完成ARM和FPGA的简单片内通讯等;在进阶篇中详解了处理器和FPGA间接口种类和工作方式,分析了如何完成两者间高速的数据交互,通过实例介绍了如何在FPGA中定义用户自己的IP核并完成驱动编写供处理器上运行的Linux使用等,例如如何完成HDMI接口,如何将摄像头数据传递给处理器,并通过运行的OpenCV。本书还将结合Xilinx 最新的Vivado和AutoESL开发工具介绍整体软硬件协同设计开发流程并通过案例分析。
最后安排了一章系统级案例,如带视频控制的智能小车系统、利用软硬件协同设计完成的高清视频滤波处理等,这里每一个案例都会用到基础篇和进阶篇的所介绍的技术和内容,使读者更好的理解Zynq和Zed board.
新版本中升级了关于Vivado部分的实用内容。
封面图
目录
- 序言
- 第2版前言
- 第一部分基础篇
- 第1章将你的ZED板卡用起来/2
- 1.1GPIO LED动手玩/2
- 1.1.1安装SD卡/2
- 1.1.2跳线与外设连接/2
- 1.1.3演示操作/2
- 1.2Linaro Ubuntu动手玩/3
- 1.2.1SD卡分区/3
- 1.2.2文件复制/6
- 1.2.3外设连接/6
- 1.2.4可演示的效果/7
- 第2章Zynq平台介绍/9
- 2.17系列FPGA简介/9
- 2.2Zynq-7000 AP SoC体系简介/12
- 第3章ZedBoard开发环境/15
- 3.1ZedBoard的板载外设/15
- 3.1.1LED/15
- 3.1.2按键/16
- 3.1.3开关/16
- 3.1.4OLED/17
- 3.1.5USB接口/18
- 3.1.6音频接口/20
- 3.1.7VGA接口/21
- 3.1.8HDMI接口/22
- 3.1.910/100/1000兆网口/23
- 3.2ZedBoard的扩展外设/25
- 3.2.1PMod/25
- 3.2.2外扩FMC插槽/27
- 3.2.3外扩AMS插座/28
- 第4章Zynq开发工具链/29
- 4.1Vivado设计套件/29
- 4.1.1Vivado IDE/29
- 4.1.2Vivado IP Integrator/32
- 4.1.3Vivado调试介绍/35
- 4.2软件开发工具链/37
- 4.2.1SDK/37
- 4.2.2交叉编译工具链/38
- 4.2.3GDB与GDB Server/39
- 第5章Zynq体系结构/41
- 5.1应用处理器单元/41
- 5.1.1Cortex-A9处理器/41
- 5.1.2侦听控制单元/44
- 5.1.3L2高速缓存/45
- 5.1.4APU接口/45
- 5.2通用外设/47
- 5.2.1通用I/O/47
- 5.2.2SPI接口/50
- 5.2.3UART接口/52
- 5.2.4计时器/55
- 5.2.5USB控制器/57
- 5.2.6DDR控制器/58
- 5.3数字逻辑设计/60
- 5.3.1可编程逻辑“外设”/60
- 5.3.2XADC/62
- 5.3.3PCIe/63
- 5.4MIO/EMIO/64
- 第6章系统级信号/67
- 6.1电源管理/67
- 6.1.1PS运行模式下的动态功耗削减/68
- 6.1.2睡眠模式/68
- 6.2时钟信号/68
- 6.2.1CPU时钟域/69
- 6.2.2DDR时钟域/70
- 6.2.3基本的时钟分支结构/70
- 6.2.4I/O外设(IOP)时钟/71
- 6.2.5PL时钟/73
- 6.2.6其他时钟/73
- 6.3复位系统/74
- 6.4JTAG/76
- 6.5中断处理/77
- 第7章Zynq的启动与配置/79
- 7.1Zynq的启动过程简介/79
- 7.2外部启动条件/80
- 7.2.1电源要求/80
- 7.2.2时钟要求/80
- 7.2.3复位要求/80
- 7.2.4启动引脚设置/81
- 7.3BootROM/81
- 7.3.1BootROM的作用/81
- 7.3.2BootROM的特点/82
- 7.3.3执行BootROM后的状态/83
- 7.4FSBL/83
- 7.5SSBL/86
- 7.6Linux启动过程/86
- 7.7Secure Boot/87
- 第8章面向软件工程师的逻辑设计/89
- 8.1FPGA硬件加速原理/89
- 8.1.1以空间换时间/89
- 8.1.2以存储器换门电路/91
- 8.1.3以IP集成换生产力/92
- 8.2部分动态可重配置于Zynq/95
- 第9章ZedBoard入门/97
- 9.1跑马灯/97
- 9.1.1Vivado工程创建/97
- 9.1.2在Vivado中创建Zynq嵌入式系统/100
- 9.1.3SDK应用程序的编写/109
- 9.2Zynq嵌入式系统调试方法/114
- 9.2.1Vivado硬件调试/114
- 9.2.2使用SDK对Zynq进行调试/119
- 9.3启动Linux/123
- 9.3.1创建FSBL.elf/123
- 9.3.2从SD卡启动Linux/124
- 9.3.3从QSPI启动Linux/126
- 第二部分进阶篇
- 第10章基于虚拟平台的Zynq开发/130
- 10.1QEMU介绍/130
- 10.2编译QEMU源码/130
- 10.2.1下载QEMU源码/130
- 10.2.2配置QEMU/131
- 10.2.3QEMU所依赖的库文件/131
- 10.2.4编译QEMU/131
- 10.3启动QEMU/131
- 10.4QEMU中的嵌入式Linux/132
- 10.4.1QEMU启动简介/132
- 10.4.2使用Ubuntu包管理器快速搭建用户定制系统/133
- 10.4.3使用SSH服务进行访问/134
- 10.4.4使用Telnet服务进行访问/135
- 10.4.5使用FTP服务向QEMU传送文件/135
- 10.4.6USB设备支持/135
- 10.4.7SMP对称多核处理器的支持/135
- 10.4.8硬件模块GPIO支持/135
- 10.5商业版虚拟平台/136
- 第11章PL和PS的接口技术详解/137
- 11.1PL和PS的接口/137
- 11.1.1AXI接口简介/138
- 11.1.2AXI Interconnect/139
- 11.2Zynq的内部连接/142
- 11.2.1AXI_HP/144
- 11.2.2AXI_GP/145
- 11.2.3AXI_ACP/145
- 11.3PL和存储器系统性能概述/147
- 11.3.1接口理论带宽/147
- 11.3.2DDR控制器的吞吐率及效率/148
- 11.3.3内部互连吞吐量瓶颈/148
- 11.3.4如何选择PL的接口/149
- 第12章基于Zynq的软硬件协同设计/154
- 12.1多核处理器架构简介/154
- 12.1.1什么是多核处理器/154
- 12.1.2多核处理器发展的动机和优势/155
- 12.1.3同构、异构多核架构的优点和挑战/157
- 12.2软硬件协同设计方法论/157
- 12.2.1什么是软硬件协同设计/157
- 12.2.2软硬件协同设计发展的动机和优势/157
- 12.2.3软硬件协同设计的基本流程/158
- 12.2.4基于Xilinx工具的软硬件协同设计简介/159
- 12.3高层次综合/159
- 12.3.1高层次综合综述/159
- 12.3.2高层次综合发展的动机与优势/160
- 12.3.3Xilinx Vivado HLS工具简介/161
- 12.4基于Xilinx Zynq的软硬件协同设计简例/162
- 12.4.1功能简介/162
- 12.4.2设计流程简介/162
- 第13章Zynq高级开发/170
- 13.1用户IP核设计/170
- 13.1.1AXI PWM设计/170
- 13.1.2添加用户IP,完成系统设计/180
- 13.2构建嵌入式Linux系统/185
- 13.2.1构建交叉编译环境/185
- 13.2.2编译U-Boot/186
- 13.2.3编译uImage/186
- 13.2.4生成uramdisk.image.gz/187
- 13.2.5创建devicetree.dtb/188
- 13.3嵌入式Linux应用程序与驱动/190
- 13.3.1Linux设备驱动与软硬件之间的关系/190
- 13.3.2字符型设备驱动/191
- 13.3.3PWM模块驱动程序/192
- 13.3.4应用程序编写/193
- 13.4HDMI设计/194
- 13.4.1HDMI传输原理/195
- 13.4.2ADV7511芯片的相关控制信号/196
- 13.4.3HDMI系统Vivado实现/198
- 13.5OpenCV移植/200
- 13.5.1开发环境准备/200
- 13.5.2配置cmake/200
- 13.5.3OpenCV编译与安装/202
- 13.5.4OpenCV移植与ZedBoard测试/203
- 13.6基于OpenCV的树叶识别系统/204
- 13.6.1项目总览/205
- 13.6.2图像采集/205
- 13.6.3预处理/206
- 13.6.4特征提取/208
- 13.6.5分类决策/213
- 13.6.6过程总述/216
- 13.7基于OpenCV的人脸检测系统/217
- 13.7.1原理简介/218
- 13.7.2系统设计与实现/219
- 13.8嵌入式Web服务器搭建/221
- 13.8.1Boa服务器移植与配置/221
- 13.8.2Boa服务器的部署与测试/223
- 13.8.3CGI程序简介/224
- 13.9在ZedBoard上搭建网络摄像机/225
- 13.9.1嵌入式网络摄像机/225
- 13.9.2Mjpeg-Streamer移植/226
- 13.9.3部署Mjpeg-Streamer/226
- 13.10FreeRTOS/228
- 13.10.1FreeRTOS介绍/228
- 13.10.2FreeRTOS与ucOS-II的比较/229
- 13.10.3FreeRTOS在Zynq上的应用实例与分析/229
- 13.11基于FreeRTOS的Xilmfs/240
- 13.11.1嵌入式文件系统概述/241
- 13.11.2Xilmfs文件系统介绍/245
- 13.11.3Xilmfs文件系统使用实例/248
- 13.11.4利用mfsgen工具创建只读型文件系统镜像/250
- 13.12Lwip/251
- 13.12.1基于standalone的Lwip应用/252
- 13.12.2基于FreeRTOS的Lwip应用/255
- 13.13在Zynq上搭建Andriod/257
- 13.14Zynq双核通信/259
- 第14章系统级设计案例/265
- 14.1多轴运动控制系统/265
- 14.1.1整体结构/265
- 14.1.2硬件系统设计/266
- 14.1.3硬件系统与ZedBoard接口/267
- 14.1.4控制系统设计流程/268
- 14.1.5多轴控制系统结构设计/270
- 14.1.6利用Vivado HLS实现电流环控制硬件/271
- 14.1.7算法移植/272
- 14.1.8算法综合/273
- 14.1.9软件系统设计/274
- 14.1.10双核交互实现/274
- 14.1.11Android APP监控程序实现/275
- 14.1.12系统测试/276
- 14.2Sobel滤波/278
- 14.2.1软件架构设计/278
- 14.2.2Linux内核与设备驱动/279
- 14.3SDN/OpenFlow交换机/287
- 14.3.1SDN/OpenFlow简介/287
- 14.3.2数据通路设计/288
- 14.3.3平台架构搭建/290
- 14.3.4系统及驱动/291
- 14.3.5OpenFlow交换机移植/292
- 14.3.6启动OpenFlow交换机/292
- 14.3.7数据通路优化及加速/294
- 14.4智能小车系统开发/294
- 14.4.1智能小车系统结构/295
- 14.4.2运动控制设计/298
- 14.4.3Linux系统应用程序设计/301
- 14.4.4智能小车平台的后续拓展/307
- 14.4.5在智能小车平台上移植ROS/308
- 第15章如何获取资料和帮助/309
- 15.1如何获取Xilinx的技术文档/309
- 15.1.1DocNav介绍/309
- 15.1.2DocNav使用案例/309
- 15.2如何找到Zynq开发资料/312
- 15.2.1如何获取本书的最新例程/312
- 15.2.2如何获取Zynq开发资料/312
- 15.2.3如何获取ZedBoard文档与例程/313
- 15.3Xilinx网站资源导读/313
- 15.3.1序/313
- 15.3.2Xilinx软件介绍/313
- 15.3.3软件版本和软件更新/316
- 15.3.4软件教程/317
- 15.3.5硬件资料/318
- 15.3.6参考资源/319
- 15.3.7问题解决/320
- 参考文献/321