前 言
嵌入式微处理器系统无处不在,只要看看你的周围就能明白这一点。你会在手机、数字时钟、GPS、摄像机和互联网路由器以及家用电子娱乐设备中找到它们。一辆现代汽车通常会使用50~100个微处理器。嵌入式系统通常会在价格、功耗、内存或存储等资源上受限。一台通用计算机通常要耗费数百瓦的功率,而一个时钟或遥控器只需要耗费微瓦级功率,从而能够靠一节AAA电池运行一年。尽管许多嵌入式系统运行时需要低功耗,但其所实施的算法,像UMTS手机中使用的turbo纠错码,对计算量的要求却很高。不管怎样,今天,嵌入式处理器能够执行复杂的任务并运行相关的复杂算法。一辆汽车中的微处理器估计会使用上亿行代码,其中仅GPS和无线电模块就占了2000万行。
FPGA是开始探索嵌入式系统设计空间的最佳选择,因为它们属于细粒度逻辑可编程的商业现货(Commercial Off The Shelf,COTS)器件,其一次性工程(Non Recurring Engineering,NRE)成本比目前能买到的基于单元(cell)的系统低得多。最新一代的FPGA电路板和设备支持在同一块板卡上使用软核、参数化或硬核微处理器来设计微处理器系统。这些板卡为许多设计提供了很棒的起点,因为板卡上还有大量的外围元件,如音频编解码器、视频HDMI连接器或SD卡。如果你使用的是非FPGA的标准商业现货微处理器系统,要把这些组件纳入项目中就会非常耗时。
在21世纪进入第二个十年之际,我们发现,可编程逻辑器件(Programable Logic Device,PLD)市场的两个领导者(Altera/Intel和Xilinx)的收入都超过了20亿美元。在过去的十年中,FPGA获得了超过20%的稳定增长,比ASIC和PDSP高出10%。这是因为FPGA与ASIC有许多共同的特点,如减少了尺寸、重量和功耗;更高的吞吐量;增强了防止未经授权复制的安全性;更低的器件和库存成本,更少的电路板测试成本;在有些方面,FPGA更胜过了ASIC,如减少了开发时间(快速原型)、具有在线(重新)编程能力和更低的一次性工程成本,从而让少于1000个成品的解决方案的设计更加经济。硬件设计领域的另一个趋势是从图形设计输入(entry)向硬件描述语言(Hardware Description Language,HDL)进行迁移。人们发现,基于HDL的设计输入中的“代码重用”率要比基于图形的高得多。对HDL设计工程师的需求量很大,我们已经见到本科生课程在用HDL教授逻辑设计。如今,有两种流行的HDL语言。美国西海岸和亚洲更喜欢使用Verilog,而美国东海岸和欧洲更经常使用VHDL。尽管由于VHDL-2008支持定点和浮点数据类型,一些使用VHDL进行设计的例子更容易阅读一些,但对于使用FPGA进行的嵌入式微处理器设计,这两种语言似乎都很适合。其他限制因素可能包括个人偏好、EDA库和工具的可用性、可读性、能力和使用编程语言接口(Programming Language Interface,PLI)的语言扩展以及商业、业务和营销问题等,而以上因素也仅是略举几例。如今,工具供应商已经认识到这两种语言都必须得到支持,而本书也涵盖了这两种设计语言的例子。我们现在很幸运,“基准”FPGA工具可以从不同的来源获得,并且对于教学用途来说基本上没有成本。我们在本书中利用了这个条件。书中包含了Altera/Intel Quartus 15.1 Lite Edition以及Xilinx Vivado 2016.4工具可用的代码,后者提供了一套完整的设计工具,涵盖从能感知内容的编辑器、微处理器配置器、编译器、模拟器到比特流生成器。本书展示的所有例子都用VHDL和Verilog编写,也容易移植到其他专有的设计输入系统中。
本书的结构安排如下。第1章首先简要介绍了当今主流的微处理器和基本的微处理器原理,特别是基于FPGA的微处理器。它还包括一个关于用IP块进行设计的概述和一个PLL IP核设计实例。第2章讨论了用于设计当前最先进的FPGA系统的器件、板卡和工具。还讨论了终极RISC(URISC)微处理器的详细案例,包括模型讨论、编译步骤、仿真、性能评估、功率估计以及使用Quartus和Vivado进行的布局规划。这个案例研究是后续章节中许多其他设计实例的基础。第3章和第4章涉及微处理器设计中使用的VHDL和Verilog语言元素。第5章回顾了ANSI C语言,还讨论了调试方法以及与C++的区别。第6章介绍了微处理器的软件工具开发,详述了使用GNU Flex的词法分析和使用GNU Bison的解析器实现。我们为PICOBLAZE微处理器设计了一个汇编器,为三地址机器设计了一个基本的和全功能的C语言编译器,还讨论了指令集模拟器和软件调试器。在第7章中,逐步开发了软核PICOBLAZE,使其增加越来越多的架构特性。我们研究了循环控制和数据存储器的设计并用HDL来实现。第8章全面讨论了最流行的基于FPGA的8位微处理器对应的完整指令集。第9章和第10章讨论了Altera/Intel和Xilinx设备具有的两个最流行的参数化内核,分别称为Nios II和MICROBLAZE。我们开发了一种自顶向下和自底向上的系统设计方法。我们通过为Nios添加浮点数协处理器和为MICROBLAZE 添加HDMI解码器来演示如何将定制IP添加到微处理器中。我们也构建了Tiny RISC版本的处理器,名为TRISC3N和TRISC3MB,它们支持精简指令集并且可以运行通过供应商GCC工具生成的基本程序。第11章讨论了最流行的32位商业现货硬IP处理器核ARM Cortex-A9,它已经包含在Altera/Intel和Xilinx的最新设备中。我们再次展示了自顶向下和自底向上的设计,同时会开发一个Tiny RISC 版本的 TRSC3A,从而展示ARM Cortex-A9为什么在架构上更有优势。我们定制了一个IP以加速FFT地址计算,并测量其速度提升水平。本书的附录A采用在线方式提供,其中包含了可以在Quartus和Vivado中使用的全部5个(小)处理器模型(URISC、TRISC2、TRISC3N、TRISC3MB及TRISC3A)对应的Verilog源代码和xsim仿真。附录B也采用在线方式提供,其中的缩写词列表可供读者快速参考。还有一些额外的文件、HDL语言参考卡片以及实用工具将在GitHub[ 译者注:https://github.com/uwemeyerbaese。]和作者的个人网站[ 译者注:https://web1.eng.famu.fsu.edu/~umb/。]上发布,读者也可通过扫描本书封底的二维码下载。
在此要说明的是,本书采用黑白印刷,书中的彩图以在线方式提供,读者可通过扫描本书封底的二维码下载。
致 谢
本书的编写基于我自2003年以来在位于塔拉哈西市的佛罗里达农工大学——佛罗里达州立大学工程学院开设的嵌入式微处理器系统设计课程。在过去的17年里,我指导了60多位硕士和博士的论文项目。我希望感谢所有在实验室和会议上帮助我进行过关键性讨论的同事们以及用他们的设计想法启发过我的学生们,其中的一些设计想法会在第9、10和11章中讨论。
我特别感谢我在格拉纳达大学的朋友和同事,我从1998年起就有幸与他们一起工作,并在2014年夏天到西班牙拜访他们。他们最近帮助我的实验室开始了对FECG(胎儿心电图)分析的研究。特别感谢A. Garcia、E. Castillo、L. Parrilla、A. Lloris和J. Ramírez。
我想感谢2015年夏季我在德国卡塞尔大学进行研究访问时的同事们,感谢他们在Vivado Xilinx设计和ZyBo板方面对我提供的大力支持。特别感谢P. Zipf、M. Kumm和K. Möller。
特别感谢Francesco Poderico对我的信任,让我继续在他的PCCOMP编译器上提供对PICOBLAZE的支持。
我要感谢亚琛高等理工学院国际空间站的同事们,在2006年和2008年暑期我受洪堡奖资助赴德国研究期间,他们花了很多时间和精力教我进行LISA和C编译器设计。特别感谢H. Meyr、G. Ascheid、R. Leupers、D. Kammler和M. Witte。
我尤其要感谢来自马德里大学的Guillermo Botella和Diego Gonzalez,感谢他们在图像和视频处理应用中提供的帮助。
我想感谢来自Altera/Intel和Xilinx的Rebecca Nevin、B. Esposito、M. Phipps、A. Vera、M. Pattichis 在软硬件方面提供的支持。我要感谢出版方(Spring-Verlag)的Charles Glaser 和Merkle博士近年来给予我的持续支持和帮助。
如果读者发现任何错误或者有任何改进建议,请通过出版方联系我。
Uwe Meyer-Baese
美国佛罗里达州塔拉哈西市
2020年4月