Processador Java Aplicado a Controle Samuel L. Maia¹, Marcos A. Medeiros Silva², Elias T. da Silva Jr.³ Resumo— Atualmente, a maioria dos microprocessadores existentes tem sua forma de programação pouco intuitiva e difícil para muitos estudantes e programadores. O processador utilizado neste trabalho mostra seu grande diferencial no tangente a sua forma de programação. Tratase de um microprocessador programável em Java, linguagem de programação de alto grau de portabilidade. Sendo assim mais acessível, este microprocessador é uma alternativa em aplicações para diversos ambientes de trabalho. Testes preliminares mostram o potencial da proposta e uma aplicação de monitoramento de temperatura encontra-se em desenvolvimento. Palavras-chave: Microcontroladores, embarcados, Java, FPGA, telemetria. Sistemas I. INTRODUÇÃO Este artigo apresenta um microprocessador para a implementação de programas em alto nível, utilizando a linguagem de programação Java, para sistemas embarcados. Esse microprocessador, chamado de FemtoJava, executa os programas compilados do código-fonte em Java e é implementado em VHDL, com aplicação em placas FPGA, que nos permite reprogramar o microprocessador utilizando a mesma placa FPGA. Para a comunicação do programador e o microprocessador, existe uma API em Java, que proporciona ao programador um ambiente destinado à síntese de aplicações em Java para o FemtoJava, chamado de SASHIMI. No decorrer do artigo é mostrada a estrutura do microprocessador e testes realizados com o mesmo. Samuel Leitão Maia é estudante de Engenharia de Computação no Instituto Federal de Educação, Ciência e Tecnologia do Ceará – IFCE. E-mail: [email protected]. 2 Marcos Aurélio Medeiros Silva é estudante de Engenharia de Telecomunicações no Instituto Federal de Educação, Ciência e Tecnologia do Ceará – IFCE. E-mail: [email protected]. ³ Elias Teodoro da Silva Júnior é professor do IFCE, Departamento de Telemática. E-mail: [email protected]. 1 II. O PROCESSADOR FEMTOJAVA Através da implementação de máquinas virtuais, em geral interpretadores para diversas plataformas de hardware e software, a linguagem Java adquire como característica a portabilidade. Entretanto o uso de máquinas virtuais implica em programas mais lentos e com maior exigência de memória. Estas características tornam a linguagem Java proibitiva para muitos sistemas embarcados, especialmente os de tempo-real. Visando tornar a linguagem Java aplicável a sistemas embarcados foi desenvolvido um modelo de microcontrolador Java, o processador FemtoJava [1], que utiliza a codificação de instruções da JVM (Java Virtual Machine) diretamente, inibindo a necessidade da implementação de máquinas virtuais, tornando a execução mais rápida. Isto significa dizer que as instruções do processador são os próprios bytecodes Java. O microcontrolador implementado não apresenta registradores de propósitos gerais acessíveis ao programador. Os componentes principais do FemtoJava são as memórias RAM para pilha de dados e ROM para o programa, unidade operativa e unidade de controle. A arquitetura utilizada é do tipo Harvard[7], que se caracteriza por possuir barramentos distintos para dados e instruções, permitindo fazer acessos a operandos na pilha e busca de imediatos de forma simultânea, aumentando o desempenho do processador. A memória de programa do processador FemtoJava contém as instruções do programa compilado do código-fonte em Java, que são extraídas e alocadas por uma ferramenta de ligação e montagem de código, chamada SASHIMI [1], que será explicada adiante. O processador FemtoJava foi descrito integralmente utilizando-se da linguagem de descrição de hardware VHDL (VHSIC Hardware Description Language), o que nos permite facilmente alterar suas funcionalidades, tornando o processador bastante flexível. Por ser um processador soft-core, o FemtoJava é implementado em placas FPGA (Field Programmable Gate Arrays). Isso permite redefinir parâmetros referentes ao seu funcionamento, como o tamanho da memória, e facilmente reprogramá-lo, utilizando as ferramentas de síntese e programação do fabricante da placa FPGA. Devido à facilidade de alterar a descrição em VHDL do processador, existem várias versões do FemtoJava, que podem variar em organização, como multiciclo ou pipeline, ou em arquitetura, como barramentos da memória RAM de 8 bits, 16 bits e 32 bits. comunicação com os periféricos oferecidos junto com o processador. O SASHIMI é um ambiente destinado à síntese de sistemas microcontrolados, especificados em linguagem Java. Este ambiente utiliza as vantagens da tecnologia Java e fornece ao projetista um método simples, rápido e eficiente para obter soluções baseadas em hardware e software para microcontroladores. O conjunto de ferramentas disponível no SASHIMI também foi desenvolvido inteiramente em Java, tornando-o altamente portável para diversas plataformas. As ferramentas do ambiente SASHIMI suportam a extração automática do subconjunto de instruções Java necessário para implementar o software da aplicação. Para cada aplicação pode ser gerado um microcontrolador específico (com o conjunto de instruções adaptado). O resultado é o melhor aproveitamento dos recursos de hardware e a obtenção de um software otimizado para cada aplicação. As ferramentas do ambiente SASHIMI conseguem carregar arquivos executáveis Java (.class), interpretar suas estruturas internas e, portanto, extrair o código e outras informações necessárias à execução da aplicação. Adicionalmente, é possível efetuar modificações no software e no microcontrolador (sem alterar a funcionalidade) para um ajuste fino dos resultados de síntese. III. HARDWARE DE ENTRADA E SAÍDA Para obter comunicação com o meio externo, o processador FemtoJava possui portas de comunicação, entrada e saída, e unidades de controle, timer e interrupção, para uma implementação ampla de tarefas. Figura 1 – Microarquitetura do FemtoJava Multiciclo [1] Para desenvolver uma aplicação para o processador FemtoJava, o programador descreve seu código em Java, usando APIs específicas para a A. Entrada/Saída de propósito Geral O processador FemtoJava possui 4 portas de entrada e saída mapeadas na memória RAM, com 32bits cada. Essas portas podem ser acessadas através de uma API Java que implementa as funções de leitura e escrita. B. Timers São oferecidos dois timers que podem funcionar de duas maneiras: Como contador de pulsos de clock de 1MHz ou como contadores de eventos. Os timers podem ser acessados por funções da API Java permitindo programar tarefas de tempo-real. que desejar diretamente da linguagem de alto nível. F. Outros dispositivos de E/S Completando os recursos para controle e monitoramento do ambiente externo, são especificadas duas interfaces, gerador de PWM e SPI. Estas duas interfaces estão em processo de implementação e testes. C. Interrupção O PWM (Pulse-Width Modulation), ou As interrupções possuem dois níveis de prioridade. Existem interrupções associadas aos modulação, por largura de pulso permite controlar dispositivos: porta serial, timers e dois hardwares dispositivos como motores de corrente contínua e externos. Os registradores que programam a LEDs (Light-Emitting Diode). O SPI (Serial Peripheral Interface Bus) é um interrupção são mapeados na memória RAM. A figura abaixo esquematiza o controlador de protocolo largamente utilizado pela indústria, que permite a comunicação do microprocessador com interrupção. diversos outros componentes. Dispositivos de maior complexidade (como rádio e câmara) podem ser acoplados através desta interface. III. ESTUDO DE CASO Para a implementação do processador Femtojava, foi utilizado o software de design Quartus II versão 9.0 (Copyright © 1991-2009 Altera Corporation), que permite a compilação do código em VHDL, e a síntese na placa FPGA, uma Cyclone II de modelo Figura 2 – Controlador de Interrupção EP2C8Q208C8N. Para monitoramento do funcionamento do processador e depuração do D. Conversor A/D sistema foi utilizada a ferramenta SignalTapII Logic A fim de permitir monitorar grandezas Analyzer, também da ALTERA. analógicas, como temperatura e luminosidade O processador Femtojava, ocupa na placa FPGA, ambiente, um conversor Analógico-Digital (ADC) cerca de 4177 elementos lógicos, aproximadamente foi acrescentado à versão original do FemtoJava, 50% do total disponível, e cerca de 99328 bits de proposta por Ito [1]. O ADC utilizado nos testes é o memória, aproximadamente 60% do limite máximo. ADC0801, que faz uso da estrutura de aproximações sucessivas [2] e tem resolução de 8 A. Testes iniciais bits. Um método Java permite fazer leituras dos Através do processador FemtoJava, implementado valores analógicos, que podem variar de 0 a 5 Volts. em uma placa FPGA, foram executadas aplicações E. Conversor D/A Para que o processador possa atuar sobre sistemas analógicos, um conversor Digital-Analógico (DAC) foi introduzido na sua estrutura de E/S. Neste caso foi usado o DAC0808, que tem uma resolução de 8 bits, e produz uma saída que varia de 0 a 5V de acordo com a entrada. Um método Java permite que o programador possa fornecer os valores analógicos Java para testes de tempo-real, utilizando os timers no acionamento de cargas luminosas. Utilizando o hardware externo do conversor D/A, que se comunica com o processador através das portas de entrada e saída, foram feitos testes de geração de algumas funções clássicas, como senóides. Os conversores Digital-Analógico e Analógico- Digital foram montados em placas de circuito impresso e conectados ao FPGA, onde o processador FemtoJava foi sintetizado. Um teste simples para o ADC foi capturar o valor analógico de entrada e aplicá-lo na saída do DAC. Desta forma, uma senóide que entrava pelo ADC era vista na saída do DAC idêntica à entrada, com ajuda de osciloscópio. B. Em andamento: Leitura de sensor analógico Estudos estão sendo finalizados para implementação um sistema de monitoramento remoto de temperatura. Para isso a interface SPI será utilizada para comunicação com o rádio MRF24J40MX [5], que implementa o protocolo ZigBee. Este rádio é um transceptor que disponibiliza a camada física, e a camada de acesso ao meio referente à pilha de comunicação do protocolo IEEE 802.15.4 [6]. IV. CONCLUSÕES Este trabalho apresenta uma proposta de utilização da linguagem Java em aplicações de controle de monitoramento. Como ponto de partida, utilizou-se um microprocessador soft-core que implementa bytecodes Java nativamente. Alguns dispositivos foram acrescentados ao processador bem como os métodos Java que permitem a sua utilização. Como continuação do trabalho estão sendo feitos estudos para implementação de uma placa específica contendo o FPGA e os periféricos desenvolvidos. AGRADECIMENTOS Os autores agradecem o apoio financeiro dado a este projeto pela FUNCAP e pelo CNPq. REFERÊNCIAS [1] S.A. Ito, L. Carro, R.P. Jacobi. “Making Java Work for Microcontroller Applications”. IEEE Design & Test of Computers, Sept/Oct. 2001, vol. 18, n. 5, pp. 100-110. [2] R. J. Tocci, N. S. Widmer, G. L. Moss, Sistemas Digitais – Princípios e Aplicações, 10. ed., Pearson – Prentice Hill, 2008. [3] Universidade Federal do Rio Grande do Sul – Instituto de Informática, “Sashimi – Manual do Usuário”, UFRGS – Embedded Systems Lab, Versão 0.9, 2006. [4] C. Luigi, Projeto e prototipação de sistemas digitais,1. Ed., Editora da UFRGS, Porto Alegre, 2001. [5] MICROCHIP. MRF24J40MB Data Sheet. 2009. Disponível em: <http://www.microchip.com/wwwproducts/Devices.aspx? dDocName=en542228>. Acesso em: 31 de março, 2010. [6] IEEE Standard 802.15.4: Part 15.4: Wireless medium access control (MAC) and physical layer (PHY) specifications for low-rate Wireless Personal Area Networks (WPANs). IEEE Computer Society. Ano 2007. Disponível em: <http://standards.ieee.org/getieee802/download/802.15.4 a-2007.pdf>. Acessado em 23 de dezembro de 2009. [7] D. A. Patterson, J. L Hennessy. Organização e Projeto de Computadores, 3. ed., Elsevier, Rio de Janeiro, 2005.