随着嵌入式处理需求的快速增长,系统架构正朝着多处理器设计的方向发展,以解决单处理器系统复杂度太高和计算能力不足的问题。凭借其高逻辑密度及高性能硬模块,新一代FPGA已经使功能强大的芯片多处理(CMP)解决方案成为现实。目前的挑战在于如何在该解决方案的范畴内快速完成设计的开发与创建。
赛灵思嵌入式开发套件(EDK)工具和IP具有很大的灵活性,用户可以利用它们以FPGA逻辑为基础设计出独具特色的定制多处理解决方案,从而同时满足价格和性能目标要求。本文将主要介绍以PowerPC和MicroBlaze嵌入式处理器为基础的赛灵思解决方案中的多处理概念。
应用领域
性能和功能划分是设计多处理器系统的主要动力。总的来说,多处理在以下这些常见场合中会发挥作用:
1. 多个独立功能。设计可能需要应对多个独立的处理任务。解决这个问题的好方法是为每个处理任务创建独立的专用处理模块,并为每个处理模块分配专用处理器和外设集。
2. 控制或数据层面卸载。常见情况是既有实时任务(计算或数据密集型),也有非实时任务,从而可能导致单处理器解决方案无法做出及时的响应。对于这种情况,您可以分配一个从处理器以便及时完成实时任务,主处理器则完成其他常规任务,并且充当到主机系统的接口。主处理器同时也监控从处理器。从处理器可能包含专用功能或接口,从而能够满足计算性能要求。相应的例子包括网络负载分担、媒体处理以及安全算法等。
3. 接口处理。对于作为多接口之间的桥梁或开关的系统,您可以分配一个从处理器用于处理每个接口上的数据,而用一个或者多个主处理器处理更高级的桥接或者开关任务。
4. 数据流处理。对于数据流计算问题,您可以安排多个处理器以流水线的方式处理数据流。多处理器流水线的每一级都要在将数据传到下一个处理器之前完成一部分计算任务。这是提高系统吞吐量的一种有效方式。
5. 可靠性和冗余度。您可以多次复制处理系统以提高可靠性和冗余度。
6. 对称处理。传统的对称处理(SMP)是一种十分有用的解决方案,您可以利用它来提升那些不存在明确划分边界的应用性能。一个具有SMP功能的OS层可以管理并行任务,并且在多处理器之间自动调度这些任务。然而,SMP使用模型不适用于赛灵思处理器,因为它们缺乏实现SMP所需的高速缓存相关性。
除了SMP场合,其他的所有应用场合均适合赛灵思公司带有EDK工具的FPGA的应用。赛灵思处理解决方案的独特之处在于,它可以针对应用要求来灵活定制每个处理子系统。例如,并不是所有的处理器都需要一个高速缓存或者浮点单元。通过为特定处理器分配特定的功能,您可以创建一个能够实现所有设计目标的专用解决方案。
简单且可扩展的系统架构
正如您见到的那样,有许多种使用模型适合多处理器使用。同时存在多种系统架构的可能性。为某一应用场合明确一种单纯且可扩展的拓扑和架构是一件令人头疼的事情,所以定义一个可以满足大部分需求的基线架构会将有所帮助。
图1给出了一个双内核架构。这个架构展示了简单且可扩展的多处理器系统定义。您可以基于这个定义衍生出新的拓扑来应对设计约束或挑战。该架构的主要概念如下:
图1:双处理器架构。
1. 这个架构是两套完全独立的单处理器系统的简单扩展,是通过将系统与通信元件连接在一起实现的。
2. 共享元件全部采用多端口(或者双端口)结构。这些元件的多端口特性使得每个处理器的系统总线在静态和动态负载方面都独立于其他总线。通过隔离各个处理子系统,您可以确保系统总线不会因为一个处理器的事务执行而不能给另一个处理器或者外设使用。所有的多端口外设都在内部完成不同端口上的访问仲裁。
3. 关键共享外设是多端口存储器控制器(MPMC)。MPMC通过不同的端口接口访问外部存储器。多个处理器可以通过独立端口连接到MPMC上。这种拓扑使得 PowerPC和MicroBlaze处理器能够以最小的延迟和高带宽同时访问外部存储器。MPMC目前最多可以提供8个端口,这样就可以将三到四个处理器连接到一个外部存储器上。
4. 这个架构还可以在处理器之间共享内部块RAM存储器。片上块RAM共享是一种在处理器之间传输KB尺寸数据的高速方式。块RAM的访问也可以是确定性的,这对于某些应用而言是一个重要要求。
5. 除了共享存储器外,还有另外2个内核 - XPS Mailbox和XPS Mutex,它们可以提供形式简单的处理器间通信。XPS Mailbox内核以同步或异步方式为两个处理器提供低延迟、FIFO风格的消息传递接口。它可用于直接传送消息或者用于传送共享存储器中存储的消息指针。您可以使用XPS Mutex内核在2个处理器上为软件共享资源(无论它们是片上资源还是片外资源)的访问进行 仲裁。总的来说,这些内核可帮助您在每个处理器上创建协作软件程序。
6. 一些系统可能期望共享非多端口外设(比如UART、SPI或I2C)。这种情况需要在没有连至外设的总线和连至外设的总线之间提供一个系统总线桥。图1给出了一个在两个处理器之间共享UART的总线桥的应用情况。
7. 图1特意指出是PowerPC405是第一处理器,MicroBlaze第二处理器,以说明每个处理器的某些特性。然而,经过很小的改动就可以将任何一个处理器替换成其他的处理器。因此这个架构可以在不同的处理器之间实现无缝转换。
虽然图1给出了推荐的整体多处理架构,但是不同的约束可能需要您进一步改善该架构。例如,在逻辑面积和资源使用是关键考虑因素的系统中,所有处理器都可以连接到相同的系统总线上。虽然这降低了系统的确定性,增加了总线的运行负载,但是它通过消除新的系统总线以及消除IP的多端口需求而节省了面积。
还可实现其他衍生架构,例如在独立系统总线上连接一个高性能处理器,或在共享系统总线上连接多个低性能处理器。您还可以通过利用多级桥连接处理子系统来创建层次化拓扑。EDK所提供的各种工具和IP可以帮助你进一步优化这个基本拓扑,直到其满足您的需要为止。
其他考虑因素
通常情况下,多处理器架构还需要考虑其他一些因素。例如,您需要在两个处理器之间以非冲突方式定义存储器映射。EDK提供的自动地址生成工具将这一任务简化成简单的按钮操作。
您也需要考虑您的时钟和复位网络。您可以选择给所有处理器提供相同速率的时钟,或者让每个处理器使用不同的时钟域。同样,您也可以将复位域定义在不同层次上,例如仅处理器复位、处理器子系统复位和系统复位。处理器必须独立连至调试端口,从而能为每个处理器创建一个独立的调试进程。
除了硬件因素,还需要设计软件系统,以便它们能够协同运转。这包括使用共享存储器、消息传递以及一些常见的同步概念,例如屏障(barrier)和会合 (rendezvous)等,从而使系统以可预测性和同步的方式运行。市场上也有商用软件栈可以提供更高级的通信范例。