第2版前言
平台及写作背景
作为全球最大的可编程逻辑平台供应商,Xilinx已将可编程逻辑技术带领到了All Programmable(全可编程)的时代,其产品不仅有最新的28nm的7系列(分为Artix7、Kintex7、Virtex7)FPGA芯片,更有通过SSI(堆叠硅片互联)技术实现的最大容量FPGA Virtex7-2000T,同时在FPGA芯片内集成了高速AD以及最高可达28.05Gb/s的高速串行口等可编程逻辑外的模块。对于应用者而言,除了以上工艺的创新外,更具有划时代意义的是Xilinx推出的Zynq-7000AP 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的开发。
阅读提示
本书分为基础篇和进阶篇两部分。
基础篇中主要介绍了ZedBoard开发板、Zynq器件、开发工具链、Zynq的体系结构及启动过程等基本的器件与板卡情况,同时考虑了软件工程师的知识结构,在第8章中介绍了FPGA的原理,以及硬件加速的原理,便于软件工程师理解FPGA。在第9章中通过基础实验带领大家浅尝Zynq的开发过程,并带领大家用ZedBoard板搭建出一个单板计算机系统。
进阶篇中,首先介绍了利用虚拟平台QEMU进行软件开发的流程,在第11章中详细分析了Zynq中处理器与硬件逻辑的连接关系。第12章主要介绍了在Zynq上利用HLS进行软硬件协同设计的理念与过程。第13章占了全书四分之一的篇幅,介绍了使用Zynq实现逻辑、驱动、操作系统、高清视频显示、OpenCV、网络摄像机等12个应用案例,这是本书的精华之一。在第14章,将13章中提到的独立案例再融合成4个系统案例,这4个系统案例都会应用到前述章节的知识,以此帮助大家尽快掌握在Zynq上进行系统级设计的方法。
笔者在这些年支持客户的过程中,常常会发现客户困扰于不知如何寻找到Xilinx相关工具、IP的参考文档、参考设计。因此本书第15章中主要介绍了如何获取资料和帮助,重点介绍了Xilinx新推出的DocNav工具,希望能帮助初学者迅速找到Xilinx资料。
在本书案例开发与写作的过程中,Xilinx的工具已升级到了更新的2014.1版本,但是本书的很多案例是基于2013.4版本的,部分案例由于时间的关系仍然沿用ISE版本的,不过我们会很快将工程更新到Vivado版本。
作为ZedBoard板这样一个社区开发平台的设计指南,本书秉承了来源于社区回馈于社区的理念,书中所有参考设计均开放源码,读者可通过访问https://github.com/xupsh/ZynqBook.git(GitHub)或http://pan.baidu.com/S/leQj6buM(网盘)获取相关信息。同时本书的勘误以及工程更新都将在该网址上给出,另外,我们在http://www.openhw.org的论坛中设有“大学计划图书讨论专版”,读者可在此讨论区中找到本书对应版面,下载代码,对书稿、案例开展讨论。本书最后一个案例为智能小车项目,这是机器人开源社区www.zrobot.org中的第一个项目。智能小车平台后续相关的拓展案例,以及其他机器人案例均会通过该社区开源代码,并同步更新,请大家关注该社区的发展,积极参与到社区的项目中来。
致谢
本书的写作也体现了社区的力量,本书得到国内各大著名院校以及工程师的支持:
1)清华大学的刘勇攀教授、李双辰和我们一起完成了第12章的软硬件协同设计。
2)华中科技大学的何顶新教授、任蔚博士、牛盼情和我们一起完成了第14章中的电机控制系统设计及其初稿写作,而方华启帮助我们完成了智能小车演示中Android客户端的开发演示。
3)上海交通大学的祝永新教授、辜晓琪与我们一起完成了OpenCV的人脸识别案例及其初稿写作。
4)山东大学的彭竞宇、沈瓒君与我们一起完成了树叶识别案例及其初稿写作。
5)西安交通大学吕敏杰博士整理出了HDMI显示开发过程供大家参考。
6)西安电子科技大学的雷杰副教授、徐建国也给了我们在Zynq上实现Lwip的有益参考。
7)本书也邀请到了爱板网(eeboard)的主编吴志军先生为我们撰写了第3章中的ZedBoard板的介绍,智翔集团的徐晨辉和我们一起完成了第4章的撰写,并在Webcam开发过程中给予了帮助。
8)Xilinx高级战略应用工程师Ricky Su专门为本书更新了他的博客“Xilinx网站资源导读”,以帮助读者寻找Xilinx的资料,本书第15.3节就取自于他的博客。
同时北京工业大学的林超、胡嘉欣、唐锟、黄少辉协助我们完成了部分图表、文字的更新。非常感谢以上课题组及相关人员给予的无私帮助和支持,因为有了他们,我们才可以在短短3个月内完成初稿,相信大家在后续的章节阅读中会从他们参与的项目中大大获益。
西安交通大学的孙宏滨副教授通读了本书,并提出了很多宝贵的意见。Xilinx的很多合作伙伴都对这本书给予了很高的关注与支持,他们也对本书进行了点评与指导,在此一并感谢。
为了参考案例与本书的尽快面世,两位实习生马岷和江舟牺牲了大量业余时间,在此对他们以及他们女友的默默支持一并表示感谢,希望这段经历能成为他们今后美好的回忆。也要感谢机械工业出版社张国强编辑在本书写作与出版的过程中给予的大力支持和指导。更要感谢我的爱人吴幸博士,在我业余时间写作这本书时给予我全力的支持和关心。
本书主要作者的背景还是以硬件为主,因此本书虽为软硬件协同设计,但总体写作思路还是从硬件工程师的视角出发,如有不妥之处,请读者谅解。在本书创作初期,我们期望能出一本经典参考案例书籍,但理想与现实总有些许差距,例如与新加坡国立大学合作的足球项目在这一版中就无法与读者见面,甚是遗憾。同时因为时间关系,书中文字和实验内容会有欠斟酌和不完美的地方,甚至有错误的地方,恳请专家和读者不吝赐教,以便在适当时间再做修订补充。请读者将反馈意见发送至joshua.lu@xilinx.com与作者进一步交流。
陆佳华
2014年5月18日于上海