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 振荡器输入频率,需要以数字后接 MHz、KHz 或 Hz 的格式指明。
OscillatorSrc否字符串供应 PLL 振荡器输入的节点名称。
SystemFrequency否字符串系统频率,需要以数字后接 MHz、KHz 或 Hz 的格式指明。默认值为 400MHz,如果没有设置的话。
PllFeedbackDivMin否整数允许的最小 PLL 反馈分隔。默认值为 1,如果没有设置的话。
ReferenceFrequency否字符串参考时钟频率,需要以数字后接 MHz、KHz 或 Hz 的格式指明。默认值为 100MHz,如果没有设置的话。
PllDividerStageOneReg否整数PLL 分频器一级寄存器的值。
PllMultiplierStageReg否整数PLL 乘法器阶段寄存器的值。
PllDividerStageTwoReg否整数PLL 分频器二级寄存器的值。
SecondaryPllInputDiv否整数次级 PLL 输入除法器寄存器的值。
SecondaryPllOutputDiv否整数次级 PLL 输出除法器寄存器的值。
SecondaryPllFeedbackDiv否整数次级 PLL 反馈分频器寄存器值
RefDiv否整数SystemFrequency / RefDiv = ReferenceFrequency

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

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

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

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

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

辅助 PLL 只能通过提供 SecondaryPllInputDiv、SecondaryPllOutputDiv 和 SecondaryPllFeedbackDiv 进行手动配置。

示例

<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:或LINK。 device-name必须在Device元素集合中声明。
重要

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

示例

<Source Location="SPI:bootFlash"/>

Bootee​

Bootee元素指定了此节点通过xCONNECT链接启动的系统中的另一个节点。如果在此节点和其引导设备之间配置了多个 xCONNECT 链接(参见Link和LinkEndpoint),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是字符串必须是2wire或5wire之一。
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_0和flash_qe_location_status_reg_1。

  • QE_BIT

    此项为可选,仅对不支持JEDEC SFDP的设备需要。有效值范围从flash_qe_bit_0到flash_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">