- Unibratec

Transcrição

- Unibratec
Implementação de uma versão Havard/RISC reconfigurável do microcontrolador 8051 em FPGA Remy Eskinazi João Paulo Zaqueu [email protected], [email protected] Resumo Este trabalho descreve a implementação de uma versão Havard/RISC do microcontrolador 8051 em FPGA. A implementação refere‐se a um subconjunto funcional do microcontrolador, ou seja, trata‐se de uma versão simplificada dos recursos apresentados em um microcontrolador 8051 padrão de forma a obter‐se um melhor desempenho. Da mesma forma, um subconjunto das instruções foi implementado considerando‐se as funções mais importantes para execução de um programa. Todo o projeto foi especificado e descrito em VHDL e os teste e simulações mostraram que o protótipo encontra‐se perfeitamente funcional. Em trabalhos futuros, pretende‐se utilizar este “core” em redes de processadores embarcados em SOCs (Sistem on Chip) voltados para processamento paralelo. Palavras‐chave: Microcontrolador, FPGA, RISC. Abstract This work describes the implementation of a Haverd/RISC version of the 8051 microcontroller in a FPGA. This implementation refers to a functional subset of the microcontroller. This means that this implementation was a simplified version of the resources presented in a standard 8051 microcontroller in order to obtain a better functional performance. Following this strategy, a subset of the instruction set was implemented regarding the most import functions for a program execution. The design was specified and described in VHDL language and all the tests and simulations have been demonstrated that the prototype works perfectly. In future works, we have intention to use this core processor in embedded processors networks (SOCs) aiming parallel processing. Keywords: Microcontroller, FPGA, RISC.
Introdução Atualmente o projeto de sistemas embarcados vem se tornando cada vez mais complexos. Diversos destes sistemas estão baseados em microcontroladores que suportam atividades de aquisição de dados, processamento e controle. Características como custo, domínio da arquitetura, ferramentas de desenvolvimento e desempenho são considerados para a tomada de decisão na escolha de uma arquitetura em particular. Em contrapartida aos microcontroladores discretos, processadores embarcados em dispositivos reconfiguráveis constituem‐se em uma alternativa viável para a implementação de controle em sistemas embarcados, especialmente considerando‐se o cada vez menor custo de aquisição destes componentes [D’Amore], [Ordonez]. Como exemplo, pode‐se citar os controladores embarcados NIOS da Altera [Nios] e MicroBlaze da Xilinx [Microblaze]. Entretanto, dispositivos FPGAs não disponibilizam em sua biblioteca de componentes (provavelmente por uma questão de estratégia comercial) versões de microcontroladores comerciais discretos tais como da família 8051. Uma vantagem imediata para utilização destes componentes seria a utilização de diversos tipos de códigos e ferramentas gratuitos de projeto, que já se encontram a disposição pelo fato do microcontrolador 8051 (e seus variantes) ser um dos mais utilizados para projetos de sistemas embarcados. De fato, existem atualmente implementações deste microcontrolador em FPGAs tais como propostas por Carro [Carro] e Oregano [Oregano]. Estas propostas implementam um subconjunto funcional do microcontrolador 8051 [Mazidi], voltado para processamento de tarefas discretas, ou seja, apresentam um conjunto de instruções fixo e reduzido que não pode ser alterado de forma a adaptar‐se a novas situações de processamento. A nossa proposta difere destas implementações por construir um controlador que, futuramente, apresente um conjunto de instruções reconfigurável, bem como possa adptar‐se a mudanças operacionais e paradigmas de controle em sistemas embarcados. Descrição da arquitetura Na versão implementada do microcontrolador, as instruções e dados estão em formatos de 8 bits [Patterson], sendo que o formato das instruções é dividido conforme ilustra a fig.1. Figura 1. Formato das Instruções
Existem 14 principais instruções do 8051 divididas em 4 tipos, conforme mostra a tabela 1. TABELA 1. Instruções Aritméticas ADD, ADDI, SUB,SUBI Lógica AND, OR, NOT, XOR Desvio JC, JZ, ACALL, SJMP, RET Mover MOV As operações lógicas e aritméticas são feitas a partir do Acumulador (ACC) com os registradores ou dados. A arquitetura apresenta 2 portas de I/O, P0 e P1, 1 memória RAM interna dividida conforme a tabela 2. TABELA 2. Divisão da Memória RAM 00 Registrador0 01 Registrador1 02 Registrador2 03 Registrador3 04 Registrador4 05 Registrador5 06 Registrador6 07 Registrador7 08 ACC 09 P0 10 P1 11 TMOD 12 Stack 13 Stack 14 Stack 15 Stack
Adicionalmente, existe ainda um grupo de registradores, RI (Registrador Inicial), PC (Program Counter), REND (Registrador de endereço) e o ACC* (Registrador auxiliar do ACC), 5 multiplexadores, um decodificador, uma unidade de controle, a ULA , um comprador, um Timer e o Stack Pointer , como mostra a figura 2, e suas conexões necessárias para o correto funcionamento . Figura 2. Visão Geral da Arquitetura. Para a instrução de desvio ACALL, o microcontrolador guarda o endereço seguinte (PC+1) nos endereços reservados para a Pilha (Stack), que começa no endereço 15 e vai até o endereço 12. O elemento que determina em qual endereço vai ser gravado é o Stack Pointer (SP). Posteriormente, durante a execução da instrução RET, pega‐se o dado que está no endereço onde o Stack Pointer está indicando e coloca‐o no PC, fazendo assim que a pilha seja do tipo LIFO. De maneira semelhante ao 8051 padrão, o Timer se divide em TH e TL onde contém 8bits cada. Existem dois modos de operação no Timer. No Modo0, o timer funciona como um contador pleno de 16 Bits. No Modo1, o timer carrega o valor de TH em TL e quando o TL “estoura” ele recarrega TL com o valor de TH e o Flag de estouro do timer é ativado (modo de recarga automático). Os 27 bits de saída da UC (26:0) são utilizados para execução de microinstruções onde cada bit tem uma função especifica, conforme mostra a tabela 3.
TABELA 3. Definição de Cada Bit de uma Microinstrução BIT Significado 0 clock PC 1 Load PC 2 Clock RI 3 Selecionador do multiplexador de acesso ao multiplexador que terá acesso a memória RAM 4 Clock da memória RAM 5 Clock do ACC* 9‐6 Selecionador de operação da ULA 10 Clock do REND 11 Load do REND 12 Selecionador do multiplexador de acesso ao endereço da memória de programa 13 Bit auxiliar para operação SJMP 14‐17 Selecionador de endereço da memória RAM 18 Leitura ou escrita da memória RAM 19 Selecionador do multiplexador de acesso ao contador de programa 20 Selecionador do multiplexador de acesso de dados a memória RAM 21 Clock do Stack Pointer 22 Muda o endereço do Stack Pointer 23 Selecionador do multiplexador de acesso de endereços a memória RAM 24 Seleciona o TH ou TL para fazer a gravação de dados 25 Habilita a gravação de dados no Timer 26 Habilita P0 e P1 como saídas.
Descrição da ULA A ULA do controlador é capaz de realizar dez das principais operações lógicas e aritméticas do 8051 padrão. A Tabela 4 descreve estas operações. TABELA 4. Operações da ULA. Operação Opcode 0 Adição 0000 1 Subtração 0001 2 AND 0010 3 OR 0011 4 XOR 0100 5 NOT 0101 6 NOR 0110 7 XNOR 0111 8 Incrementa 1000 9 Decrementa 1001 10 Reservado 1010 11 Reservado 1011 12 Reservado 1100 13 Reservado 1101 14 Reservado 1110 15 Reservado 1111 Na descrição da ULA foram utilizadas duas entradas e uma saída de 8 bits, um opcode de 4 bits e um bit de carry (conforme mostrado na Fig. 3).
8 8 8 4 4
Figura 3. Diagrama em bloco da ULA. A implementação VHDL da ULA consiste em uma estrutura de seleção do tipo case, a qual realiza uma operação específica entre seus barramentos de entrada a partir de uma determinada microoperação de controle que fornece o opcode atual [D’Amore]. Conforme indica a Figura 4, no início da descrição, a ULA verifica se há uma solicitação de reset. Se houver, serão zeradas todas as saídas. Caso contrário, a ULA lê o código de operação e executa o procedimento adequado. Figura 4. Fluxograma da ULA INÍCIO RESET = 1? NÃO Opcode 0000? SIM S SOMA S SUBTRAI S AND S DECREM N Opcode 0001? N Opcode 0010? N ... Opcode 1001? N Descrição dos resultados iniciais e testes Os testes iniciais feitos no controlador foram todos a partir de simulações feitas através do procedimento com waveform do QUARTUS II, onde foi observado o funcionamento do microcontrolador, obtendo resultados positivos na implementação do mesmo. A figura 5 mostra o teste em um determinado momento onde o acc está com o dado 96 e é chamada a função ADD A,#6. Em 1 acontece o ciclo de busca e codificação, em 2 o valor do acc é registrado em uma das entradas da ULA (ulain2), em 3 o valor 6 é colocado na outra entrada da ULA(ulain1) e acontece a soma, em 4 o resultado é salvo no acc. Figura 5. Execução da instrução ADD A,#dado A figura 6 mostra o funcionamento do timer em modo0, é possível observar que em 1 o timer está em contagem plena, em 2 ele carrega o valor de 250 em TL , em 3 ele continua a sua contagem, em 4 ele carrega o valor de 255 no TH, em 5 o timer continua a sua contagem e quando ele “estoura” sua contagem o bit de carry(C_T) é colocado em nivel alto. Figura 6. Timer operando no modo0
Já a figura 7 mostra o timer trabalhando no modo1 de operação. Em 1 o timer conta até o TL “estourar”, quando isso ocorre ele aciona o Flag de estouro do Timer(C_T), em 2 ele recarrega TL com o valor 253 que já estava carregado em TH e repete o que ocorreu em 1, em 3 ele fica repetindo até o programador mudar o modo de operação. Figura 7. Timer operando no modo1 A figura 8 mostra um teste feito na porta0 utilizando ela como entrada e colocando o valor no acumulador. Em 1 ele faz a busca e codificação, em 2 ele salva o valor da entrada no Acumulador (representado no gráfico por ram_block [8]) Figura 8. Utilizando P0 como entrada Foram realizados testes entre o microcontrolador implementado comparativamente a uma versão 8051 padrão de referência, utilizando o mesmo clock de 12MHz para ambos. Para tal, foram utilizados algoritmos de procura de dados na memória, ordenação de dados pelo método de bubble sort, conversão ASCII, e acesso aos ports paralelos. Novamente utilizou‐se ferramentas de simulação Quartus II para o controlador implementado em FPGA e a ferramenta Pinnacle [Pinnacle] para um microcontrolador 8051 padrão. Especificamente para o teste de
ordenação, foi preparado um programa que ordenasse os valores encontrados em R0, R1, R2, R3, R4, R5 e R6, usando o mesmo código tanto para um quanto para outro. Como mostra a figura 9, o 8051 padrão levou 177 microsegundos para realizar a ordenação, enquanto que o microcontrolador proposto foi necessário 710 ciclos dando um total de 59,16 microsegundos. O microcontrolador proposto foi 2,99 vezes mais rápido que o 8051. Figura 9. Simulação do programa ordena no 8051 sem end. Indireto Em outro teste o mesmo programa foi alterado para utilizar endereçamento indireto. Para realizar a mesma ordenação foram necessários 539 microssegundos como mostra a figura 10, fazendo com que o microcontrolador proposto fosse 9,1 vezes mais rápido. Figura 10. Simulação do programa ordena no 8051 com end. Indireto A figura 11 mostra o tempo gasto que o 8051 padrão levou para executar os programas de teste em comparação com o microcontrolador proposto, utilizando o mesmo código para ambos. Foi possível perceber que o microcontrolador em FPGA foi mais rápido em todos os testes.
Figura 11. Resultados de desempenho para o controlador implementado Trabalhos futuros Os próximos passos em trabalhos futuros serão no sentido de adicionar outras instruções e uma arquitetura mais complexa a partir do projeto atual. A partir do microcontrolador implementado, uma futura versão em arquitetura Havard/RISC, poderá operar de modo que possa ter seu conjunto de instruções dinâmicamente reconfigurável em uma estrutura que irá integrar diversos microcontroladores em rede. Conclusões Este trabalho descreveu a implementação de um microcontrolador em arquitetura reconfigurável. O projeto foi construído como um subset de um microcontrolador 8051 em arquitetura Havard/RISC. As características funcionais e de desempenho permitem que o mesmo seja utilizado como elemento de controle em uma rede de controladores em um SOC. O projeto obteve sucesso diante à sua proposta. A simulação e os testes funcionais de todos os módulos indicaram o êxito da descrição desenvolvida. A principal contribuição é o código fonte em VHDL, aberto, que especifica e descreve funcionalmente um subset de um microcontrolador 8051. Trabalhos futuros consideram o uso da arquitetura em controladores com conjunto de instruções reconfigurável de forma a adptar‐se a demandas de processamento. Referências [Carro] É. Cota, L. Carro, F. Lima, S. Rezgui, R. Velazco, M. Lubaszewski, R. Reis, Synthesis of an 8051‐Like Micro‐Controller Tolerant to Transient Faults Journal of Electronic Testing: Theory and Applications archive, Volume 17 , Issue 2 ,April 2001, 149 – 161 [D’Amore] R. D’Amore, VHDL, Descrição e síntese de circuitos digitais, LTC, 2005.
[Mazidi] Mazidi, M, Mazidi, J. The 8051 Microcontroller and Embedded Systems, Prentice Hall, 2000 [Microblaze] ‐ MicroBlaze Processor Reference Guide. Disponível para download em www.xilinx.com/support/documentation/ip.../xmtc.pdf [Nios] ‐ NIOS Embedded processor Disponível em http://www.altera.com/products/ip/processors/nios/nio‐index.html [Ordonez] E.D.M. Ordonez, F.D. Pereira, C.G. Penteado, R.A. Perecini, Projeto, Desempenho e Aplicações de Sistemas Digitais em Circuitos Programáveis (FPGAs), Bless, 2003 [Oregano] ‐ 8051 IP core Disponível para download em http://www.oregano.at/ip/ip01.htm Ultimo acesso: 31.08.2009 [Patterson] Patterson & Hennessey Computer Organization and Design: The Hardware/Software Interface, Elsevier Ed. 752p [Pinnacle] Pinnacle – Simulador para microcontroladores da família 8051 disponível para download em http://www.vaultbbs.com/pinnacle. Ultimo acesso em 30/06/2010 [Souza] SOUZA, David J. Desbravando o PIC, Ed. Érica, São Paulo,2000. Remy Eskinazi: Professor Adjunto da Universidade de Pernambuco – Escola Politécnica e do IFPE – Instituto Federal de Educação Tecnológica – [email protected] João Paulo Zaqueu: Graduando e aluno do programa de I.C. em engenharia Elétrica pela Universidade de Pernambuco – Escola Politécnica – [email protected]