Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO TRABALHO DE CONCLUSÃO DE CURSO Desenvolvimento e aplicações de sistemas embarcados em FPGA Aluno: Desnes Augusto Nunes do Rosário Orientador: Prof. Dr. Gláucio Bezerra Brandão Natal/RN, 02 de Julho de 2010 UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO TRABALHO DE CONCLUSÃO DE CURSO Desenvolvimento e aplicações de sistemas embarcados em FPGA Trabalho de Conclusão de Curso Submetido ao Departamento de Engenharia de Computação e Automação do Centro de Tecnologia da Universidade Federal do Rio Grande do Norte, como parte dos requisitos necessários para obtenção do grau de Engenheiro de Computação com habilitação em Automação Industrial. Aluno: Desnes Augusto Nunes do Rosário Orientador: Gláucio Bezerra Brandão Natal/RN, 02 de Julho de 2010 UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO TRABALHO DE CONCLUSÃO DE CURSO Trabalho de conclusão de curso apresentado à banca examinadora composta pelos seguintes membros: __________________________________________________________________ Prof. Dr. Gláucio Bezerra Brandão (Orientador) Professor do Departamento de Engenharia Biomédica – UFRN __________________________________________________________________ Prof. Dr. Alberto Nicolau Professor do Departamento de Engenharia Elétrica – UFRN __________________________________________________________________ Prof. Dr. George Carlos do Nascimento Professor do Departamento de Engenharia Biomédica – UFRN AGRADECIMENTOS Agradeço a Deus, que me carregou nos braços nestes cinco anos de luta e me permitiu escolher a cidade do Natal para residir e a UFRN para ser realizar este curso. À minha mãe Luciene S. Nunes, que lutou diariamente nos EUA durante anos, para me proporcionar a oportunidade de estudar e de me dedicar aos estudos. Mesmo com toda esta distância, agradeço por todo amor, carinho, apoio, investimento e compreensão, sem os quais jamais seria possível concluir este curso sem grandes dificuldades. Ao meu pai Augusto F. Rosário e minha irmã Lyna K. Rosário, por todo amor e carinho. À minha namorada Ana M. B. Barufi, que muito além de proporcionar diversos momentos felizes ao seu lado, tem me apoiado e dado forças em uma fase difícil, e auxiliou nas correções ortográficas deste trabalho. Ao Brasil, que me proporcionou a oportunidade de receber uma educação superior gratuita e de qualidade. Oportunidade esta que não recebi nos anos em que morava nos EUA. À minha universidade que me proporcionou além da educação, a oportunidade de intercâmbio no período de um ano na McMaster University em Hamilton, ON - Canadá. O intercâmbio proporcionou o conhecimento necessário para realizar este trabalho de conclusão de curso, assim como permitiu que eu conhecesse a minha namorada. Aos meus professores do DCA, em especial ao Professor Glaúcio, por este ano de orientação tanto na pesquisa de iniciação científica quanto neste trabalho de conclusão de curso. À FAPERN, pelo auxílio financeiro neste último ano que permitiu a minha dedicação ao projeto que contribuiu para a composição deste trabalho. À amiga Alyana C. M. de Barros, por ter lutado arduamente em busca de minha carteira de reservista militar no ano de 2005, enquanto eu estava nos EUA. Sou grato, pois sem este documento, ela não poderia realizar minha matricula na UFRN nas últimas horas do último dia de inscrição. Agradecendo aqui, cumpro uma antiga promessa. Aos demais familiares, amigos do Brasil e dos EUA, e colegas de curso, por estarem sempre ao meu lado em todos os momentos, assim como por me acompanharem nos momentos de trabalho e estudo como também diversão e alegria em algumas horas vagas. RESUMO Este trabalho apresenta o estudo das aplicações e metodologias de desenvolvimento de sistemas embarcados nas placas de estudo com FPGA’s da Empresa Altera. Esta companhia adota uma metodologia modular de desenvolvimento de sistemas embarcados. Tal metodologia foi abordada junto com o detalhamento das IDE’s e etapas realizadas neste processo, o qual modela a criação de camadas de hardware formadas por componentes tais como a CPU Nios II, memórias, LED’s e outros periféricos. A camada de hardware tem o intuito de executar códigos em uma camada de software em C, também embarcada nestes sistemas. Consequentemente, a metodologia discutida foi aplicada na criação de um sistema digital dedicado a vídeo na placa de estudo DE2. Este sistema tem a função de enviar sinais de vídeo à saída VGA da placa, que são configurados na camada de software. Por fim, o trabalho propõe uma nova modelagem ao sistema desenvolvido, que integra o sistema digital dedicado a vídeo com a linguagem de computação gráfica OpenGL. Assim, também se propõe que o sistema de modelagem gráfica em 3D seja integrado aos dispositivos de E/S (GPIO) destas placas, com o intuito de realizar aplicações voltadas para as áreas biomédica e petrolífera. ABSTRACT This paper presents the study of applications and development methodologies applied to the creation of embedded systems in the Development and Education Boards with FPGA’s from the Altera Corporation. The process of creation of embedded systems follows a modular development methodology, which makes use of the IDE's provided by Altera itself. This development methodology, which is discussed in detailed steps, is intended to model hardware layers formed by components such as CPU Nios II, Memories, LEDs and other devices as required by the system project design. This hardware layer has as its purpose the execution of codes in a software layer also embedded in these systems which make use of the high level C language. Consequently, this methodology is applied to create a dedicated digital video system on the DE2 Board from Altera. This system has the functionality of sending video signals to the VGA output from DE2. These signals are configured in the software layer. Finally, this paper proposes a new modeling for the system here developed, which integrates the dedicated digital video system with a known Computer Graphics Language, the OpenGL. Thus, it is also proposed that this 3D embedded modeling system, complemented by the use of the GPIO, can be of use in applications related to the biomedical and petroleum field. i SUMÁRIO SUMÁRIO ................................................................................................................................... I LISTA DE FIGURAS ............................................................................................................ III LISTAS DE TABELAS .......................................................................................................... V LISTA DE SÍMBOLOS E ABREVIATURAS ................................................................ VI 1.0 INTRODUÇÃO............................................................................................................. 1 1.1 Objetivos ..................................................................................................................................2 1.2 Motivação ................................................................................................................................. 3 1.3 Organização do Trabalho ........................................................................................................ 5 2.0 SISTEMAS EMBARCADOS (OU SISTEMAS EMBUTIDOS) ....................... 7 2.1 Sistemas Embarcados nas placas da Altera ............................................................................. 7 2.1.1 Breve histórico das linguagens de descrição de hardware ..................................................... 8 2.1.2 Linguagem de descrição de hardware e seu funcionamento .................................................. 9 2.1.3 A integração e funcionamento de sistemas embarcados nas placas de estudos da Altera 11 2.2 Etapas de desenvolvimento de sistemas embarcados para as FPGA’s da Altera ................ 13 2.2.1 Etapa I: A criação e modelagem dos componentes do sistema e inserção dos mesmos na IDE SOPC ............................................................................................................................................. 13 2.2.2 Etapa II: Componentes especiais e mais complexos através do programa University Cores 14 2.2.3 Etapa III: A integração da camada de hardware feita na IDE Quartus II ......................... 17 2.2.3.1 Subetapa I: Modelagem do sistema através dos sinais de entrada, saída e conexões 18 2.2.3.2 Subetapa II: “Pinagem” dos sinais de entrada e saída ................................................ 19 2.2.3.3 Subetapa III: Compilação e descarregamento da camada de hardware na placa .... 21 2.2.4 Etapa IV: A camada de software na IDE Nios II .................................................................. 22 2.2.4.1 Sistemas Embarcados em Assembler/C/C++ para placas da Altera .......................... 23 2.2.4.2 A arquitetura de desenvolvimento, o uso das Bibliotecas Abstração de Hardware (HAL), tipagem dos tipos de dados na codificação e a biblioteca do sistema embarcado ......... 24 2.2.5 Etapa V: A execução total do sistema através da IDE Altera Debug Program ................. 26 3.0 IMPLEMENTAÇÃO DE UM SISTEMA DIGITAL EMBARCADO DEDICADO A VÍDEO COM O USO DA CPU NIOS II EM UMA FPGA CYCLONE II ......................................................................................................................... 28 3.1 Etapas I & II de desenvolvimento: Modelagem com os componentes e inserção dos mesmos através da IDE SOPC e do patch University Cores. ........................................................................... 28 ii 3.2 Etapa III: integração do hardware feita na IDE Quartus II (Subetapas de Modelagem, “pinagem” e compilação) ................................................................................................................... 32 3.2.1 A resolução da imagem, a estrutura da informação dos pixels e o frame-buffer de pixels embarcado ............................................................................................................................................ 36 3.3 Etapa III: A camada de software na IDE Nios II ................................................................... 37 3.3.1 O uso da biblioteca “system.h” no sistema digital dedicado a vídeo .................................. 37 3.3.2 O uso das bibliotecas HAL no sistema digital dedicado a vídeo ......................................... 38 3.3.3 Código demonstrativo do sistema digital dedicado a vídeo embarcado em FPGA ........... 40 3.4 Etapa IV: A execução e demonstração do sistema dedicado a vídeo, alvo deste TCC .......... 43 4.0 APLICAÇÕES PROPOSTAS DO SISTEMA EMBARCADO DEDICADO A VÍDEO ................................................................................................................................. 45 4.1 A evolução proposta do sistema digital dedicado a vídeo ...................................................... 45 4.1.1 O que é OpenGL? ................................................................................................................... 46 4.1.2 A proposta: OpenGL Embarcado ......................................................................................... 46 4.1.3 Dúvida relativa ao desempenho do OpenGL Embarcado ................................................... 47 4.1.4 Uma solução proposta em caso de fraco desempenho do OpenGL Embarcado................ 48 4.2 Aplicações do OpenGL Embarcado proposto ....................................................................... 49 4.2.1 Aplicação BioFeedArt ............................................................................................................. 49 4.2.2 Aplicação de sistemas embarcados da Altera na criação de sistemas de tempo real petrolíferos ............................................................................................................................................ 51 4.2.2.1 Contextualização em relação ao petróleo ..................................................................... 52 4.2.2.2 Proposta de desenvolvimento de um Sistema Gráfico Para o Auxilio do Processo de Perfuração de Poços Direcionais .................................................................................................... 54 5.0 CONCLUSÃO ............................................................................................................ 57 5.1 Considerações finais ............................................................................................................... 57 5.2 Perspectivas futuras ............................................................................................................... 58 REFERENCIAS BIBLIOGRÁFICAS ............................................................................. 59 iii LISTA DE FIGURAS FIGURA 1 - ENIAC X LAPTOP COMUM. APENAS 60 ANOS OS SEPARAM. .................................. 1 FIGURA 2 - SISTEMAS EMBARCADOS EM FPGA. NA FIGURA A ESQUERDA TEM-SE UM ROBÔ-FPGA QUE USA UMA BATERIA CARRO R/C (REMOTE & CONTROL OU CONTROLE & REMOTO) E UM SERVORMOTOR R/C. NA IMAGEM DA DIREITA TEM-SE UM BRINQUEDO R/C CONTROLADO POR FPGA COM SENSORES IR DE DISTANCIA. [HAMBLEN, 2008] ............................................................................................................................. 3 FIGURA 3 - UMA FPGA STRATIX IV .................................................................................................... 4 FIGURA 4 - ESQUEMÁTICA DA PLACA DE2 QUE TEM UMA FPGA CYCLONE II ....................... 5 FIGURA 5 - PLACA DE2 DA ALTERA COM UMA FPGA CYCLONE II ............................................ 5 FIGURA 6 - TECNOLOGIAS DIFERENTES DE PROGRAMAÇÃO E IMPLEMENTAÇÃO DE SISTEMAS EMBARCADOS. [HAMBLEN, 2008] ........................................................................... 7 FIGURA 7 - LINHA DE DESENVOLVIMENTO BÁSICA PARA A CRIAÇÃO DA CAMADA DE HARDWARE OU DO PRÓPRIO SISTEMA EMBARCADO EM SI NAS PLACAS DA ALTERA [HAMBLEN, 2008]. ............................................................................................................................ 8 FIGURA 8 - ESQUEMATIZAÇÃO DE UM SISTEMA EMBARCADO EM UMA FPGA [ALTERA CORP.: INTRODUCTION TO THE ALTERA NIOS II SOFT PROCESSOR]. ............................. 12 FIGURA 9 - DESENVOLVIMENTO DE SISTEMAS EMBARCADOS USANDO AS IDE’S (INTEGRADED DEVELOPMENT ENVIRONMENT OU AMBIENTE DE DESENVOLVIMENTO INTEGRADO) SOPC, QUARTUS E NIOS II [COE4DS4 EMBEDDED SYSTEMS - LAB #2 - INTRODUCTION TO EMBEDDED SOFTWARE FOR THE NIOS II PROCESSOR]. ................ 13 FIGURA 10 - COMPONENTES DE UM SISTEMA BÁSICO NO SOPC. TEMOS MEMÓRIA, UMA CPU NIOS II, O PROTOCOLO SERIAL DE ESCRITA NA PLACA E O DISPLAY LCD DA PLACA DE2. .....................................................................................................................................14 FIGURA 11 - DESENVOLVIMENTO DE SISTEMAS NA IDE QUARTUS II, NO PRIMEIRO QUADRO ATRAVÉS DA SINTAXE DO VERILOG, NO SEGUNDO ATRAVÉS DE DIAGRAMA DE BLOCOS E PORTAS LÓGICAS. ....................................................................... 18 FIGURA 12 - MODELAGEM DE UM SISTEMA BÁSICO NO MÓDULO GRÁFICO DE PROGRAMAÇÃO DO QUARTUS II .............................................................................................. 19 FIGURA 13 - MÓDULO PIN PLANNER, QUE É USADO PARA A “PINAGEM” DOS COMPONENTES, COMPONDO A INTEGRAÇÃO DA MODELAGEM DO SISTEMA EMBARCADO ÀS FPGA'S .............................................................................................................. 20 FIGURA 14 - IDE NIOS II, USADA PARA A PROGRAMAÇÃO DA CAMADA DE SOFTWARE DE SISTEMAS EMBARCADOS EM FPGA'S ...................................................................................... 22 FIGURA 15 - PESQUISA REALIZADA EM 2006, COM RESPEITO DA PREFERÊNCIA DE LINGUAGEM DE SISTEMAS EMBARCADOS PELA ALTERA. A LINGUAGEM C LIDERA COM MAIS DE 60% [HAMBLEN, 2008]. ...................................................................................... 23 FIGURA 16 - ARQUITETURA DE COMUNICAÇÃO DA APLICAÇÃO DE USUÁRIO COM OS PERIFÉRICOS ATRAVÉS DO HARDWARE DE SISTEMA DE PROCESSAMENTO NIOS II [HAMBLEN, 2008]. .......................................................................................................................... 24 FIGURA 17 - INTERFACE DA IDE ALTERA MONITOR PROGRAM. .............................................. 27 FIGURA 18 - MODELAGEM DO SISTEMA DIGITAL DEDICADO A VÍDEO ................................. 28 FIGURA 19 - MODELAGEM DA CONFIGURAÇÃO DO CONTROLADOR DE VÍDEO VGA. [ALTERA CORP.: USING SOPC BUILDER & DSP BUILDER TOOL FLOW, 2005] ................. 32 FIGURA 20 - UM TIPO DE CONTROLADOR DE VÍDEO ORIUNDO DO SOPC. [HAMBLEN, 2008] ........................................................................................................................................................... 33 FIGURA 21 - INTEGRAÇÃO DOS SINAIS DO SISTEMA DIGITAL DEDICADO A VÍDEO A SEUS RESPECTIVOS PINOS DA FPGA. ................................................................................................. 34 iv FIGURA 22 - “PINAGEM” DA SAÍDA VGA PARA UM DISPOSITIVO DE SAÍDA DE VÍDEO COMO UM MONITOR OU UM PROJETOR. [HAMBLEN, 2008] ............................................... 36 FIGURA 23 - À ESQUERDA, O MODO DE ENDEREÇAMENTO X-Y, ÚNICO DISPONIBILIZADO PARA A PLACA DE2 E A RESOLUÇÃO 640 X 480, QUE FOI A ESCOLHIDA PARA ESTE TRABALHO. [ALTERA CORP.: VIDEO OUT IP CORES FOR ALTERA DE BOARDS, 2009] 37 FIGURA 24 - CONTEÚDO DE UMA VARIÁVEL DE COR. [ALTERA CORP.: VIDEO OUT IP CORES FOR ALTERA DE BOARDS, 2009] .................................................................................. 37 FIGURA 25 - EXECUÇÃO DO SISTEMA DIGITAL DEDICADO A VÍDEO EMBARCADO NA PLACA DE2 UTILIZANDO UMA FPGA CYCLONE II. ............................................................... 44 FIGURA 26 - MODELAGEM DO SISTEMA EMBARCADO DEDICADO A OPENGL. .................... 49 FIGURA 27 - UMA FOLHA DE SAMAMBAIA FORMADA POR UM FRACTAL. MATEMATICAMENTE CONHECIDO POR FETO-FRACTAL. .................................................. 50 FIGURA 28 - MODELAGEM ESQUEMÁTICA DO BIOFEEDART .................................................... 51 FIGURA 29 - REGIÃO DO PRÉ-SAL BRASILEIRO............................................................................. 53 FIGURA 30 - FORMAÇÕES GEOLÓGICAS ANTES DO PRÉ-SAL.................................................... 53 FIGURA 31 - MODELAGEM DE UM POÇO DIRECIONAL ............................................................... 55 v LISTAS DE TABELAS TABELA 1 - UMA TENTATIVA DE ABSTRAÇÃO ENTRE UMA LINGUAGEM DE AUTO NÍVEL EM SOFTWARE PARA OUTRA DE BAIXO NÍVEL EM HARDWARE ..................................... 10 TABELA 2 - COMPILADOR MODULAR DE HARDWARE DA ALTERA. ....................................... 21 TABELA 3 - TIPAGEM DE DADOS DA ALTERA ............................................................................... 25 TABELA 4 - COMPONENTES E CONTROLADORES UTILIZADOS PARA A IMPLEMENTAÇÃO DO SISTEMA DIGITAL DEDICADO A VÍDEO. .......................................................................... 29 TABELA 5 - SINAIS DO CONTROLADOR DE VÍDEO E SUAS RESPECTIVAS CONEXÕES AOS PINOS DA FPGA CYCLONE II ..................................................................................................... 35 TABELA 6 - TABELA DE ALGUMAS CONSTANTES USADAS NO DESENVOLVIMENTO DA CAMADA DE SOFTWARE NA IDE NIOS II................................................................................. 38 TABELA 7 - CÓDIGO EMBARCADO NO SISTEMA DIGITAL DEDICADO A VÍDEO .................. 40 TABELA 8 - FUNÇÕES USADAS PARA ESCREVER, LER E COPIAR DADOS DE UMA ÁREA DE PIXELS NO FRAMEBUFFER DE UM PROGRAMA EM OPENGL. ........................................... 47 TABELA 9 - DADOS QUE PODEM SER UTILIZADOS NA MODELAGEM EM 3D DO SISTEMA EMBARCADO VOLTADO AO AUXÍLIO DE SISTEMAS PETROLIFEROS. ............................ 56 vi LISTA DE SÍMBOLOS E ABREVIATURAS GPS � Global Positioning System ENIAC � Electronic Numeric Integrator And Calculator LCD � Liquid Cristal Display LED � Light Emitting Diode CPU � Central Process Unit R/C � Remote & Control FPGA � Field Programmable Gate Array ASIC’s � Application Specific Integrated Circuit VHDL � VHSIC Hardware Description Language VHSIC � Very High Speed Integrated Circuits DARPA � Defense Advanced Research Projects Agency IEEE � Institute of Electrical and Electronic Engineering DoD � Department of Defense AIDS � Automated Integrated Design Systems GDA � Gateway Design Automation CDS � Cadence Design Systems OVI � Open Verilog Internacional DE2 � Development and Education Board 2 SOPC � System On a Programmable Chip JTAG_UART � Join Test Action Group - Interface UART IDE � Integrated Development Environment SD � Secure Digital UART � Universal Asynchronous Receiver/Transmitter DDR � Double Data Rate RAM � Random Access Memory SDRAM � Synchronous Dynamic Random Access Memory TCP/IP � Transmission Control Protocol / Internet Protocol HAL � Hardware Abstraction Layer SRAM � Static Random Access Memory VGA � Video Graphics Array RGB � Red-Green-Blue vii USB � Universal Serial Bus FIFO � First-In-First-Out GPIO � General Purpose I/O DMA � Direct Memory Access OpenGL � Open Graphics Library FAPERN � Fundação de Apoio e Pesquisa do Estado do Rio Grande do Norte EEG � Electroencephalogram ECG � Electrocardiogram EMG � Electromyography MWD � Measuring While Drilling LWD � Logging While Drilling 1 1.0 Introdução Nas últimas décadas, o mundo tem passado por uma revolução digital que torna a sociedade cada vez mais dependente de tecnologia para trabalhar, pesquisar, obter entretenimento ou simplesmente viver, através de aparelhos diversos como computadores, celulares, sistemas de GPS (Global Positioning System, ou Sistema Global de Posicionamento), marca-passos, dentre muitos outros. Este processo está associado à intensa necessidade de desenvolvimento, qualidade e portabilidade. Cada vez mais, o consumidor de tecnologia deseja aparelhos que sejam melhores, mais portáteis e mais diversificados. Pode-se entender este sentimento ao considerar extremos da evolução dos computadores, desde o século passado até os dias de hoje.No fim da Segunda Guerra Mundial, o mundo foi apresentado ao seu primeiro computador, o ENIAC (Eletronic Numeric Integrator And Calculator, ou Calculadora Integrativa Numérica Eletrônica), que pesava aproximadamente 30 toneladas e totalizava 180 ��de área construída, ou seja, ocupava praticamente a área de uma sala completa. Nem o mais otimista dos cientistas que desenvolveram aquele projeto revolucionário para a época poderia imaginar que, aproximadamente 60 anos depois desta grande descoberta tecnológica, pessoas comuns poderiam levar seus computadores portáteis ao trabalho ou escola. Mais do que isso, não se pensava que os computadores chegariam a pesar menos do que cinco quilogramas em média, nem que viriam a ser quase que infinitamente mais poderosos que o antigo ENIAC em capacidade de processamento. A Figura 1 busca sintetizar esta diferença. Muito já se evoluiu até a atualidade, e a tendência é de que os engenheiros do Século XXI busquem soluções para problemas que sequer foram formulados ainda, e assim contribuam de forma produtiva para esta grande revolução tecnológica. Figura 1 - ENIAC x Laptop Comum. Apenas 60 anos os separam. 2 Por trás da referida revolução computacional, há um exército de desenvolvedores de novas tecnologias, que visam atender os novos requisitos e necessidades de produção, comércio e lazer. Atualmente, não vemos com nenhuma estranheza uma simples padaria ou mercado utilizar um programa de computador para contabilizar suas finanças, o que seria inimaginável há mais de dez anos. Tendo em vista o que foi mencionado acima, este trabalho objetiva agregar novos conhecimentos à área de sistemas embarcados. O expressivo crescimento do comércio destes sistemas e dispositivos atualmente é mais do que evidente, com aparelhos que são geralmente portáteis e têm um ou mais fins específicos para comodidade, lazer e/ou execução de uma determinada função. Por exemplo, um aparelho celular atual possui conexão com a internet, transmite sinal de rádio, reproduz mp3, lê GPS, dentre outras funções. Já o aparelho original, quando foi projetado, possuía somente a função de ligar para outro telefone através de uma comunicação sem fio. A linha de pesquisa que permeia este trabalho pode ser muito rentável por estar relacionada com o constante desenvolvimento voltado ao comércio de videogames, celulares, computadores, entre outros inúmeros dispositivos. A importância do tema torna interessante promover avanços para desenvolver a área de sistemas embarcados. O presente trabalho descreve e discute as atividades realizadas para se embarcar um sistema digital de vídeo em FPGA, além de apresentar uma sugestão de evolução deste dispositivo e enunciar duas possíveis aplicações a este segundo sistema proposto. 1.1 Objetivos O objetivo do trabalho é projetar e relatar o desenvolvimento de um sistema embarcado e de quaisquer controladores que sejam necessários para a obtenção de um bom desempenho de vídeo ao executar programas gráficos em C. A razão da escolha desta linguagem de alto nível para o tratamento de vídeo será discutida mais adiante neste trabalho. Para tal sistema a precisão, exatidão, harmonia, parametrização e temporização dos componentes e controladores são essenciais, de forma a garantir uma boa comunicação entre os diversos componentes e periféricos utilizados. Dentre estes, podem ser destacados: memórias (do programa e a de buffer de vídeo), barramentos, processador, vídeo; e outros diversos periféricos como LCD (Liquid Cristal Display ou Diplay de 3 Cristal Líquido), chaves e LED’s (Light Emitting Diodes ou Diodos Emissores de Luz) utilizados como auxiliares ao desenvolvimento. 1.2 Motivação Uma companhia muito atuante no mercado de sistemas embarcados é a Altera. Seus produtos são especiais devido ao fato da empresa oferecer diversos sistemas que não precisam ser ajustados fisicamente, e sim virtualmente através do hardware que é descrito através de linguagens de descrição especiais, que geram um grande poder de reconfigurabilidade. Além disso, esta companhia desenvolve diversas placas de estudo já preparadas para uma integração que possa proporcionar generalidade para qualquer que seja a necessidade de seus desenvolvedores. Programando os sistemas em linguagem de hardware, podem-se integrar componentes como CPU’s (Central Process Unit ou Unidade de Processamento Central), controladores de memórias, controladores de vídeo e quaisquer outros periféricos, usando como vantagem o fato de que todos os pontos importantes das placas já estão previamente conectados e descritos. Estas placas podem ser utilizadas para diversos projetos; na Figura 2 temos dois exemplos de sistemas embarcados nas placas da Altera: Figura 2 - Sistemas embarcados em FPGA. Na figura a esquerda tem-se um robô-FPGA que usa uma bateria carro R/C (Remote & Control ou Controle & Remoto) e um servormotor R/C. Na imagem da direita tem-se um brinquedo R/C controlado por FPGA com sensores IR de distancia. [Hamblen, 2008] Empresas mundo afora têm percebido o poder oferecido pelas placas da Altera nesta linha de desenvolvimento, devido à possibilidade de criar nas placas sistemas críticos, sistemas de tempo real, servidores web, processadores de vídeo, dentre outros sistemas 4 embarcados. No passado, as placas relacionadas a estas funções tinham de ser modeladas, desenhadas, diagramadas esquematicamente, fabricadas e soldadas desde o botão de início até o LED de saída, proporcionando uma gama maior de possíveis elementos nos quais poderiam existir falhas que gerariam danos ao funcionamento destes sistemas. Com tais placas especiais de estudo, é possível descarregar o código gerado nas linguagens de descrição de hardware nas FPGA's (Field Programmable Gate Array, ou Matriz de Portas Programáveis). As FPGA’s são constituídas por milhares de transistores e fazem basicamente o que vários circuitos integrados fariam, com a diferença de que sua matriz é reprogramável como já mencionado anteriormente. Na Figura 3 temos a foto de uma FPGA da linha Stratix: Figura 3 - Uma FPGA Stratix IV Este trabalho foi desenvolvido na placa de estudos DE2 (Development and Education Board ou Placa de Desenvolvimento e Estudo 2) da Altera que tem uma FPGA Cyclone II, modelada e exibida nas Figuras 4 e 5. 5 Figura 4 - Esquemática da placa DE2 que tem uma FPGA Cyclone II Figura 5 - Placa DE2 da Altera com uma FPGA Cyclone II 1.3 Organização do Trabalho Este trabalho é composto por cinco capítulos, que podem ser resumidos como segue. O presente capítulo traz uma introdução sobre o papel de sistemas embarcados na atualidade. Além disso, também são apresentados alguns conceitos de sistemas embarcados, e de integração de sistemas embarcados nas placas de estudo da companhia Altera. 6 O Capítulo 2 apresenta uma visão mais profunda sobre sistemas embarcados. Os tópicos abordados referem-se à contextualização histórica de desenvolvimento para as placas da Altera, às distinções de linguagens de hardware para as de alto nível, além da metodologia que deve ser abordada para a criação de qualquer sistema embarcado. Tal metodologia utiliza as diversas ferramentas disponibilizadas pela Altera para um desenvolvimento rápido, coeso e preciso. O Capítulo 3 exibe uma aplicação de todos os passos da metodologia abordada no capitulo anterior para a criação de um sistema digital embarcado dedicado a vídeo. O Capítulo 4 discute uma perspectiva futura para uma integração de alto nível no sistema digital dedicado a vídeo implementado no capítulo anterior. Esta integração tem como enfoque uma grande melhoria do sistema implementado, visando o retorno econômico e apontando exemplosde aplicações que poderiam ser realizadas com o sistema proposto. O Capítulo 5 apresenta as conclusões obtidas sobre o desenvolvimento de sistemas embarcados, em especial para o sistema criado neste trabalho. Além disso, são apontadas as perspectivas futuras da integração de alto-nível do sistema aqui desenvolvido. 7 2.0 Sistemas Embarcados (ou Sistemas Embutidos) Um sistema embarcado é um sistema em que toda a unidade de processamento é dedicada para a realização de uma devida função, geralmente restrita por computação de tempo real. Ao contrário dos computadores de propósito geral, os quais trabalham com diversos periféricos e processos, os sistemas embarcados se especializam em funções para as quais se necessita um processamento melhor e dedicado a uma única função. Em geral os sistemas embarcados são usados quando o desempenho aprimorado é uma necessidade, ou quando um processo exige exclusividade. Os sistemas de lógica digital embarcados podem ser implementados através de diferentes tecnologias, tais como lógica padrão, lógica programável, ASIC’s (Application Specific Integrated Circuit ou Circuito Integrado de Aplicação Específica), ou de personalização completa. A Figura 6 subdivide as tecnologias de desenvolvimento, e no caso deste trabalho, foi utilizada a lógica programável, por meio da tecnologia de FPGA’s da Altera. Figura 6 - Tecnologias diferentes de programação e implementação de sistemas embarcados. [Hamblen, 2008] 2.1 Sistemas Embarcados nas placas da Altera As placas da Altera trabalham prioritariamente com as linguagens VHDL (VHSIC Very High Speed Integrated Circuits Hardware Description Language ou Linguagem de Descrição de Hardware de Circuitos Integrados de Velocidade Muito Alta) e o Verilog HDL. Para trabalhar em tais placas deve ser utilizada uma dessas duas linguagens de descrição de hardware para programar e executar os devidos códigos de configuração de hardware. De posse destas linguagens e algumas ferramentas da Altera, 8 é possível criar sistemas embarcados ou ainda criar a camada de hardware para sistemas mais complexos. Na Figura 7 é apresentado um diagrama de passos básicos para criar e trabalhar com sistemas embarcados nas placas de estudo da Altera: Figura 7 - Linha de desenvolvimento básica para a criação da camada de hardware ou do próprio sistema embarcado em si nas placas da Altera [Hamblen, 2008]. 2.1.1 Breve histórico das linguagens de descrição de hardware Existem duas principais linguagens de descrição de hardware: o VHDL e o Verilog HDL. O VHDL foi originalmente desenvolvido sob o comando do DARPA (Defense Advanced Research Projects Agency, ou Agência de Pesquisa Avançada de Defesa dos Estados Unidos) para substituir os complexos manuais de diagramas esquemáticos dos ASICS (Application Specific Integrated Circuit, ou Circuito Integrado de Aplicação Especifica). Em 1987, o IEEE (Institute of Electrical and Electronic Engineering, ou Instituto Elétrico e Eletrônico de Engenharia) padronizou o VHDL. Esta linguagem não é sensitiva à caixa alta (case sensitive), e tem uma sintaxe baseada na primitiva linguagem Ada. Esta última foi desenvolvida pelo DoD (Department of Defense, ou Departamento de Defesa) dos Estados Unidos em 1970, com o objetivo de padronizar a programação e substituir as centenas de linguagens de programação de hardware usadas na época. A denominação Ada tem origem em Ada Lovelace, que é conhecida como a primeira programadora da história da computação. 9 Já a outra linguagem de descrição de hardware aqui estudada, o Verilog HDL, é também disponibilizada pela Altera para modelar sistemas eletrônicos, foi criada por Phil Moorby e Prabhu Goel durante o inverno de 1983/1984 como AIDS (Automated Integrated Design Systems, ou Sistema de Design de Integração Automatizada). Esta sigla, por estar relacionada à outra definição posteriormente utilizada no vocabulário médico foi alterada para GDA (Gateway Design Automation, ou Automação de Design de Portas) em 1985. Esta linguagem foi adquirida pela companhia CDS (Cadence Design Systems, ou Sistemas de Design Cadence) em 1990. Devido ao crescente sucesso do VHDL, a Cadence observou a necessidade da disseminação do conhecimento da linguagem, e assim colocou o Verilog HDL em domínio público através do projeto OVI (Open Verilog Internacional, ou Verilog Aberto Internacional) também conhecido como projeto Accellera. Desta forma, com as correções oficializadas, em 2001 o IEEE padronizou o uso do Verilog HDL como outra de linguagem oficial de descrição de hardware. A linguagem escolhida para este trabalho foi a segunda aqui discutida, o Verilog HDL. 2.1.2 Linguagem de descrição de hardware e seu funcionamento Estas linguagens de descrição de hardware diferem muito das linguagens de alto nível tais como C/C++, Java, entre outras pelo fato das primeiras executarem sua lógica não somente de acordo com o fluxo do algoritmo, mas também seguindo a temporização de um ou mais clocks de processamento durante a execução. As variáveis dos algoritmos de baixo nível são tratadas de maneira completamente distinta das variáveis nas linguagens de alto nível. Isso porque no primeiro caso estamos modelando virtualmente circuitos, o que implica que ao invés de fazermos acesso a um endereço na memória em uma pilha de execução, estamos fazendo acesso a um bloco de registradores e/ou fios elétricos virtuais. Neste nível de hardware, a temporização de atribuição, o tempo de processamento, o bloqueio de acesso e o barramento formam novos tipos de parâmetros e restrições a serem considerados, os quais geralmente não significam empecilhos nas linguagens de alto nível. Na Tabela 1 , para se distinguir uma linguagem de baixo nível de hardware de uma de alto nível de software, tenta-se sem sucesso abstrair um programa em Verilog HDL para C. No Verilog HDL, apresentado na coluna à direita, a cada subida do sinal do 10 reset ou do clock, executamos o bloco always, o que se busca fazer por meio do bloco if à esquerda da Tabela (em C). Entretanto, o tempo de acesso a uma variável em software é “infinitamente” maior do que em hardware, e se este sinal for rápido demais para o software reconhecer, o bloco C possivelmente jamais será executado. É menos provável que isto aconteça no caso do código em hardware descrito em Verilog HDL na segunda coluna. Outra diferença extremamente pertinente é o operador “<=” do Verilog HDL, que é conhecido como non-blocking (ou não-bloqueador), o que significa que esta ação só será executada no próximo ciclo de clock. Isto implica na indiferença de ordem de atribuição, como é feito nas linguagens de alto nível, ou seja, tanto faz, por exemplo, que o trecho “flop1 <= 0” venha antes ou depois do trecho “flop2 <= 1”, pois ambos serão executados simultaneamente no próximo ciclo de clock ou do reset. Tal ação é impossível de ser abstraída nas linguagens de alto nível como C/C++, Java, C#, etc., devido à forma de compilação e execução sequencial destas linguagens. As linguagens de hardware como o VHDL ou o Verilog HDL, podem configurar a não ou simultaneidade das instruções em seu código. Tabela 1 - Uma tentativa de abstração entre uma linguagem de auto nível em software para outra de baixo nível em hardware C Verilog void toplevel (int clock, int reset) { int flop1; int flop2; if ( (reset==1) || (clock==1) ) { if (reset==1) { flop1=0; flop2=1; } else { module toplevel(clock,reset); input clock; input reset; reg flop1; reg flop2; always @ (posedge reset or posedge clock) if (reset) begin flop1 <= 0;flop2 <= 1; 11 flop1=flop2; flop2=flop1; } } } end else begin flop1 <= flop2; flop2 <= flop1; end endmodule Entretanto, mesmo com estes diversos empecilhos de programação e temporização, temos uma forma poderosa de criar e reconfigurar componentes e periféricos eletrônicos, em função dos circuitos que já estão previamente conectados às placas de estudo da Altera. Com isso, torna-se possível unir desempenho e praticidade relacionada ao desenvolvimento e integração do sistema embarcado ou da camada de hardware em si. 2.1.3 A integração e funcionamento de sistemas embarcados nas placas de estudos da Altera No contexto dos sistemas embarcados nas placas da Altera, percebe-se o forte grau de integração destas placas quando se estuda os manuais das FPGA’s, onde é fácil observar que todos os periféricos importantes estão fisicamente conectados às FPGA’s. Logo, para realizar qualquer tarefa e ter o desempenho desejado, precisa-se criar o código orientado à estrutura de desenvolvimento, para obter o desempenho requerido pelos periféricos. Isto é, criar os componentes e/ou drivers necessários para que se realize a comunicação entre os sinais de software e hardware de uma tarefa desejada no sistema embarcado modelado. Na Figura 8, tem-se uma modelagem abstrata desta linha de desenvolvimento. Ela mostra que os controladores, barramentos, sistemas de Debug e o processador Nios II estão carregados dentro do chip FPGA, o qual se comunica com o computador e os chips de memórias, periféricos de E/S e/ou outros externamente, através das ligações físicas dos periféricos e da interface de comunicação com o computador (USB-Blaster (Universal Serial Bus ou Barramento Universal Serial) no caso). 12 Figura 8 - Esquematização de um sistema embarcado em uma FPGA [Altera Corp.: Introduction to the Altera Nios II Soft Processor]. Como se pode observar, todos os periféricos tais como as memórias (exceto a “Memória No Chip”, que é uma pequena memória interna construída na FPGA), portas paralelas e seriais, vídeo e áudio, entre outros, necessitam de seus respectivos controladores embarcados na FPGA. Estes controladores são programados nas linguagens de hardware e descarregados nas FPGA’s através de uma interface USB (USB-Blaster no caso de algumas placas para Windows) conectada ao um computador. Esta interface também é controlador interno na FPGA, que no caso corresponde a interface JTAG-UART (Join Test Action Group ou Grupo de Testes de Ações Unificadas - UART Universal Asynchronous Receiver/Transmitter, ou Receptor/Transmissor Universal Assíncrono). A comunicação para a escrita e/ou leitura de dados nas placas, ocorre através destas interfaces USB-BLASTER e JTAG-UART através de uma estrutura cliente-servidor parecida com a convencional de serviço web. 13 Desta forma, é possível descarregar os códigos de hardware, verificar dados durante uma execução e enviar comandos, o que implica em efetuar o desejado controle dos dispositivos e periféricos no sistema embarcado modelado. 2.2 Etapas de desenvolvimento de sistemas embarcados para as FPGA’s da Altera O desenvolvimento de sistemas embarcados da Altera da forma que foi realizado neste trabalho é um processo complexo e modular. O funcionamento desta linha de desenvolvimento modular está ilustrado na Figura 9. Nesta seção serão descritas todas as etapas necessárias para o desenvolvimento de qualquer sistema embarcado para as placas da Altera seguindo esta linha de desenvolvimento modular e utilizando suas ferramentas de desenvolvimento: SOPC (System On a Programmable Chip ou Sistema Em um Chip Programável), University Cores, Quartus II, Nios II e Altera Debug Program. Figura 9 - Desenvolvimento de sistemas embarcados usando as IDE’s (Integraded Development Environment ou Ambiente de Desenvolvimento Integrado) SOPC, Quartus e Nios II [COE4DS4 Embedded Systems - Lab #2 - Introduction to Embedded Software for the NIOS II Processor]. 2.2.1 Etapa I: A criação e modelagem dos componentes do sistema e inserção dos mesmos na IDE SOPC Sistemas embarcados em geral são compostos por componentes como CPU, memória, LED’s e outros periféricos, conhecidos pelo seu uso bastante comum. A Altera, visando a praticidade, disponibiliza alguns dos componentes comumente 14 utilizados para este desenvolvimento, no intuito de automatizar o processo de implementação em suas FPGA’s. O uso destes componentes mais comuns é possível por meio da IDE do SOPC, que está conectada à IDE Quartus II. A interface do SOPC pode ser visualizada na Figura 10. Figura 10 - Componentes de um sistema básico no SOPC. Temos memória, uma CPU Nios II, o protocolo serial de escrita na placa e o display LCD da Placa DE2. Nesta IDE, podem-se selecionar os mais diversos componentes básicos necessários para o desenvolvimento de qualquer sistema embarcado nas placas da Altera. No sistema básico da imagem acima, por exemplo, foram escolhidos apenas os quatro componentes descritos a seguir: � Memória No Chip (32 Kbytes). � CPU Nios II (tipo f). � JTAG_UART (tem a utilidade de escrita na placa através da interface no computador utilizado para o desenvolvimento). � Controlador de LCD de Caracteres (16 colunas x 2 linhas). 2.2.2 Etapa II: Componentes especiais e mais complexos através do programa University Cores 15 Visando um desenvolvimento educacional mais prático e efetivo, a companhia Altera disponibilizou alguns componentes mais específicos e complexos do que os mais usuais encontrados no SOPC, por meio do programa University Cores. Do mesmo modo que os do SOPC, estes componentes já têm seu hardware definido pela Altera, sendo necessário apenas realizar as devidas conexões necessárias para configurar o sistema. As University Cores são acessadas como um patch na IDE SOPC, isto é, os componentes especiais são integrados e configurados no seu sistema através da IDE SOPC. Na lista abaixo, temos exemplos de componentes especiais disponibilizados apenas pelo programa University Cores: � VGA Output Especial (controladores de vídeo). � Áudio Output Especial (controlador de som). � Entradas para clocks externos � Controlador de LCD de Caracteres especial (16 colunas x 2 linhas). � Controlador de Ethernet. � Controlador Debounce dos Pushbuttons. � Controlador de USB. � Controlador de cartão SD (Secure Digital ou Seguro digital). � Protocolos UART especiais (IrDA (Infrared Data Association ou Associação de Dados Infravermelhos) UART e RS232 UART) � Controladores de memória SDRAM e memória FLASH (Transformam o chip SDRAM da DE2, por exemplo, em uma memória DDR (Double Data Rate ou Dupla Taxa de Dados) ou DDR2). � Pontes de memórias especiais (Bridges). � Controladores de entradas PS2. � Diversos outros. Embora alguns destes componentes já estejam “prontos” para o uso, muitos outros necessitam de componentes auxiliares para seu funcionamento. Por exemplo, os componentes de memórias especiais sempre necessitam de controladores de barramentos em pontes, para fazer acesso aos bancos de memórias (um caso é o do chip 16 de memória SDRAM (Synchronous Dynamic Random Access Memory ou Memória de Acesso Aleatório e Dinâmico), que tem quatro bancos). Já os controladores das memórias, tais como os das DDR, necessitam de períodos de clock distintos e defasados do período de clock da CPU para poder realizar o acesso de escrita e/ou leitura na subida desse clock, e o fim de tais atividades nas descidas de clock. Uma adversidade adicional que pode ser mencionada é o fato da saída de vídeo necessitar de outro clockmais lento que o da CPU para sincronizar os sinais de vídeo corretamente. Todos os dados referentes a estes controladores e seus componentes auxiliares podem ser encontrados nos manuais disponibilizados no site da Altera. A etapa de modelagem, estipulação e parametrização dos componentes de um sistema vem a ser uma das áreas mais importantes e possivelmente uma das mais trabalhosas deste tipo de desenvolvimento, pois qualquer parâmetro errado pode até não influenciar na geração do sistema, mas certamente será descoberto na hora de carregar o sistema de hardware na FPGA. Por exemplo, a quantidade máxima da Memória No Chip quando se utiliza uma CPU Nios II do tipo mais simples, é de 38 Kbytes (normalmente, os sistemas usam 32 Kbytes), embora o SOPC tenha o poder de estipular a capacidade de 128 Kbytes para esta memória. Este erro de modelagem passará despercebido até a etapa anterior à escrita (etapa de fitter, quando o compilador do Quartus monta a simulação do circuito que será carregado na FPGA) do sistema na FPGA, o que pode acarretar em uma grande perda de tempo e esforço. Vários destes componentes foram criados para o simples uso dos periféricos, dentre os quais as pontes e os controladores de memória, que simplesmente buscam mais espaço de memória de execução dos processos que a simples Memória No Chip. Na placa DE2, a memória Flash tem 4MB e a SDRAM tem 8MB, enquanto que a Memória No Chip tem apenas 32 KB, como mencionado anteriormente. Embora mais simples de usar, ela é muito restrita e um algoritmo pode facilmente estourar a pilha de execução de uma tarefa com algumas chamadas a uma função recursiva, por exemplo. Entretanto, outros componentes foram especificamente implementados para a realização da comunicação simples ou melhorada entre os programas na camada de software, executados na CPU Nios II, e os mais diversos controladores de periféricos de hardware integrados no sistema. Um simples exemplo seria que através do controlador de LCD de caractere é possível enviar uma string pelo barramento do sistema embarcado e escrever frases de tamanho de 16 caracteres no painel de LCD, disponível em algumas placas de estudo da Altera. Outro exemplo mais complexo pode ser a 17 leitura de vários pacotes TCP/IP (Transfer Control Protocol ou Protocolo de Controle de Transporte / Internet Protocol ou Protocolo de Internet) que chegam ao controlador da porta Ethernet da placa de estudo, com o intuito de construir uma mensagem através do desencapsulamento dos pacotes TCP/IP enviados ao servidor embarcado na placa. Toda a temporização de acesso e envio pelo barramento de informações já estão previamente implementados pelos componentes controladores de LCD e Ethernet. A comunicação dos programas na camada de software com os periféricos especiais na camada de hardware é realizada por chamadas de sistema, disponíveis através das bibliotecas que a Altera denominou HAL (Hardware Abstraction Layer, ou Camada de Abstração de Hardware), que são bibliotecas em C que têm o poder de controlar o hardware embarcado nestas placas de estudo. Tais bibliotecas serão abordadas mais especificamente em uma seção posterior do texto. A versão do programa University Cores usada neste trabalho foi a versão 9.0. 2.2.3 Etapa III: A integração da camada de hardware feita na IDE Quartus II Seguindo a linha de desenvolvimento modular, nos sistemas desenvolvidos para placas da Altera o hardware pode ser descrito em forma de texto como citado anteriormente, ou de forma gráfica através de portas lógicas na IDE Quartus II proveniente da Altera exibida na Figura 11: 18 Figura 11 - Desenvolvimento de sistemas na IDE Quartus II, no primeiro quadro através da sintaxe do Verilog, no segundo através de diagrama de blocos e portas lógicas. Nos sistemas digitais criados através dos componentes do SOPC e University Cores, a parte principal da camada de hardware vira uma caixa preta com os componentes provenientes das etapas anteriores, sem qualquer sinal de entrada e saída e quaisquer conexões necessárias. Em função disso, a etapa de integração é dividida em três Subetapas descritas a seguir. 2.2.3.1 Subetapa I: Modelagem do sistema através dos sinais de entrada, saída e conexões A primeira Subetapa da integração do hardware é a definição dos sinais de entrada e saída do sistema através da IDE Quartus II. Isto pode ser feito utilizando o código na linguagem de hardware escolhida no SOPC. Contudo, este método torna-se muito mais prático e dinâmico ao ser realizado no editor de diagrama de blocos que está incorporado à IDE Quartus II. Nesta Subetapa, podemos usar as caixas pretas criadas no SOPC, como é apresentado na demonstração da modelagem de um sistema embarcado básico na Figura 12. 19 Figura 12 - Modelagem de um sistema básico no módulo gráfico de programação do Quartus II Como o SOPC criou o sistema de componentes, é necessário definir todos os sinais de entrada e saída necessários para conectá-lo posteriormente a todos os pontos de uso da FPGA. Esta ação implica em realizar as devidas conexões para que o sistema se comunique com a placa de estudo corretamente. No exemplo da Figura 12 acima, temos diversos sinais de entrada e saída sendo conectados. Na entrada temos os sinais de clock, reset e o de switch já conectados. Por outro lado, na saída da caixa preta está o sinal dos LED’s vermelhos já conectados e os sinais necessários para controlar o LCD de caracteres necessários prestes a serem conectados. 2.2.3.2 Subetapa II: “Pinagem” dos sinais de entrada e saída Após a etapa de modelagem do sistema através da criação dos sinais de entrada e saída, a próxima etapa é a conexão dos sinais do sistema aos pontos reais da FPGA, ou seja, a devida integração da modelagem do sistema à placa. Como já mencionado anteriormente, nas placas de estudo da Altera todos os periféricos estão fisicamente ligados à FPGA por meio das respectivas placas de estudo. Desta forma, devem-se ligar os sinais de entrada e saída criados na Subetapa I aos pinos da FPGA. A Altera disponibiliza para todas as suas placas de estudo um arquivo em Excel, que traz a identificação de todos os pinos que possam ter alguma utilidade aos sistemas que venham a ser criados para suas FPGA’s. Por exemplo, na Figura 13 modela-se um sinal de clock como entrada do hardware, o qual deve ser ligado ao pino PIN_50 da FPGA. Este, por sua vez, é conectado a um cristal que emite clock em onda quadrada de 50 MHz que está 20 incorporado à placa DE2. Também por conveniência pode-se conectar o sinal de reset modelado na Figura 5 ao PIN_G26 da FPGA, que está conectado ao primeiro botão no canto inferior direito da placa DE2, mostrado anteriormente nas Figuras 4 e 5, para que quando este botão for acionado, o sistema seja reiniciado. A etapa de “pinagem” é uma etapa realizada pelo módulo do Quartus chamado de Pin-Planner (ou Planejador de Pinos), que é apresentado na Figura 13. Esta Subetapa pode vir a ser muito exaustiva se for preciso realizar a “pinagem” de cada pino individualmente. Todavia, uma estratégia de automatização é a modelagem dos pinos na Subetapa II, com os mesmos nomes dados pela Altera a eles no seu arquivo de pinos, realizando a importação deste último. Mesmo que seja mais atrativo nomear os pinos de acordo com a funcionalidade que os mesmos terão no sistema embarcado, isto custará muito mais tempo de nomeação dos pinos nessa Subetapa. Figura 13 - Módulo Pin Planner, que é usado para a “pinagem” dos componentes, compondo a integração da modelagem do sistema embarcado às FPGA's Neste ponto do desenvolvimento, a camada de hardware do sistema está pronta para ser compilada. Se esta fase for realizada com sucesso, pode-seenfim descarregar a camada de hardware na placa. A Subetapa III apresentará estes passos. 21 2.2.3.3 Subetapa III: Compilação e descarregamento da camada de hardware na placa Apesar das diferenças expressivas da forma de programação das linguagens de hardware e de software, elas possuem uma semelhança: a compilação. Embora sejamos induzidos a acreditar que o hardware deveria ser interpretado e não compilado, os sistemas criados devem passar por um compilador modular dedicado, feito pela Altera, que está incorporado à IDE Quartus II. Na Tabela 2 , estão descritos os módulos do compilador de hardware. Os que porventura estiverem marcados por um asterisco representam etapas de compilação opcionais, que somente serão executadas de acordo com as configurações de sistema para complementar, verificar ou otimizar o processo de compilação. Tabela 2 - Compilador modular de hardware da Altera. Componente Função Analise e Síntese Analisa os arquivos de design e cria a base de dados do projeto de acordo com o design descrito no projeto. Analise de tempo Analisa a desempenho de toda a lógica de seu design e ajuda a guiar o Fitter para cumprir com os requerimentos de seu design. Fitter (ou “encaixador”) Usa a base de dados criada no modulo de compilação anterior para ligar a lógica com os requisitos de temporização do projeto de acordo com a disponibilidade de recursos no dispositivo. Assembler Cria os arquivos programáveis que serão posteriormente utilizados pelo Programador Quartus II, para configurar o dispositivo. Assistente de Design* Permite a verificação da confiança de seu design, baseado em várias regras de desenvolvimento. EDA Netlist Writer* Permite a execução de simulações funcionais de temporização do design. Compiler Database Interface* Assistência à especificação das restrições de compilação do sistema. 22 2.2.4 Etapa IV: A camada de software na IDE Nios II A IDE Nios II é o ambiente de programação das linguagens de alto nível, que será executado nos sistemas de hardware embarcados nas FPGA’s da Altera, provenientes das etapas anteriores. Nesta IDE, pode-se programar de uma forma mais prática e nítida para alcançar o objetivo inicial, que é a integração total de software com hardware em um sistema embarcado. Ou seja, é possível aproveitar a viabilidade e facilidade de programar em software ao mesmo tempo em que se utiliza a velocidade do hardware, realizando quaisquer adaptações que sejam necessárias. O projeto da IDE Nios II da Altera é um patch a uma conhecida IDE, o projeto Eclipse proveniente da Java Sun. Isto se deve à parceria entre a Altera e a Java Sun, uma união de uma das melhores companhias de sistemas embarcados do mundo com uma das IDE’s de melhor aceitação mundial de programação do mercado. Desta forma, quem já trabalhou com a IDE Eclipse, verá a enorme semelhança entre o Nios II e o Eclipse. A interface da IDE Nios II está exibida na Figura 14. Figura 14 - IDE Nios II, usada para a programação da camada de software de sistemas embarcados em FPGA's Na etapa I, a IDE SOPC criou um arquivo muito especial para a etapa aqui apresentada, que é o arquivo que faz a descrição de todos os componentes e controladores do sistema. Este arquivo tem um nome requerido pela IDE SOPC (que 23 deve ser diferente daquele do projeto da camada de hardware no Quartus II) na criação da primeira etapa, e tem uma extensão “.ptf”. 2.2.4.1 Sistemas Embarcados em Assembler/C/C++ para placas da Altera Neste ponto, tem-se um hardware descarregado na placa, esperando a camada de software ser escrita. Esta camada de software pode ser implementada em Assembler, C ou C++. Este processo de implementação da camada de software se torna mais agradável devido ao poder de realizar o acesso aos periféricos graças a descrição dos sinais do hardware feita pela compilação da CPU Nios II munida das bibliotecas HAL e a biblioteca “system.h” (será abordada mais adiante no texto), que podem ser usadas neste ponto para exercer conexões de alto nível com os dispositivos e periféricos embarcados em baixo nível assim que se fizer necessário. Seguindo a tendência de mercado atual, a linguagem escolhida para esta tarefa foi o C. Mesmo depois de tantos anos em um mercado repleto de linguagens inovadoras com novos recursos e facilidades, o C ainda é a linguagem mais leve, consistente e soberana. Com isso, se apresenta como a mais usada linguagem por desenvolvedores de sistemas embarcados no mundo. Na Figura 15 está o resultado de um levantamento apontado no Hamblen (2008), – referência em prototipagem rápida de sistemas embarcados para placas da Altera – relativa à preferência de linguagem para programação de camadas de software para os desenvolvedores no mundo. Figura 15 - Pesquisa realizada em 2006, com respeito da preferência de linguagem de sistemas embarcados pela Altera. A linguagem C lidera com mais de 60% [Hamblen, 2008]. 24 2.2.4.2 A arquitetura de desenvolvimento, o uso das Bibliotecas Abstração de Hardware (HAL), tipagem dos tipos de dados na codificação e a biblioteca do sistema embarcado Nesta etapa de desenvolvimento, a aplicação do usuário usa a biblioteca padrão em C, munida das bibliotecas HAL, para assim exercer uma comunicação com os periféricos do sistema projetado da maneira desejada e coesa. No mesmo nível da biblioteca padrão C, faz-se o estudo dos kernels embarcados, que no caso dos sistemas embarcados da Altera podem ser representados pelo ��/ �� – e o ���� ��. Estes kernels integram o módulo de API Micro C/OS-II que são kernels portáteis, escalares, preêmptivos, de tempo real e de multitarefas. A finalidade de um kernel em um sistema embarcado consiste em serviços como semáforos, semáforos de exclusão mútua, alarmes, caixa de mensagens (mailbox), filas, gerência de tarefas, gerência de blocos de memória de tamanho fixo e gerência de temporização do sistema. A Figura 16 exibe este tipo de projeto de arquitetura de funcionamento dos sistemas embarcados da Altera. Figura 16 - Arquitetura de comunicação da aplicação de usuário com os periféricos através do hardware de sistema de processamento Nios II [Hamblen, 2008]. 25 As bibliotecas HAL são bibliotecas em C, disponibilizadas pela Altera e codificadas nesta linguagem, que servem para executar chamadas de funções na camada de software em componentes embarcados na camada de hardware. A seção 3.3.2 mais adiante no texto, explica em detalhes um exemplo de uso de uma biblioteca HAL. Para o uso correto destas bibliotecas, o projetista deve pesquisar e obedecer as instruções encontradas nos manuais também disponibilizados pela Altera através de seu site. Outra informação muito pertinente para o desenvolvimento é que a Altera, também por convenção, usa um cast (ou tipagem) de dados para programação de seus sistemas. Estas redefinições de variáveis são encontradas na biblioteca “alt_types.h” que deve ser importada na aplicação de usuário. O desenvolvedor está livre para usar a tipagem de dados da linguagem C para a programação; entretanto, por convenção, os programas e funções desenvolvidos pela Altera seguem a tipagem de dados descrita na Tabela 3 a seguir: Tabela 3 - Tipagem de dados da Altera typedef signed char typedef unsigned char typedef signed short typedef unsigned short typedef signed long typedef unsigned long typedef long long typedef unsigned long long alt_8; alt_u8; alt_16; alt_u16; alt_32; alt_u32; alt_64; alt_u64; Neste ponto, a IDE Nios II se diferencia da IDE Eclipse abordada anteriormente devido ao fato de quena hora de se criar um projeto na primeira, ela exigirá o arquivo “.ptf” criado pela IDE SOPC. Sob um ponto de vista mais aprofundado, este arquivo descreverá para a CPU Nios II como acessar os endereços-bases (endereços de memória de acesso direto tais como o endereço inicial e final de uma memória SRAM (Static Random Access Memory ou Memória de Acesso Estático e Aleatório), por exemplo), e todas as outras diretrizes dos componentes e periféricos, assim como criar a biblioteca de descrição do hardware em auto nível, para ser usada nesta camada de software; esta biblioteca é denominada “system.h”. As outras diretrizes de sistema estão relacionadas 26 com a definição de constantes importantes ao sistema, que no caso de um sistema digital dedicado a vídeo seriam, por exemplo, a altura e largura de uma imagem na saída VGA. . 2.2.5 Etapa V: A execução total do sistema através da IDE Altera Debug Program Por fim, após todas as etapas de modelagem e integração anteriormente descritas, pode-se enfim executar por completo o sistema embarcado formado por uma camada de hardware e de software. A execução em modo de desenvolvimento é feita pelo Programa Altera Debug, que será introduzido nesta seção. Embora exista a possibilidade de executar o programa através da IDE Nios II, é mais prático e interessante fazê-lo através desta outra IDE, devido ao fato de que ela apresenta vários detalhes referentes à execução. Nesta IDE pode-se ver o “Assembler” da Altera, que é a própria linguagem de maquina utilizada para execução de tarefas pelas placas, assim como ver as posições na memória e seus respectivos conteúdos. Como outra grande finalidade, é possível colocar breakpoints na execução com o objetivo de encontrar erros, através do método de Debug incorporado nas opões da CPU’s Nios II escolhidas no SOPC ainda na primeira etapa de desenvolvimento. Na criação de uma tarefa de execução nesta IDE, também precisa-se do arquivo “.ptf” usado pela IDE Nios II da Etapa anterior. No fim da compilação da camada de software também da etapa anterior, a IDE Nios II gerá um arquivo “.elf” (Executable Linking File, ou Arquivo de Lincagem Executável) que é o arquivo executável da camada de software, que será executado pela camada de hardware embarcada na FPGA. A interface do altera Debug Program é apresentada na Figura 17. 27 Figura 17 - Interface da IDE Altera Monitor Program. 28 3.0 Implementação de um sistema digital embarcado dedicado a vídeo com o uso da CPU Nios II em uma FPGA Cyclone II 3.1 Etapas I & II de desenvolvimento: Modelagem com os componentes e inserção dos mesmos através da IDE SOPC e do patch University Cores. A arquitetura do sistema que será desenvolvido neste trabalho está ilustrada na Figura 18. Figura 18 - Modelagem do Sistema Digital Dedicado a vídeo No sistema realizado, foi necessário utilizar dois componentes especiais do patch University Cores: o componente especial VGA, que lida com o conteúdo do RGB pixels e o posicionamento dos pixels na tela, e também foi usado o componente Pixel Buffer, que usa a memória SDRAM da placa DE2 para tratar o delay e envio de cada pixel da saída VGA ao monitor. 29 Opcionalmente, foram colocados switches para chamadas de funções, LED’s para a verificação destes switches, LCD de caracteres para a escrita de strings referentes à aplicação dos programas, e um medidor de performance de trechos de software. Todos os componentes e controladores utilizados no sistema digital dedicado a vídeo integrado neste trabalho estão descritos na Tabela 4 : Tabela 4 - Componentes e controladores utilizados para a implementação do sistema digital dedicado a vídeo. Componente Descrição Função CPU Nios II – tipo f Processador de 32 bits de arquitetura RISC, com cache de instrução e cache de dados e uma ULA que faz multiplicação e divisão em hardware. � Executar os processos da camada de software através das pilhas de execução com o uso de 4 Kbytes de memória cache. � Executar a comunicação com outros componentes que gerenciam E/S e controle de barramento. JTAG_UART Componente de comunicação entre a Interface USB do computador e o processador Nios II. Configurado com uma FIFO (First In First Out ou Primeiro a Entrar é o Primeiro a Sair) com 64 bytes de tamanho. � Comunicação de dados entre interface USB no computador (através da FIFO modelada como cliente-servidor) e a placa DE2. Este componente é utilizado para a escrita do hardware na placa e para a leitura de dados durante a execução de uma tarefa no sistema embarcado. Memória No Chip Memória do tipo RAM (Random Access Memory ou Memória de Acesso Aleatório), com � Usada para armazenar o processo, pilha de execução e outros dados relevantes para a execução do processo. Dispensa controlador devido a ser criada 30 largura de dados de 32 bits e tamanho total de 32 Kbytes. na FPGA e controlada pela CPU Nios II. Controlador SDRAM Controlador de Memória do tipo SDRAM de 8 MBytes com largura de dados de 16 bits de 1 chip select e 4 bancos de dados. � Controlar o chip de memória que é utilizado como buffer para os pixels que são enviados à saída VGA da placa DE2. Clocks Controlador de clocks � Controla e gera os sinais de clock que precisam ser em frequências diferentes das da CPU Nios II. Neste caso utilizou-se este componente para gerar os seguintes clocks de memória: � 50 MHz defazado em -3ns - SDRAM � 25 MHz - Core de vídeo VGA � 25 MHz defazado em 180º - VGA-DAC Controlador VGA Controlador da saída de vídeo VGA � Controla e coordena os sinais que serão enviados à saída de vídeo VGA da placa DE2. Define o tipo de saída de vídeo da placa, e qual tipo de saída será usado. Além da saída VGA, existe a possibilidade de enviar sinais para as GPIO (General Purpose I/O ou E/S de propósito geral) da DE2, que pode ser usada para conectar 31 painéis de touch-screens ou câmeras. Pixel Buffer Controlador do Buffer de Pixels da saída VGA � Buffer de Pixels para saída VGA criado na memória SDRAM, onde se escolhe o formato de endereçamento na tela (X-Y ou consecutivo) e a quantidade de bits na informação RGB. Mais detalhes sobre a forma de endereçamento e conteúdo dos pixels serão dados na próxima seção do texto. PIO – Parallel I/O Saída dos LED’s vermelhos � Saída de dados paralela que será utilizada para enviar dados aos LED’s vermelhos através da técnica de mapeamento de dispositivos de E/S com acesso direto a memória. PIO – Parallel I/O Entrada dos switchs � Entrada de dados paralela que será utilizada para leitura de dados dos switchs através da técnica de mapeamento de dispositivos de E/S com acesso direto a memória. Contador de Desempenho (Performance Counter) Controlador de performance de 32 e 64 bits � Contador de ciclos de clocks realizados pela CPU Nios II. Utilizado como acessório ao sistema para medir o desempenho de trechos de código. Possibilita a medição de até sete trechos diferentes de código, através de contadores 32 de 64 bits (variáveis alt_u64). 3.2 Etapa III: integração do hardware feita na IDE Quartus II (Subetapas de Modelagem, “pinagem” e compilação) No caso do sistema digital dedicado a vídeo aqui realizado, dentre os vários controladores de periféricos utilizados, será descrito com maior detalhe apenas o controlador de vídeo, o mais importante do sistema embarcado proposto para este trabalho. O componente controlador de vídeo foi configurado para exibir imagens com resolução de 640 x 480 pixelscom dimensões de 16 bits (ilustrado na Figura 19). O controlador VGA guarda a imagem a ser exibida através da SDRAM externa. O componente prove duas interfaces Avalon: uma é um controlador DMA (Direct Memory Access ou de Memória de Acesso Direto), que transfere a imagem linha por linha da fonte de memória, e a segunda é uma interface que escreve e acessa o banco de registradores para configurar o controlador DMA e a temporização do circuito VGA. Esta configuração do componente VGA está ilustrada na Figura 19. Figura 19 - Modelagem da configuração do controlador de vídeo VGA. [Altera Corp.: Using SOPC Builder & DSP Builder Tool Flow, 2005] Após a parametrização e a configuração do componente de vídeo na IDE SOPC, o mesmo se torna nesta etapa uma entidade gráfica como uma caixa preta, sem nenhuma 33 conexão de qualquer sinal. Um exemplo deste tipo de entidade gráfica está apresentado na Figura 20. Figura 20 - Um tipo de controlador de vídeo oriundo do SOPC. [Hamblen, 2008] Desta forma, são importados quaisquer outros componentes oriundos da IDE SOPC para o módulo gráfico de desenvolvimento do Quartus II, e assim se são criados e conectados todos os sinais necessários para a modelagem das conexões que integrarão o sistema. A modelagem completa do sistema digital dedicado a vídeo, meta deste trabalho, pode ser encontrada na Figura 21. 34 Figura 21 - Integração dos sinais do sistema digital dedicado a vídeo a seus respectivos pinos da FPGA. 35 A “pinagem” do hardware deve ser feita de maneira interligada aos sinais de entrada e saída que foram criados na modelagem gráfica anterior (Figura 21 acima). É importante que estes sinais sejam conectados corretamente aos pinos da FPGA, os quais têm a numeração disponibilizada pelos manuais de pinos da devida FPGA da Altera, como mencionado anteriormente. Ou seja, para que o controlador de vídeo funcione corretamente, é necessário que os sinais sejam conectados aos devidos pinos da FPGA Cyclone II. Os pinos de interesse neste caso têm sua nomenclatura apresentada na Tabela 5 , que será esquematizada e preenchida no modulo Pin-Planner da IDE Quartus II. Tabela 5 - Sinais do controlador de vídeo e suas respectivas conexões aos pinos da FPGA Cyclone II Sinal Pino FPGA Sinal Pino FPGA Sinal Pino FPGA VGA_R[0] PIN_C8 VGA_G[0] PIN_B9 VGA_B[0] PIN_J13 VGA_R[1] PIN_F10 VGA_G[1] PIN_A9 VGA_B[1] PIN_J14 VGA_R[2] PIN_G10 VGA_G[2] PIN_C10 VGA_B[2] PIN_F12 VGA_R[3] PIN_D9 VGA_G[3] PIN_D10 VGA_B[3] PIN_G12 VGA_R[4] PIN_C9 VGA_G[4] PIN_B10 VGA_B[4] PIN_J10 VGA_R[5] PIN_A8 VGA_G[5] PIN_A10 VGA_B[5] PIN_J11 VGA_R[6] PIN_H11 VGA_G[6] PIN_G11 VGA_B[6] PIN_C11 VGA_R[7] PIN_H12 VGA_G[7] PIN_D11 VGA_B[7] PIN_B11 VGA_R[8] PIN_F11 VGA_G[8] PIN_E12 VGA_B[8] PIN_C12 VGA_R[9] PIN_E10 VGA_G[9] PIN_D12 VGA_B[9] PIN_B12 Sinal Pino FPGA VGA_CLK PIN_B8 VGA_BLANK PIN_D6 VGA_HS PIN_A7 VGA_VS PIN_D8 VGA_SYNC PIN_B7 36 A “pinagem” da FPGA já leva em consideração o modelo de leitura e escrita dos diversos periféricos que foram implementados pela descrição de hardware do componente, obtida por meio do SOPC ou desenvolvida pelo próprio projetista do sistema. O controlador de vídeo embarcado proveniente do SOPC/University Cores é responsável por ler/escrever toda essa informação digital processada na CPU Nios II, também embutida na FPGA. Os comandos de controle são provenientes do código escrito na camada de software, para que desta forma sejam realizadas quaisquer conversões, discretizações e filtros necessários para obter a comunicação desta camada com a camada de hardware, e, portanto, com o periférico envolvido em questão. No caso da saída VGA, os sinais de saída estão disponibilizados na Figura 22. Figura 22 - “Pinagem” da saída VGA para um dispositivo de saída de vídeo como um monitor ou um projetor. [Hamblen, 2008] 3.2.1 A resolução da imagem, a estrutura da informação dos pixels e o frame-buffer de pixels embarcado A configuração do controlador de vídeo na IDE SOPC foi onde a configuração do modo de endereçamento e a resolução da imagem do sistema digital dedicado a vídeo foram estipulados. O modo de endereçamento de um pixel na tela ocorre em um eixo de abscissas e ordenadas X-Y que cresce para a direita e para baixo. O tamanho desses eixos de abscissas e ordenadas delimita a resolução da imagem a ser exibida na tela. Na Figura 23, são ilustradas estas duas informações. 37 Figura 23 - À esquerda, o modo de endereçamento X-Y, único disponibilizado para a placa DE2 e a resolução 640 x 480, que foi a escolhida para este trabalho. [Altera Corp.: Video Out IP Cores for Altera DE Boards, 2009] A cor de cada pixel que é escolhida em software pode ser imposta como uma variável de 32 bits, com uma variável unsigned int em C; entretanto, para sistemas da Altera, utiliza-se o tipo “alt_u32”. A cor será formada pela codificação binária do conteúdo da variável “alt_u32” de cor. Esta codificação está ilustrada na Figura 24. Figura 24 - Conteúdo de uma variável de cor. [Altera Corp.: Video Out IP Cores for Altera DE Boards, 2009] 3.3 Etapa III: A camada de software na IDE Nios II 3.3.1 O uso da biblioteca “system.h” no sistema digital dedicado a vídeo Como explanado na metodologia abordada no capítulo anterior, a compilação na IDE Nios gera, por meio do arquivo “.ptf”, a “system.h”, que é crucial para o desenvolvimento da camada de software. Na Tabela 6 são encontradas algumas constantes utilizadas na implementação do código do projeto: 38 Tabela 6 - Tabela de algumas constantes usadas no desenvolvimento da camada de software na IDE Nios II. Contante Definição na “system.h” Endereço de memória dos LED’s vermelhos #define RED_LEDS_BASE 0x00811090 Endereço de memória dos botões de switch #define SWITCH_BASE 0x008110a0 Endereço de memória do contador de performance #define PERFORMANCE_COUNTER_0_BASE 0x00811000 String que nomeia o buffer de pixels #define PIXEL_BUFFER_NAME “/dev/pixel_buffer” 3.3.2 O uso das bibliotecas HAL no sistema digital dedicado a vídeo Para o uso das funções HAL para o sistema digital dedicado a vídeo, deve-se incluir a seguinte linha no código: #include “altera_up_avalon_pixel_buffer.h” Esta biblioteca HAL permite o uso das seguintes funções no código de auto nível: � int alt_up_pixel_buffer_draw (alt_up_pixel_buffer_dev *pixel_buffer, unsigned int color, unsigned int x, unsigned int y) o Função que desenha um pixel de acordo com a codificação binária da variável color nas coordenadas (x,y) da tela. � alt_up_pixel_buffer_dev* alt_up_pixel_buffer_open_dev (const char *name) o Função que abre e retorna um ponteiro à estrutura alt_up_pixel_buffer_dev. Esta estrutura indexada por tal ponteiro armazena todos os dados referentes ao buffer de pixels do sistema que são prioritariamente utilizado nas várias chamadas de funções HAL para a saída de vídeo. Retorna NULL se houver falha ao abrir o dispositivo de vídeo. 39 � int alt_up_pixel_buffer_change_back_buffer_address (alt_up_pixel_buffer_dev *pixel_buffer, unsigned int new_address) o Função que muda o endereço inicial do back_buffer para o new_address. Retorna 0 se a mudança foi realizada com sucesso. � int alt_up_pixel_buffer_swap_buffers (alt_up_pixel_buffer_dev *pixel_buffer) o Função que troca o buffer que está sendo enviado para o controlador VGA. Retorna 0 se a mudança foi realizada com sucesso. � int alt_up_pixel_buffer_check_swap_buffers_status (alt_up_pixel_buffer_dev *pixel_buffer) o Função que
Compartilhar