书刊介绍
《嵌入式系统软硬件协同设计实战指南》内容简介
本书由浅入深,由基础知识到实战案例向读者系统阐述了如何利用Zynq平台进行嵌入式系统以及软硬件协同设计的开发。本书分为基础篇与进阶篇两部分,基础篇中介绍了Zynq器件、ZedBoard,并配有简单入门实验,同时针对软件开发人员增设了FPGA硬件加速等内容。在进阶篇中介绍了利用Zynq进行软硬件协同设计,同时对处理器与可编程逻辑接口等技术进行了详细剖析。本书提供了20个详细的设计案例,涵盖了硬件板卡、FPGA逻辑、Linux驱动、Linux操作系统、上层应用、软硬件协同设计等Zynq开发中可能遇到的各个方面的知识,并在最后将前述独立案例整合为4个系统案例。本书重点突出实战,以案例为指导,配合介绍相关参考文档,协助读者尽快掌握在Zynq上进行各项设计的方法。
本书可作为Zynq初学者、软硬件协同设计开发人员的参考用书,亦可作为大专院校嵌入式系统设计、片上系统设计、可编程逻辑器件等相关专业的教师和学生的参考用书。
陆佳华,开源硬件社区Openhw.org资深版主,Xilinx高级应用工程师,现任职于Xilinx全球大学计划部,主要负责Xilinx全球大学相关的参考设计开发,技术推广、支持。陆佳华2006年毕业于西安交通大学并获得硕士学位。2006年加入Xilinx公司后任产品应用工程师,主要负责FPGA上的嵌入式系统设计,以太网设计,内存控制器设计等方向技术支持。陆佳华著有《零存整取-NetFPGA开发指南》一书。
江舟,开源硬件社区Openhw.org的资深版主,浙江大学硕士研究生,现为Xilinx全球大学计划部实习生,主要参与Zynq上的软件开发。江舟是美信DIY大赛的主要技术支持者之一,并担任Xilinx开源硬件大赛的技术支持。
马岷,开源硬件社区Openhw.org的资深版主,浙江大学硕士研究生,现为Xilinx全球大学计划部实习生,主要参与Zynq上的硬件开发。马岷是美信DIY大赛的主要技术支持者之一,并担任Xilinx开源硬件大赛的技术支持。作品目录
嵌入式系统软硬件协同设计实战指南
Foreword
前言
平台及写作背景
阅读提示
致谢
第一部分
基础篇
第1章:初试ZedBoard
1.1、GPIO
LED动手玩
1.1.1、拷贝SD卡
1.1.2、跳线与外设连接
1.1.3、演示操作
1.2、Linaro
Ubuntu动手玩
1.2.1、SD卡分区
1.2.2、文件拷贝(FAT/EXT)
1.2.3、外设连接
1.2.4、可演示的效果
第2章:Zynq平台介绍
2.1、7系列FPGA简介
2.2、Zynq-7000、AP
SoC体系简介
第3章:ZedBoard开发环境
3.1、ZedBoard的板载外设
3.1.1、LED
3.1.2、按键
3.1.3、开关
3.1.4、OLED
3.1.5、USB接口
3.1.6、音频接口
3.1.7、VGA接口
3.1.8、HDMI接口
3.1.9、10/100/1000兆网口
3.2、ZedBoard的扩展外设
3.2.1、外扩PMod插座
3.2.2、外扩FMC插槽
3.2.3、外扩AMS插座
第4章:开发工具链
4.1、可编程逻辑开发工具链
4.1.1、PlanAhead
4.1.2、Xilinx
Platform
Studio
4.2、软件开发工具链
4.2.1、Xilinx
Software
Development
Kit
4.2.2、交叉编译工具链
4.3、软硬件调试工具
4.3.1、ChipScope
Pro
4.3.2、GDB与GDBserver
第5章:Zynq体系结构
5.1、应用处理器单元(APU)
5.1.1、ARM
Cortex
A9处理器
5.1.2、侦听控制单元(SCU)
5.1.3、L2高速缓存
5.1.4、APU接口
5.2、通用外设
5.2.1、通用IO(GPIO)
5.2.2、SPI接口
5.2.3、UART接口
5.2.4、计时器
5.2.5、USB控制器
5.2.6、DDR控制器
5.3、数字逻辑设计
5.3.1、可编程逻辑“外设”(PL)
5.3.2、XADC
5.3.3、PCIe
5.4、MIO/EMIO
第6章:系统级信号
6.1、电源管理
6.2、Clock信号
6.2.1、CPU时钟域
6.2.2、DDR时钟域
6.2.3、基本的时钟分支结构
6.2.4、I/O外设(IOP)时钟
6.2.5、PL时钟
6.2.6、其他时钟
6.3、复位系统
6.4、JTAG
6.5、中断处理
第7章:Zynq启动与配置
7.1、Zynq启动过程简介
7.2、外部启动条件
7.2.1、电源要求
7.2.2、时钟要求
7.2.3、复位要求
7.2.4、启动引脚设置
7.3、BootROM
7.3.1、BootROM的作用
7.3.2、BootROM的特点
7.3.3、BootROM后的状态
7.4、FSBL
7.5、SSBL
7.6、Linux启动过程
7.7、Secure
Boot
第8章:面向软件工程师的逻辑设计
8.1、FPGA硬件加速原理
8.1.1、以空间换时间
8.1.2、以存储器换门电路
8.1.3、以IP集成换生产力
8.2、部分动态可重配置于Zynq
第9章:ZedBoard入门
9.1、UART和GPIO控制
9.1.1、UART和GPIO接口
9.1.2、硬件设计过程
9.1.3、软件设计过程
9.2、硬件/软件调试方法
9.2.1、ChipScope
IP
Core
9.2.2、SDK
Gdb使用
9.3、搭建你的单板计算机(Single
Board
Computer)
9.3.1、搭建系统环境
9.3.2、准备工作
第二部分
进阶篇
第10章:基于虚拟平台的Zynq开发
10.1、QEMU介绍
10.2、编译QEMU源码
10.2.1、下载QEMU源码
10.2.2、配置QEMU
10.2.3、QEMU所依赖的库文件
10.2.4、编译QEMU
10.3、启动QEMU
10.4、QEMU中的嵌入式Linux
10.5、商业版虚拟平台
第11章:PL和PS的接口技术详解
11.1、PL和PS的接口
11.1.1、AXI接口简介
11.1.2、AXI
Interconnect
11.2、Zynq的内部连接
11.2.1、AXI_HP
11.2.2、AXI_GP
11.2.3、AXI_ACP
11.3、PL和存储器系统性能概述
11.3.1、接口理论带宽
11.3.2、DDR控制器的吞吐率及其效率
11.3.3、内部互连吞吐量瓶颈
11.3.4、如何选择PL的接口
第12章:基于Zynq的软硬件协同设计
12.1、多核处理器架构简介
12.1.1、什么是多核处理器
12.1.2、多核处理器发展的动机和优势
12.1.3、同构、异构多核架构的优点和挑战
12.2、软硬件协同设计方法论
12.2.1、什么是软硬件协同设计
12.2.2、软硬件协同设计发展的动机和优势
12.2.3、软硬件协同设计的基本流程
12.2.4、基于Xilinx工具的软硬件协同设计简介
12.3、高层次综合
12.3.1、高层次综合综述
12.3.2、高层次综合发展的动机与优势
12.3.3、Xilinx
AutoESL工具简介
12.4、基于Xilinx
Zynq的软硬件协同设计实例
12.4.1、功能简介
12.4.2、设计流程简介
12.4.3、实验结果与验证
第13章:Zynq开发实战
13.1、用户IP设计
13.1.1、用户IPcore介绍
13.1.2、用户IPcore设计
13.2、嵌入式Linux设备驱动开发
13.2.1、设备驱动开发介绍
13.2.2、驱动程序的加载与卸载
13.2.3、sys文件系统简介
13.2.4、PWM模块驱动程序
13.2.5、PWM驱动程序编译与测试
13.3、构建嵌入式Linux系统
13.3.1、搭建系统环境
13.3.2、编译u-boot
13.3.3、编译内核与设备树
13.3.4、制作根文件系统
13.3.5、启动嵌入式Linux
13.4、HDMI设计
13.4.1、HDMI传输原理
13.4.2、ADV7511芯片的相关控制信号
13.4.3、设计过程
13.5、OpenCV移植
13.5.1、开发环境准备
13.5.2、配置cmake
13.5.3、OpenCV编译与安装
13.5.4、OpenCV移植与ZedBoard测试
13.6、基于OpenCV的树叶识别系统
13.6.1、项目总览
13.6.2、图像采集
13.6.3、预处理
13.6.4、特征提取
13.6.5、分类决策
13.6.6、总结
13.7、基于OpenCV的人脸识别系统
13.7.1、系统综述
13.7.2、基于Haar特征和Adaboost算法的人脸检测
13.7.3、系统设计与实现
13.7.4、总结
13.8、嵌入式Web服务器的移植与搭建
13.8.1、嵌入式Web服务器介绍
13.8.2、Boa服务器移植与配置
13.8.3、Boa服务器部署与测试
13.9、嵌入式网络摄像机的移植与搭建
13.9.1、嵌入式网络摄像机
13.9.2、mjpg-streamer的移植与架设
13.10、FreeRTOS实时操作系统的应用
13.10.1、FreeRTOS介绍
13.10.2、FreeRTOS与ucOS-Ⅱ的比较
13.10.3、FreeRTOS在Zynq上的应用实例与分析
13.10.4、基于FreeRTOS的Lwip
13.11、XADC的使用
13.11.1、建立硬件工程
13.11.2、软件工程设计
13.11.3、程序分析
13.12、基于Zynq的部分可重配置
13.12.1、可重配置系统介绍
13.12.2、可重配置的开发流程
13.12.3、小结
13.13、在Zynq上搭建Android简介
第14章:系统级设计案例
14.1、电机控制系统
14.1.1、双闭环控制器理论
14.1.2、双闭环系统
14.1.3、双闭环控制IP核说明
14.1.4、硬件实现过程
14.1.5、软件实现过程
14.1.6、硬件平台测试
14.2、智能家庭健康平台
14.2.1、智能家庭健康平台简介
14.2.2、EKG
AFE模块硬件设计
14.2.3、Night
EKG
Controller
IP设计
14.2.4、建立可运行Linux的完整系统
14.2.5、Night
EKG
Controller的Linux驱动设计
14.2.6、基于Qt的图形用户界面设计
14.2.7、在ZedBoard上运行Qt程序
14.2.8、实现软件开机自动运行
14.3、高性能视频处理系统设计
14.3.1、系统架构
14.3.2、硬件架构设计
14.3.3、软件架构设计
14.3.4、利用Vivado
HLS实现Sobel滤波硬件
14.3.5、使系统在ZedBoard上运行
14.4、智能小车系统开发
14.4.1、智能小车系统结构
14.4.2、运动控制设计
14.4.3、Linux系统应用程序设计
14.4.4、智能小车平台的后续拓展
第15章:如何获取资料和帮助
15.1、如何获取Xilinx的技术文档
15.1.1、DocNav介绍
15.1.2、DocNav使用案例
15.2、如何找到Zynq开发资料
15.2.1、如何获取本书的最新例程
15.2.2、如何获取Zynq开发资料
15.2.3、如何获取ZedBoard文档与例程
15.3、Xilinx网站资源导读
15.3.1、序
15.3.2、Xilinx软件介绍
15.3.3、软件版本和软件更新
15.3.4、软件教程
15.3.5、硬件资料
15.3.6、参考资源
15.3.7、问题解决
附录A
Xilinx开发套件版本14.1到14.3的主要升级变化
参考资料
光盘内容