《fpga嵌入式系统设计原理与实践》
第1章 简介 1
1.1 嵌入式系统 3
1.1.1 嵌入式系统和通用计算机 4
1.1.2 硬件、软件和fpga 5
1.1.3 执行模型 5
1.2 设计的挑战 8
1.2.1 设计生命周期 8
1.2.2 成功的度量 9
1.2.3 成本 12
1.3 平台fpga 15
1.a 光谱仪示例 17
1.a.1 场景 18
1.a.2 两种解决方案 18
1.a.3 讨论 19
1.b 平台fpga工具链简介 20
1.b.1 xilinx platform studio入门 21
1.b.2 使用xilinx平台工作室 22
习题 32
参考文献 33
.第2章 目标 35
2.1 cmos晶体管 36
2.2 可编程逻辑器件 38
2.3 现场可编程门阵列 40
2.3.1 函数发生器 40
2.3.2 存储元件 41
2.3.3 逻辑单元 42
2.3.4 逻辑块 42
2.3.5 输入/输出块 42
2.3.6 特殊用途功能块 43
2.4 硬件描述语言 46
2.4.1 vhdl 46
2.4.2 verilog 54
2.4.3 其他高级hdl 59
2.5 从hdl到配置位流 59
2.a xilinx virtex 5 64
2.a.1 查找表 65
2.a.2 slice 65
2.a.3 可配置逻辑块 66
2.a.4 块ram 67
2.a.5 dsp slice 67
2.a.6 选择i/o 68
2.a.7 高速串口收发器 69
2.a.8 时钟 69
2.a.9 powerpc 440 70
2.b xilinx集成软件环境 71
2.c 创建和生成自定义ip 77
2.c.1 xilinx核生成器 77
2.c.2 创建/导入外设向导 81
2.c.3 硬核项目目录 87
习题 89
参考文献 90
第3章 系统设计 93
3.1 系统设计的准则 94
3.1.1 设计质量 94
3.1.2 模块和接口 96
3.1.3 抽象和状态 99
3.1.4 内聚和耦合 100
3.1.5 设计可重用元件 102
3.2 控制流图 103
3.3 硬件设计 105
3.3.1 平台fpga的起源 105
3.3.2 平台fpga元件 107
3.3.3 完善平台fpga系统 112
3.3.4 装配自定义计算核 114
3.4 软件设计 120
3.4.1 系统软件选项 120
3.4.2 根文件系统 122
3.4.3 交叉开发工具 123
3.4.4 监视器和引导程序 123
3.a 平台fpga架构设计 126
3.a.1 关联xilinx edk
和ibm核 126
3.a.2 构建基本系统 130
3.a.3 增强基本系统 130
3.a.4 xps项目文件 131
3.a.5 实践示例:浮点加法器 133
3.a.6 基本系统 133
3.a.7 创建和导入外设向导 133
3.a.8 核发生器 134
3.a.9 用户逻辑 135
3.a.10 修改硬核项目文件 139
3.a.11 基本系统的硬核连接 140
3.a.12 测试系统 140
3.b 嵌入式gnu/linux系统 142
3.b.1 unix文件系统的组织
结构 142
3.b.2 配置软件和工具 144
3.b.3 交叉开发工具和库 148
3.b.4 交叉编译linux 151
3.b.5 建立根文件系统 154
3.b.6 在ml510开发板上启动
linux 156
习题 157
参考文献 158
第4章 划分 161
4.1 划分问题概述 162
4.1.1 配置简档表 163
4.1.2 性能分析 164
4.1.3 实际应用 164
4.2 划分问题的分析法解决方案 164
4.2.1 基本定义 165
4.2.2 期望性能增益 167
4.2.3 资源的考虑 168
4.2.4 分析方法 169
4.3 通信 171
4.3.1 调用/协调 173
4.3.2 状态转移 176
4.4 实践问题 180
4.4.1 分析问题 180
4.4.2 数据结构 182
4.4.3 操作特征大小 183
4.a 使用gprof调试 184
4.b linux内核 188
4.b.1 内核模块 188
4.b.2 地址空间 190
4.b.3 应用程序视图 192
4.b.4 字符型设备驱动器 193
4.b.5 总结 195
习题 195
参考文献 198
第5章 空间设计 199
5.1 并行的原理 200
5.1.1 并行粒度 201
5.1.2 并行度 202
5.1.3 空间组织结构 203
5.2 确认并行性 207
5.2.1 排序 208
5.2.2 依赖性 208
5.2.3 一致依赖向量 212
5.3 平台fpga的空间并行 214
5.3.1 fpga硬核中的并行 215
5.3.2 fpga设计中的并行 219
5.a 有益于空间设计的vhdl
探讨 220
5.a.1 常量和类属 220
5.a.2 用户定义类型 221
5.a.3 生成语句 223
5.a.4 设计约束 224
5.b 调试平台fpga设计 225
5.b.1 仿真 225
5.b.2 软件可访问寄存器 228
5.b.3 xilinx chipscope 229
习题 235
参考文献 236
第6章 带宽管理 237
6.1 均衡带宽 238
6.1.1 kahn处理网络 239
6.1.2 同步设计 241
6.1.3 异步设计 241
6.2 平台fpga带宽技术 241
6.2.1 片上和片外存储器 242
6.2.2 流式仪表数据 250
6.2.3 实际问题 252
6.3 可扩展性设计 253
6.3.1 可扩展性约束 253
6.3.2 可扩展性解决方案 256
6.a 片上存储器访问 259
6.a.1 fifo 259
6.a.2 块ram 260
6.a.3 本地链接接口 261
6.b 片外存储器访问 263
6.b.1 可编程i/o 263
6.b.2 中央dma控制器 263
6.b.3 总线主控装置 265
6.b.4 本地端口接口 270
习题 277
参考文献 277
第7章 外围世界 279
7.1 点对点通信 280
7.1.1 rs-232串口通信协议 280
7.1.2 其他低速通信 281
7.2 互联网络通信 281
7.2.1 概念 281
7.2.2 应用程序接口 284
7.2.3 高层协议 287
7.2.4 操作系统配置 290
7.a 高速串口通信 291
7.a.1 rocket io 291
7.a.2 aurora示例 292
7.a.3 本地链接接口 293
7.a.4 时钟修正 293
7.a.5 误差测试 294
7.a.6 环回 294
7.b 低速通信 294
7.b.1 生成硬件基本系统 294
7.b.2 设计测试 299
习题 299
参考文献 300
术语表 301
前言
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在该类课程中与其他技术相得益彰,并且经常被用到。其灵活地支持各种工程,同时这些工程中也必然包含软件和硬件元件:这是计算机工程的精髓。因此,在本书中,许多教师会为“终极课程”的学生找到非常优秀的资源。
· · · · · · (
收起)