XMOS startKIT – Microcontrolador Multicore

Confira neste artigo uma família de microcontroladores multicore da empresa XMOS. Com a arquitetura xCORE sua aplicação pode ser dividida em múltiplas tarefas que são executadas simultaneamente e de modo determinístico. Conheça também o XMOS startKIT.
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:

  • xCORE-Analog 8-core com depurador integrado.
  • Conexão micro-USB para o depurador.
  • Conector PCIe de propósito geral;
  • Conector compatível com a Raspberry pi;
  • Dois sensores capacitivos (touch slider);
  • Matriz de LED 3×3;
  • 2 LEDs adicionais;
  • 1 Chave Tac;
  • 4 entradas analógicas;
  • Memória Flash de 256KB acessada via SPI;
  • Expansor para outras startKITs.
Placa de desenvolvimento XMOS startKIT
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.

xcore arch
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]:

  • Cores available: 8, used: 1;
  • Timers available: 10, used: 1;
  • Chanends available: 32, used: 0;
  • Memory available: 65536, used: 8044;
  • Stack: 504, Code: 6938, Data: 602.

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

Constraint check for tile[0]:

  • Cores available: 8, used: 3;
  • Timers available: 10, used: 3;
  • Chanends available: 32, used: 0;
  • Memory available: 65536, used: 9024;
  • Stack: 1280, Code: 7082, Data: 662.

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.

Fascinado por computação, especialmente na interface entre hardware e software, me engajei na área de sistemas embarcados. Atuo com desenvolvimento de sistemas embarcados e sou docente da Faculdade de Engenharia de Sorocaba.

Para mais informações: https://about.me/fdelunogarcia

Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H