嵌入式系统软硬件协同设计实战指南:基于Xilinx Zynq图书
人气:9

嵌入式系统软硬件协同设计实战指南:基于Xilinx Zynq

本书由浅入深,由基础知识到实战案例向读者系统阐述了如何利用Zynq平台进行嵌入式系统以及软硬件协同设计的开发。本书分为基础篇与进阶篇两部分,基础篇中介绍了Zynq器件、ZedBoard,并配有简单入门实验,同时针对...

内容简介

本书由浅入深,由基础知识到实战案例向读者系统阐述了如何利用Zynq平台进行嵌入式系统以及软硬件协同设计的开发。本书分为基础篇与进阶篇两部分,基础篇中介绍了Zynq器件、ZedBoard,并配有简单入门实验,同时针对软件开发人员增设了FPGA硬件加速等内容。在进阶篇中介绍了利用Zynq进行软硬件协同设计,同时对处理器与可编程逻辑接口等技术进行了详细剖析。本书提供了20个详细的设计案例,涵盖了硬件板卡、FPGA逻辑、Linux驱动、Linux操作系统、上层应用、软硬件协同设计等Zynq开发中可能遇到的各个方面的知识,并在将前述独立案例整合为4个系统案例。本书重点突出实战,以案例为指导,配合介绍相关参考文档,协助读者尽快掌握在Zynq上进行各项设计的方法。

本书可作为Zynq初学者、软硬件协同设计开发人员的参考用书,亦可作为大专院校嵌入式系统设计、片上系统设计、可编程逻辑器件等相关专业的教师和学生的参考用书。

编辑推荐

推荐购买:《嵌入式系统软硬件协同设计实战指南:基于Xilinx ZYNQ(第2版) 》已出版。

目录

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 文件拷贝(FATEXT)

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 101001000兆网口

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 MIOEMIO

第6章 系统级信号

6.1 电源管理

6.2 Clock信号

6.2.1 CPU时钟域

6.2.2 DDR时钟域

6.2.3 基本的时钟分支结构

6.2.4 IO外设(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的主要升级变化

参考资料

在线预览

第1章 初试ZedBoard

第1章

初试ZedBoard

欢迎大家来到Zynq的世界。对于这个业界首款ARM Cortex A9双核与FPGA紧密融合的全可编程片上系统(All Programmable SoC),大家一定期待已久了吧。那么这款具有颠覆性构架的芯片到底能给我们带来怎样的惊喜呢?本章将通过两个简单的例子,让大家对Zynq的能力有一个大致的认识。还等什么,拿起你的ZedBoard跟我来吧。

1.1 GPIO LED动手玩

通常实验的及时个例子是从如何点亮LED开始,ZedBoard也是这样,但是如果你细心观察,将会发现特殊之处哦。在这个实验中,你需要准备SD卡读卡器,USB-microUSB线。

1.1.1 拷贝SD卡

将ZedBoard中的SD卡拔出,插入PC后格式化。在随书附赠的光盘的第1章中找到BOOT.BIN文件,将其拷贝到SD卡中。卸载SD卡,将其插入到ZedBoard上SD卡插槽中。注意:千万不要重命名BOOT.BIN文件,后面的章节会解释具体原因。

1.1.2 跳线与外设连接

拿起你的ZedBoard,在板卡的右上方你将找到五个跳线帽。它们用于设置ZedBoard的启动模式,在这里我们将五个跳线按图1-1所示进行设置。

媒体评论

前言

平台及写作背景

作为全球的可编程逻辑平台的供应商,Xilinx已将可编程逻辑技术带领到了All Programmable(全可编程)的时代,其产品不仅有的28nm的7系列(分为Artix7,Kintex7,Virtex7)FPGA芯片,更有通过SSI(堆叠硅片互联)技术实现的容量FPGA Virtex7-2000T,同时在FPGA芯片内集成了高速AD以及较高可达28.05Gb/s的高速串行口等可编程逻辑外的模块。对于应用者而言,除了以上工艺的创新外,更具有划时代意义的是Xilinx推出的Zynq-7000 AP SoC芯片,其不仅解决了芯片工艺实现上的难点,更解决了片内高性能处理器与高性能可编程逻辑数据交互协议的难点。

Zynq-7000是首款将高性能ARM Cortex A9硬核与可编程逻辑紧密集成到一起的器件。在Zynq平台中,我们首先可以把可编程逻辑看成是处理器外设中一个具有可重配置特点的"外设",比如当串口或以太网接口不够时、需要视频接口时,都可以用可编程逻辑扩展;其次我们也可将其看成一个与处理器对等的主设备,其可主动完成与外部芯片的数据交互,例如主动进行视频、网络数据预处理。通过这样的结合,既发挥了处理器在处理复杂控制算法、运行操作系统等方面的优势,又利用FPGA在并行算法加速、可动态重配置的特点,实现了系统加速,增加了灵活性;同时基于片内结合的方案,减少了板子面积,降低了功耗,也加快了硬件开发速度。结合Zynq推出,Xilinx不仅在先期将所有IP核接口切换到基于ARM AMBA4.0(AXI4)的标准,实现了逻辑IP与Zynq无缝迁移,同时还推出了C2HDL的高层综合工具AutoESL(目前已集成到的开发套件Vivado中),这加快了已有算法的硬件化过程,同时也使得软件工程师可以在Zynq上独立完成软硬件协同设计。

针对这些新的技术和概念,读者不妨带着这样一些疑问阅读本书:现在有什么开发板可以直接用?ARM+FPGA这样的结构与板载ARM处理器与FPGA芯片的结合到底有哪些区别?ARM与FPGA在一个芯片内到底是如何紧密配合的?互相之间数据交互的接口和方式是怎样的?上电之后ARM和FPGA是如何配置的?利用AutoESL工具到底如何跟Zynq结合?Linux操作系统与FPGA又是如何结合的?这里的驱动如何写?在本书中,将陆续对这些问题进行解答。

从Zynq平台提出伊始,全球各地的客户对这一平台都产生了浓厚的兴趣,Xilinx也于2011年年末正式了Zynq的芯片,在2012年年初就已经有了及时块Zynq开发板ZC702。到了2012年6月份,专为社区用户以及科研、教学用户定制的低价版本ZedBoard板也正式面世。但是对于一个全新的平台来说,可参考的资源相对缺乏。我们从2012年7月份开始在ZedBoard板上进行设计时就已经明显感受到项目进度因缺少参考资源而受到的影响。而到了美信的DIY大赛时,更听到国内用户对参考资料的迫切需求,尤其是相应的中文资料。而2013年1月份采用ZedBoard板作为主要平台的开源硬件与嵌入式大赛——OpenHW12也即将展开。

在这样的背景下,赛灵思大学计划部门决定以最快的速度对我们在这几个月中开发的、参与的、学习的案例进行整理,编写出一本由浅入深、以案例为主的实战类书籍,希望通过这本书能帮助大家尽快了解、熟悉并掌握Zynq的开发。

免责声明

更多相关图书
在线咨询