Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

架构与硬件指南

XCore是一种多核微处理器,它能够提供高度灵活和快速响应的I/O,同时在运行应用时提供高性能。该架构支持一种编程模型,其中许多简单的任务并发运行,并使用硬件支持的事务进行通信。多个XCore处理器支持“网络化”扩展,并且在不同物理处理器(或者说:tile)上运行的任务可以无缝地通信。为了有效地利用XMOS平台,用户有必要了解硬件模型;本文档的目的是提供平台及其特性的概述,以及介绍如何使用C语言以更好地使用它们。

快速入门

XCore架构支持在多个物理封装上扩展应用程序,以提供高性能和低延迟的I/O。一个完整的XCore应用程序针对一个“XCore网络”,并且可能由几个独立的应用程序组成,应用之间使用XCore的硬件特性进行通信。

一个XCore网络由一个或多个封装组成;它们通过xCONNECT互连连接,以实现高速、硬件辅助的通信。

  • 每个封装包含一个或多个tile以及通信结构,用于在tile内部和tile之间进行通信。
  • 每个tile包含一个或多个逻辑核、一些内存、一个参考时钟和各种资源
  • 每个逻辑核就像一个硬件线程:它与其他逻辑核共享对tile内存和资源的访问,但所有逻辑核都并发且独立地执行代码。
  • 资源就像协处理器:它们可以由同一tile上的任何逻辑核分配,并用于硬件加速各种常见任务。例如,端口资源支持灵活的GPIO,而定时器资源可以用于根据参考时钟测量时间。
../_images/package.png

节点

每个物理封装被称为一个节点。一个网络可以是一个单一的节点,或者两个或更多的封装可以连接起来,使它们可以使用xCONNECT基础设施进行通信。每个节点都有自己的外部引脚,并且包含一个或多个tile,以及一些通信结构,用于在这些tile之间以及与网络上的其他节点(如果有的话)进行通信。

tile

tile是节点内部的单个物理处理器;每个tile都有自己的内存、I/O子系统、参考时钟和其他资源。节点内部的tile使用该节点内部的通信结构进行通信,但是可以使用外部链接与其他封装中的tile进行通信。

逻辑核

每个tile有八个逻辑核。每个逻辑核都有自己的寄存器,并且独立于其他逻辑核执行指令。然而,一个tile内的所有逻辑核都共享该tile的资源和内存。xcore流水线有五个阶段,每个阶段需要一个系统时钟周期来完成。几乎每个xcore指令都需要使用这个流水线来执行五个周期。这使得计算一段直线指令序列的持续时间变得简单。

流水线图-单核
单逻辑核运行:每5个时钟刻度执行一次指令(单核主频为 f/5 MHz)

五个逻辑核可以并行运行,但是在流水线的使用上是错开的。以便在给定的时钟周期内,每个逻辑核使用不同的流水线阶段。这五个逻辑核将独立运行,并且每个逻辑核获得整个tile可用的MIPS(每秒机器指令数)的五分之一。

流水线图-五核
五个逻辑核运行:每5个时钟刻度执行一次指令(单核主频为 f/5 MHz)

当超过五个逻辑核处于活动状态时,每个逻辑核的执行速率将会下降,以在它们之间共享五级流水线。xcore硬件调度器使用循环的方式来分配每个逻辑核的时间片(也称为时间片轮转调度)。

流水线图-八核
八个逻辑核运行:每8个时钟刻度执行一次指令(单核主频为 f/8 MHz)

如果一个逻辑核正在等待一个资源(见下文)满足指定的条件(例如定时器达到所需的值),那么它可能会被置于“暂停状态”。当一个逻辑核处于暂停状态时,它将从xcore硬件调度器调度的逻辑核列表中移除。一旦资源满足所需的条件,逻辑核就会被重新放回待调度的逻辑核列表中。

I/O和资源池

资源是在一个tile中的所有逻辑核之间共享的通用外设。有许多类型的资源可用,不同设备的资源类型和数量也不同。资源可以帮助加速实时任务和高级外设(例如UART)的高效软件实现。后面的章节会介绍许多可用的资源类型。

由于资源的性质各异,它们的接口也有所不同。但是,大多数资源具有以下一些或全部特征:

  • 资源池:XCore tile维护了一种包含不同资源类型的池,一个逻辑核可以从池中获取一个资源,并在不再需要时释放它。
  • 输入/输出:可以从资源中读取及写入值(例如一组外部引脚的值)。
  • 事件触发:资源可以在发生某种条件时生成事件(对于输入资源,触发事件表明有数据可供读取)。事件可以唤醒处于暂停状态的逻辑核。
  • 可配置触发器:用户可以根据需要设置触发条件,满足这些条件时,资源会产生事件。而且这些触发条件是可编程的。

所有的tile都有一些共同的资源类型,尽管可用资源各不相同:

  • 端口:这些是连接到tile的物理引脚的输入和输出。端口具有高度可配置性,可以自动地将数据输入和输出,以及在读取某些值时生成事件。由于它们与物理引脚有固定的映射关系,端口是显式分配的(而不是从一个池中分配),并且有固定的宽度,可以是1、4、8、16或32位。
  • 时钟块:可配置的时钟,用于控制端口输入/输出数据的速率。这些时钟可以分频参考时钟或由1bit端口驱动。
  • 定时器:提供一种测量时间以及在未来的固定时间生成事件的方法,这可以用于实现非常精确的延迟。
  • 通道端:用于通过通信结构进行通信的端点。一个通道端(简称“通道”)可以与网络中的任何其他通道端通信(无论是在同一个tile上,还是在不同的物理节点上)。

通信结构

通信结构是通道端之间在网络中的物理连接,它允许任何一个通道端向任何其他通道端发送数据。当一个通道端首次向另一个通道端发送数据时,就会在网络中建立一条路径并打开一个链接。这个链接持续到明确关闭为止(通常作为交换数据的一部分),并在此期间处理从发送方到接收方的所有流量。

链接是有方向性的;因此,如果通道端A向通道端B发送数据,然后(在链接关闭之前)BA发送数据回来,那么就会打开两个链接。这两个链接不一定会走相同的路由。在单个节点内部,通道端之间的通信容量总是至少足够打开两个链接。在节点之间,容量取决于连接的物理链接的数量。