图书简介: 《FPGA嵌入式系统设计原理与实践》的目的是向读者介绍平台FPGA的系统开发。它主要关注的是嵌入式系统,但是也可以作为构建自定义计算系统的通用指南。本书描述了指导平台FPGA系统开发的硬件、软件以及一系列设计原理的基本技术。指导读者系统地和有创造性地应用这些原理构建专用的嵌入式系统架构。同时也特别关注了免费开源软件,以提高生产率。
Xilinx公司在1984年推出了一款高级的可编程逻辑器件,现场可编程门阵列(Field- Programmable Gate Array,FPGA)。现在FPGA已经形成了数十亿的市场规模,开发的产品种类繁多,从数码相机、汽车,到驱动因特网的网络交换机;FPGA甚至飞向了火星(Ratter, 2004)。 几乎从FPGA推出之始,人们就认识到了使用这些器件构建自定义的计算架构的潜力,但是迄今为止市场上的绝大多数器件是“胶合逻辑”和原型机。不过,技术的进步已经使得现代FPGA芯片具有非常大的容量以及各种各样的特性。这些特性的汇集--?包括多个处理器、大量存储器、数百个乘法器以及高速I/O--?已经达到这样一个临界点:平台FPGA比以往任何时候都有望在计算系统中发挥更为突出的作用。 可在单个FPGA器件上部署复杂计算系统的能力,很有可能对嵌入式计算系统产生巨大的影响。虽然小型的(实际上是微型)8位或16位计算系统仍然并且将会在嵌入式系统市场上占据一席之地,但过去几年的趋势表明嵌入式系统使用标准的现成的32位处理器也方兴未艾。这些更为高端的嵌入式系统在更高层次进行了集成,通常在(固定和制造)的芯片上已经纳入了嵌入式系统的相当一部分元件。该层次的集成益处众多,但是其中一个显着的缺点是有太多的系统架构被预先设定,这可能对于特定目标的应用程序来说并非是最优的。而替代方案,即在自定义的片上系统(System-on-a-Chip,SoC)中开发系统架构则过于昂贵,除非是用于大容量(百万单元级)的产品。当应用程序与所提供的资源相匹配时,那么一切安好。但事实往往并非如此:一些集成的资源被废置,而需要增加额外零散的硬件以弥补其不足来实现应用程序。有了平台FPGA,工程师们可以获得集成所带来的全部好处,同时也能够根据每一个应用程序,灵活地开发一个均衡的系统架构。 平台FPGA配置了多种总线、各种直接通信链接、桥、I/O元件以及琳琅满目的其他专用IP核,设计者可以随时自定义系统架构。例如,设计者可以使用数百个分布式块RAM来配置一个大型的可访问存储器,而将RAM作为独立缓存分布于系统各处;或者也可以设计一些两两组合的RAM;还可以设计专用功能模块(即自定义硬核)。尽管专用集成电路(ASIC)的性能通常优于相同架构的FPGA实现,但是较之ASIC的制造,基于FPGA的解决方案避免了昂贵的资源、需要承担的潜在风险以及上市的时间等问题。FPGA是一个虚拟的白板,使得工程师在对物理器件进行制造、测试以及验证之后,能够分配资源以最佳匹配应用程序。这样的灵活性提高了系统解决方案的效率,节省下来的每个离散元件都会降低成本,同时增加可靠性。 当然,这种硬件的强大灵活性也要付出代价。除了了解编译器、调试器以及其他用于基于处理器的嵌入式系统开发的传统软件工具以外,平台FPGA设计者还必须熟练掌握对硬件设计、综合和系统集成工具的使用。以前,架构的选择在很大程度上制约了设计者所能做出的决定--?例如,如何在硬件和软件之间划分应用程序--?而现在却有了充分的空间来提出解决方案。在理解特定处理器系统总线的特性之外,设计者还必须权衡多个通信机制之间的优势和劣势。对于熟悉在预先设定架构上工作的设计者来说,均衡片上元件组成的复杂网络是一个新的挑战。 这些挑战在很多方面体现了计算机工程的特点。然而直到平台FPGA的出现,这一挑战带来的实际问题(例如构建自定义芯片解决方案的代价问题)一直使得着手研究代价高昂。学生过去只是从教科书和概念模型中了解计算机系统架构,因此彻底地了解开发自定义计算机系统的实践环节则只局限于少数专业人士。知识和实践工具--?例如,如何创建嵌入式系统的板级支持包--?只是在用到的时候才开始接触。 本书的目的是向读者介绍平台FPGA的系统开发。它主要关注的是嵌入式系统,但是也可以作为构建自定义计算系统的通用指南。本书描述了指导平台FPGA系统开发的硬件、软件以及一系列设计原理的基本技术。其目标是表明如何系统地和有创造性地应用这些原理构建专用的嵌入式系统架构。同时也特别关注了免费开源软件,以提高生产率。 本书每一章节的组织结构都包括两部分:白色页面描述的是基本概念、原理以及常识;灰色页面则包括本章主要问题的技术实践,并且展示了应用于实践的概念,这包括对特定开发板和工具集的逐步详述,以便读者能够自己完成同样的步骤。本书并不试图在种类不同的开发板和工具链上示范这些概念,而是通篇只使用单个工具集(Xilinx Platform Studio、Linux和GNU)以及在示例中使用的开发板(Xilinx ML-510)。相信对于读者来说,完整地描述单个系统比部分地描述各种系统更有价值。 如何阅读本书 本书的编写是为了让不同的读者更快捷地找到所需要的信息。如果您是只有软件背景而没有参加过任何电子方面的课程的本科生,那么第2章白色页面的开始部分介绍了晶体管和FPGA(一种固态器件)实现可编程硬件的基本知识。如果您是在嵌入式系统方面经验丰富而对FPGA缺乏了解的工程师,那么只需阅读灰色页面,可以跳过理论部分而直接进入实践层面,在FPGA上构建基于Linux的系统。如果您是参加过高级设计课程的学生,那么学习的重点可能是项目管理,您可能不会在此找到过多的资料,但是您会发现本书是完成项目的一个方便且实用的指南。另一方面,如果您有一个涉及尖端技术的非常具体的项目,那么本书可能没有以足够的深度涵盖这一特定的主题。不过如果您想入门,需要纵览一般性的概念,同时希望有足够的逐步指导来实现一个真实的工作系统,那么本书是您的最佳选择! 给教师的建议 本书在不同的计算机课程中可以扮演不同的角色。在很多院系中,嵌入式系统课程是高年级学生的技术选修课。该课程的主要内容是花费一个学期的时间讲述内容繁多的技术工程中的细节。本书是学习嵌入式系统内容的入门经典--?因为它给学生提供了实现其项目所需的所有实践资料--?教师可以根据情况在课堂上选择一些内容讲授。对于介绍嵌入式系统特定领域的课程(包括多种技术类的选修课程)来说,本书可以用于可重构计算的课程。该课程是对深入理解嵌入式系统的一个补充,其内容全面,包括小型系统以及实时问题的扩展描述。IEEE-CS/ACM联合工作组计算机课程分组(Ironman草案)将计算机工程基本元件作为“终极课程”。通常这在当今的课程中是作为高级设计或者毕业课程设计的。严格来说,该课程贯穿了上述课程计划中要求的独立的主题,有助于将学生的学术理论与职业生涯联系起来。FPGA在该类课程中与其他技术相得益彰,并且经常被用到。其灵活地支持各种工程,同时这些工程中也必然包含软件和硬件元件:这是计算机工程的精髓。因此,在本书中,许多教师会为“终极课程”的学生找到非常优秀的资源。 在线资料 本书所参考的命令、脚本以及URL链接都可以在正文中找到。不过,为方便读者学习,出版商维护了一个网站来提供所有这些资料,包括因内容太长而无法在本书中插入的脚本。除了提供本书使用的开源软件的最新版本的链接之外,该网站还归档了其确切的(确知有效的)软件版本号。 参考文献 [1] Ratter,D. (2004)。 FPGAs onMars.Xcell Journal, Q3(50), 8-11。