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

XN规范说明

XMOS硬件平台利用XN文件来描述其功能特性。每一个XN文件都向XMOS编译工具链提供了关于目标硬件的详细信息,这包括XMOS设备、端口、闪存以及振荡器等内容。

XTC工具链会根据XN文件中的数据生成针对特定平台的头文件——<platform.h>,并将其用于多节点程序的编译、启动和调试过程。

网络组件

以下是网络定义的详细规定:

<?xml version="1.0" encoding="UTF-8"?>
<Network xmlns="http://www.xmos.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.xmos.com http://www.xmos.com">

XN 元素的层次结构如下:

**节点**                               **数量**      **描述**

Network 1 xCORE 网络
├── Declarations 0+
│   └── Declaration 1+ xCORE Tile 声明
├── Packages 1+
│   └── Package 1+ 芯片封装
│   ├── Nodes 1
│   │   └── Node 1+ 节点的声明
│   │   ├── Tile 1+ 一个 xCORE Tile
│   │   │   └── Port 0+ 一个 xCORE 符号端口名称
│   │   ├── Boot 0 or 1 启动方式
│   │   │   ├── Source 1 二进制文件位置
│   │   │   └── Bootee 0+ 启动的节点
│   │   ├── Extmem 0 or 1 外部存储器配置
│   │   │   ├── Lpddr 1 LPDDR 设备输出的 PAD 控制
│   │   │   └── Padctrl 1 xcore.ai 输出的 PAD 控制
│   │   ├── RoutingTable 0 or 1
│   │   │   ├── Bits 1
│   │   │   │   └── Bit 1+ bit 的方向
│   │   │   └── Links 1
│   │   │   └── Link 1+ link 的方向
│   │   └── Service 0+ 服务的声明
│   │   └── Chanend 1+ Chanend 参数
│   └── Links 0 or 1
│   ├── Link 1+ xCONNECT 链接声明
│   └── LinkEndpoint 2 xCONNECT 链接端点
├── ExternalDevices 0 or 1
│   └── Device 1+ 外部设备
│   └── Attribute 0+ 设备属性
└── JTAGChain 0 or 1
└── JTAGDevice 1+ JTAG 链上的设备

Declaration

Declaration元素为一个或多个 xCORE Tiles 提供符号名称。支持单个名称或名称数组格式:

tileref 标识符

tileref` *标识符* `[` *常量表达式* `]

相对应的声明会被导出到头文件 <platform.h> ,以在 XC 程序中使用。tileref 声明通过 Tile 元素 的引用属性与物理 xCORE tiles 关联。

示例

<Declaration>tileref master</Declaration>
<Declaration>tileref tile[8]</Declaration>

Package

Package元素引用一个封装文件,该文件描述了从 xCORE 端口和链接到封装引脚的映射关系。

属性是否必填类型描述
Id字符串封装的名称。在网络中所有的封装名称都必须是唯一的。
Type字符串XML封装的名称。XTC工具链会在 XCC_DEVICE_PATH 指定的路径中搜索 <type>.pkg 文件。

示例

<Package id="L2" Type="XS1-L2A-QF124">

名为 L2 的封装在 XS1-L2A-QF124.xml 文件中有详细描述。

Node

Node 元素定义了网络中一组连接到xCONNECT的 xCORE Tiles。XMOS 的 xcore.ai 设备 XU316-1024-FB265 就是一个节点的例子。

属性是否必填类型描述
Id字符串节点的名称。网络中所有节点的名称必须唯一。
Type字符串如果类型是 periph:XS1-SU,这个节点就是一个 XS1-SU 外围节点。否则,这个类型指定了描述节点的 XML 文件名。XTC工具链会在由 XCC_DEVICE_PATH 指定的路径中搜索文件 config_<type>.xml
Reference字符串将节点与在 Declaration 中指定的 xCORE Tile 标识关联。此属性仅对 periph:XS1-SU 类型的节点有效。
RoutingId整数在 xCONNECT Link 网络上的路由标识符。
InPackageId字符串将节点映射到封装文件中的某个元素。
Oscillator字符串PLL 振荡器输入频率,需要以数字后接 MHzKHzHz 的格式指明。
OscillatorSrc字符串供应 PLL 振荡器输入的节点名称。
SystemFrequency字符串系统频率,需要以数字后接 MHzKHzHz 的格式指明。默认值为 400MHz,如果没有设置的话。
PllFeedbackDivMin整数允许的最小 PLL 反馈分隔。默认值为 1,如果没有设置的话。
ReferenceFrequency字符串参考时钟频率,需要以数字后接 MHzKHzHz 的格式指明。默认值为 100MHz,如果没有设置的话。
PllDividerStageOneReg整数PLL 分频器一级寄存器的值。
PllMultiplierStageReg整数PLL 乘法器阶段寄存器的值。
PllDividerStageTwoReg整数PLL 分频器二级寄存器的值。
SecondaryPllInputDiv整数次级 PLL 输入除法器寄存器的值。
SecondaryPllOutputDiv整数次级 PLL 输出除法器寄存器的值。
SecondaryPllFeedbackDiv整数次级 PLL 反馈分频器寄存器值
RefDiv整数SystemFrequency / RefDiv = ReferenceFrequency

PLL寄存器能够通过属性SystemFrequencyPllFeedbackDivMinReferenceFrequency进行自动配置,或者利用属性PllDividerStageOneRegPllMultiplierStageRegPllDividerStageTwoReg以及RefDiv进行手动配置。如果提供了前三个属性中的任何一个,就不能提供后四个属性,反之亦然。

PLL振荡器输入频率可以通过属性OscillatorOscillatorSrc指定。如果提供了Oscillator属性,那么就不能再提供OscillatorSrc属性,反之亦然。

在手动配置下,必须提供属性PllDividerStageOneRegPllMultiplierStageRegPllDividerStageTwoReg以及RefDiv,同时也必须明确指定PLL振荡器的输入频率。XTC工具链会使用这些值来设定PLL寄存器和参考时钟分频器。关于PLL分频器的更多信息,请参考xCORE频率控制文档 XS1 L Clock Frequency Control

如果指定了振荡器频率,并且没有提供手动 PLL 属性,则将使用自动配置。工具尝试编程 PLL 寄存器,以实现目标系统频率、PLL 反馈分频器大于或等于最小值以及目标参考时钟频率。如果无法满足这些约束条件,工具会发出警告并报告实际使用的值。

如果没有指定振荡器频率,则工具不会尝试配置 PLL。PLL 寄存器保持其由模式引脚确定的初始值。

辅助 PLL 只能通过提供 SecondaryPllInputDivSecondaryPllOutputDivSecondaryPllFeedbackDiv 进行手动配置。

示例

<Node Id="0" InPackageId="0" Type="XS3-L16A-1024" Oscillator="24MHz" SystemFrequency="600MHz" ReferenceFrequency=”100MHz”>

Tile

Tile 元素描述了单个 xCORE Tile 的属性。

属性是否必需类型描述
Number整数Tile 在节点中的唯一编号。取值范围为 0 到 n-1,其中 n 是节点 XML 文件中定义的 Tile 数量。
Reference字符串将 Tile 与在 Declaration 中以 tile[n] 形式的标识符关联起来。一个 Tile 最多可以关联一个标识符。

示例

<Tile Number="0" Reference="tile[0]">

Port

Port 元素为端口提供了一个符号名称。

属性必需类型描述
Location字符串在标准头文件<xs1.h>中定义的端口标识符。端口的描述可以在XC编程指南中找到。
Name字符串有效的C预处理器标识符。在网络中声明的所有端口名称都必须是唯一的。

示例

<Port Location="XS1_PORT_1I" Name="PORT_UART_TX"/>
<Port Location="XS1_PORT_1J" Name="PORT_UART_RX"/>

Boot

Boot 元素定义了节点的启动方式。它包含一个Source 元素和零个或多个通过xCONNECT链接进行引导的Bootee 元素。如果源指定了一个xCONNECT链接,则不允许指定Bootee元素。在XS1-L设备线中,从SPI引导的设备与被引导设备必须是连续的。

提示

XMOS XTC工具链需要一个 Boot 元素才能够从闪存中启动程序

Source

Source元素指定了节点启动的位置。它具有以下属性。

属性是否必需类型描述
Location字符串形式为SPI:LINKdevice-name必须在Device元素集合中声明。
重要

XMOS XS1-G设备无法配置为通过xCONNECT链接启动。

示例

<Source Location="SPI:bootFlash"/>

Bootee

Bootee元素指定了此节点通过xCONNECT链接启动的系统中的另一个节点。如果在此节点和其引导设备之间配置了多个 xCONNECT 链接(参见LinkLinkEndpoint),XTC工具链会选择其中一个用于引导启动。

属性是否必需类型描述
NodeId字符串另一个节点的有效标识符。

示例

<Bootee NodeId="Slave">

Bit

Bit元素用于指定当消息中与特定位数(number属性)相对应的位出现差异时,应该如何决定消息的传输方向

属性必需类型描述
number整数bit的数量,从最低有效位开始编号。
direction整数路由消息的方向。

示例

<Bit number="1" direction="0"/>

当在RoutingTable元素内出现时,Link元素指定了xCONNECT链接的方向。

属性是否必需类型描述
name字符串形式为X<n>L<m>的链接标识符,其中<n>表示tile编号,<m>表示链接字母。可用的链接针脚布局可以参见相应的封装数据表。
direction整数链接的方向。

示例

<Link number="XLA" direction="2"/>

Service

Service元素指定了一个节点所提供的XC服务功能。

属性是否必须类型描述
Proto字符串服务函数的原型,不包括service关键字。此原型会被导出到头文件<platform.h>中,供XC程序使用。

示例

<Service Proto="service_function(chanend c1, chanend c2)">

XSCOPE 示例

以下文本是使得调试时支持XSCOPE所必需的,并且必须位于<Network>元素下(与<Links>同级):

<Nodes>
<Node Id="2" Type="device:" RoutingId="0x8000">
<Service Id="0" Proto="xscope_host_data(chanend c);">
<Chanend Identifier="c" end="3"/>
</Service>
</Node>
</Nodes>

Chanend

Chanend元素描述了一个用于XC服务函数的通道端参数。

属性是否必须类型描述
Identifier字符串在服务函数原型中的chanend参数的标识符。
end整数当前节点上通道端的编号。
remote整数连接到当前节点上的通道端的远程通道端的编号。

示例

<Chanend Identifier="c" end="23" remote="5"/>

xCONNECT链路在系统规格文档(XS1 L 系统规格)和链路性能文档(XS1 L 链路性能/设计指南)中有描述。

Link元素描述了一个xCONNECT链路的特性。它必须包含两个LinkEndpoint子元素。

属性是否必需类型描述
Encoding字符串必须是2wire5wire之一。
Delays字符串形如<x>clk,<y>clk的格式,其中<x>指定了端点的 inter-token 延迟值,<y>指定了端点的 intra-token 延迟值。<x><y>被指定为一定数量的SystemFrequency周期。如果省略了,<y>clk,则使用<x>clk的值作为 intra-token 延迟值。
Flags字符串指定链接的附加属性。使用XSCOPE值来指定用于发送xSCOPE跟踪信息的链接。

示例

<Link Encoding="2wire" Delays="4clk,4clk">

LinkEndpoint

LinkEndpoint描述了一个xCONNECT链路的一端,具体细节可在系统规格文档(XS1 L 系统规格)中找到。每个端点将节点标识符关联到一个物理xCONNECT链路。

属性是否必需类型描述
NodeID字符串有效的节点标识符。
Link字符串形如X<n>L<m>的链路标识符,其中<n>表示tile编号,<m>表示链路字母。查看相应的封装数据表以获取可用的链路引脚布局。
RoutingId整数xCONNECT链路网络上的路由标识符。
Chanend整数一个通道端。
BootRomEnabled整数链路在启动时被激活,因此可以考虑在广域网络中使用(多个XMOS节点)。

端点通常被描述为节点标识符和链路标识符的组合。对于流式调试链路,其中一个端点必须被描述为路由标识符和通道端的组合。例如:

<LinkEndpoint NodeId="0" Link="X0LD"/>
<LinkEndpoint RoutingId="0x8000" Chanend="1">

下表突出显示了在LinkEndpoint元素中用于Link属性的正确链路名称。

xConnect 链路编号xCORE “L” 系列链路名称xCORE-200 链路名称
0XLCXL0
1XLDXL1
2XLAXL2
3XLBXL3
4XLGXL4
5XLHXL5
6XLEXL6
7XLFXL7
8N/AXL8

在xCORE-200 XN规格中不能使用xCORE “L” 系列的链路名称。

在xCORE “L” 系列XN规格中不能使用xCORE-200的链路名称。

以下示例演示了在xCORE “L” 系列XN规格中,如何连接节点0的链路编号4和节点1的链路编号7:

<Links>
<Link Encoding="5wire" Delays="0,1">
<LinkEndpoint NodeId="0" Link="XLG"/>
<LinkEndpoint NodeId="1" Link="XLF"/>
</Link>
</Links>

下面的示例演示了一个 xCORE-200系列XN规格中,如何连接节点0的链路编号4和节点1的链路编号7:

<Links>
<Link Encoding="5wire" Delays="4,4">
<LinkEndpoint NodeId="0" Link="XL4"/>
<LinkEndpoint NodeId="1" Link="XL7"/>
</Link>
</Links>

Device

Device元素描述了一个连接到xCORE Tile的设备,该设备并未直接连接到xCONNECT链路。

属性是否必需类型描述
Name字符串命名设备的标识符
NodeId字符串设备所连接节点的标识符
Tile整数设备所连接的节点内的tile
Class字符串设备的类别
Type字符串设备的类型(取决于类别)
PageSize整数设备的程序页大小
SectorSize整数设备的擦除扇区大小
NumPages整数设备中的程序页数量

对于属性名Class,目前可选的值为以下几种:

  • SPIFlash

    设备为SPI闪存

  • SQIFlash

    设备为QuadSPI闪存

使用Type属性来识别闪存设备的型号。

Attribute

Attribute元素描述了设备的一项特性,与Flash的配置选项相关。

属性是否必需类型描述
Name字符串指明设备的某一属性。
Value字符串指定与属性相关联的值。

以下是设备(通常是flash)支持的属性名称,属于SPIFlash类:

  • PORT_SPI_MISO

    SPI主设备输入,从设备输出信号。

  • PORT_SPI_SS

    SPI从设备选择信号。

  • PORT_SPI_CLK

    SPI时钟信号。

  • PORT_SPI_MOSI

    SPI主设备输出,从设备输入信号。

示例

<Attribute Name="PORT_SPI_MISO" Value="PORT_SPI_MISO"/>

以下是设备支持的属性名称,属于SQIFlash类:

  • PORT_SQI_CS

    QuadSPI芯片选择信号。

  • PORT_SQI_SCLK

    QuadSPI时钟信号。

  • PORT_SQI_SIO

    QuadSPI输入/输出信号。

  • QE_REGISTER

    此项为可选,仅对不支持JEDEC SFDP的设备需要。有效值包括flash_qe_location_status_reg_0flash_qe_location_status_reg_1

  • QE_BIT

    此项为可选,仅对不支持JEDEC SFDP的设备需要。有效值范围从flash_qe_bit_0flash_qe_bit_7

示例

<Attribute Name="PORT_SQI_SIO" Value="PORT_SQI_SIO"/>

闪存设备示例

下述示例展示了一个闪存设备的完整描述信息。

<ExternalDevices>
<Device NodeId="0" Tile="0" Class="SQIFlash" Name="bootFlash" Type="S25FL116K" PageSize="256" SectorSize="4096" NumPages="16384">
<Attribute Name="PORT_SQI_CS" Value="PORT_SQI_CS"/>
<Attribute Name="PORT_SQI_SCLK" Value="PORT_SQI_SCLK"/>
<Attribute Name="PORT_SQI_SIO" Value="PORT_SQI_SIO"/>
<Attribute Name="QE_REGISTER" Value="flash_qe_location_status_reg_0"/>
<Attribute Name="QE_BIT" Value="flash_qe_bit_6"/>
</Device>
</ExternalDevices>

JTAGChain

JTAGChain元素用于描述JTAG链中的一个设备。这些元素的排列顺序决定了它们在JTAG链中的位置。

属性是否必需类型描述
JTAGSpeed字符串设置JTAG的时钟速度。

JTAGDevice

属性是否必需类型描述
NodeID字符串有效的节点标识符。

示例

<!-- N1 comes before N2 in the JTAG chain -->
<JTAGDevice NodeId="N1">
<JTAGDevice NodeId="N2">