CENTRO UNIVERSITÁRIO POSITIVO NÚCLEO DE CIÊNCIAS EXATAS E TECNOLÓGICAS ENGENHARIA DA COMPUTAÇÃO PDA BASEADO NO MICROPROCESSADOR NIOS II COM SISTEMA OPERACIONAL UCLINUX EMBARCADOS EM FPGA Roberto Sant’Ana Junqueira Monografia apresentada à disciplina de Projeto Final como requisito parcial à conclusão do Curso de Engenharia da Computação, orientada pelo Prof. Valfredo Pilla Jr. UNICENP/NCET Curitiba 2007 TERMO DE APROVAÇÃO Roberto Sant’Ana Junqueira PDA BASEADO NO MICROPROCESSADOR NIOS II COM SISTEMA OPERACIONAL UCLINUX EMBARCADOS EM FPGA Monografia aprovada como requisito parcial à conclusão do curso de Engenharia da Computação do Centro Universitário Positivo, pela seguinte banca examinadora: Prof. Valfredo Pilla Jr. (Orientador) Prof. Edson Pedro Ferlin Prof. Nestor Cortez Saavedra Filho Curitiba, 15 de Dezembro de 2007. AGRADECIMENTOS Primeiramente, agradeço a Deus pela saúde, paz, e oportunidade de viver. À minha família, principalmente aos meus pais Helio e Clelia, que me proporcionaram muitas oportunidades na vida e que sempre lutaram junto a mim para que obstáculos fossem vencidos. Ao meu grande amigo, orientador e professor Valfredo Pilla Jr., que sempre com sabedoria, discernimento e muito apoio me ajudou no desenvolvimento deste projeto. A todos os professores do Curso de Engenharia da Computação do UnicenP, que não apenas compartilharam conhecimentos, mas também despertaram em mim a pesquisa e desenvolvimento sempre com qualidade e ética profissional. A todos os meus amigos e colegas que de alguma forma direta e indireta, influenciaram e ajudaram na minha formação acadêmica e na conclusão deste projeto. RESUMO Este trabalho descreve o desenvolvimento de um PDA (Personal Digital Assistant) baseado na arquitetura do microprocessador NIOS II embarcado em FPGA juntamente com o Sistema Operacional uClinux. Palavras chave: PDA, FPGA, NIOS II, uClinux, Cyclone II PDA BASED ON MICROPROCESSOR NIOS II WITH UCLINUX OPERATION SYSTEM EMBEDDED IN FPGA ABSTRACT This text describes the development of a PDA (Personal Digital Assistant) based on the NIOS II Microprocessor architecture embedded in FPGA together with the uClinux Operational System. Key words: PDA, FPGA, NIOS II, uClinux, Cyclone II SUMÁRIO CAPÍTULO 1 - INTRODUÇÃO .................................................................................................. 11 1.1 – Objetivos ........................................................................................................................... 12 1.2 – Motivação ......................................................................................................................... 12 CAPÍTULO 2 – FUNDAMENTAÇÃO TEÓRICA ..................................................................... 13 2.1 – O Dispositivo FPGA ......................................................................................................... 13 2.2 – O Kit de Desenvolvimento DE2 ....................................................................................... 14 2.3 – O Processador NIOS II ..................................................................................................... 15 2.4 – O Sistema Operacional uClinux........................................................................................ 17 2.4.1 – A História do uClinux ........................................................................................... 17 2.4.2 – A Arquitetura do uClinux ...................................................................................... 17 CAPÍTULO 3 – ESPECIFICAÇÃO DO PROJETO .................................................................... 19 3.1 – Especificação do Software ................................................................................................ 19 3.2 – Especificação do Hardware............................................................................................... 19 3.2.1 – Arquitetura do Núcleo do Processador NIOS II .................................................... 19 3.2.2 – Memória Cache do Processador NIOS II .............................................................. 20 3.3 – Especificação da Validação do Software .......................................................................... 21 3.4 – Especificação da Validação do Hardware......................................................................... 21 3.5 – Recursos Necessários ........................................................................................................ 22 3.6 – Viabilidade Técnico-econômica ....................................................................................... 22 CAPÍTULO 4 – DESENVOLVIMENTO E IMPLEMENTAÇÃO ............................................. 23 4.1 – Os Módulos de Hardware Utilizados ................................................................................ 23 4.1.1 – Núcleo do Processador NIOS II (cpu_0) ............................................................... 23 4.1.2 – Interface de Acesso à Mem. Flash (tri_state_bridge_0 & cfi_flash_0) ................. 23 4.1.3 – Controlador da Memória SDRAM (sdram_0) ....................................................... 24 4.1.4 – Controlador da Memória Flash (epcs_controller) ................................................. 25 4.1.5 – Interface JTAG de Debug via Software (jtag_uart_0) .......................................... 25 4.1.6 – Controlador de Comunicação UART (uart_0) ...................................................... 26 4.1.7 – Temporizador 0 (timer_0) ..................................................................................... 26 4.1.8 – Temporizador 1 (timer_1) ..................................................................................... 27 4.1.9 – Pinos de Entrada Paralela (button_pio) ................................................................. 28 4.1.10 – Controlador da Memória SRAM (sram_0).......................................................... 29 4.1.11 – Controlador Ethernet (DM9000A) ...................................................................... 29 4.1.12 – Controlador USB (ISP1362)................................................................................ 29 4.1.13 – Controlador VGA (vga_controller_0) ................................................................. 29 4.1.14 – Controlador PS/2 (ps2_0) .................................................................................... 30 4.2 – O Projeto de Hardware no Quartus II ............................................................................... 30 4.2.1 – O Projeto no SOPC ................................................................................................ 30 4.2.2 – O Esquemático Final do Quartus II ....................................................................... 31 4.3 – O Kernel do uClinux ......................................................................................................... 33 4.3.1 – Compilando o Kernel do uClinux.......................................................................... 33 4.4 – Embarcando o Sistema ...................................................................................................... 37 CAPÍTULO 5 – VALIDAÇÃO E RESULTADOS ...................................................................... 39 CAPÍTULO 6 - CONCLUSÃO .................................................................................................... 44 CAPÍTULO 7 - REFERÊNCIAS BIBLIOGRÁFICAS ................................................................ 45 CAPÍTULO 8 – ANEXOS ............................................................................................................ 47 8.1 – Artigo Científico ............................................................................................................... 48 8.2 – Manual .............................................................................................................................. 49 LISTA DE FIGURAS Fig. 2.1 – Estrutura Geral de uma FPGA. ..................................................................................... 13 Fig. 2.2 – Kit DE2 de Desenvolvimento. ...................................................................................... 14 Fig. 3.1 – Diagrama em Blocos do Hardware ............................................................................... 19 Fig. 3.2 – Núcleo do Processador NIOS II .................................................................................... 20 Fig. 3.3 – Memória Cache NIOS II ............................................................................................... 21 Fig. 4.1 – Configurações da Interface de Acesso à Memória Flash .............................................. 24 Fig. 4.2 – Configurações do Controlador de Memória SDRAM .................................................. 24 Fig. 4.3 – Configurações da Interface de Debug via Software ..................................................... 25 Fig. 4.4 – Configurações do Controlador de Comunicação UART .............................................. 26 Fig. 4.5 – Configurações do Temporizador 0................................................................................ 27 Fig. 4.6 – Configurações do Temporizador 1................................................................................ 28 Fig. 4.7 – Configurações dos Pinos de Entrada Paralela ............................................................... 28 Fig. 4.8 – Configurações do Controlador VGA ............................................................................ 30 Fig. 4.9 – Módulos de Hardware Integrados via SOPC ................................................................ 31 Fig. 4.10 – Projeto Completo no Modo de Esquemático do Quartus II ........................................ 32 Fig. 4.11 – Integrando arquivo de Descrição do Hardware ao Kernel do uClinux ....................... 33 Fig. 4.12 – Wizard de seleção de Hardware .................................................................................. 34 Fig. 4.13 – Sumário do Wizard de Configuração.......................................................................... 34 Fig. 4.14 – Execução do menuconfig ............................................................................................ 34 Fig. 4.15 – Interface Inicial do menuconfig .................................................................................. 35 Fig. 4.16 – Configurações do Kernel ............................................................................................ 35 Fig. 4.17 – Configuração das Aplicações do Kernel ..................................................................... 36 Fig. 4.18 – Construção do Sistema de Arquivos e Pastas ............................................................. 36 Fig. 4.19 – Linha de Comando para compilação do Kernel .......................................................... 37 Fig. 4.20 – Criando a Imagem do Kernel ...................................................................................... 37 Fig. 5.1 – uClinux sendo inicializado via Terminal USB ............................................................. 39 Fig. 5.2 – Sistema Operacional reconhecendo Pendrive automaticamente................................... 40 Fig. 5.3 – Sistema sendo acessado via FTP................................................................................... 40 Fig. 5.4 – Sistema sendo acessado via navegador de internet ....................................................... 41 Fig. 5.5 – Sistema sendo executado em modo gráfico .................................................................. 41 Fig. 5.6 – Sistema executando aplicativo de relógio ..................................................................... 42 Fig. 5.7 – Sistema executando jogo nTetris .................................................................................. 42 Fig. 5.8 – Sistema executando aplicativo de visualização de imagens ......................................... 43 LISTA DE TABELAS TABELA 2.1 – Tipos de Núcleo do Processador NIOS II ........................................................... 16 TABELA 3.1 – Relação de custos dos recursos utilizados ........................................................... 22 LISTA DE SIGLAS NCET- Núcleo de Ciências Exatas e Tecnológicas UNICENP – Centro Universitário Positivo PDA – Personal Digital Assistant ASIC – Application Specific Integrated Circuit FPGA – Field Programmable Gate Array JPEG – Joint Photographic Experts Group USB – Universal Serial Bus CPLD – Complex Programmable Logic Device RAM – Random Access Memory SRAM – Static Random Access Memory SDRAM – Synchronous Dynamic Random Access Memory SD Card – Security Digital Card LED – Light-Emitting Diode CODEC – Coder-Decoder VGA – Video Graphics Array DAC – Digital-to-Analog Converter IrDA – Infrared Data Association RISC – Reduced Instruction Set Computer DMIPS – Dhrystone Million Instructions Per Second CPU – Central Processing Unit ULA – Unidade Lógica e Aritmética MMU – Memory Management Unit SCADA – Supervisory Control and Data Acquisition TCP/IP – Transmission Control Protocol / Internet Protocol GPL – General Public License IRQ – Interrupt Request SOPC – System On a Programmable Chip PLL – Phase-Locked Loop FTP – File Transfer Protocol CAPÍTULO 1 - INTRODUÇÃO Há essencialmente dois enfoques para a execução de programas em hardware: a construção de um circuito específico, por exemplo, um ASIC (Application Specific Integrated Circuit), ou então o uso de microprocessadores programados por software. Nestes dois extremos, há vantagens e desvantagens. Um ASIC, por ter hardware projetado especificamente para a execução do programa (ou então blocos funcionais montados de forma específica), é extremamente rápido para executar o programa. Por outro lado, como não é possível modificá-lo após a fabricação do circuito, qualquer mudança que seja necessária implica reprojeto e refabricação do chip. Além disso, caso haja a refabricação do circuito, ele precisará ser substituído em todos os sistemas em que tenha sido implantado (DEVEGILI et al., 2004). No outro extremo estão os microprocessadores programados por software. Nestes, há um conjunto de instruções e o programa a ser executado é especificado em termos destas instruções. Caso o programa precise ser alterado, basta que sejam modificadas as instruções sem que seja necessário alterar o microprocessador. Entretanto, devido ao processo de carga e decodificação das instruções, aliado à genericidade do projeto do circuito, o desempenho de um microprocessador, sob o ponto de vista de tempo de execução, é mais lento do que de um ASIC. Ademais, um programa está limitado às instruções definidas pelo microprocessador, não sendo possível alterá-las ou incluir novas instruções (DEVEGILI et al., 2004). A computação reconfigurável é um meio termo entre estes dois extremos, buscando conciliar a rapidez de execução de soluções em hardware específico e a flexibilidade dos microprocessadores. Para isto, são utilizados dispositivos programáveis, notadamente FPGAs (Field Programmable Gate Array). Nestes dispositivos, há um conjunto de blocos lógicos e uma rede de interconexão, ambos programáveis. Desta forma, um circuito pode ser especificado e sintetizado em um dispositivo programável, acarretando um tempo de execução mais rápido do que uma solução baseada em microprocessador. Por outro lado, com dispositivos programáveis que sejam reconfiguráveis, é possível implementar mudanças no projeto do circuito sem que seja necessária a remanufatura física do circuito (DEVEGILI et al., 2004). Existem vários soluções de projetos baseadas em computação reconfigurável, uma das possibilidades é a síntese de um microprocessador em um dispositivo reconfigurável. Este é o caso do microprocessador NIOS II, utilizado como arquitetura neste trabalho (DEVEGILI et al., 2004). 11 1.1 – Objetivos O objetivo principal deste trabalho é desenvolver um PDA utilizando FPGA com o microprocessador NIOS II e o Sistema Operacional uClinux embarcados. Este PDA contém alguns aplicativos (editor de texto, visualizador de imagens JPEG, jogo de raciocínio, etc.), que podem ser acessados pela interface de teclado e visualizados na interface de vídeo; é possível armazenar e ler dados em discos de memória FLASH (Pendrives, etc.) através da interface USB. 1.2 – Motivação Nos dias atuais a utilização de Microcomputadores, Laptops e PDAs se faz presente e necessária para quaisquer que sejam as necessidades, sendo elas, trabalho, estudo ou entretenimento. Com a evolução dos sistemas embarcados, os PDAs veem se destacando cada vez mais no mundo da informação, pois possuem grande poder de processamento e armazenamento, além de interfaces de comunicação variadas, por exemplo, infra-vermelho, wireless, bluetooh e USB, e também leitores de cartões multimídia. Apesar de estarem cada vez mais difundidos, os PDAs ainda possuem um custo elevado, pois a tecnologia empregada no desenvolviento destes “pequenos gigantes” ainda tem um custo elevado, pois são criadas arquiteturas dedicadas para os mesmos. A grande motivação deste trabalho de desenvolver um PDA utilizando NIOS II como microprocessador embarcado em FPGA rodando o Sistema Operacional uClinux, é o fato de poder estudar o funcionamento de arquiteturas embarcadas em FPGAs integradas com sistemas operacionais de código-fonte aberto, e fazer com que este sistema operacional controle os dispositivos que estão acoplados ao sistema. 12 CAPÍTULO 2 – FUNDAMENTAÇÃO TEÓRICA 2.1 – O Dispositivo FPGA Uma FPGA é mais flexível que uma CPLD (Complex Programmable Logic Device), pois permite a implementação de muitas lógicas complexas, e pode ser utilizada para a implementação de circuitos lógicos digitais que se equivalem a milhões de Portas Lógicas (NAVABI, 2007). Uma FPGA possui muitos blocos lógicos pequenos ligados por canais de conexão, cada um destes blocos lógicos consiste em um elemento lógico muito pequeno. Cada elemento lógico possui apenas um flip-flop que é configurado e controlado individualmente. A complexidade lógica de cada elemento lógico contém de 10 à 20 portas lógicas (NAVABI, 2007). Outro recurso adicional na estrutura da FPGA são os blocos de memória que podem ser configurados como memória RAM (Random Access Memory) (NAVABI, 2007). Fig. 2.1 – Estrutura Geral de uma FPGA. FONTE: Adaptada de LIMA (1999). Como mostra a Fig. 2.1, uma FPGA é um arranjo de muitos blocos lógicos interligados por meio de canais de conexão horizontal e vertical. Os blocos do tipo RAM podem também ser utilizados 13 para implementação lógica ou podem ser configurados para formar bancos de memória de tamanhos variados (NAVABI, 2007). 2.2 – O Kit de Desenvolvimento DE2 O Kit de Desenvolvimento DE2 da Altera, Figura 2.2, possui características que permitem a criação e implementação de uma vasta gama de aplicações, desde simples circuitos indo até projetos complexos multimídia. Fig. 2.2 – Kit DE2 de Desenvolvimento. FONTE: ALTERA (2007). A placa do Kit de Desenvolvimento é composta pelos seguintes componentes (ALTERA, 2007): • Altera Cyclone II EP2C35F672C6 FPGA • Altera EPCS16 – Dispositivo de configuração Serial • USB Blaster para programação • 512 Kbytes SRAM (Static Random Access Memory) • 8 Mbytes SDRAM (Synchronous Dynamic Random Access Memory) • 4 Mbytes Flash Memory • Soquete para SD Card • Botões • Interruptores • LEDs (Light-Emitting Diode) vermelhos • LEDs verdes • Osciladores de 50 MHz, 27 MHz e conector para oscilador externo • CODEC (Coder-Decoder) de Áudio de 24 bits 14 • VGA (Video Graphics Array) DAC (Digital-to-Analog Converter) de 10 bits • TV Decoder (NTSC/PAL) • Controlador Ethernet 10/100 • Controlador USB com conectores do Tipo A e do Tipo B • Transceiver RS-232 • Transceiver IrDA (Infrared Data Association) • Conector PS/2 • Dois barramentos expansores de 40 pinos com proteção de Diodos 2.3 – O Processador NIOS II O processador Nios II é um processador RISC (Reduced Instruction Set Computer) que possui conjunto de instruções, caminho de dados e espaço de endereçamento todos com tamanho de 32 bits, 32 registradores de propósito geral, 5 registradores de controle, 32 fontes externas de interrupção, módulo de depuração auxiliado por hardware e suporte para acessar dispositivos de E/S além de chips de memória (ALTERA, 2007). A arquitetura do processador é do tipo load/store e possui a ordenação dos bits de forma little endian. A frequência de clock depende muito das características personalizadas pelo projetista e podem variar de 165 à 200 MHz, obtendo uma performance de até 250 DMIPS (Dhrystone Million Instructions per Second) (ALTERA, 2007). Os modos de endereçamento suportados pela arquitetura do NIOS II são (ALTERA, 2007): • Endereçamento por registrador: o endereço encontra-se em um registrador; • Endereçamento por deslocamento: o endereço é calculado com a soma do conteúdo do registrador com um valor de 16 bits com sinal positivo ou negativo; • Endereçamento imediato: o endereço é passado diretamente na instrução; • Endereçamento indireto por registrador: o endereço esta na memória apontada pelo conteúdo do registrador. • Endereçamento absoluto: utiliza endereçamento por deslocamento com o registrador “r0”, no qual o valor é sempre 0x00. 15 Uma das características que diferenciam o NIOS II da maioria dos processadores para sistemas embarcados é o fato de ele ser um processador com núcleo controlado por software e configurável, o que permite que características sejam adicionadas ou removidas do processador. Como o processador tem esta característica de ser configurável, é possível que um sistema embarcado que o utilize tenha os seguintes componentes personalizados pelo projetista (ALTERA, 2007): • Periféricos padrões: temporizadores, interface de comunicação serial, pinos de E/S, controladores de memória SDRAM, e interfaces para outras memórias; • Periféricos personalizados: para realizar alguma função específica de código que consome a maioria dos ciclos da CPU (Central Processing Unit) ; • Mapa de endereços: da mesma forma que é possível criar controladores de memórias ou periféricos personalizados, o mapa de endereços também precisa ser configurável de modo que se possa endereçar corretamente todos os dispositivos; • Instruções personalizadas: permite a adição de instruções na ULA (Unidade lógica e aritmética). Mesmo sendo possível personalizar todos os componentes referenciados acima, a Altera já disponibiliza algumas “versões” do NIOS II , como mostra a Tabela 2.1, a fim de facilitar o trabalho dos projetistas: o Nios II/e, voltado para projetos em que o tamanho do núcleo deve ser o menor possível e a velocidade de execução de instruções não é um aspecto crítico; o Nios II/f, que tem por objetivo acelerar a execução das instruções independentemente do aumento que pode acarretar no tamanho do núcleo do processador; e o Nios II/s, que busca equilibrar o tamanho do núcleo do processador com a velocidade de execução das instruções, sendo um meio termo entre os dois anteriores (DEVEGILI et al., 2004). TABELA 2.1 – Tipos de Núcleo do Processador NIOS II FONTE: Adaptada de ALTERA (2007). 16 2.4 – O Sistema Operacional uClinux O Sistema Operacional uClinux ou “micro-controlador Linux” é a variante mais popular da tendência dominante Linux, especialmente desenvolvido para microprocessadores sem MMU (Memory Management Unit). A falta de MMU é um fator muito comum em microprocessadores de baixo custo, em que o preço dos componentes é crucial. O Sistema Operacional uClinux é totalmente livre de royalties e é uma solução de código-fonte aberto (NIKKANEN, 2003). 2.4.1 – A História do uClinux O projeto uClinux iniciou-se em 1997, com a meta de criar-se uma versão derivado do Linux Kernel 2.0 para microcontroladores de baixo custo. Foram Jeff Dione e Kenneth Albanowski juntamente com um grupo de desenvolvedores, que vislumbraram sobre a possibilidade de embarcar o Sistema Operacional Linux em controladores de rede sem MMU, para que se pudesse manipular a comunicação entre a Rede e o Sistema de Comunicação. A primeira versão do pequeno Sistema Operacional foi criada para o processador Motorola 68000, no qual era baseado no microprocessador MC68328 Dragonball que era utilizado como controlador SCADA (Supervisory Control and Data Acquisition) em 1997/98. A primeira versão pública da comunidade open-source foi liberada como um Sistema Operacional alternativo para Palm Pilot em fevereiro de 1998 (NIKKANEN, 2003). 2.4.2 – A Arquitetura do uClinux O Sistema Operacional uClinux é o mais popular para sistemas embarcados. O seu Kernel suporta diferentes plataformas de CPU, incluindo ColdFire, Axix ETRAX, ARM, Atari 68k, NIOS e muitos outros. Ele tem crescido exponencialmente com cada vez mais e mais microprocessadores sem MMU recebendo seus próprios ports. A diferença principal se comparado com o Linux é a falta de MMU e o fato de ser desenvolvido para soluções muito compactas. Da mesma forma que o Linux, uClinux tem um forte suporte a redes incluindo uma completa Stack TCP/IP (Transmission Control Protocol / Internet Protocol) e suporte a uma grande variedade de protocolos de rede. Ele também tem suporte a vários diferentes sistemas de 17 arquivos, incluindo alguns destinados para aplicações embarcadas. Tenta-se manter a compatibilidade do uClinux com Linux o máximo possível. Isto significa que diferentes aplicações desenvolvidas sobre a GPL (General Public License) devem também estar adaptadas para suportar versões Linux sem MMU, usualmente isto requer pequenas mudanças. Isto logicamente esta limitado fisicamente pelo hardware do sistema embarcado, devido a carência de compatibilidade de alguns periféricos (NIKKANEN, 2003). 18 CAPÍTULO 3 – ESPECIFICAÇÃO DO PROJETO 3.1 – Especificação do Software O software deste projeto é a imagem do Kernel do uClinux que deve ser customizado e compilado para total compatibilidade com o Hardware embarcado na FPGA. 3.2 – Especificação do Hardware A Figura 3.1 apresenta uma visão geral do hardware do sistema em forma de diagrama em blocos, demonstrando como as interfaces de conexão e memórias externas estão conectadas à FPGA. Fig. 3.1 – Diagrama em Blocos do Hardware 3.2.1 – Arquitetura do Núcleo do Processador NIOS II Na Figura 3.2 é apresentada a estrurura interna do Núcleo do Processador NIOS II em forma de diagrama em blocos. É importante salientar que, como o NIOS II é um processador configurável 19 pelo projetista, os componentes básicos mostrados na Fig. 3.2 não são necessariamente implementados via hardware, podendo ser emulados via software ou simplesmente omitidos, desde que a configuração final permita a execução do conjunto de instruções do NIOS II (DEVEGILI et al., 2004). Fig. 3.2 – Núcleo do Processador NIOS II FONTE: DEVEGILI et al. (2004) 3.2.2 – Memória Cache do Processador NIOS II Como pode ser visto na Figura 3.3, a arquitetura do Processador NIOS II suporta que memórias cache, implementadas dentro do núcleo do processador, sejam ligadas nas portas mestre de dados e de instruções, melhorando assim o tempo de acesso médio às memórias. Assim como os outros componentes básicos, as memórias cache são configuráveis pelo projetista. 20 Fig. 3.3 – Memória Cache NIOS II FONTE: DEVEGILI et al. (2004) 3.3 – Especificação da Validação do Software A validação do software se faz pela perfeita integração dos elementos criados em linguagem de descrição de hardware com o Kit de Desenvolvimento DE2, além de que o Kernel gerado deve conseguir acessar os dispositivos de hardware. 3.4 – Especificação da Validação do Hardware A validação do hardware se faz pelo sucesso na compilação do projeto do Quartus II e pelo total funcionamento das Memórias, interface de Rede, interface PS/2 e interface de vídeo. A validação do hardware esta totalmente atrelada à validação do software, sendo que só é possível validar o hardware através de acessos via o Sistema Operacional uClinux. 21 3.5 – Recursos Necessários Software: • Altera Quartus II Subscription Versão 6.1 • Alterar Nios II Embedded Design Suite Versão 6.1 • Altera MegaCore IP • Distribuição Linux CentOS-5 Hardware: • Kit Altera DE2 NIOS • Monitor 17” SVGA • Teclado alfa-numérico PS/2 • Pendrive de 512 Mbytes 3.6 – Viabilidade Técnico-econômica Para desenvolvimento do projeto, os principais recursos foram disponibilizados pelo Curso de Engenharia da Computação. Porém visando contabilizar o custo total do projeto, todos os recursos utilizados foram listados na Tabela 3.1, sem levar em consideração ferramentas de desenvolvimento como o microcomputador e os softwares envolvidos. Considerou-se também o tempo de trabalho no desenvolvimento do projeto, desde a fase de pesquisa até a documentação final. TABELA 3.1 – Relação de custos dos recursos utilizados 22 CAPÍTULO 4 – DESENVOLVIMENTO E IMPLEMENTAÇÃO A implementação deste projeto tem como objetivo criar um sistema capaz de executar a distribuição linux uClinux e alguns aplicativos que devem conter na imagem do Kernel gerado, isto é feito através da integração de blocos de descrição de hardware e ajuste dos mesmos. Entende-se por ajustes a definição das configurações além de números de interrupções e endereços de acesso base e final de cada módulo. 4.1 – Os Módulos de Hardware Utilizados 4.1.1 – Núcleo do Processador NIOS II (cpu_0) O Núcleo utilizado neste projeto é do Tipo Nios II/f e está configurado da seguinte forma: • Memória de Cache de Instruções de 4 Kbytes • Memória de Cache de Dados de 2 Kbytes com tamanho de 4 bytes cada linha de dados • Clock de entrada de 100 MHz (atingindo até 101 DMIPS) • Módulo de depuração JTAG Nível 1 • Endereço de interrupções base: IRQ (Interrupt Request) 0 • Endereço de interrupções final: IRQ 31 • Módulo de depuração com Endereço base: 0x00680000 • Módulo de depuração com Endereço final: 0x006807FF 4.1.2 – Interface de Acesso à Mem. Flash (tri_state_bridge_0 & cfi_flash_0) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00000000 • Endereço final: 0x003FFFFF A Fig. 4.1 apresenta as configurações utilizadas para a interface de acesso à memória Flash. 23 Fig. 4.1 – Configurações da Interface de Acesso à Memória Flash 4.1.3 – Controlador da Memória SDRAM (sdram_0) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00800000 • Endereço final: 0x00FFFFFF A Fig. 4.2 apresenta as configurações utilizadas para o módulo de controle da memória SDRAM. Fig. 4.2 – Configurações do Controlador de Memória SDRAM 24 4.1.4 – Controlador da Memória Flash (epcs_controller) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00680800 • Endereço final: 0x00680FFF • IRQ 0 4.1.5 – Interface JTAG de Debug via Software (jtag_uart_0) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x006810F0 • Endereço final: 0x006810F7 • IRQ 1 A Fig. 4.3 apresenta as configurações utilizadas para a Interface de Debug via Software. Fig. 4.3 – Configurações da Interface de Debug via Software 25 4.1.6 – Controlador de Comunicação UART (uart_0) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00681000 • Endereço final: 0x0068101F • IRQ 2 A Fig. 4.4 apresenta as configurações utilizadas para o Controlador de Comunicação UART. Fig. 4.4 – Configurações do Controlador de Comunicação UART 4.1.7 – Temporizador 0 (timer_0) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00681020 • Endereço final: 0x0068103F • IRQ 3 26 A Fig. 4.5 apresenta as configurações utilizadas para o Temporizador 0. Fig. 4.5 – Configurações do Temporizador 0 4.1.8 – Temporizador 1 (timer_1) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00681040 • Endereço final: 0x0068105F • IRQ 4 A Fig. 4.6 apresenta as configurações utilizadas para o Temporizador 1. 27 Fig. 4.6 – Configurações do Temporizador 1 4.1.9 – Pinos de Entrada Paralela (button_pio) Este módulo é parte integrante do software Quartus II 6.1 e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00681090 • Endereço final: 0x0068109F • IRQ 5 A Fig. 4.7 apresenta as configurações utilizadas para os Pinos de Entrada Paralela. Fig. 4.7 – Configurações dos Pinos de Entrada Paralela 28 4.1.10 – Controlador da Memória SRAM (sram_0) Este módulo é parte integrante do CD de instalação do Kit DE2 da Altera, e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00600000 • Endereço final: 0x0067FFFF 4.1.11 – Controlador Ethernet (DM9000A) Este módulo é parte integrante do CD de instalação do Kit DE2 da Altera, e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x006810F8 • Endereço final: 0x006810FF • IRQ 6 4.1.12 – Controlador USB (ISP1362) Este módulo é parte integrante do CD de instalação do Kit DE2 da Altera, e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x006810B0 • Endereço final: 0x006810BF • IRQ 7 & IRQ 8 4.1.13 – Controlador VGA (vga_controller_0) Este módulo é parte integrante do kit de desenvolvimento Lancelot da Microtronix, está adaptado para funcionar com o kit DE2 da Altera, e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00682000 • Endereço final: 0x0068200F A Fig. 4.8 apresenta as configurações utilizadas para o Controlador de Vídeo. 29 Fig. 4.8 – Configurações do Controlador VGA 4.1.14 – Controlador PS/2 (ps2_0) Este módulo é parte integrante do CD de instalação do Kit DE2 da Altera, e está customizado da seguinte forma: • Clock de entrada de 100 MHz • Endereço base: 0x00682010 • Endereço final: 0x00682017 • IRQ 9 4.2 – O Projeto de Hardware no Quartus II 4.2.1 – O Projeto no SOPC Todos os módulos apresentados anteriormente foram configurados e integrados ao projeto utilizando-se a ferramenta do Quartus II chamada SOPC (System On a Programmable Chip). A Fig. 4.9 apresenta como ficou o projeto após a integração de todos estes módulos. 30 Fig. 4.9 – Módulos de Hardware Integrados via SOPC 4.2.2 – O Esquemático Final do Quartus II Para conclusão do Projeto de Hardware no Quartus II foi necessária a criação de módulos auxiliares como: PLLs (Phase-Locked Loop) para serem utilizadas como divisores/multiplicadores de clock; circuito de Reset para poder haver a reinicialização do sistema; além de um circuito de configuração e inicialização de alguns pinos de interface. Depois de finalizado os testes foram adicionados ao projeto o restante dos componentes que compõe o Kit de Desenvolvimento Altera DE2, com o único objetivo de que associados seus pinos com a FPGA todos que não estivessem sendo utilizados seriam configurados por segurança para modo Tri-State. A Fig. 4.10 apresenta como ficou o Esquemático final do Projeto no Quartus II com a integração dos módulos criados via SOPC e os módulos criados diretamente no Quartus. 31 Fig. 4.10 – Projeto Completo no Modo de Esquemático do Quartus II 32 4.3 – O Kernel do uClinux Inicialmente deve-se instalar a distribuição do Kernel do uClinux em algum Sistema Operacional Linux. O Sistema Operacional utilizado para compilar o Kernel do uClinux é o CentOS versão 5. O CentOS é uma distribuição Linux baseada nos códigos-fonte da Red Hat Enterprise Linux e é mantido pelo projeto “CentOS Project”. A distribuição do uClinux utilizada é a “uClinux-dist-20070130”. Esta distribuição contém o pacote completo do código-fonte do uClinux, juntamente com o Kernel (versões: 2.0.39, 2.4.32 e 2.6.19), as bibliotecas e o código-fonte das aplicações compatíves com o mesmo. 4.3.1 – Compilando o Kernel do uClinux O primeiro passo é configurar qual é a arquitetura de Hardware que compõe o Projeto. Isto é feito através do arquivo gerado pelo Quartus II que contém a extensão “.ptf”. Neste projeto o nome o arquivo é “HardwareNiosII.ptf”, este arquivo contém a descrição completa do sistema de hardware criado no SOPC, isto inclui configurações e parâmetros personalizados. A Fig. 4.11 apresenta como integrar este arquivo de descrição de hardware ao kernel do uClinux. Fig. 4.11 – Integrando arquivo de Descrição do Hardware ao Kernel do uClinux A execução da linha de comando mostrada na Fig. 4.11 faz com que um pequeno wizard de seleção de hardware seja iniciado. Como mostra a Fig. 4.12 este pequeno wizard é composto por três passos, onde no primeiro é solicitada a seleção do processador que deve ser utilizado na compilação do kernel, como o projeto contém apenas um processador NIOS II, apenas o mesmo é listado e deve ser selecionado; o segundo passo lista todos os dispositivos disponíveis no projeto com o qual pode-se armazenar a imagem do kernel do uClinux, como o projeto contém apenas uma memória Flash, apenas a mesma é listada e deve ser selecionada; e o terceiro passo lista todos os controladores de memórias disponíveis no projeto com o qual pode-se executar o kernel do uClinux, como o projeto contém 3 tipos de memórias, todas os três controladores são listados, mas deve-se selecionar o Controlado da Memória SDRAM. 33 Fig. 4.12 – Wizard de seleção de Hardware A Fig. 4.13 apresenta um sumário com as configurações realizadas no wizard anterior. Fig. 4.13 – Sumário do Wizard de Configuração O próximo passo é a execução da linha de comando: “make menuconfig”, como mostra a Fig. 4.14, esta linha de comando executará o wizard de configurações das opções do kernel, com as quais podemos ou não personalizar. Fig. 4.14 – Execução do menuconfig A Fig. 4.15 apresenta a interface inicial do “menuconfig”, aonde se deve selecionar: 34 • Versão kernel que se deseja utilizar (2.6.19 neste projeto) • Versão da Biblioteca libc que se deseja utilizar • Opções que se deseja configurar e customizar Fig. 4.15 – Interface Inicial do menuconfig A Fig. 4.16 apresenta a interface de configuração do kernel, aonde se pode configurar os device drivers, tipos de sistemas de arquivos, interfaces de rede, características do processador, opções de criptografia, entre outros. Fig. 4.16 – Configurações do Kernel 35 A Fig. 4.17 apresenta a interface de configuração das aplicações que acompanharão o kernel, sejam elas aplicações padrão ou customizadas. Fig. 4.17 – Configuração das Aplicações do Kernel O próximo passo é executar a construção do sistema de arquivos e pastas do kernel através da linha de comando: “make romfs”. A Fig. 4.18 apresenta como isto deve ser feito. Fig. 4.18 – Construção do Sistema de Arquivos e Pastas Executados todos os passos anteriores o kernel esta apto à ser compilado por inteiro. Através da linha de comando: “make”, como mostra a Fig. 4.19, todos os módulos que foram selecionados e 36 configurados anteriormente serão compilados. Este processo leva entre 5 a 7 minutos para ser finalizado. Fig. 4.19 – Linha de Comando para compilação do Kernel Após a compilação completa do kernel do uClinux, deve-se finalmente gerar a imagem do Kernel, esta é a imagem que será copiada para memória Flash do sistema e será descompactada e executada na memória SDRAM, para gerarmos esta imagem devemos executar a linha de comando: “make linux image”, como mostra a Fig. 4.20. A Imagem gerada possui o nome “zImage” e seu tamanho pode variar de acordo com os device drivers e aplicativos que foram integrados e customizados no Kernel. Fig. 4.20 – Criando a Imagem do Kernel 4.4 – Embarcando o Sistema Para embarcar tanto a arquitetura de hardware na FPGA (HardwareFPGA.sof) como o imagem do Kernel do uClinux (zImage) geradas, foi utilizado o software “Nios II 6.1 Command Shell”. Primeiramente deve-se converter o arquivo HardwareFPGA.sof para que ele possa ser armazenado na memória flash e posteriormente gravado na FPGA. A linha de comando para esta conversão é: sof2flash --epcs --input=HardwareFPGA.sof -output=HardwareFPGA.flash 37 Depois de gerado o arquivo HardwareFPGA.flash deve-se envia-lo para o Controlador de Memória Flash, pois este será o encarregado de gravar o sistema de hardware na FPGA. A linha de comando para esta gravação é: nios2-flash-programmer --epcs --base=0x00680800 HardwareFPGA.flash Podemos perceber que o endereço utilizado como base é o endereço do controlador de Memória Flash. O próximo passo é converter a imagem do Kernel em arquivo .flash para que o mesmo fique armazenado na memória flash. A linha de comando para esta conversão é: elf2flash --base=0x00000000 --end=0x003FFFFF -reset=0x00000000 --input=zImage --output=uclinux.flash --boot= $SOPC_KIT_NIOS2/components/altera_nios2/boot_loader_cfi.srec Podemos perceber que os endereços utilizados como base e final são os endereços de acesso à Memória Flash. E, por fim, o último passo é gravar a imagem já convertida na Memória Flash. A linha de comando para esta gravação é: nios2-flash-programmer --base=0x00000000 ext_ uclinux.flash 38 CAPÍTULO 5 – VALIDAÇÃO E RESULTADOS Os resultados finais do projeto foram totalmente satisfatórios, tendo em vista que todas as funcionalidades propostas originalmente foram alcançadas com sucesso, além de outras características que não constavam na proposta original, mas que também obtiveram sucesso de funcionamento. A Fig. 5.1 demonstra o Sistema Operacional uClinux sendo inicializado via terminal de acesso USB. Fig. 5.1 – uClinux sendo inicializado via Terminal USB 39 A Fig. 5.2 apresenta o Sistema Operacional uClinux reconhecendo automaticamente o pendrive da Kingston de 512 Mbytes, no momento exato em que ele é conectado na porta USB do Kit DE2 da Altera. Fig. 5.2 – Sistema Operacional reconhecendo Pendrive automaticamente A Fig. 5.3 apresenta o sistema sendo acessado via FTP (File Transfer Protocol) por outro computador da rede. Fig. 5.3 – Sistema sendo acessado via FTP A Fig. 5.4 apresenta o sistema sendo acessado via navegador de internet. 40 Fig. 5.4 – Sistema sendo acessado via navegador de internet A Fig. 5.5 apresenta o Sistema Operacional uClinux sendo executado no modo gráfico. Fig. 5.5 – Sistema sendo executado em modo gráfico 41 A Fig. 5.6 apresenta o sistema executando um aplicativo de relógio. Fig. 5.6 – Sistema executando aplicativo de relógio A Fig. 5.7 apresenta o sistema executando o jogo nTetris. Fig. 5.7 – Sistema executando jogo nTetris 42 A Fig. 5.8 apresenta o sistema executando um aplicativo de visualização de imagens. Fig. 5.8 – Sistema executando aplicativo de visualização de imagens 43 CAPÍTULO 6 - CONCLUSÃO O sistema se mostrou bastante eficiente e com bom desempenho (percepção humana) se comparado a PDAs existentes no mercado (Palm, Pocket, etc.), mas devido a uma Memória Flash de tamanho pequeno a imagem do Kernel fica limitada, não permitindo adicionar maiores recursos e aplicativos, além de que, como o Processador NIOS II não possui MMU, e a Memória SDRAM possui um tamanho pequeno, foi identificado que a execução de alguns aplicativos ao mesmo tempo pode ocasionar invasão de área de Memória causando o travamento do sistema e obrigando que o mesmo seja reiniciado. A utilização apesar de fácil é mais intuitiva para usuários que já conheçam e já utilizaram alguma distribuição Linux, pois este tipo de Sistema Operacional tem suas particularidades se comparadas a outros que estão no mercado. Como melhorias futuras, poderia citar a confecção de um Kit de desenvolvimento que contenha uma Memória Flash e uma Memória SDRAM de maior capacidade, pois os aplicativos e device drivers que se pode agregar na imagem do Kernel ficam limitados de acordo com o espaço disponível para armazenamento e execução respectivamente, além de a expansão das interfaces, por exemplo: mouse USB, unidades de armazenamento IDE em vez da utilização de uma Memória Flash de tamanho maior, interface de áudio, interface de rede wireless, interface touchscreen. 44 CAPÍTULO 7 - REFERÊNCIAS BIBLIOGRÁFICAS UNIVERSIDADE FEDERAL DO PARANÁ. Normas para apresentação de documentos científicos. Editora UFPR, volume 6, 2003. ALTERA CORPORATION. Cyclone II Device Handbook. Disponível em: http://www.altera.com/literature/hb/cyc2/cyc2_cii5v1.pdf. Acessado em: Novembro de 2007. ALTERA CORPORATION. NIOS II Processor Reference Handbook. Disponível em: http://www.altera.com/literature/hb/nios2/n2cpu_nii5v1.pdf. Acessado em: Novembro de 2007. ALTERA CORPORATION. NIOS II Software Developer’s Handbook. Disponível em: http://www.altera.com/literature/hb/nios2/n2sw_nii5v2.pdf. Acessado em: Novembro de 2007. ALTERA CORPORATION. QUARTUS II Version 7.1 Handbook. Disponível em: http://www.altera.com/literature/hb/qts/quartusii_handbook.pdf. Acessado em: Novembro de 2007. ALTERA CORPORATION. DE2 Development and Education Board User Manual. Disponível em: http://www.altera.com/education/univ/materials/boards/DE2_UserManual.pdf. Acessado em: Novembro de 2007. DEVEGILI, A. J.; et al. O PROCESSADOR ALTERA NIOS II. Campinas, 2004. Trabalho Final da Disciplina Arquitetura de Computadores I. NAVABI, Z. Embedded Core Design with FPGAs. McGraw-Hill. New York, 2007. LIMA, F. G. Projeto com Matrizes de Células Lógicas Programáveis. Porto Alegre, 1999. Dissertação (Mestrado). NIKKANEN, K. uClinux as an embedded Solution. 2003. Bachelor's Thesis PERRY, D. L. VHDL: Programming by Examples. McGraw-Hill. New York, 2002. YAGHMOUR, K., Building Embedded Linux Systems. O’REILLY, 2003. 45 AMORE R. d’. VHDL: Descrição e Síntese de Circuitos Digitais. LTC. Rio de Janeiro, 2005. RUBINI, A.; CORBET, J. Linux Device Drivers. O’REILLY, 2001. BROWN, S. D. VRANESIC, Z. G., Fundamentals of Digital Logic with Verilog Design. McGraw-Hill. New York, 2003. 46 CAPÍTULO 8 – ANEXOS 47 8.1 – Artigo Científico 48 8.2 – Manual 49