XMOS XU316的芯片特性
概要
读者在了解XMOS XCORE特性以及芯片特性之后,能 够更加顺利地进行硬件设计和软件设计。作为实例,下文将会基于XU316-1024-QF60B-PP24芯片做相关的介绍。下文中讲述的内容可以理解为对XU316-1024-QF60B-PP24 datasheet的导读,包含了XU316的集成的模块,外围电路,核心特性,I/O特性以及XCORE.AI的芯片特性。如希望了解更多细节内容,请参考数据手册。
命名规则
XMOS的处理器平台的芯片命名规则如下表:
XU316-1024-QF60B-PP24为例的命名规则
| XU | 3 | 16 | 1024 | QF60 | B | PP24 |
|---|---|---|---|---|---|---|
| 集成USB PHY芯片 | XMOS第三代芯片XCORE.AI系列 | 16个核心 | 1024K Byte RAM(512kB/tile) | QFN60 pin封装 | 3v3 IO 电平 | 2400 MIPS速度 |
其中它的芯片丝印为:V16A0PP
XU316芯片框图
XU316是一个多核MCU处理器芯片平台,需要通过类似C语言编程的固件才能处理应用程序。在芯片本体板块,可以看到已集成了XCORE,USB PHY 芯片,PLL,OTP等板块内容,同时也能大体推断出外围的硬件的最小系统仍需要电源芯片,Flash芯片,晶振。
下图中:
- XU316芯片平台分2个tile,其对应Tile 0和Tile 1, 每个Tile 都有8个Logical Cores(可以理解为8个核心,或者线程),2个Tiles则共有16个核心。
- XU316芯 片平台叠封了USB 2.0 PHY收发芯片,而USB的协议(类如UAC协议)则是在XU316的核心编程实现,USB PHY仅负责数据打包收发。
- XU316芯片平台集成了PLL板块,可以通过在利用核心进行配置以产生700MHz以内的方波频率,同样可用于产生音频所需要的24.576MHz/ 22.5792MHz的音频时钟信号
XU316-1024-QF60B-PP24的芯片框图
最小系统
要使XU316芯片能够正常工作,XU316的最小系统需要简单的外围器件。需要3路电源供应(3V3,1V8和0V9),QSPI Flash(存储固件)和晶振便可启动工作。具体的应用和产品,需要额外的外围器件,如音频类的ADC、DAC等等。
电源供应
因XU316芯片中没有集成LDO,需要系统供应3路电源才能启动。在最小系统中,三路电源的基本供应的情况如下表
| Power supply | 功能 | 电流 | 类型 |
|---|---|---|---|
| 0v9(VDD) | Tile的电源供应,包含了核心和PLL | 约300mA | DC-DC |
| 1v8 | USB PHY的模拟电源供应和 时钟和XTAG I/O电源供应 | 约30mA | DC-DC |
| 3V3 | USB PHY的模拟电源供应 I/O口的电源供应 | 约33mA | LDO |
时钟
需要外置晶振24MHz供应XU316的PLL进行升频到600MHz或者700MHz,支持无源晶振或者时钟输入。
flash
需要外置QSPI Flash芯片,存储XU316的程序固件,类似音频应用中选择16Mbit的Flash便可满足基础使用
XU316-1024-QF60B-PP24的应用框图
核心特性
XU316的PLL已默认升频到600MHz,并且将其分配到每个tile作为其主频,以分时复用的方式分配到8个逻辑核中,而在程序中使用不同的逻辑核心的数量,则每个逻辑的平均主频都会有变化,下表为使用逻辑核数量与其逻辑核平均主频的关系。
| PLL Frequency | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 600MHz | 120MHz | 120MHz | 120MHz | 120MHz | 120MHz | 100MHz | 86MHz | 75MHz |
| 600/5=120 | 600/5=120 | 600/5=120 | 600/5=120 | 600/5=120 | 600/6=100 | 600/7=86 | 600/8=75 |
由于XU316的采用了5级流水线,所以一个tile中5个逻辑核来共享600MHz主频,如果小于5个逻辑核被使用,也会被强制降到120MHz(每个逻辑核的处理速度则类似一个Cortex-M3的速度)。
每个逻辑核心都是单独且并发运行的,就像单独的一个个任务线程且互不干扰,每个逻辑都可以调佣对应tile里面的RAM, 浮点计算,I/O等资源就像8个MCU单独在运行一样。逻辑核(线程任务)之间需要进行数据交换的时候,则使用通道来传输(channel end),XU316有64个通道端( 每个tile 有32个)。
同时每个Tile可以设立双发模式(dual issue mode),可理解为主频中每个周期的上升沿和下降沿都执行一个指令,一个tile的600MHz主频,可以实现1200 MIPS(百万指令每秒), 2个tile则最高可达2400 MIPS的指令速度。
I/O 特性
XU316的I/O都是可编程配置使用的,每个tile都分配了对应的I/O资源,每个I/O都可以在代码上配置为输入特性还是输出特性。初始XU316的I/O属于无定义状态的,没有固定划分哪些I/O是属于UART, I2C和I2S等使用,需要软件代码上调用某个I/O作为输入或者输出特性来配合某种接口的时序,非常类似FPGA的I/O特性。例如,调用X0D35(1M)作为I2S接口的BCLK时序,在调用X0D36作为I2S接口LRCLK的时序。
XU316的I/O资源共有 16个1 bit 脚,2个 4 bit 脚,和1个8bit 脚。
参考XU316-1024-QF60B-PP24 datasheet
34 general-purpose I/O pins, configurable as input or output
— Up to 16 x 1bit port, 2 x 4bit port, 1 x 8bit port
1bit port
XU316的1 bit 脚,我们俗称为串行脚,其一般被调用到使用做些PWM或者时钟信号,亦或者串行的输入来使用。类似于,我们需要在下表中随机抽取4个1bit 脚来实现I2S接口的时序,通过代码来实现对应时钟时序和协议,我们可能会初步设想为:1L为MCLK,1M为LRCLK,1O为BCLK,1P为DATA。
| 1bit port | 功能定义 | 代码调用时的名称定义 | 类型 |
|---|---|---|---|
| X0D00 | 1A | XS1_PORT_1A | I/O |
| X0D01 | 1B | XS1_PORT_1B | I/O |
| X0D10 | 1C | XS1_PORT_1C | I/O |
| X0D11 | 1D | XS1_PORT_1D | I/O |
| X0D35 | 1L | XS1_PORT_1L | I/O |
| X0D36 | 1M | XS1_PORT_1M | I/O |
| X0D37 | 1N | XS1_PORT_1N | I/O |
| X0D38 | 1O | XS1_PORT_1O | I/O |
| X0D39 | 1P | XS1_PORT_1P | I/O |
4bit port/8bit port
XU316的4bit脚,我们俗称为并行脚,一般调用4bit脚做并行需要时序接口,亦或者并行的输入。例如:QSPI Flash需要4bit并行脚以连接QSPI Flash的D0,D1,D2,D3等用于数据传输的脚位,以实现QSPI的时序和协议。
当然,如果4bit不需要被调用以实现接口所需的并行时序,也可以当作简单的GPIO使用,如按键,LED, I2C,输入边缘检测等等。
这类做法往往需要在软件上编写函数以拆解并行数据并重新组合成串行数据
8bit脚的使用方式则类似于4bit脚。
| 4 bit port | 功能定义 | 代码调用时的名称定义 | 类型 |
|---|---|---|---|
| X0D04 | 4B-0 | XS1_PORT_4B | I/O |
| X0D05 | 4B-1 | XS1_PORT_4B | I/O |
| X0D06 | 4B-2 | XS1_PORT_4B | I/O |
| X0D07 | 4B-3 | XS1_PORT_4B | I/O |
时钟块
XU316具有10个时钟块(clock block),对于PLL产生的时钟,经过时钟块分频处理可产生特定的时钟给到I/O来输出时序,亦可接收外部的时钟用于程序内部使用。类似于,使用一个时钟块来接收了外部的音频时钟信号24.576MHz,那么这个时钟块就为24.576MHz,并且可以再利用它来分配实现LRCLK,BCLK的时钟时序。
XU316的时钟块的功能会更加贴近FPGA表现的时钟特性,以便以轻易去实现更加灵活的接口所要求的时序,借助XU316灵活的I/O特性,更有利于低抖动的实现。
总结
XMOS XU316的芯片特性实属MCU,执行速度可以高达2400 MIPS,结合其灵活的I/O特性,以及集成了浮点运算单元。对于XU316,可以初步理解为是一个集MCU和FPGA,DSP为一体的高性能处理器。而在软件方面,XU316的应用程序基本通过C语言去编程实现应用以及I/O功能的分配,并包含非常小的一部分非标准C语言的底层硬件描述。
在XCORE平台中,主要使用XC语言进行编程,其语法基于C语言。其额外增加的部分主要是对于和XMOS硬件资源相关的资源分配与引脚描述。