● 深入剖析软核、参数化核心和硬核系统的设计优劣,助力读者根据项目需求做出最佳选择。
● 逐步演示经典8位KCPSM6 微处理器的设计流程。
● 探讨32位ARM Cortex-A9架构精髓,并演示基本处理器的综合实现方法。
● 涵盖Altera/Intel Nios II与Xilinx MicroBlaze两大主流FPGA平台的设计流程,拓宽读者技术视野。
● 描述编译器-编译器开发工具链的构建方法,满足高级开发需求。
● 每章均配备大量习题、FPGA练习和设计项目,强化理论与实践相结合。
《FPGA嵌入式微处理器系统设计》是嵌入式系统课程的理想教材,通过丰富的动手实践项目,使读者在实践中掌握核心技术。书中使用Altera/Intel和Xilinx两大厂商的最新开发板、工具和微处理器,为基于FPGA的微处理器系统设计提供了极佳的入门指南。本书深入讨论、比较并探索了HDL设计(软核)、参数化核心(如Nios II和MicroBlaze)以及ARM Cortex-A9设计,并通过动手设计项目进行实践。书中还开发、实现并测试了HDMI编码器、浮点运算和FFT位交换等自定义IP核,并对其速度提升进行了量化。本书配套资源丰富,提供所有设计示例的下载文件,涵盖针对Xilinx和Altera工具的基本处理器可综合代码(支持PicoBlaze、MicroBlaze、Nios II及ARMv7架构的VHDL/Verilog实现),以及完整的自定义IP项目。每章均配有大量精编的简答题、练习题和项目挑战,助力读者巩固知识、提升技能。
嵌入式微处理器系统无处不在,只要看看你的周围就能明白这一点。你会在手机、数字时钟、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/。]上发布,读者也可通过扫描本书封底的二维码下载。
在此要说明的是,本书采用黑白印刷,书中的彩图以在线方式提供,读者可通过扫描本书封底的二维码下载。
第1章 嵌入式微处理器系统基础 1
1.1 引言 1
1.2 FPGA上的嵌入式微处理器 6
1.3 微处理器指令集设计 7
1.4 FPGA技术 20
1.5 使用知识产权核的设计 27
1.6 复习题和练习 33
第2章 FPGA器件、板卡和设计工具 37
2.1 引言 37
2.2 原型板卡的选择 40
2.2.1 存储器 42
2.2.2 基本I/O组件 42
2.2.3 显示选项 43
2.2.4 模拟接口 45
2.2.5 通信 48
2.3 FPGA结构 52
2.3.1 Xilinx FPGA架构概述 52
2.3.2 Altera FPGA架构概述 55
2.4 案例研究:名为URISC的PSM 60
2.4.1 URISC处理器模型 60
2.4.2 Altera Quartus设计编译 65
2.4.3 Xilinx Vivado设计编译 67
2.4.4 用于仿真的设计工具考虑 68
2.4.5 Qivado布图规划 74
2.4.6 Vivado布图规划 75
2.4.7 时序估计和性能分析 76
2.5 复习题和练习 78
第3章 用VHDL设计微处理器组件 81
3.1 引言 81
3.2 词法元素 82
3.3 运算符与赋值 86
3.4 数据类型、数据对象和属性 87
3.4.1 VHDL数据类型 87
3.4.2 转换函数 89
3.4.3 属性 89
3.4.4 数据对象 90
3.5 VHDL语句和设计编码建议 90
3.5.1 组合逻辑编码建议 92
3.5.2 基本时序电路编码:触发器和锁存器 94
3.5.3 存储器 95
3.5.4 有限状态机 95
3.5.5 设计层次结构和组件 97
3.5.6 VHDL编码风格、资源和常见错误 97
3.6 延伸阅读 98
3.7 复习题和练习 99
第4章 用Verilog设计微处理器组件 111
4.1 引言 111
4.2 词法元素 112
4.3 运算符与赋值 115
4.4 数据类型和值集 117
4.4.1 Verilog值集 117
4.4.2 Verilog数据类型 117
4.5 Verilog语句和设计编码建议 119
4.5.1 组合逻辑编码建议 121
4.5.2 基本顺序电路编码:触发器和锁存器 123
4.5.3 存储器 123
4.5.4 有限状态机 125
4.5.5 设计层次和组件 126
4.5.6 Verilog编码风格、资源和常见错误 126
4.6 延伸阅读 128
4.7 复习题和练习 129
第5章 用C/C 进行微处理器编程 139
5.1 引言 139
5.2 词法元素 140
5.3 数据类型、数据属性和储存类 145
5.4 C运算符和赋值 147
5.5 控制流构件 150
5.6 代码层级和I/O 152
5.7 额外的考虑和推荐 157
5.8 延伸阅读 166
5.9 复习题和练习 167
第6章 嵌入式微处理器系统中的软件工具 175
6.1 引言 175
6.2 汇编器开发和词法分析 176
6.3 解析器开发 186
6.4 软件调试器和指令集仿真器 197
6.5 复习题和练习 198
第7章 PicoBlaze软核微处理器的设计 203
7.1 引言 203
7.2 KCPSM6指令集概况 206
7.3 初始PicoBlaze可综合架构 209
7.4 带有便签存储器的PicoBlaze可综合设计 214
7.5 带有链接控制的PicoBlaze 可综合架构 216
7.6 复习题和练习 225
第8章 PicoBlaze软核微处理器中的软件工具 229
8.1 引言 229
8.2 KCPSM6汇编器 230
8.3 PicoBlaze指令集仿真器 235
8.4 支持PicoBlaze的C编译器 236
8.5 复习题和练习 244
第9章 Altera Nios嵌入式微处理器 247
9.1 引言 247
9.2 自顶向下的Nios II系统设计 250
9.3 自底向上的Nios II系统设计 254
9.4 定制指令的Nios II系统设计 262
9.5 深入了解:Nios II指令集架构 282
9.6 复习题和练习 299
第10章 Xilinx MicroBlaze嵌入式微处理器 307
10.1 引言 307
10.2 自顶向下的MicroBlaze系统设计 308
10.3 自底向上的MicroBlaze系统设计 310
10.4 定制指令的MicroBlaze系统设计 316
10.4.1 DVI和HDMI显示选项实现 316
10.4.2 TMDS编码和解码 317
10.4.3 HDMI编码器 322
10.4.4 文本终端和字体设计 323
10.4.5 HDL实现的HDMI编码器 327
10.4.6 HDMI编码器的CIP接口 333
10.4.7 HDMI编码器的综合结果 338
10.5 深入了解:MicroBlaze指令集架构 338
10.5.1 HDL实现和测试 350
10.5.2 综合结果和ISA经验教训 359
10.6 复习题和练习 360
第11章 ARM Cortex-A9嵌入式微处理器 369
11.1 引言 369
11.2 自顶向下的ARM系统设计 371
11.3 自底向上的ARM系统设计 376
11.4 定制指令的ARM系统设计 381
11.5 深入了解:ARMv7指令集架构 387
11.6 复习题和练习 410
以下内容在线提供
附录A Verilog源代码和Xilinx Vivado仿真
附录B 缩写词列表
参考文献