点菜式嵌入式系统

作者:Peter Ryser

有多少次您遇到过这样的问题:在规格制定阶段完成后,您根本找不到具有所需类型和外围设备数量的匹配微处理器?有多少次您发现对于最接近的匹配微处理器,没有可用的 Linux 端口?将设计和调试系统所需的所有工具组合在一起有多困难?您花了多少时间来解决所有这些问题?无论如何,放松一下!Virtex-II Pro FPGA 系列和相应的工具,结合 MontaVista Linux 操作系统和开发环境,使您能够点菜式地选择您的系统,并节省您大量的时间和精力。

Virtex-II Pro FPGA 系列在一个可编程平台芯片上提供多达四个硬核 PowerPC 405 处理器、16 个 Rocket I/O 3.125Gbps 串行收发器、3.8Mb 的块 RAM (BRAM) 和四百万个系统门。这种丰富的功能集为广泛的应用领域打开了大门,并为系统设计人员提供了高度的灵活性。具有任意数量和类型的 I/O 设备的单芯片系统是可能的。例如,您可以拥有五个 UART、一个 PCI 总线和几个千兆以太网端口,所有这些都由片上处理器控制。

Xilinx 与 IBM 的合作引入了对硬核 PPC405、稳健的总线标准和器件制造工艺的支持。Xilinx 为 Virtex-II Pro FPGA 提供了各种知识产权 (IP) 核,这些 IP 核是预定义的硬件块,可以直接嵌入到 IBM 的 CoreConnect 总线技术中(图 1)。

Embedded System àla Carte

图 1. 连接到 CoreConnect 的 IP 核

CoreConnect 具有多种功能,可以将处理器互连到 FPGA 结构中,以构建系统设计。CoreConnect 的关键特性是面向应用的系统总线,包括处理器本地总线 (PLB)、片上外围总线 (OPB) 和设备控制寄存器 (DCR) 总线。选定的 IP 核包括多种形式的 I/O 和外部存储器控制器。对于 I/O,核包括 16450 和 16550 兼容的 UART、IIC 控制器和 SPI 控制器。存储器控制器包括对 SRAM/FLASH、SDRAM、DDR SDRAM 和 ZBT 设备的支持。更复杂的系统级 I/O 也以 IP 核的形式提供:PCI 核、10/100 Mb 以太网、Gb 以太网和 System ACE 配置接口。每个核都附带相应的驱动程序(如果适用)。驱动程序以源代码形式发布。

功能强大的软件设计工具可以帮助用户利用处理器、IP 核以及更广泛的 FPGA,这里将更详细地介绍。这种硬件和软件的交互对于 Virtex-II Pro FPGA 来说是独一无二的,因为它可以在单个芯片上实现完全定制的嵌入式系统解决方案的设计。硬件/软件协同设计的问题包括使用功能强大的嵌入式 Linux 应用软件工具和一些独特的嵌入式调试工具。在深入探讨协同设计问题之前,让我们更深入地了解 Virtex-II Pro FPGA 的内部结构。

PowerPC 405 处理器以 300+ MHz 的频率运行,每个处理器都具有 16KB 的数据缓存和 16KB 的指令缓存。PLB 和 OPB 总线以 100+ MHz 的频率运行。Virtex-II Pro FPGA 的一个强大功能是片上存储器 (OCM) 的实现。OCM 是具有与处理器缓存相似的访问特性的存储器,但由用户管理。Virtex-II Pro FPGA 将 OCM 实现为双端口 BRAM,从而允许从外围设备到处理器的极快速数据路径,或作为处理器之间的通信缓冲区。

Rocket I/O 3.125Gbps 串行收发器支持多种不同的通信标准,如表 1 所示。诸如缓冲器、8B/10B 编码和解码以及 CRC 计算和校验等重要功能在芯片上实现,不会占用 FPGA 结构的任何空间。

表 1. Virtex-II Pro 平台 FPGA 支持这些协议和波特率。

BRAM 可以用作处理器可访问的存储器,并且可以连接到 CoreConnect 或作为 OCM。虽然 OCM 提供更好的性能和直接连接到处理器的方式,但将 BRAM 连接到 PLB 使其可用于 DMA 传输,而无需处理器参与。系统设计人员可以决定如何最好地使用 BRAM。

FPGA 结构可以填充来自 Xilinx 的 IP 核或用户指定的设计。虽然某些 IP 核彼此交互,但其他 IP 核完全并行工作。

由于 FPGA 可以动态重新配置,您甚至可以在系统运行时切换设备的数量和类型。如此灵活的平台需要功能强大的操作系统以及供硬件和软件工程师开发和调试其嵌入式应用程序的工具。

根据其应用,用户可以从各种 COTS(商用现货)实时操作系统、专有 RTOS 或嵌入式 Linux 环境中进行选择。在 Linux 领域,Xilinx 选择 MontaVista Linux 作为 Virtex-II Pro FPGA 系列的合适嵌入式操作系统和开发环境,因为它具有极高的通用性。默认情况下,Linux 支持各种设备。Xilinx 和 MontaVista Software 选择使用分层设备驱动程序方法。它分为一个低级、OS 独立的层,该层直接在硬件上设置,以及一个 OS 特定的适配层,该层位于 OS 和低级驱动程序之间。Xilinx 提供为优化性能和充分利用 IP 核功能而编写的低级驱动程序。MontaVista Software 为 Linux 实现了适配层,并利用其专业知识实现了驱动程序的无缝集成。两个驱动程序层都被推送到开源存储库中,并根据 GPL(通用公共许可证)发布。所有设备驱动程序都可以编译到内核中,也可以作为可加载模块提供。能够加载和卸载驱动程序模块支持可以在系统运行时重新配置的硬件。在运行的系统中更换硬件对于 USB 设备和 PC 卡等外部设备来说是一个众所周知的过程,但在芯片上更换硬件并动态加载相应的 Linux 驱动程序则是全新的事物。

Linux 端口首先针对 Xilinx 的 Virtex-II Pro ML300 平台(如图 2 所示),并且它支持此板上的大多数 IP 核和硬件。由于 ML300 是一款功能完善的板,用户和客户可以轻松地将端口适配到他们自己的特定硬件。MontaVista Software 为此类项目提供专业支持。

Embedded System àla Carte

图 2. Virtex-II Pro ML300 平台 — 底视图

尽管如此,硬件和软件工程师仍然需要功能强大的工具来开发、启动和调试他们的系统。借助 System Generator for Processors、GDB/XMD、System ACE 和 ChipScope Pro,Xilinx 拥有用于硬件、软件和系统工程所有方面的完整工具套件。

System Generator for Processors (SGP) 帮助您在硬件和软件方面共同设计 Virtex-II Pro FPGA。在用户友好的对话框中,您可以指定系统的所有参数,例如外围设备的基本地址、要使用的中断和存在的内存量。结果,SGP 发出硬件设计文件,这些文件已准备好用于 FPGA 实现或仿真,以及一个参数文件,该文件在构建 Linux 内核和创建相应的驱动程序模块时使用。清单 1 显示了参数文件的摘录。在本例中,用户分配了参数来配置系统中的中断控制器。

清单 1. 用于配置设备驱动程序的参数文件摘录

SGP 使系统架构师可以灵活地研究其新嵌入式系统的不同选项和变体。将参数设置为不同的值可以根据特定要求定制硬件和软件。系统中仅包含将被访问和使用的功能;其他功能将从设计中剥离。此外,设备预先配置了默认参数。因此,硬件和软件占用更少的空间,提供更好的性能,并且初始化过程更加简单(在某些情况下甚至不需要)。SGP 及其配套工具使用开放接口,这使得用户可以轻松地添加自己的硬件功能和软件驱动程序。XMD 是一个调试服务器,它使用片上调试 (OCD) 协议与主机系统上的 GDB 通信。它通过 Virtex-II Pro FPGA 中处理器的 JTAG 端口控制目标系统。同时,XMD 服务于多个 GDB。因此,可以同时调试多个处理器。更具体地说,可以同时调试一个 Virtex-II Pro FPGA 中的所有四个处理器。在 Linux 上,GDB 在命令行上运行,或使用不同的前端之一运行。它在编译时支持 Insight GUI,但也可以与 DDD 和 Emacs 一起使用。

在 GDB 中,添加了 PPC405 架构,并且扩展了“target ocd”命令以支持 Virtex-II Pro FPGA 的所有功能。因此,PPC405 的所有寄存器、缓存、TLB(转换后备缓冲区)条目和 OCM 的内容不仅可以检查和更改,还可以映射到处理器的内存空间中。

调试嵌入式系统传统上一直是一个困难的过程。您必须同时查看硬件和软件。像 GDB 这样结合 XMD 的外部、非侵入式软件调试器是一个很大的帮助。此外,PPC405 支持硬件断点,并允许在异常时冻结处理器。但尤其是在处理器和外围设备集成在同一芯片上时,很难看到执行了哪些事务以及如何(以何种顺序)访问内存。所有重要的信号都埋在芯片内部,通常无法访问这些信号。Virtex-II Pro FPGA 没有这样的限制,因为它将外围设备集成为软硬件。所有信号都是可见的,并且可以使用适当的工具进行访问。

ChipScope Pro 是一款集成的硬件逻辑分析仪。它由在调试主机系统上运行的逻辑分析仪和一组编译或插入到硬件设计中的触发和数据单元组成。集成的逻辑分析仪 (ILA) 单元可以连接到 FPGA 内部的任意数量的信号,并且可以由用户定义的条件或处理器总线事务触发。多个 ILA 单元可以同时处于活动状态。有时将多个 ILA 连接到相同的信号很有用。在一个案例中,我们将两个不同的 ILA 单元连接到 PLB 地址和数据线,以解决内存损坏问题。一个 ILA 连接到连接到 PPC405 的 PLB 信号。我们知道处理器会在发生损坏时进行内存访问。另一个 ILA 连接到连接到 DDR 内存控制器的 PLB 信号。通过比较两个 ILA 单元报告的地址和数据线,我们能够隔离问题并修复它。访问硬件并能够观察总线事务非常有用,尤其是在使用 MMU 的 Linux 中。从软件的角度来看,相同的物理 RAM 块可以映射到许多不同的虚拟地址空间中。在硬件级别,所有地址都是物理地址。

ChipScope Pro、GDB 和 XMD 的组合为开发人员提供了极高的系统可见性。软件工具共享一根通用电缆,并通过 FPGA 的 JTAG 端口进行通信。工具之间的友好协作减少了电缆的数量,并使调试环境的设置更加容易。

当嵌入式系统上电时,启动过程是一个极其重要的阶段。在几个步骤中,板上的组件、处理器、内存系统和通信基础设施被启动。在 Virtex-II Pro FPGA 上,启动过程分两个步骤进行。一方面,配置 FPGA,另一方面,启动处理器。FPGA 需要以多种不同的方式配置其功能。我们将在本文后面介绍一种推荐的方法。通常使用专门的 primary boot loader 来启动处理器、启动系统、将 Linux 内核加载到内存中并将控制权转移到内核的入口点。Virtex-II Pro FPGA 支持这种传统的启动方法,其中 primary boot loader 驻留在外部 ROM 或内部 BRAM 中。后一种情况消除了对外部 ROM 的需求,因为 primary boot loader 包含在配置 FPGA 的位流中。FPGA 配置完成后,处理器立即从复位状态释放,开始从内部 BRAM 读取指令并执行 primary boot loader。

一种新的,特别是与 MontaVista Linux 一起使用的强大系统启动解决方案是使用 System ACE。System ACE 是 Virtex-II Pro FPGA 的配套芯片,允许在没有任何 ROM 的情况下启动系统。它具有两个主要功能。首先,它通过 JTAG 链从 CompactFlash 卡或 Microdrive 配置 FPGA、处理器和处理器总线上的任何设备来启动系统。其次,它使用相同的存储设备作为 Linux 可访问的文件系统。

Microdrive 包含 FAT12 或 FAT16 和 Linux 分区。Linux 内核配置为支持 System ACE 设备,编译后转换为 System ACE 特定文件格式,与 FPGA 的配置位流连接,并存储在 FAT 文件系统上。在上电时,System ACE 从 FAT 文件系统读取配置文件,配置 FPGA 并启动内核。在启动过程中,Linux 内核将 Microdrive 上的 Linux 分区挂载为根文件系统。使用 System ACE 启动的非显而易见的优点是,处理器的复位向量处根本不需要内存,不同的启动配置可以存储在 FAT 分区上,并且可以通过正常的文件操作更改启动配置。

System ACE 在 JTAG 链上工作,就像通过处理器的调试端口的外部调试器一样。代码、数据以及(如果需要)Linux 内核的 RAM 磁盘,都通过 JTAG 链和处理器总线加载到系统内存中。在加载内核之前,可以以相同的方式完成系统中处理器可访问的任何设备的配置。最后,PPC405 的程序计数器设置为 Linux 内核的起始地址,并直接从该位置执行。

一个开关将 System ACE 指向八个活动配置之一。要加载的配置也可以通过软件设置。运行的 Linux 系统选择新的配置,重置系统并启动进入此新配置,该配置可能由不同的外围设备集组成。

FAT 文件系统允许 Linux 在系统运行时更新 System ACE 文件 — 这是一种非常强大的解决方案,可以在系统内和运行时升级硬件和软件。

Virtex-II Pro 开发人员套件为成功的系统设计体验增加了另一个维度。该套件允许您在构建真实硬件之前模拟您的嵌入式系统,并在调试阶段引入另一个抽象级别。系统的每个组件都可以单独模拟。一旦整个系统组装在一起,硬件和软件就可以在模拟中运行,以验证嵌入式系统的功能。在真实硬件中观察到的问题可以返回到模拟中并进行跟踪。GDB/XMD 可以配置为连接到 HDL 模拟器,并使工程师能够逐步跟踪程序执行,并观察总线事务和硬件状态变化。Virtex-II Pro FPGA 与 MontaVista Linux 相结合的完整性使其成为许多不同应用的理想平台。Rocket I/O 串行多千兆位收发器使其对电信领域非常有趣,例如,在基站中,复杂的计算必须与高带宽和巨大的计算能力相结合。相同的收发器也可以用作多个设备之间的背板互连。可用的外围设备与多达四个处理器相结合,也使其成为数据和图形终端甚至工作站的理想平台。

将处理器集成到 FPGA 结构中为有趣的系统架构和未来发展提供了一些机会。在架构方面,在一个简单的系统中,多个处理器可以通过共享的 PLB 互连。更复杂的系统使用交换方法来防止总线拥塞并获得更好的性能。由于 FPGA 的特性,系统设计人员可能会从简单的方法开始,然后更改他们的策略。在任何情况下,Linux 都必须支持该架构。由于信号量和互斥锁很容易通过双端口 BRAM 实现,因此资源管理和对共享内存的访问非常简单。硬件/软件协同处理将大大提高系统性能。虽然硬件速度快并且可以并行执行,但软件更加灵活。Linux 将调用某些实际上在硬件中实现的系统功能。对于系统设计人员来说,找到适合卸载到硬件中的功能将是一个挑战,但这将在更快、更动态的系统中获得回报。在更复杂的系统中,Linux 将使用动态协同处理。它使用针对当前运行的应用程序优化的所需硬件功能部分重新配置 FPGA。当一个应用程序计算广泛的 FFT 变换时,另一个应用程序在数据流中搜索模式。每当调度程序将控制权转移到这两个应用程序之一时,它也会替换相应的 IP。基于统计数据,调度程序确定应用程序是将被硬件加速还是将使用相应的软件功能。Virtex-II Pro FPGA 和 MontaVista Linux 与相应的系统生成、调试和配置工具相结合,是一种功能强大且灵活的解决方案。它使您能够实现规范中的设计,而不是硬件和软件限制给定的设计,提高了集成度而不会失去可观察性,由于可用的 IP 核和相关的软件驱动程序而缩短了上市时间,并最终为您的硬件/软件协同设计创造力开辟了新的维度。

Embedded System àla Carte

Michael Baxter 自九岁起就从事计算机技术工作,1969 年观看《2001:太空漫游》后深受影响。他是一位经验丰富的计算机架构师、系统、电路板和 FPGA 逻辑设计师。Michael 拥有十项美国计算机架构和逻辑专利,以及五项作为共同发明人的专利。他的兴趣还包括徒步旅行、业余无线电和 Lisp 编程。

Embedded System àla Carte

Peter Ryser 在 Xilinx, Inc. 担任系统设计工程师。他负责 Virtex-II Pro 的各种嵌入式软件相关项目,可以通过 peter.ryser@xilinx.com 联系到他。

加载 Disqus 评论