XMOS startKIT – Microcontrolador Multicore

XMOS

Olá, caro leitor. Neste artigo apresentarei algumas características da XMOS startKIT, uma placa de desenvolvimento criada pela XMOS para divulgar a linha xCORE-XS1-ANALOG. O xCORE é uma classe de microcontroladores com diversos núcleos de processamento, determinístico e de baixa latência. Com isso, múltiplas tarefas podem ser executadas simultaneamente, compartilhando recursos e trocando mensagens.

XMOS startKIT: Conhecendo o Hardware

O startKIT possui as seguintes características:

Figura 1: XMOS startKIT.

No startKIT estão presentes dois xCORE (xCORE-Analog A8-DEV) em um único encapsulamento. Um dos dispositivos é utilizado para o depurador e o outro para aplicação.

O ambiente de programação é o xTIMEcomposer, baseado no eclipse. Com essa ferramenta é possível realizar a programação, depuração, simulação além de outras ferramentas para análise de execução.

Mais informações sobre o startKIT podem ser encontradas neste link.

Um pouco mais sobre a arquitetura do xCORE

Como dito anteriormente, xCORE é uma classe de microcontroladores com diversos núcleos de processamento. Na família XS1, esses núcleos são agrupados — entre 4 e 8 — formando uma unidade denominada xCORE tile. Além disso, um dispositivo pode conter mais de um xCORE tile. Na Figura 2 é mostrado essa divisão para dois arranjos com oito núcleos.

Figura 2: Arquitetura xCORE [1].

De modo geral, dentro do xCORE tile os recursos são compartilhados entre todos os núcleos xCORE. No entanto, cabe ressaltar que cada xCORE possui o próprio conjunto de registradores.

Todas as instruções são executadas em um ciclo de máquina e são processadas em um pipeline de quatro estágios compartilhado. Assim, os xCOREs ativos tem suas instruções executadas utilizando uma política de escalonamento Round Robin. A Figura 3 ilustra os estágios de execução considerando os cenários em que apenas um ou mais núcleos estão ativados.

Figura 3: Ciclo de instrução [1].

Com quatro núcleos ativos, o processamento é dividido a um quarto dos ciclos para cada xCORE. Para mais de quatro núcleos, o processamento é dividido no mínimo por N. Além disso, é importante considerar que a taxa de processamento nunca será menor que o mínimo determinado.

Eventos, tarefas e troca de informações

Outra característica interessante é que não existem interrupções no sistema. Cada núcleo pode receber e aguardar eventos. As sincronizações desses eventos são gerenciadas pelo sistema xTIME. Eventos de I/O são gerenciados por unidades denominadas Hardware Response Ports, e direcionadas para o núcleo que utiliza tal recurso. Temporizadores e tarefas também podem gerar eventos para os núcleos.

Diante disso, uma tarefa pode ser executada sempre que um evento ocorre. No entanto, esse evento não interrompe a execução de outras tarefas. Outro ponto a ser notado é que tarefas podem ser finalizadas (Run to completion). Tal condição é ilustrada na Figura 4.

Figura 4: Execução de duas tarefas, sendo uma disparada por evento.

Já a comunicação entre os núcleos é realizada por meio de um barramento de alta velocidade denominado xCONNECT. Esse sistema também é utilizado para trocar informações entre os xCORE tiles, possibilitando também a comunicação com elementos externos.

Figura 5: xCONNECT, infraestrutura de conexão entre núcleos.

Periféricos sob demanda

Devido as configurações flexíveis de entradas e saídas, muitos periféricos são estruturados via software. Atualmente, a XMOS fornece 40 bibliotecas para 40 tipos de periféricos (xSOFTip peripheral block). A lista de bibliotecas pode ser consultada neste link.

Programando o startKIT

Para facilitar o desenvolvimento das aplicações utilizando diversos núcleos de processamento a XMOS criou uma extensão para linguagem C denominada xC. No entanto, o projeto pode ser desenvolvido em C e C++, ou agregando as três linguagens [3]. O programa abaixo tem a mesma sintaxe em C e xC.

Após a compilação, um relatório dos recursos utilizados pode ser gerado. Para o exemplo acima, obteve-se o seguinte relatório:

Constraint check for tile[0]:

Para gerenciar múltiplas tarefas foi criada a extensão par.

Constraint check for tile[0]:

Utilizando a linguagem xC, o acesso à portas de I/O é realizado pelo operador <:. Abaixo é mostrado o exemplo clássico, piscar um LED.

Quer saber mais?

Este artigo foi uma breve introdução ao XMOS startKIT, destacando alguns recursos e caracterizando a arquitetura xCORE. Além do site e da documentação disponibilizada, existe um fórum com discussões técnicas e projetos disponível neste link.

Referências

[1] xCORE Architecture. [2] xCONNECT Architecture. [3] XMOS Programming Guide.