Desenvolvimento de Sistemas Embarcados Co-Design - DCA - UFRN
Desenvolvimento de Sistemas Embarcados Co-Design - DCA - UFRN
Desenvolvimento de Sistemas Embarcados Co-Design - DCA - UFRN
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE<br />
CENTRO DE TECNOLOGIA<br />
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO<br />
TRABALHO DE CONCLUSÃO DE CURSO<br />
<strong>Desenvolvimento</strong> e aplicações <strong>de</strong> sistemas embarcados em FPGA<br />
Aluno: Desnes Augusto Nunes do Rosário<br />
Orientador: Prof. Dr. Gláucio Bezerra Brandão<br />
Natal/RN, 02 <strong>de</strong> Julho <strong>de</strong> 2010
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE<br />
CENTRO DE TECNOLOGIA<br />
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO<br />
TRABALHO DE CONCLUSÃO DE CURSO<br />
<strong>Desenvolvimento</strong> e aplicações <strong>de</strong> sistemas embarcados em FPGA<br />
Aluno: Desnes Augusto Nunes do Rosário<br />
Orientador: Gláucio Bezerra Brandão<br />
Trabalho <strong>de</strong> <strong>Co</strong>nclusão <strong>de</strong> Curso<br />
Submetido ao Departamento <strong>de</strong><br />
Engenharia <strong>de</strong> <strong>Co</strong>mputação e<br />
Automação do Centro <strong>de</strong><br />
Tecnologia da Universida<strong>de</strong><br />
Fe<strong>de</strong>ral do Rio Gran<strong>de</strong> do Norte,<br />
como parte dos requisitos<br />
necessários para obtenção do grau<br />
<strong>de</strong> Engenheiro <strong>de</strong> <strong>Co</strong>mputação<br />
com habilitação em Automação<br />
Industrial.<br />
Natal/RN, 02 <strong>de</strong> Julho <strong>de</strong> 2010
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE<br />
CENTRO DE TECNOLOGIA<br />
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO<br />
TRABALHO DE CONCLUSÃO DE CURSO<br />
Trabalho <strong>de</strong> conclusão <strong>de</strong> curso apresentado à banca examinadora composta pelos<br />
seguintes membros:<br />
__________________________________________________________________<br />
Prof. Dr. Gláucio Bezerra Brandão (Orientador)<br />
Professor do Departamento <strong>de</strong> Engenharia Biomédica – <strong>UFRN</strong><br />
__________________________________________________________________<br />
Prof. Dr. Alberto Nicolau<br />
Professor do Departamento <strong>de</strong> Engenharia Elétrica – <strong>UFRN</strong><br />
__________________________________________________________________<br />
Prof. Dr. George Carlos do Nascimento<br />
Professor do Departamento <strong>de</strong> Engenharia Biomédica – <strong>UFRN</strong>
AGRADECIMENTOS<br />
Agra<strong>de</strong>ço a Deus, que me carregou nos braços nestes cinco anos <strong>de</strong> luta e me<br />
permitiu escolher a cida<strong>de</strong> do Natal para residir e a <strong>UFRN</strong> para ser realizar este curso.<br />
À minha mãe Luciene S. Nunes, que lutou diariamente nos EUA durante anos,<br />
para me proporcionar a oportunida<strong>de</strong> <strong>de</strong> estudar e <strong>de</strong> me <strong>de</strong>dicar aos estudos. Mesmo<br />
com toda esta distância, agra<strong>de</strong>ço por todo amor, carinho, apoio, investimento e<br />
compreensão, sem os quais jamais seria possível concluir este curso sem gran<strong>de</strong>s<br />
dificulda<strong>de</strong>s.<br />
carinho.<br />
Ao meu pai Augusto F. Rosário e minha irmã Lyna K. Rosário, por todo amor e<br />
À minha namorada Ana M. B. Barufi, que muito além <strong>de</strong> proporcionar diversos<br />
momentos felizes ao seu lado, tem me apoiado e dado forças em uma fase difícil, e<br />
auxiliou nas correções ortográficas <strong>de</strong>ste trabalho.<br />
Ao Brasil, que me proporcionou a oportunida<strong>de</strong> <strong>de</strong> receber uma educação<br />
superior gratuita e <strong>de</strong> qualida<strong>de</strong>. Oportunida<strong>de</strong> esta que não recebi nos anos em que<br />
morava nos EUA.<br />
À minha universida<strong>de</strong> que me proporcionou além da educação, a oportunida<strong>de</strong><br />
<strong>de</strong> intercâmbio no período <strong>de</strong> um ano na McMaster University em Hamilton, ON -<br />
Canadá. O intercâmbio proporcionou o conhecimento necessário para realizar este<br />
trabalho <strong>de</strong> conclusão <strong>de</strong> curso, assim como permitiu que eu conhecesse a minha<br />
namorada.<br />
Aos meus professores do <strong>DCA</strong>, em especial ao Professor Glaúcio, por este ano<br />
<strong>de</strong> orientação tanto na pesquisa <strong>de</strong> iniciação científica quanto neste trabalho <strong>de</strong><br />
conclusão <strong>de</strong> curso.<br />
À FAPERN, pelo auxílio financeiro neste último ano que permitiu a minha<br />
<strong>de</strong>dicação ao projeto que contribuiu para a composição <strong>de</strong>ste trabalho.
À amiga Alyana C. M. <strong>de</strong> Barros, por ter lutado arduamente em busca <strong>de</strong> minha<br />
carteira <strong>de</strong> reservista militar no ano <strong>de</strong> 2005, enquanto eu estava nos EUA. Sou grato,<br />
pois sem este documento, ela não po<strong>de</strong>ria realizar minha matricula na <strong>UFRN</strong> nas<br />
últimas horas do último dia <strong>de</strong> inscrição. Agra<strong>de</strong>cendo aqui, cumpro uma antiga<br />
promessa.<br />
Aos <strong>de</strong>mais familiares, amigos do Brasil e dos EUA, e colegas <strong>de</strong> curso, por<br />
estarem sempre ao meu lado em todos os momentos, assim como por me<br />
acompanharem nos momentos <strong>de</strong> trabalho e estudo como também diversão e alegria em<br />
algumas horas vagas.
RESUMO<br />
Este trabalho apresenta o estudo das aplicações e metodologias <strong>de</strong><br />
<strong>de</strong>senvolvimento <strong>de</strong> sistemas embarcados nas placas <strong>de</strong> estudo com FPGA’s da<br />
Empresa Altera. Esta companhia adota uma metodologia modular <strong>de</strong> <strong>de</strong>senvolvimento<br />
<strong>de</strong> sistemas embarcados. Tal metodologia foi abordada junto com o <strong>de</strong>talhamento das<br />
IDE’s e etapas realizadas neste processo, o qual mo<strong>de</strong>la a criação <strong>de</strong> camadas <strong>de</strong><br />
hardware formadas por componentes tais como a CPU Nios II, memórias, LED’s e<br />
outros periféricos. A camada <strong>de</strong> hardware tem o intuito <strong>de</strong> executar códigos em uma<br />
camada <strong>de</strong> software em C, também embarcada nestes sistemas. <strong>Co</strong>nsequentemente, a<br />
metodologia discutida foi aplicada na criação <strong>de</strong> um sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o na<br />
placa <strong>de</strong> estudo DE2. Este sistema tem a função <strong>de</strong> enviar sinais <strong>de</strong> ví<strong>de</strong>o à saída VGA<br />
da placa, que são configurados na camada <strong>de</strong> software. Por fim, o trabalho propõe uma<br />
nova mo<strong>de</strong>lagem ao sistema <strong>de</strong>senvolvido, que integra o sistema digital <strong>de</strong>dicado a<br />
ví<strong>de</strong>o com a linguagem <strong>de</strong> computação gráfica OpenGL. Assim, também se propõe que<br />
o sistema <strong>de</strong> mo<strong>de</strong>lagem gráfica em 3D seja integrado aos dispositivos <strong>de</strong> E/S (GPIO)<br />
<strong>de</strong>stas placas, com o intuito <strong>de</strong> realizar aplicações voltadas para as áreas biomédica e<br />
petrolífera.
ABSTRACT<br />
This paper presents the study of applications and <strong>de</strong>velopment methodologies<br />
applied to the creation of embed<strong>de</strong>d systems in the Development and Education<br />
Boards with FPGA’s from the Altera <strong>Co</strong>rporation. The process of creation of embed<strong>de</strong>d<br />
systems follows a modular <strong>de</strong>velopment methodology, which makes use of the IDE's<br />
provi<strong>de</strong>d by Altera itself. This <strong>de</strong>velopment methodology, which is discussed in <strong>de</strong>tailed<br />
steps, is inten<strong>de</strong>d to mo<strong>de</strong>l hardware layers formed by components such as CPU Nios<br />
II, Memories, LEDs and other <strong>de</strong>vices as required by the system project <strong>de</strong>sign. This<br />
hardware layer has as its purpose the execution of co<strong>de</strong>s in a software layer also<br />
embed<strong>de</strong>d in these systems which make use of the high level C language. <strong>Co</strong>nsequently,<br />
this methodology is applied to create a <strong>de</strong>dicated digital vi<strong>de</strong>o system on the DE2 Board<br />
from Altera. This system has the functionality of sending vi<strong>de</strong>o signals to the VGA<br />
output from DE2. These signals are configured in the software layer. Finally, this paper<br />
proposes a new mo<strong>de</strong>ling for the system here <strong>de</strong>veloped, which integrates the <strong>de</strong>dicated<br />
digital vi<strong>de</strong>o system with a known <strong>Co</strong>mputer Graphics Language, the OpenGL. Thus, it<br />
is also proposed that this 3D embed<strong>de</strong>d mo<strong>de</strong>ling system, complemented by the use of<br />
the GPIO, can be of use in applications related to the biomedical and petroleum field.
SUMÁRIO<br />
SUMÁRIO ................................................................................................................................... I<br />
LISTA DE FIGURAS ............................................................................................................ III<br />
LISTAS DE TABELAS .......................................................................................................... V<br />
LISTA DE SÍMBOLOS E ABREVIATURAS ................................................................ VI<br />
1.0 INTRODUÇÃO............................................................................................................. 1<br />
1.1 Objetivos .................................................................................................................................. 2<br />
1.2 Motivação ................................................................................................................................. 3<br />
1.3 Organização do Trabalho ........................................................................................................ 5<br />
2.0 SISTEMAS EMBARCADOS (OU SISTEMAS EMBUTIDOS) ....................... 7<br />
2.1 <strong>Sistemas</strong> <strong>Embarcados</strong> nas placas da Altera ............................................................................. 7<br />
2.1.1 Breve histórico das linguagens <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware ..................................................... 8<br />
2.1.2 Linguagem <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware e seu funcionamento .................................................. 9<br />
2.1.3 A integração e funcionamento <strong>de</strong> sistemas embarcados nas placas <strong>de</strong> estudos da Altera 11<br />
2.2 Etapas <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> sistemas embarcados para as FPGA’s da Altera ................ 13<br />
2.2.1 Etapa I: A criação e mo<strong>de</strong>lagem dos componentes do sistema e inserção dos mesmos na<br />
IDE SOPC ............................................................................................................................................. 13<br />
2.2.2 Etapa II: <strong>Co</strong>mponentes especiais e mais complexos através do programa University<br />
<strong>Co</strong>res 14<br />
2.2.3 Etapa III: A integração da camada <strong>de</strong> hardware feita na IDE Quartus II ......................... 17<br />
2.2.3.1 Subetapa I: Mo<strong>de</strong>lagem do sistema através dos sinais <strong>de</strong> entrada, saída e conexões<br />
18<br />
2.2.3.2 Subetapa II: “Pinagem” dos sinais <strong>de</strong> entrada e saída ................................................ 19<br />
2.2.3.3 Subetapa III: <strong>Co</strong>mpilação e <strong>de</strong>scarregamento da camada <strong>de</strong> hardware na placa .... 21<br />
2.2.4 Etapa IV: A camada <strong>de</strong> software na IDE Nios II .................................................................. 22<br />
2.2.4.1 <strong>Sistemas</strong> <strong>Embarcados</strong> em Assembler/C/C++ para placas da Altera .......................... 23<br />
2.2.4.2 A arquitetura <strong>de</strong> <strong>de</strong>senvolvimento, o uso das Bibliotecas Abstração <strong>de</strong> Hardware<br />
(HAL), tipagem dos tipos <strong>de</strong> dados na codificação e a biblioteca do sistema embarcado ......... 24<br />
2.2.5 Etapa V: A execução total do sistema através da IDE Altera Debug Program ................. 26<br />
3.0 IMPLEMENTAÇÃO DE UM SISTEMA DIGITAL EMBARCADO<br />
DEDICADO A VÍDEO COM O USO DA CPU NIOS II EM UMA FPGA<br />
CYCLONE II ......................................................................................................................... 28<br />
3.1 Etapas I & II <strong>de</strong> <strong>de</strong>senvolvimento: Mo<strong>de</strong>lagem com os componentes e inserção dos mesmos<br />
através da IDE SOPC e do patch University <strong>Co</strong>res. ........................................................................... 28<br />
i
3.2 Etapa III: integração do hardware feita na IDE Quartus II (Subetapas <strong>de</strong> Mo<strong>de</strong>lagem,<br />
“pinagem” e compilação) ................................................................................................................... 32<br />
3.2.1 A resolução da imagem, a estrutura da informação dos pixels e o frame-buffer <strong>de</strong> pixels<br />
embarcado ............................................................................................................................................ 36<br />
3.3 Etapa III: A camada <strong>de</strong> software na IDE Nios II ................................................................... 37<br />
3.3.1 O uso da biblioteca “system.h” no sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o .................................. 37<br />
3.3.2 O uso das bibliotecas HAL no sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o ......................................... 38<br />
3.3.3 Código <strong>de</strong>monstrativo do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o embarcado em FPGA ........... 40<br />
3.4 Etapa IV: A execução e <strong>de</strong>monstração do sistema <strong>de</strong>dicado a ví<strong>de</strong>o, alvo <strong>de</strong>ste TCC .......... 43<br />
4.0 APLICAÇÕES PROPOSTAS DO SISTEMA EMBARCADO DEDICADO<br />
A VÍDEO ................................................................................................................................. 45<br />
4.1 A evolução proposta do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o ...................................................... 45<br />
4.1.1 O que é OpenGL? ................................................................................................................... 46<br />
4.1.2 A proposta: OpenGL Embarcado ......................................................................................... 46<br />
4.1.3 Dúvida relativa ao <strong>de</strong>sempenho do OpenGL Embarcado ................................................... 47<br />
4.1.4 Uma solução proposta em caso <strong>de</strong> fraco <strong>de</strong>sempenho do OpenGL Embarcado................ 48<br />
4.2 Aplicações do OpenGL Embarcado proposto ....................................................................... 49<br />
4.2.1 Aplicação BioFeedArt ............................................................................................................. 49<br />
4.2.2 Aplicação <strong>de</strong> sistemas embarcados da Altera na criação <strong>de</strong> sistemas <strong>de</strong> tempo real<br />
petrolíferos ............................................................................................................................................ 51<br />
4.2.2.1 <strong>Co</strong>ntextualização em relação ao petróleo ..................................................................... 52<br />
4.2.2.2 Proposta <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> um Sistema Gráfico Para o Auxilio do Processo <strong>de</strong><br />
Perfuração <strong>de</strong> Poços Direcionais .................................................................................................... 54<br />
5.0 CONCLUSÃO ............................................................................................................ 57<br />
5.1 <strong>Co</strong>nsi<strong>de</strong>rações finais ............................................................................................................... 57<br />
5.2 Perspectivas futuras ............................................................................................................... 58<br />
REFERENCIAS BIBLIOGRÁFICAS ............................................................................. 59<br />
ii
LISTA DE FIGURAS<br />
FIGURA 1 - ENIAC X LAPTOP COMUM. APENAS 60 ANOS OS SEPARAM. .................................. 1<br />
FIGURA 2 - SISTEMAS EMBARCADOS EM FPGA. NA FIGURA A ESQUERDA TEM-SE UM<br />
ROBÔ-FPGA QUE USA UMA BATERIA CARRO R/C (REMOTE & CONTROL OU<br />
CONTROLE & REMOTO) E UM SERVORMOTOR R/C. NA IMAGEM DA DIREITA TEM-SE<br />
UM BRINQUEDO R/C CONTROLADO POR FPGA COM SENSORES IR DE DISTANCIA.<br />
[HAMBLEN, 2008] ............................................................................................................................. 3<br />
FIGURA 3 - UMA FPGA STRATIX IV .................................................................................................... 4<br />
FIGURA 4 - ESQUEMÁTICA DA PLACA DE2 QUE TEM UMA FPGA CYCLONE II ....................... 5<br />
FIGURA 5 - PLACA DE2 DA ALTERA COM UMA FPGA CYCLONE II ............................................ 5<br />
FIGURA 6 - TECNOLOGIAS DIFERENTES DE PROGRAMAÇÃO E IMPLEMENTAÇÃO DE<br />
SISTEMAS EMBARCADOS. [HAMBLEN, 2008] ........................................................................... 7<br />
FIGURA 7 - LINHA DE DESENVOLVIMENTO BÁSICA PARA A CRIAÇÃO DA CAMADA DE<br />
HARDWARE OU DO PRÓPRIO SISTEMA EMBARCADO EM SI NAS PLACAS DA ALTERA<br />
[HAMBLEN, 2008]. ............................................................................................................................ 8<br />
FIGURA 8 - ESQUEMATIZAÇÃO DE UM SISTEMA EMBARCADO EM UMA FPGA [ALTERA<br />
CORP.: INTRODUCTION TO THE ALTERA NIOS II SOFT PROCESSOR]. ............................. 12<br />
FIGURA 9 - DESENVOLVIMENTO DE SISTEMAS EMBARCADOS USANDO AS IDE’S<br />
(INTEGRADED DEVELOPMENT ENVIRONMENT OU AMBIENTE DE DESENVOLVIMENTO<br />
INTEGRADO) SOPC, QUARTUS E NIOS II [COE4DS4 EMBEDDED SYSTEMS - LAB #2 -<br />
INTRODUCTION TO EMBEDDED SOFTWARE FOR THE NIOS II PROCESSOR]. ................ 13<br />
FIGURA 10 - COMPONENTES DE UM SISTEMA BÁSICO NO SOPC. TEMOS MEMÓRIA, UMA<br />
CPU NIOS II, O PROTOCOLO SERIAL DE ESCRITA NA PLACA E O DISPLAY LCD DA<br />
PLACA DE2. ..................................................................................................................................... 14<br />
FIGURA 11 - DESENVOLVIMENTO DE SISTEMAS NA IDE QUARTUS II, NO PRIMEIRO<br />
QUADRO ATRAVÉS DA SINTAXE DO VERILOG, NO SEGUNDO ATRAVÉS DE<br />
DIAGRAMA DE BLOCOS E PORTAS LÓGICAS. ....................................................................... 18<br />
FIGURA 12 - MODELAGEM DE UM SISTEMA BÁSICO NO MÓDULO GRÁFICO DE<br />
PROGRAMAÇÃO DO QUARTUS II .............................................................................................. 19<br />
FIGURA 13 - MÓDULO PIN PLANNER, QUE É USADO PARA A “PINAGEM” DOS<br />
COMPONENTES, COMPONDO A INTEGRAÇÃO DA MODELAGEM DO SISTEMA<br />
EMBARCADO ÀS FPGA'S .............................................................................................................. 20<br />
FIGURA 14 - IDE NIOS II, USADA PARA A PROGRAMAÇÃO DA CAMADA DE SOFTWARE DE<br />
SISTEMAS EMBARCADOS EM FPGA'S ...................................................................................... 22<br />
FIGURA 15 - PESQUISA REALIZADA EM 2006, COM RESPEITO DA PREFERÊNCIA DE<br />
LINGUAGEM DE SISTEMAS EMBARCADOS PELA ALTERA. A LINGUAGEM C LIDERA<br />
COM MAIS DE 60% [HAMBLEN, 2008]. ...................................................................................... 23<br />
FIGURA 16 - ARQUITETURA DE COMUNICAÇÃO DA APLICAÇÃO DE USUÁRIO COM OS<br />
PERIFÉRICOS ATRAVÉS DO HARDWARE DE SISTEMA DE PROCESSAMENTO NIOS II<br />
[HAMBLEN, 2008]. .......................................................................................................................... 24<br />
FIGURA 17 - INTERFACE DA IDE ALTERA MONITOR PROGRAM. .............................................. 27<br />
FIGURA 18 - MODELAGEM DO SISTEMA DIGITAL DEDICADO A VÍDEO ................................. 28<br />
FIGURA 19 - MODELAGEM DA CONFIGURAÇÃO DO CONTROLADOR DE VÍDEO VGA.<br />
[ALTERA CORP.: USING SOPC BUILDER & DSP BUILDER TOOL FLOW, 2005] ................. 32<br />
FIGURA 20 - UM TIPO DE CONTROLADOR DE VÍDEO ORIUNDO DO SOPC. [HAMBLEN, 2008]<br />
........................................................................................................................................................... 33<br />
FIGURA 21 - INTEGRAÇÃO DOS SINAIS DO SISTEMA DIGITAL DEDICADO A VÍDEO A SEUS<br />
RESPECTIVOS PINOS DA FPGA. ................................................................................................. 34<br />
iii
FIGURA 22 - “PINAGEM” DA SAÍDA VGA PARA UM DISPOSITIVO DE SAÍDA DE VÍDEO<br />
COMO UM MONITOR OU UM PROJETOR. [HAMBLEN, 2008] ............................................... 36<br />
FIGURA 23 - À ESQUERDA, O MODO DE ENDEREÇAMENTO X-Y, ÚNICO DISPONIBILIZADO<br />
PARA A PLACA DE2 E A RESOLUÇÃO 640 X 480, QUE FOI A ESCOLHIDA PARA ESTE<br />
TRABALHO. [ALTERA CORP.: VIDEO OUT IP CORES FOR ALTERA DE BOARDS, 2009] 37<br />
FIGURA 24 - CONTEÚDO DE UMA VARIÁVEL DE COR. [ALTERA CORP.: VIDEO OUT IP<br />
CORES FOR ALTERA DE BOARDS, 2009] .................................................................................. 37<br />
FIGURA 25 - EXECUÇÃO DO SISTEMA DIGITAL DEDICADO A VÍDEO EMBARCADO NA<br />
PLACA DE2 UTILIZANDO UMA FPGA CYCLONE II. ............................................................... 44<br />
FIGURA 26 - MODELAGEM DO SISTEMA EMBARCADO DEDICADO A OPENGL. .................... 49<br />
FIGURA 27 - UMA FOLHA DE SAMAMBAIA FORMADA POR UM FRACTAL.<br />
MATEMATICAMENTE CONHECIDO POR FETO-FRACTAL. .................................................. 50<br />
FIGURA 28 - MODELAGEM ESQUEMÁTICA DO BIOFEEDART .................................................... 51<br />
FIGURA 29 - REGIÃO DO PRÉ-SAL BRASILEIRO............................................................................. 53<br />
FIGURA 30 - FORMAÇÕES GEOLÓGICAS ANTES DO PRÉ-SAL.................................................... 53<br />
FIGURA 31 - MODELAGEM DE UM POÇO DIRECIONAL ............................................................... 55<br />
iv
LISTAS DE TABELAS<br />
TABELA 1 - UMA TENTATIVA DE ABSTRAÇÃO ENTRE UMA LINGUAGEM DE AUTO NÍVEL<br />
EM SOFTWARE PARA OUTRA DE BAIXO NÍVEL EM HARDWARE ..................................... 10<br />
TABELA 2 - COMPILADOR MODULAR DE HARDWARE DA ALTERA. ....................................... 21<br />
TABELA 3 - TIPAGEM DE DADOS DA ALTERA ............................................................................... 25<br />
TABELA 4 - COMPONENTES E CONTROLADORES UTILIZADOS PARA A IMPLEMENTAÇÃO<br />
DO SISTEMA DIGITAL DEDICADO A VÍDEO. .......................................................................... 29<br />
TABELA 5 - SINAIS DO CONTROLADOR DE VÍDEO E SUAS RESPECTIVAS CONEXÕES AOS<br />
PINOS DA FPGA CYCLONE II ..................................................................................................... 35<br />
TABELA 6 - TABELA DE ALGUMAS CONSTANTES USADAS NO DESENVOLVIMENTO DA<br />
CAMADA DE SOFTWARE NA IDE NIOS II................................................................................. 38<br />
TABELA 7 - CÓDIGO EMBARCADO NO SISTEMA DIGITAL DEDICADO A VÍDEO .................. 40<br />
TABELA 8 - FUNÇÕES USADAS PARA ESCREVER, LER E COPIAR DADOS DE UMA ÁREA DE<br />
PIXELS NO FRAMEBUFFER DE UM PROGRAMA EM OPENGL. ........................................... 47<br />
TABELA 9 - DADOS QUE PODEM SER UTILIZADOS NA MODELAGEM EM 3D DO SISTEMA<br />
EMBARCADO VOLTADO AO AUXÍLIO DE SISTEMAS PETROLIFEROS. ............................ 56<br />
v
LISTA DE SÍMBOLOS E ABREVIATURAS<br />
GPS Global Positioning System<br />
ENIAC Electronic Numeric Integrator And Calculator<br />
LCD Liquid Cristal Display<br />
LED Light Emitting Dio<strong>de</strong><br />
CPU Central Process Unit<br />
R/C Remote & <strong>Co</strong>ntrol<br />
FPGA Field Programmable Gate Array<br />
ASIC’s Application Specific Integrated Circuit<br />
VHDL VHSIC Hardware Description Language<br />
VHSIC Very High Speed Integrated Circuits<br />
DARPA Defense Advanced Research Projects Agency<br />
IEEE Institute of Electrical and Electronic Engineering<br />
DoD Department of Defense<br />
AIDS Automated Integrated <strong>Design</strong> Systems<br />
GDA Gateway <strong>Design</strong> Automation<br />
CDS Ca<strong>de</strong>nce <strong>Design</strong> Systems<br />
OVI Open Verilog Internacional<br />
DE2 Development and Education Board 2<br />
SOPC System On a Programmable Chip<br />
JTAG_UART Join Test Action Group - Interface UART<br />
IDE Integrated Development Environment<br />
SD Secure Digital<br />
UART Universal Asynchronous Receiver/Transmitter<br />
DDR Double Data Rate<br />
RAM Random Access Memory<br />
SDRAM Synchronous Dynamic Random Access Memory<br />
TCP/IP Transmission <strong>Co</strong>ntrol Protocol / Internet Protocol<br />
HAL Hardware Abstraction Layer<br />
SRAM Static Random Access Memory<br />
VGA Vi<strong>de</strong>o Graphics Array<br />
RGB Red-Green-Blue<br />
vi
USB Universal Serial Bus<br />
FIFO First-In-First-Out<br />
GPIO General Purpose I/O<br />
DMA Direct Memory Access<br />
OpenGL Open Graphics Library<br />
FAPERN Fundação <strong>de</strong> Apoio e Pesquisa do Estado do Rio Gran<strong>de</strong> do<br />
Norte<br />
EEG Electroencephalogram<br />
ECG Electrocardiogram<br />
EMG Electromyography<br />
MWD Measuring While Drilling<br />
LWD Logging While Drilling<br />
vii
1.0 Introdução<br />
Nas últimas décadas, o mundo tem passado por uma revolução digital que torna a<br />
socieda<strong>de</strong> cada vez mais <strong>de</strong>pen<strong>de</strong>nte <strong>de</strong> tecnologia para trabalhar, pesquisar, obter<br />
entretenimento ou simplesmente viver, através <strong>de</strong> aparelhos diversos como<br />
computadores, celulares, sistemas <strong>de</strong> GPS (Global Positioning System, ou Sistema<br />
Global <strong>de</strong> Posicionamento), marca-passos, <strong>de</strong>ntre muitos outros. Este processo está<br />
associado à intensa necessida<strong>de</strong> <strong>de</strong> <strong>de</strong>senvolvimento, qualida<strong>de</strong> e portabilida<strong>de</strong>. Cada<br />
vez mais, o consumidor <strong>de</strong> tecnologia <strong>de</strong>seja aparelhos que sejam melhores, mais<br />
portáteis e mais diversificados.<br />
Po<strong>de</strong>-se enten<strong>de</strong>r este sentimento ao consi<strong>de</strong>rar extremos da evolução dos<br />
computadores, <strong>de</strong>s<strong>de</strong> o século passado até os dias <strong>de</strong> hoje. No fim da Segunda Guerra<br />
Mundial, o mundo foi apresentado ao seu primeiro computador, o ENIAC (Eletronic<br />
Numeric Integrator And Calculator, ou Calculadora Integrativa Numérica Eletrônica),<br />
que pesava aproximadamente 30 toneladas e totalizava 180 <strong>de</strong> área construída, ou<br />
seja, ocupava praticamente a área <strong>de</strong> uma sala completa. Nem o mais otimista dos<br />
cientistas que <strong>de</strong>senvolveram aquele projeto revolucionário para a época po<strong>de</strong>ria<br />
imaginar que, aproximadamente 60 anos <strong>de</strong>pois <strong>de</strong>sta gran<strong>de</strong> <strong>de</strong>scoberta tecnológica,<br />
pessoas comuns po<strong>de</strong>riam levar seus computadores portáteis ao trabalho ou escola.<br />
Mais do que isso, não se pensava que os computadores chegariam a pesar menos do que<br />
cinco quilogramas em média, nem que viriam a ser quase que infinitamente mais<br />
po<strong>de</strong>rosos que o antigo ENIAC em capacida<strong>de</strong> <strong>de</strong> processamento.<br />
A Figura 1 busca sintetizar esta diferença. Muito já se evoluiu até a atualida<strong>de</strong>, e a<br />
tendência é <strong>de</strong> que os engenheiros do Século XXI busquem soluções para problemas<br />
que sequer foram formulados ainda, e assim contribuam <strong>de</strong> forma produtiva para esta<br />
gran<strong>de</strong> revolução tecnológica.<br />
Figura 1 - ENIAC x Laptop <strong>Co</strong>mum. Apenas 60 anos os separam.<br />
1
Por trás da referida revolução computacional, há um exército <strong>de</strong> <strong>de</strong>senvolvedores <strong>de</strong><br />
novas tecnologias, que visam aten<strong>de</strong>r os novos requisitos e necessida<strong>de</strong>s <strong>de</strong> produção,<br />
comércio e lazer. Atualmente, não vemos com nenhuma estranheza uma simples padaria<br />
ou mercado utilizar um programa <strong>de</strong> computador para contabilizar suas finanças, o que<br />
seria inimaginável há mais <strong>de</strong> <strong>de</strong>z anos.<br />
Tendo em vista o que foi mencionado acima, este trabalho objetiva agregar novos<br />
conhecimentos à área <strong>de</strong> sistemas embarcados. O expressivo crescimento do comércio<br />
<strong>de</strong>stes sistemas e dispositivos atualmente é mais do que evi<strong>de</strong>nte, com aparelhos que<br />
são geralmente portáteis e têm um ou mais fins específicos para comodida<strong>de</strong>, lazer e/ou<br />
execução <strong>de</strong> uma <strong>de</strong>terminada função. Por exemplo, um aparelho celular atual possui<br />
conexão com a internet, transmite sinal <strong>de</strong> rádio, reproduz mp3, lê GPS, <strong>de</strong>ntre outras<br />
funções. Já o aparelho original, quando foi projetado, possuía somente a função <strong>de</strong> ligar<br />
para outro telefone através <strong>de</strong> uma comunicação sem fio. A linha <strong>de</strong> pesquisa que<br />
permeia este trabalho po<strong>de</strong> ser muito rentável por estar relacionada com o constante<br />
<strong>de</strong>senvolvimento voltado ao comércio <strong>de</strong> vi<strong>de</strong>ogames, celulares, computadores, entre<br />
outros inúmeros dispositivos.<br />
A importância do tema torna interessante promover avanços para <strong>de</strong>senvolver a área<br />
<strong>de</strong> sistemas embarcados. O presente trabalho <strong>de</strong>screve e discute as ativida<strong>de</strong>s realizadas<br />
para se embarcar um sistema digital <strong>de</strong> ví<strong>de</strong>o em FPGA, além <strong>de</strong> apresentar uma<br />
sugestão <strong>de</strong> evolução <strong>de</strong>ste dispositivo e enunciar duas possíveis aplicações a este<br />
segundo sistema proposto.<br />
1.1 Objetivos<br />
O objetivo do trabalho é projetar e relatar o <strong>de</strong>senvolvimento <strong>de</strong> um sistema<br />
embarcado e <strong>de</strong> quaisquer controladores que sejam necessários para a obtenção <strong>de</strong> um<br />
bom <strong>de</strong>sempenho <strong>de</strong> ví<strong>de</strong>o ao executar programas gráficos em C. A razão da escolha<br />
<strong>de</strong>sta linguagem <strong>de</strong> alto nível para o tratamento <strong>de</strong> ví<strong>de</strong>o será discutida mais adiante<br />
neste trabalho.<br />
Para tal sistema a precisão, exatidão, harmonia, parametrização e temporização dos<br />
componentes e controladores são essenciais, <strong>de</strong> forma a garantir uma boa comunicação<br />
entre os diversos componentes e periféricos utilizados. Dentre estes, po<strong>de</strong>m ser<br />
<strong>de</strong>stacados: memórias (do programa e a <strong>de</strong> buffer <strong>de</strong> ví<strong>de</strong>o), barramentos, processador,<br />
ví<strong>de</strong>o; e outros diversos periféricos como LCD (Liquid Cristal Display ou Diplay <strong>de</strong><br />
2
Cristal Líquido), chaves e LED’s (Light Emitting Dio<strong>de</strong>s ou Diodos Emissores <strong>de</strong> Luz)<br />
utilizados como auxiliares ao <strong>de</strong>senvolvimento.<br />
1.2 Motivação<br />
Uma companhia muito atuante no mercado <strong>de</strong> sistemas embarcados é a Altera. Seus<br />
produtos são especiais <strong>de</strong>vido ao fato da empresa oferecer diversos sistemas que não<br />
precisam ser ajustados fisicamente, e sim virtualmente através do hardware que é<br />
<strong>de</strong>scrito através <strong>de</strong> linguagens <strong>de</strong> <strong>de</strong>scrição especiais, que geram um gran<strong>de</strong> po<strong>de</strong>r <strong>de</strong><br />
reconfigurabilida<strong>de</strong>.<br />
Além disso, esta companhia <strong>de</strong>senvolve diversas placas <strong>de</strong> estudo já preparadas para<br />
uma integração que possa proporcionar generalida<strong>de</strong> para qualquer que seja a<br />
necessida<strong>de</strong> <strong>de</strong> seus <strong>de</strong>senvolvedores. Programando os sistemas em linguagem <strong>de</strong><br />
hardware, po<strong>de</strong>m-se integrar componentes como CPU’s (Central Process Unit ou<br />
Unida<strong>de</strong> <strong>de</strong> Processamento Central), controladores <strong>de</strong> memórias, controladores <strong>de</strong> ví<strong>de</strong>o<br />
e quaisquer outros periféricos, usando como vantagem o fato <strong>de</strong> que todos os pontos<br />
importantes das placas já estão previamente conectados e <strong>de</strong>scritos. Estas placas po<strong>de</strong>m<br />
ser utilizadas para diversos projetos; na Figura 2 temos dois exemplos <strong>de</strong> sistemas<br />
embarcados nas placas da Altera:<br />
Figura 2 - <strong>Sistemas</strong> embarcados em FPGA. Na figura a esquerda tem-se um robô-FPGA que usa<br />
uma bateria carro R/C (Remote & <strong>Co</strong>ntrol ou <strong>Co</strong>ntrole & Remoto) e um servormotor R/C. Na<br />
imagem da direita tem-se um brinquedo R/C controlado por FPGA com sensores IR <strong>de</strong> distancia.<br />
[Hamblen, 2008]<br />
Empresas mundo afora têm percebido o po<strong>de</strong>r oferecido pelas placas da Altera nesta<br />
linha <strong>de</strong> <strong>de</strong>senvolvimento, <strong>de</strong>vido à possibilida<strong>de</strong> <strong>de</strong> criar nas placas sistemas críticos,<br />
sistemas <strong>de</strong> tempo real, servidores web, processadores <strong>de</strong> ví<strong>de</strong>o, <strong>de</strong>ntre outros sistemas<br />
3
embarcados. No passado, as placas relacionadas a estas funções tinham <strong>de</strong> ser<br />
mo<strong>de</strong>ladas, <strong>de</strong>senhadas, diagramadas esquematicamente, fabricadas e soldadas <strong>de</strong>s<strong>de</strong> o<br />
botão <strong>de</strong> início até o LED <strong>de</strong> saída, proporcionando uma gama maior <strong>de</strong> possíveis<br />
elementos nos quais po<strong>de</strong>riam existir falhas que gerariam danos ao funcionamento<br />
<strong>de</strong>stes sistemas.<br />
<strong>Co</strong>m tais placas especiais <strong>de</strong> estudo, é possível <strong>de</strong>scarregar o código gerado nas<br />
linguagens <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware nas FPGA's (Field Programmable Gate Array, ou<br />
Matriz <strong>de</strong> Portas Programáveis). As FPGA’s são constituídas por milhares <strong>de</strong><br />
transistores e fazem basicamente o que vários circuitos integrados fariam, com a<br />
diferença <strong>de</strong> que sua matriz é reprogramável como já mencionado anteriormente. Na<br />
Figura 3 temos a foto <strong>de</strong> uma FPGA da linha Stratix:<br />
Figura 3 - Uma FPGA Stratix IV<br />
Este trabalho foi <strong>de</strong>senvolvido na placa <strong>de</strong> estudos DE2 (Development and<br />
Education Board ou Placa <strong>de</strong> <strong>Desenvolvimento</strong> e Estudo 2) da Altera que tem uma<br />
FPGA Cyclone II, mo<strong>de</strong>lada e exibida nas Figuras 4 e 5.<br />
4
Figura 4 - Esquemática da placa DE2 que tem uma FPGA Cyclone II<br />
Figura 5 - Placa DE2 da Altera com uma FPGA Cyclone II<br />
1.3 Organização do Trabalho<br />
Este trabalho é composto por cinco capítulos, que po<strong>de</strong>m ser resumidos como segue.<br />
O presente capítulo traz uma introdução sobre o papel <strong>de</strong> sistemas embarcados na<br />
atualida<strong>de</strong>. Além disso, também são apresentados alguns conceitos <strong>de</strong> sistemas<br />
embarcados, e <strong>de</strong> integração <strong>de</strong> sistemas embarcados nas placas <strong>de</strong> estudo da companhia<br />
Altera.<br />
5
O Capítulo 2 apresenta uma visão mais profunda sobre sistemas embarcados. Os<br />
tópicos abordados referem-se à contextualização histórica <strong>de</strong> <strong>de</strong>senvolvimento para as<br />
placas da Altera, às distinções <strong>de</strong> linguagens <strong>de</strong> hardware para as <strong>de</strong> alto nível, além da<br />
metodologia que <strong>de</strong>ve ser abordada para a criação <strong>de</strong> qualquer sistema embarcado. Tal<br />
metodologia utiliza as diversas ferramentas disponibilizadas pela Altera para um<br />
<strong>de</strong>senvolvimento rápido, coeso e preciso.<br />
O Capítulo 3 exibe uma aplicação <strong>de</strong> todos os passos da metodologia abordada no<br />
capitulo anterior para a criação <strong>de</strong> um sistema digital embarcado <strong>de</strong>dicado a ví<strong>de</strong>o.<br />
O Capítulo 4 discute uma perspectiva futura para uma integração <strong>de</strong> alto nível no<br />
sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o implementado no capítulo anterior. Esta integração tem<br />
como enfoque uma gran<strong>de</strong> melhoria do sistema implementado, visando o retorno<br />
econômico e apontando exemplos <strong>de</strong> aplicações que po<strong>de</strong>riam ser realizadas com o<br />
sistema proposto.<br />
O Capítulo 5 apresenta as conclusões obtidas sobre o <strong>de</strong>senvolvimento <strong>de</strong> sistemas<br />
embarcados, em especial para o sistema criado neste trabalho. Além disso, são<br />
apontadas as perspectivas futuras da integração <strong>de</strong> alto-nível do sistema aqui<br />
<strong>de</strong>senvolvido.<br />
6
2.0 <strong>Sistemas</strong> <strong>Embarcados</strong> (ou <strong>Sistemas</strong> Embutidos)<br />
Um sistema embarcado é um sistema em que toda a unida<strong>de</strong> <strong>de</strong> processamento é<br />
<strong>de</strong>dicada para a realização <strong>de</strong> uma <strong>de</strong>vida função, geralmente restrita por computação <strong>de</strong><br />
tempo real. Ao contrário dos computadores <strong>de</strong> propósito geral, os quais trabalham com<br />
diversos periféricos e processos, os sistemas embarcados se especializam em funções<br />
para as quais se necessita um processamento melhor e <strong>de</strong>dicado a uma única função.<br />
Em geral os sistemas embarcados são usados quando o <strong>de</strong>sempenho aprimorado é<br />
uma necessida<strong>de</strong>, ou quando um processo exige exclusivida<strong>de</strong>. Os sistemas <strong>de</strong> lógica<br />
digital embarcados po<strong>de</strong>m ser implementados através <strong>de</strong> diferentes tecnologias, tais<br />
como lógica padrão, lógica programável, ASIC’s (Application Specific Integrated<br />
Circuit ou Circuito Integrado <strong>de</strong> Aplicação Específica), ou <strong>de</strong> personalização completa.<br />
A Figura 6 subdivi<strong>de</strong> as tecnologias <strong>de</strong> <strong>de</strong>senvolvimento, e no caso <strong>de</strong>ste trabalho, foi<br />
utilizada a lógica programável, por meio da tecnologia <strong>de</strong> FPGA’s da Altera.<br />
Figura 6 - Tecnologias diferentes <strong>de</strong> programação e implementação <strong>de</strong> sistemas embarcados.<br />
[Hamblen, 2008]<br />
2.1 <strong>Sistemas</strong> <strong>Embarcados</strong> nas placas da Altera<br />
As placas da Altera trabalham prioritariamente com as linguagens VHDL (VHSIC<br />
Very High Speed Integrated Circuits Hardware Description Language ou Linguagem<br />
<strong>de</strong> Descrição <strong>de</strong> Hardware <strong>de</strong> Circuitos Integrados <strong>de</strong> Velocida<strong>de</strong> Muito Alta) e o<br />
Verilog HDL. Para trabalhar em tais placas <strong>de</strong>ve ser utilizada uma <strong>de</strong>ssas duas<br />
linguagens <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware para programar e executar os <strong>de</strong>vidos códigos <strong>de</strong><br />
configuração <strong>de</strong> hardware. De posse <strong>de</strong>stas linguagens e algumas ferramentas da Altera,<br />
7
é possível criar sistemas embarcados ou ainda criar a camada <strong>de</strong> hardware para sistemas<br />
mais complexos. Na Figura 7 é apresentado um diagrama <strong>de</strong> passos básicos para criar e<br />
trabalhar com sistemas embarcados nas placas <strong>de</strong> estudo da Altera:<br />
Figura 7 - Linha <strong>de</strong> <strong>de</strong>senvolvimento básica para a criação da camada <strong>de</strong> hardware ou do próprio<br />
sistema embarcado em si nas placas da Altera [Hamblen, 2008].<br />
2.1.1 Breve histórico das linguagens <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware<br />
Existem duas principais linguagens <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware: o VHDL e o Verilog<br />
HDL. O VHDL foi originalmente <strong>de</strong>senvolvido sob o comando do DARPA (Defense<br />
Advanced Research Projects Agency, ou Agência <strong>de</strong> Pesquisa Avançada <strong>de</strong> Defesa dos<br />
Estados Unidos) para substituir os complexos manuais <strong>de</strong> diagramas esquemáticos dos<br />
ASICS (Application Specific Integrated Circuit, ou Circuito Integrado <strong>de</strong> Aplicação<br />
Especifica). Em 1987, o IEEE (Institute of Electrical and Electronic Engineering, ou<br />
Instituto Elétrico e Eletrônico <strong>de</strong> Engenharia) padronizou o VHDL. Esta linguagem não<br />
é sensitiva à caixa alta (case sensitive), e tem uma sintaxe baseada na primitiva<br />
linguagem Ada. Esta última foi <strong>de</strong>senvolvida pelo DoD (Department of Defense, ou<br />
Departamento <strong>de</strong> Defesa) dos Estados Unidos em 1970, com o objetivo <strong>de</strong> padronizar a<br />
programação e substituir as centenas <strong>de</strong> linguagens <strong>de</strong> programação <strong>de</strong> hardware usadas<br />
na época. A <strong>de</strong>nominação Ada tem origem em Ada Lovelace, que é conhecida como a<br />
primeira programadora da história da computação.<br />
8
Já a outra linguagem <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware aqui estudada, o Verilog HDL, é<br />
também disponibilizada pela Altera para mo<strong>de</strong>lar sistemas eletrônicos, foi criada por<br />
Phil Moorby e Prabhu Goel durante o inverno <strong>de</strong> 1983/1984 como AIDS (Automated<br />
Integrated <strong>Design</strong> Systems, ou Sistema <strong>de</strong> <strong>Design</strong> <strong>de</strong> Integração Automatizada). Esta<br />
sigla, por estar relacionada à outra <strong>de</strong>finição posteriormente utilizada no vocabulário<br />
médico foi alterada para GDA (Gateway <strong>Design</strong> Automation, ou Automação <strong>de</strong> <strong>Design</strong><br />
<strong>de</strong> Portas) em 1985. Esta linguagem foi adquirida pela companhia CDS (Ca<strong>de</strong>nce<br />
<strong>Design</strong> Systems, ou <strong>Sistemas</strong> <strong>de</strong> <strong>Design</strong> Ca<strong>de</strong>nce) em 1990. Devido ao crescente<br />
sucesso do VHDL, a Ca<strong>de</strong>nce observou a necessida<strong>de</strong> da disseminação do<br />
conhecimento da linguagem, e assim colocou o Verilog HDL em domínio público<br />
através do projeto OVI (Open Verilog Internacional, ou Verilog Aberto Internacional)<br />
também conhecido como projeto Accellera. Desta forma, com as correções<br />
oficializadas, em 2001 o IEEE padronizou o uso do Verilog HDL como outra <strong>de</strong><br />
linguagem oficial <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware.<br />
HDL.<br />
A linguagem escolhida para este trabalho foi a segunda aqui discutida, o Verilog<br />
2.1.2 Linguagem <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware e seu funcionamento<br />
Estas linguagens <strong>de</strong> <strong>de</strong>scrição <strong>de</strong> hardware diferem muito das linguagens <strong>de</strong> alto<br />
nível tais como C/C++, Java, entre outras pelo fato das primeiras executarem sua lógica<br />
não somente <strong>de</strong> acordo com o fluxo do algoritmo, mas também seguindo a<br />
temporização <strong>de</strong> um ou mais clocks <strong>de</strong> processamento durante a execução.<br />
As variáveis dos algoritmos <strong>de</strong> baixo nível são tratadas <strong>de</strong> maneira completamente<br />
distinta das variáveis nas linguagens <strong>de</strong> alto nível. Isso porque no primeiro caso estamos<br />
mo<strong>de</strong>lando virtualmente circuitos, o que implica que ao invés <strong>de</strong> fazermos acesso a um<br />
en<strong>de</strong>reço na memória em uma pilha <strong>de</strong> execução, estamos fazendo acesso a um bloco <strong>de</strong><br />
registradores e/ou fios elétricos virtuais. Neste nível <strong>de</strong> hardware, a temporização <strong>de</strong><br />
atribuição, o tempo <strong>de</strong> processamento, o bloqueio <strong>de</strong> acesso e o barramento formam<br />
novos tipos <strong>de</strong> parâmetros e restrições a serem consi<strong>de</strong>rados, os quais geralmente não<br />
significam empecilhos nas linguagens <strong>de</strong> alto nível.<br />
Na Tabela 1 , para se distinguir uma linguagem <strong>de</strong> baixo nível <strong>de</strong> hardware <strong>de</strong> uma<br />
<strong>de</strong> alto nível <strong>de</strong> software, tenta-se sem sucesso abstrair um programa em Verilog HDL<br />
para C. No Verilog HDL, apresentado na coluna à direita, a cada subida do sinal do<br />
9
eset ou do clock, executamos o bloco always, o que se busca fazer por meio do bloco if<br />
à esquerda da Tabela (em C). Entretanto, o tempo <strong>de</strong> acesso a uma variável em software<br />
é “infinitamente” maior do que em hardware, e se este sinal for rápido <strong>de</strong>mais para o<br />
software reconhecer, o bloco C possivelmente jamais será executado. É menos provável<br />
que isto aconteça no caso do código em hardware <strong>de</strong>scrito em Verilog HDL na segunda<br />
coluna.<br />
Outra diferença extremamente pertinente é o operador “
}<br />
}<br />
}<br />
flop1=flop2;<br />
flop2=flop1;<br />
end<br />
else<br />
begin<br />
flop1
Figura 8 - Esquematização <strong>de</strong> um sistema embarcado em uma FPGA [Altera <strong>Co</strong>rp.: Introduction<br />
to the Altera Nios II Soft Processor].<br />
<strong>Co</strong>mo se po<strong>de</strong> observar, todos os periféricos tais como as memórias (exceto a<br />
“Memória No Chip”, que é uma pequena memória interna construída na FPGA), portas<br />
paralelas e seriais, ví<strong>de</strong>o e áudio, entre outros, necessitam <strong>de</strong> seus respectivos<br />
controladores embarcados na FPGA. Estes controladores são programados nas<br />
linguagens <strong>de</strong> hardware e <strong>de</strong>scarregados nas FPGA’s através <strong>de</strong> uma interface USB<br />
(USB-Blaster no caso <strong>de</strong> algumas placas para Windows) conectada ao um computador.<br />
Esta interface também é controlador interno na FPGA, que no caso correspon<strong>de</strong> a<br />
interface JTAG-UART (Join Test Action Group ou Grupo <strong>de</strong> Testes <strong>de</strong> Ações<br />
Unificadas - UART Universal Asynchronous Receiver/Transmitter, ou<br />
Receptor/Transmissor Universal Assíncrono). A comunicação para a escrita e/ou leitura<br />
<strong>de</strong> dados nas placas, ocorre através <strong>de</strong>stas interfaces USB-BLASTER e JTAG-UART<br />
através <strong>de</strong> uma estrutura cliente-servidor parecida com a convencional <strong>de</strong> serviço web.<br />
12
Desta forma, é possível <strong>de</strong>scarregar os códigos <strong>de</strong> hardware, verificar dados durante<br />
uma execução e enviar comandos, o que implica em efetuar o <strong>de</strong>sejado controle dos<br />
dispositivos e periféricos no sistema embarcado mo<strong>de</strong>lado.<br />
2.2 Etapas <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> sistemas embarcados para as FPGA’s da<br />
Altera<br />
O <strong>de</strong>senvolvimento <strong>de</strong> sistemas embarcados da Altera da forma que foi realizado<br />
neste trabalho é um processo complexo e modular. O funcionamento <strong>de</strong>sta linha <strong>de</strong><br />
<strong>de</strong>senvolvimento modular está ilustrado na Figura 9. Nesta seção serão <strong>de</strong>scritas todas<br />
as etapas necessárias para o <strong>de</strong>senvolvimento <strong>de</strong> qualquer sistema embarcado para as<br />
placas da Altera seguindo esta linha <strong>de</strong> <strong>de</strong>senvolvimento modular e utilizando suas<br />
ferramentas <strong>de</strong> <strong>de</strong>senvolvimento: SOPC (System On a Programmable Chip ou Sistema<br />
Em um Chip Programável), University <strong>Co</strong>res, Quartus II, Nios II e Altera Debug<br />
Program.<br />
Figura 9 - <strong>Desenvolvimento</strong> <strong>de</strong> sistemas embarcados usando as IDE’s (Integra<strong>de</strong>d Development<br />
Environment ou Ambiente <strong>de</strong> <strong>Desenvolvimento</strong> Integrado) SOPC, Quartus e Nios II [COE4DS4<br />
Embed<strong>de</strong>d Systems - Lab #2 - Introduction to Embed<strong>de</strong>d Software for the NIOS II Processor].<br />
2.2.1 Etapa I: A criação e mo<strong>de</strong>lagem dos componentes do sistema e<br />
inserção dos mesmos na IDE SOPC<br />
<strong>Sistemas</strong> embarcados em geral são compostos por componentes como CPU,<br />
memória, LED’s e outros periféricos, conhecidos pelo seu uso bastante comum. A<br />
Altera, visando a praticida<strong>de</strong>, disponibiliza alguns dos componentes comumente<br />
13
utilizados para este <strong>de</strong>senvolvimento, no intuito <strong>de</strong> automatizar o processo <strong>de</strong><br />
implementação em suas FPGA’s.<br />
O uso <strong>de</strong>stes componentes mais comuns é possível por meio da IDE do SOPC, que<br />
está conectada à IDE Quartus II. A interface do SOPC po<strong>de</strong> ser visualizada na Figura<br />
10.<br />
Figura 10 - <strong>Co</strong>mponentes <strong>de</strong> um sistema básico no SOPC. Temos memória, uma CPU Nios II, o<br />
protocolo serial <strong>de</strong> escrita na placa e o display LCD da Placa DE2.<br />
Nesta IDE, po<strong>de</strong>m-se selecionar os mais diversos componentes básicos necessários<br />
para o <strong>de</strong>senvolvimento <strong>de</strong> qualquer sistema embarcado nas placas da Altera. No<br />
sistema básico da imagem acima, por exemplo, foram escolhidos apenas os quatro<br />
componentes <strong>de</strong>scritos a seguir:<br />
Memória No Chip (32 Kbytes).<br />
CPU Nios II (tipo f).<br />
JTAG_UART (tem a utilida<strong>de</strong> <strong>de</strong> escrita na placa através da interface no<br />
computador utilizado para o <strong>de</strong>senvolvimento).<br />
<strong>Co</strong>ntrolador <strong>de</strong> LCD <strong>de</strong> Caracteres (16 colunas x 2 linhas).<br />
2.2.2 Etapa II: <strong>Co</strong>mponentes especiais e mais complexos através do<br />
programa University <strong>Co</strong>res<br />
14
Visando um <strong>de</strong>senvolvimento educacional mais prático e efetivo, a companhia<br />
Altera disponibilizou alguns componentes mais específicos e complexos do que os mais<br />
usuais encontrados no SOPC, por meio do programa University <strong>Co</strong>res. Do mesmo<br />
modo que os do SOPC, estes componentes já têm seu hardware <strong>de</strong>finido pela Altera,<br />
sendo necessário apenas realizar as <strong>de</strong>vidas conexões necessárias para configurar o<br />
sistema.<br />
As University <strong>Co</strong>res são acessadas como um patch na IDE SOPC, isto é, os<br />
componentes especiais são integrados e configurados no seu sistema através da IDE<br />
SOPC.<br />
Na lista abaixo, temos exemplos <strong>de</strong> componentes especiais disponibilizados apenas<br />
pelo programa University <strong>Co</strong>res:<br />
VGA Output Especial (controladores <strong>de</strong> ví<strong>de</strong>o).<br />
Áudio Output Especial (controlador <strong>de</strong> som).<br />
Entradas para clocks externos<br />
<strong>Co</strong>ntrolador <strong>de</strong> LCD <strong>de</strong> Caracteres especial (16 colunas x 2 linhas).<br />
<strong>Co</strong>ntrolador <strong>de</strong> Ethernet.<br />
<strong>Co</strong>ntrolador Debounce dos Pushbuttons.<br />
<strong>Co</strong>ntrolador <strong>de</strong> USB.<br />
<strong>Co</strong>ntrolador <strong>de</strong> cartão SD (Secure Digital ou Seguro digital).<br />
Protocolos UART especiais (IrDA (Infrared Data Association ou Associação <strong>de</strong><br />
Dados Infravermelhos) UART e RS232 UART)<br />
<strong>Co</strong>ntroladores <strong>de</strong> memória SDRAM e memória FLASH (Transformam o chip<br />
SDRAM da DE2, por exemplo, em uma memória DDR (Double Data Rate ou<br />
Dupla Taxa <strong>de</strong> Dados) ou DDR2).<br />
Pontes <strong>de</strong> memórias especiais (Bridges).<br />
<strong>Co</strong>ntroladores <strong>de</strong> entradas PS2.<br />
Diversos outros.<br />
Embora alguns <strong>de</strong>stes componentes já estejam “prontos” para o uso, muitos outros<br />
necessitam <strong>de</strong> componentes auxiliares para seu funcionamento. Por exemplo, os<br />
componentes <strong>de</strong> memórias especiais sempre necessitam <strong>de</strong> controladores <strong>de</strong><br />
barramentos em pontes, para fazer acesso aos bancos <strong>de</strong> memórias (um caso é o do chip<br />
15
<strong>de</strong> memória SDRAM (Synchronous Dynamic Random Access Memory ou Memória <strong>de</strong><br />
Acesso Aleatório e Dinâmico), que tem quatro bancos). Já os controladores das<br />
memórias, tais como os das DDR, necessitam <strong>de</strong> períodos <strong>de</strong> clock distintos e <strong>de</strong>fasados<br />
do período <strong>de</strong> clock da CPU para po<strong>de</strong>r realizar o acesso <strong>de</strong> escrita e/ou leitura na<br />
subida <strong>de</strong>sse clock, e o fim <strong>de</strong> tais ativida<strong>de</strong>s nas <strong>de</strong>scidas <strong>de</strong> clock. Uma adversida<strong>de</strong><br />
adicional que po<strong>de</strong> ser mencionada é o fato da saída <strong>de</strong> ví<strong>de</strong>o necessitar <strong>de</strong> outro clock<br />
mais lento que o da CPU para sincronizar os sinais <strong>de</strong> ví<strong>de</strong>o corretamente. Todos os<br />
dados referentes a estes controladores e seus componentes auxiliares po<strong>de</strong>m ser<br />
encontrados nos manuais disponibilizados no site da Altera.<br />
A etapa <strong>de</strong> mo<strong>de</strong>lagem, estipulação e parametrização dos componentes <strong>de</strong> um<br />
sistema vem a ser uma das áreas mais importantes e possivelmente uma das mais<br />
trabalhosas <strong>de</strong>ste tipo <strong>de</strong> <strong>de</strong>senvolvimento, pois qualquer parâmetro errado po<strong>de</strong> até não<br />
influenciar na geração do sistema, mas certamente será <strong>de</strong>scoberto na hora <strong>de</strong> carregar o<br />
sistema <strong>de</strong> hardware na FPGA. Por exemplo, a quantida<strong>de</strong> máxima da Memória No<br />
Chip quando se utiliza uma CPU Nios II do tipo mais simples, é <strong>de</strong> 38 Kbytes<br />
(normalmente, os sistemas usam 32 Kbytes), embora o SOPC tenha o po<strong>de</strong>r <strong>de</strong> estipular<br />
a capacida<strong>de</strong> <strong>de</strong> 128 Kbytes para esta memória. Este erro <strong>de</strong> mo<strong>de</strong>lagem passará<br />
<strong>de</strong>spercebido até a etapa anterior à escrita (etapa <strong>de</strong> fitter, quando o compilador do<br />
Quartus monta a simulação do circuito que será carregado na FPGA) do sistema na<br />
FPGA, o que po<strong>de</strong> acarretar em uma gran<strong>de</strong> perda <strong>de</strong> tempo e esforço.<br />
Vários <strong>de</strong>stes componentes foram criados para o simples uso dos periféricos, <strong>de</strong>ntre<br />
os quais as pontes e os controladores <strong>de</strong> memória, que simplesmente buscam mais<br />
espaço <strong>de</strong> memória <strong>de</strong> execução dos processos que a simples Memória No Chip. Na<br />
placa DE2, a memória Flash tem 4MB e a SDRAM tem 8MB, enquanto que a Memória<br />
No Chip tem apenas 32 KB, como mencionado anteriormente. Embora mais simples <strong>de</strong><br />
usar, ela é muito restrita e um algoritmo po<strong>de</strong> facilmente estourar a pilha <strong>de</strong> execução <strong>de</strong><br />
uma tarefa com algumas chamadas a uma função recursiva, por exemplo.<br />
Entretanto, outros componentes foram especificamente implementados para a<br />
realização da comunicação simples ou melhorada entre os programas na camada <strong>de</strong><br />
software, executados na CPU Nios II, e os mais diversos controladores <strong>de</strong> periféricos <strong>de</strong><br />
hardware integrados no sistema. Um simples exemplo seria que através do controlador<br />
<strong>de</strong> LCD <strong>de</strong> caractere é possível enviar uma string pelo barramento do sistema<br />
embarcado e escrever frases <strong>de</strong> tamanho <strong>de</strong> 16 caracteres no painel <strong>de</strong> LCD, disponível<br />
em algumas placas <strong>de</strong> estudo da Altera. Outro exemplo mais complexo po<strong>de</strong> ser a<br />
16
leitura <strong>de</strong> vários pacotes TCP/IP (Transfer <strong>Co</strong>ntrol Protocol ou Protocolo <strong>de</strong> <strong>Co</strong>ntrole<br />
<strong>de</strong> Transporte / Internet Protocol ou Protocolo <strong>de</strong> Internet) que chegam ao controlador<br />
da porta Ethernet da placa <strong>de</strong> estudo, com o intuito <strong>de</strong> construir uma mensagem através<br />
do <strong>de</strong>sencapsulamento dos pacotes TCP/IP enviados ao servidor embarcado na placa.<br />
Toda a temporização <strong>de</strong> acesso e envio pelo barramento <strong>de</strong> informações já estão<br />
previamente implementados pelos componentes controladores <strong>de</strong> LCD e Ethernet. A<br />
comunicação dos programas na camada <strong>de</strong> software com os periféricos especiais na<br />
camada <strong>de</strong> hardware é realizada por chamadas <strong>de</strong> sistema, disponíveis através das<br />
bibliotecas que a Altera <strong>de</strong>nominou HAL (Hardware Abstraction Layer, ou Camada <strong>de</strong><br />
Abstração <strong>de</strong> Hardware), que são bibliotecas em C que têm o po<strong>de</strong>r <strong>de</strong> controlar o<br />
hardware embarcado nestas placas <strong>de</strong> estudo. Tais bibliotecas serão abordadas mais<br />
especificamente em uma seção posterior do texto.<br />
A versão do programa University <strong>Co</strong>res usada neste trabalho foi a versão 9.0.<br />
2.2.3 Etapa III: A integração da camada <strong>de</strong> hardware feita na IDE<br />
Quartus II<br />
Seguindo a linha <strong>de</strong> <strong>de</strong>senvolvimento modular, nos sistemas <strong>de</strong>senvolvidos para<br />
placas da Altera o hardware po<strong>de</strong> ser <strong>de</strong>scrito em forma <strong>de</strong> texto como citado<br />
anteriormente, ou <strong>de</strong> forma gráfica através <strong>de</strong> portas lógicas na IDE Quartus II<br />
proveniente da Altera exibida na Figura 11:<br />
17
Figura 11 - <strong>Desenvolvimento</strong> <strong>de</strong> sistemas na IDE Quartus II, no primeiro quadro através da<br />
sintaxe do Verilog, no segundo através <strong>de</strong> diagrama <strong>de</strong> blocos e portas lógicas.<br />
Nos sistemas digitais criados através dos componentes do SOPC e University <strong>Co</strong>res,<br />
a parte principal da camada <strong>de</strong> hardware vira uma caixa preta com os componentes<br />
provenientes das etapas anteriores, sem qualquer sinal <strong>de</strong> entrada e saída e quaisquer<br />
conexões necessárias. Em função disso, a etapa <strong>de</strong> integração é dividida em três<br />
Subetapas <strong>de</strong>scritas a seguir.<br />
2.2.3.1 Subetapa I: Mo<strong>de</strong>lagem do sistema através dos sinais <strong>de</strong><br />
entrada, saída e conexões<br />
A primeira Subetapa da integração do hardware é a <strong>de</strong>finição dos sinais <strong>de</strong><br />
entrada e saída do sistema através da IDE Quartus II. Isto po<strong>de</strong> ser feito utilizando o<br />
código na linguagem <strong>de</strong> hardware escolhida no SOPC. <strong>Co</strong>ntudo, este método torna-se<br />
muito mais prático e dinâmico ao ser realizado no editor <strong>de</strong> diagrama <strong>de</strong> blocos que está<br />
incorporado à IDE Quartus II. Nesta Subetapa, po<strong>de</strong>mos usar as caixas pretas criadas no<br />
SOPC, como é apresentado na <strong>de</strong>monstração da mo<strong>de</strong>lagem <strong>de</strong> um sistema embarcado<br />
básico na Figura 12.<br />
18
Figura 12 - Mo<strong>de</strong>lagem <strong>de</strong> um sistema básico no módulo gráfico <strong>de</strong> programação do Quartus II<br />
<strong>Co</strong>mo o SOPC criou o sistema <strong>de</strong> componentes, é necessário <strong>de</strong>finir todos os<br />
sinais <strong>de</strong> entrada e saída necessários para conectá-lo posteriormente a todos os pontos<br />
<strong>de</strong> uso da FPGA. Esta ação implica em realizar as <strong>de</strong>vidas conexões para que o sistema<br />
se comunique com a placa <strong>de</strong> estudo corretamente. No exemplo da Figura 12 acima,<br />
temos diversos sinais <strong>de</strong> entrada e saída sendo conectados. Na entrada temos os sinais<br />
<strong>de</strong> clock, reset e o <strong>de</strong> switch já conectados. Por outro lado, na saída da caixa preta está o<br />
sinal dos LED’s vermelhos já conectados e os sinais necessários para controlar o LCD<br />
<strong>de</strong> caracteres necessários prestes a serem conectados.<br />
2.2.3.2 Subetapa II: “Pinagem” dos sinais <strong>de</strong> entrada e saída<br />
Após a etapa <strong>de</strong> mo<strong>de</strong>lagem do sistema através da criação dos sinais <strong>de</strong> entrada e<br />
saída, a próxima etapa é a conexão dos sinais do sistema aos pontos reais da FPGA, ou<br />
seja, a <strong>de</strong>vida integração da mo<strong>de</strong>lagem do sistema à placa.<br />
<strong>Co</strong>mo já mencionado anteriormente, nas placas <strong>de</strong> estudo da Altera todos os<br />
periféricos estão fisicamente ligados à FPGA por meio das respectivas placas <strong>de</strong> estudo.<br />
Desta forma, <strong>de</strong>vem-se ligar os sinais <strong>de</strong> entrada e saída criados na Subetapa I aos pinos<br />
da FPGA. A Altera disponibiliza para todas as suas placas <strong>de</strong> estudo um arquivo em<br />
Excel, que traz a i<strong>de</strong>ntificação <strong>de</strong> todos os pinos que possam ter alguma utilida<strong>de</strong> aos<br />
sistemas que venham a ser criados para suas FPGA’s.<br />
Por exemplo, na Figura 13 mo<strong>de</strong>la-se um sinal <strong>de</strong> clock como entrada do<br />
hardware, o qual <strong>de</strong>ve ser ligado ao pino PIN_50 da FPGA. Este, por sua vez, é<br />
conectado a um cristal que emite clock em onda quadrada <strong>de</strong> 50 MHz que está<br />
19
incorporado à placa DE2. Também por conveniência po<strong>de</strong>-se conectar o sinal <strong>de</strong> reset<br />
mo<strong>de</strong>lado na Figura 5 ao PIN_G26 da FPGA, que está conectado ao primeiro botão no<br />
canto inferior direito da placa DE2, mostrado anteriormente nas Figuras 4 e 5, para que<br />
quando este botão for acionado, o sistema seja reiniciado.<br />
A etapa <strong>de</strong> “pinagem” é uma etapa realizada pelo módulo do Quartus chamado<br />
<strong>de</strong> Pin-Planner (ou Planejador <strong>de</strong> Pinos), que é apresentado na Figura 13. Esta Subetapa<br />
po<strong>de</strong> vir a ser muito exaustiva se for preciso realizar a “pinagem” <strong>de</strong> cada pino<br />
individualmente. Todavia, uma estratégia <strong>de</strong> automatização é a mo<strong>de</strong>lagem dos pinos na<br />
Subetapa II, com os mesmos nomes dados pela Altera a eles no seu arquivo <strong>de</strong> pinos,<br />
realizando a importação <strong>de</strong>ste último. Mesmo que seja mais atrativo nomear os pinos <strong>de</strong><br />
acordo com a funcionalida<strong>de</strong> que os mesmos terão no sistema embarcado, isto custará<br />
muito mais tempo <strong>de</strong> nomeação dos pinos nessa Subetapa.<br />
Figura 13 - Módulo Pin Planner, que é usado para a “pinagem” dos componentes, compondo a<br />
integração da mo<strong>de</strong>lagem do sistema embarcado às FPGA's<br />
Neste ponto do <strong>de</strong>senvolvimento, a camada <strong>de</strong> hardware do sistema está pronta<br />
para ser compilada. Se esta fase for realizada com sucesso, po<strong>de</strong>-se enfim <strong>de</strong>scarregar a<br />
camada <strong>de</strong> hardware na placa. A Subetapa III apresentará estes passos.<br />
20
2.2.3.3 Subetapa III: <strong>Co</strong>mpilação e <strong>de</strong>scarregamento da camada<br />
<strong>de</strong> hardware na placa<br />
Apesar das diferenças expressivas da forma <strong>de</strong> programação das linguagens <strong>de</strong><br />
hardware e <strong>de</strong> software, elas possuem uma semelhança: a compilação. Embora sejamos<br />
induzidos a acreditar que o hardware <strong>de</strong>veria ser interpretado e não compilado, os<br />
sistemas criados <strong>de</strong>vem passar por um compilador modular <strong>de</strong>dicado, feito pela Altera,<br />
que está incorporado à IDE Quartus II.<br />
Na Tabela 2 , estão <strong>de</strong>scritos os módulos do compilador <strong>de</strong> hardware. Os que<br />
porventura estiverem marcados por um asterisco representam etapas <strong>de</strong> compilação<br />
opcionais, que somente serão executadas <strong>de</strong> acordo com as configurações <strong>de</strong> sistema<br />
para complementar, verificar ou otimizar o processo <strong>de</strong> compilação.<br />
<strong>Co</strong>mponente Função<br />
Tabela 2 - <strong>Co</strong>mpilador modular <strong>de</strong> hardware da Altera.<br />
Analise e Síntese Analisa os arquivos <strong>de</strong> <strong>de</strong>sign e cria a base <strong>de</strong> dados do<br />
projeto <strong>de</strong> acordo com o <strong>de</strong>sign <strong>de</strong>scrito no projeto.<br />
Analise <strong>de</strong> tempo Analisa a <strong>de</strong>sempenho <strong>de</strong> toda a lógica <strong>de</strong> seu <strong>de</strong>sign e<br />
ajuda a guiar o Fitter para cumprir com os requerimentos<br />
<strong>de</strong> seu <strong>de</strong>sign.<br />
Fitter (ou “encaixador”) Usa a base <strong>de</strong> dados criada no modulo <strong>de</strong> compilação<br />
anterior para ligar a lógica com os requisitos <strong>de</strong><br />
temporização do projeto <strong>de</strong> acordo com a disponibilida<strong>de</strong><br />
<strong>de</strong> recursos no dispositivo.<br />
Assembler Cria os arquivos programáveis que serão posteriormente<br />
utilizados pelo Programador Quartus II, para configurar o<br />
dispositivo.<br />
Assistente <strong>de</strong> <strong>Design</strong>* Permite a verificação da confiança <strong>de</strong> seu <strong>de</strong>sign, baseado<br />
em várias regras <strong>de</strong> <strong>de</strong>senvolvimento.<br />
EDA Netlist Writer* Permite a execução <strong>de</strong> simulações funcionais <strong>de</strong><br />
<strong>Co</strong>mpiler Database<br />
Interface*<br />
temporização do <strong>de</strong>sign.<br />
Assistência à especificação das restrições <strong>de</strong> compilação<br />
do sistema.<br />
21
2.2.4 Etapa IV: A camada <strong>de</strong> software na IDE Nios II<br />
A IDE Nios II é o ambiente <strong>de</strong> programação das linguagens <strong>de</strong> alto nível, que será<br />
executado nos sistemas <strong>de</strong> hardware embarcados nas FPGA’s da Altera, provenientes<br />
das etapas anteriores. Nesta IDE, po<strong>de</strong>-se programar <strong>de</strong> uma forma mais prática e nítida<br />
para alcançar o objetivo inicial, que é a integração total <strong>de</strong> software com hardware em<br />
um sistema embarcado. Ou seja, é possível aproveitar a viabilida<strong>de</strong> e facilida<strong>de</strong> <strong>de</strong><br />
programar em software ao mesmo tempo em que se utiliza a velocida<strong>de</strong> do hardware,<br />
realizando quaisquer adaptações que sejam necessárias.<br />
O projeto da IDE Nios II da Altera é um patch a uma conhecida IDE, o projeto<br />
Eclipse proveniente da Java Sun. Isto se <strong>de</strong>ve à parceria entre a Altera e a Java Sun,<br />
uma união <strong>de</strong> uma das melhores companhias <strong>de</strong> sistemas embarcados do mundo com<br />
uma das IDE’s <strong>de</strong> melhor aceitação mundial <strong>de</strong> programação do mercado. Desta forma,<br />
quem já trabalhou com a IDE Eclipse, verá a enorme semelhança entre o Nios II e o<br />
Eclipse. A interface da IDE Nios II está exibida na Figura 14.<br />
Figura 14 - IDE Nios II, usada para a programação da camada <strong>de</strong> software <strong>de</strong> sistemas<br />
embarcados em FPGA's<br />
Na etapa I, a IDE SOPC criou um arquivo muito especial para a etapa aqui<br />
apresentada, que é o arquivo que faz a <strong>de</strong>scrição <strong>de</strong> todos os componentes e<br />
controladores do sistema. Este arquivo tem um nome requerido pela IDE SOPC (que<br />
22
<strong>de</strong>ve ser diferente daquele do projeto da camada <strong>de</strong> hardware no Quartus II) na criação<br />
da primeira etapa, e tem uma extensão “.ptf”.<br />
2.2.4.1 <strong>Sistemas</strong> <strong>Embarcados</strong> em Assembler/C/C++ para placas<br />
da Altera<br />
Neste ponto, tem-se um hardware <strong>de</strong>scarregado na placa, esperando a camada <strong>de</strong><br />
software ser escrita. Esta camada <strong>de</strong> software po<strong>de</strong> ser implementada em Assembler, C<br />
ou C++. Este processo <strong>de</strong> implementação da camada <strong>de</strong> software se torna mais<br />
agradável <strong>de</strong>vido ao po<strong>de</strong>r <strong>de</strong> realizar o acesso aos periféricos graças a <strong>de</strong>scrição dos<br />
sinais do hardware feita pela compilação da CPU Nios II munida das bibliotecas HAL e<br />
a biblioteca “system.h” (será abordada mais adiante no texto), que po<strong>de</strong>m ser usadas<br />
neste ponto para exercer conexões <strong>de</strong> alto nível com os dispositivos e periféricos<br />
embarcados em baixo nível assim que se fizer necessário.<br />
Seguindo a tendência <strong>de</strong> mercado atual, a linguagem escolhida para esta tarefa foi o<br />
C. Mesmo <strong>de</strong>pois <strong>de</strong> tantos anos em um mercado repleto <strong>de</strong> linguagens inovadoras com<br />
novos recursos e facilida<strong>de</strong>s, o C ainda é a linguagem mais leve, consistente e soberana.<br />
<strong>Co</strong>m isso, se apresenta como a mais usada linguagem por <strong>de</strong>senvolvedores <strong>de</strong> sistemas<br />
embarcados no mundo. Na Figura 15 está o resultado <strong>de</strong> um levantamento apontado no<br />
Hamblen (2008), – referência em prototipagem rápida <strong>de</strong> sistemas embarcados para<br />
placas da Altera – relativa à preferência <strong>de</strong> linguagem para programação <strong>de</strong> camadas <strong>de</strong><br />
software para os <strong>de</strong>senvolvedores no mundo.<br />
Figura 15 - Pesquisa realizada em 2006, com respeito da preferência <strong>de</strong> linguagem <strong>de</strong> sistemas<br />
embarcados pela Altera. A linguagem C li<strong>de</strong>ra com mais <strong>de</strong> 60% [Hamblen, 2008].<br />
23
2.2.4.2 A arquitetura <strong>de</strong> <strong>de</strong>senvolvimento, o uso das Bibliotecas<br />
Abstração <strong>de</strong> Hardware (HAL), tipagem dos tipos <strong>de</strong><br />
dados na codificação e a biblioteca do sistema embarcado<br />
Nesta etapa <strong>de</strong> <strong>de</strong>senvolvimento, a aplicação do usuário usa a biblioteca padrão<br />
em C, munida das bibliotecas HAL, para assim exercer uma comunicação com os<br />
periféricos do sistema projetado da maneira <strong>de</strong>sejada e coesa.<br />
No mesmo nível da biblioteca padrão C, faz-se o estudo dos kernels embarcados,<br />
que no caso dos sistemas embarcados da Altera po<strong>de</strong>m ser representados pelo /<br />
– e o . Estes kernels integram o módulo <strong>de</strong> API Micro C/OS-II que são<br />
kernels portáteis, escalares, preêmptivos, <strong>de</strong> tempo real e <strong>de</strong> multitarefas. A finalida<strong>de</strong><br />
<strong>de</strong> um kernel em um sistema embarcado consiste em serviços como semáforos,<br />
semáforos <strong>de</strong> exclusão mútua, alarmes, caixa <strong>de</strong> mensagens (mailbox), filas, gerência <strong>de</strong><br />
tarefas, gerência <strong>de</strong> blocos <strong>de</strong> memória <strong>de</strong> tamanho fixo e gerência <strong>de</strong> temporização do<br />
sistema.<br />
A Figura 16 exibe este tipo <strong>de</strong> projeto <strong>de</strong> arquitetura <strong>de</strong> funcionamento dos<br />
sistemas embarcados da Altera.<br />
Figura 16 - Arquitetura <strong>de</strong> comunicação da aplicação <strong>de</strong> usuário com os periféricos através do<br />
hardware <strong>de</strong> sistema <strong>de</strong> processamento Nios II [Hamblen, 2008].<br />
24
As bibliotecas HAL são bibliotecas em C, disponibilizadas pela Altera e<br />
codificadas nesta linguagem, que servem para executar chamadas <strong>de</strong> funções na camada<br />
<strong>de</strong> software em componentes embarcados na camada <strong>de</strong> hardware. A seção 3.3.2 mais<br />
adiante no texto, explica em <strong>de</strong>talhes um exemplo <strong>de</strong> uso <strong>de</strong> uma biblioteca HAL. Para<br />
o uso correto <strong>de</strong>stas bibliotecas, o projetista <strong>de</strong>ve pesquisar e obe<strong>de</strong>cer as instruções<br />
encontradas nos manuais também disponibilizados pela Altera através <strong>de</strong> seu site.<br />
Outra informação muito pertinente para o <strong>de</strong>senvolvimento é que a Altera,<br />
também por convenção, usa um cast (ou tipagem) <strong>de</strong> dados para programação <strong>de</strong> seus<br />
sistemas. Estas re<strong>de</strong>finições <strong>de</strong> variáveis são encontradas na biblioteca “alt_types.h” que<br />
<strong>de</strong>ve ser importada na aplicação <strong>de</strong> usuário. O <strong>de</strong>senvolvedor está livre para usar a<br />
tipagem <strong>de</strong> dados da linguagem C para a programação; entretanto, por convenção, os<br />
programas e funções <strong>de</strong>senvolvidos pela Altera seguem a tipagem <strong>de</strong> dados <strong>de</strong>scrita na<br />
Tabela 3 a seguir:<br />
Tabela 3 - Tipagem <strong>de</strong> dados da Altera<br />
type<strong>de</strong>f signed char<br />
type<strong>de</strong>f unsigned char<br />
type<strong>de</strong>f signed short<br />
type<strong>de</strong>f unsigned short<br />
type<strong>de</strong>f signed long<br />
type<strong>de</strong>f unsigned long<br />
type<strong>de</strong>f long long<br />
type<strong>de</strong>f unsigned long long<br />
alt_8;<br />
alt_u8;<br />
alt_16;<br />
alt_u16;<br />
alt_32;<br />
alt_u32;<br />
alt_64;<br />
alt_u64;<br />
Neste ponto, a IDE Nios II se diferencia da IDE Eclipse abordada anteriormente<br />
<strong>de</strong>vido ao fato <strong>de</strong> que na hora <strong>de</strong> se criar um projeto na primeira, ela exigirá o arquivo<br />
“.ptf” criado pela IDE SOPC. Sob um ponto <strong>de</strong> vista mais aprofundado, este arquivo<br />
<strong>de</strong>screverá para a CPU Nios II como acessar os en<strong>de</strong>reços-bases (en<strong>de</strong>reços <strong>de</strong> memória<br />
<strong>de</strong> acesso direto tais como o en<strong>de</strong>reço inicial e final <strong>de</strong> uma memória SRAM (Static<br />
Random Access Memory ou Memória <strong>de</strong> Acesso Estático e Aleatório), por exemplo), e<br />
todas as outras diretrizes dos componentes e periféricos, assim como criar a biblioteca<br />
<strong>de</strong> <strong>de</strong>scrição do hardware em auto nível, para ser usada nesta camada <strong>de</strong> software; esta<br />
biblioteca é <strong>de</strong>nominada “system.h”. As outras diretrizes <strong>de</strong> sistema estão relacionadas<br />
25
com a <strong>de</strong>finição <strong>de</strong> constantes importantes ao sistema, que no caso <strong>de</strong> um sistema digital<br />
<strong>de</strong>dicado a ví<strong>de</strong>o seriam, por exemplo, a altura e largura <strong>de</strong> uma imagem na saída VGA.<br />
.<br />
2.2.5 Etapa V: A execução total do sistema através da IDE Altera<br />
Debug Program<br />
Por fim, após todas as etapas <strong>de</strong> mo<strong>de</strong>lagem e integração anteriormente <strong>de</strong>scritas,<br />
po<strong>de</strong>-se enfim executar por completo o sistema embarcado formado por uma camada <strong>de</strong><br />
hardware e <strong>de</strong> software. A execução em modo <strong>de</strong> <strong>de</strong>senvolvimento é feita pelo<br />
Programa Altera Debug, que será introduzido nesta seção. Embora exista a<br />
possibilida<strong>de</strong> <strong>de</strong> executar o programa através da IDE Nios II, é mais prático e<br />
interessante fazê-lo através <strong>de</strong>sta outra IDE, <strong>de</strong>vido ao fato <strong>de</strong> que ela apresenta vários<br />
<strong>de</strong>talhes referentes à execução. Nesta IDE po<strong>de</strong>-se ver o “Assembler” da Altera, que é a<br />
própria linguagem <strong>de</strong> maquina utilizada para execução <strong>de</strong> tarefas pelas placas, assim<br />
como ver as posições na memória e seus respectivos conteúdos. <strong>Co</strong>mo outra gran<strong>de</strong><br />
finalida<strong>de</strong>, é possível colocar breakpoints na execução com o objetivo <strong>de</strong> encontrar<br />
erros, através do método <strong>de</strong> Debug incorporado nas opões da CPU’s Nios II escolhidas<br />
no SOPC ainda na primeira etapa <strong>de</strong> <strong>de</strong>senvolvimento.<br />
Na criação <strong>de</strong> uma tarefa <strong>de</strong> execução nesta IDE, também precisa-se do arquivo<br />
“.ptf” usado pela IDE Nios II da Etapa anterior. No fim da compilação da camada <strong>de</strong><br />
software também da etapa anterior, a IDE Nios II gerá um arquivo “.elf” (Executable<br />
Linking File, ou Arquivo <strong>de</strong> Lincagem Executável) que é o arquivo executável da<br />
camada <strong>de</strong> software, que será executado pela camada <strong>de</strong> hardware embarcada na FPGA.<br />
A interface do altera Debug Program é apresentada na Figura 17.<br />
26
Figura 17 - Interface da IDE Altera Monitor Program.<br />
27
3.0 Implementação <strong>de</strong> um sistema digital embarcado <strong>de</strong>dicado a ví<strong>de</strong>o com o uso da<br />
CPU Nios II em uma FPGA Cyclone II<br />
3.1 Etapas I & II <strong>de</strong> <strong>de</strong>senvolvimento: Mo<strong>de</strong>lagem com os componentes e<br />
Figura 18.<br />
inserção dos mesmos através da IDE SOPC e do patch University <strong>Co</strong>res.<br />
A arquitetura do sistema que será <strong>de</strong>senvolvido neste trabalho está ilustrada na<br />
Figura 18 - Mo<strong>de</strong>lagem do Sistema Digital Dedicado a ví<strong>de</strong>o<br />
No sistema realizado, foi necessário utilizar dois componentes especiais do<br />
patch University <strong>Co</strong>res: o componente especial VGA, que lida com o conteúdo do RGB<br />
pixels e o posicionamento dos pixels na tela, e também foi usado o componente Pixel<br />
Buffer, que usa a memória SDRAM da placa DE2 para tratar o <strong>de</strong>lay e envio <strong>de</strong> cada<br />
pixel da saída VGA ao monitor.<br />
28
Opcionalmente, foram colocados switches para chamadas <strong>de</strong> funções, LED’s<br />
para a verificação <strong>de</strong>stes switches, LCD <strong>de</strong> caracteres para a escrita <strong>de</strong> strings referentes<br />
à aplicação dos programas, e um medidor <strong>de</strong> performance <strong>de</strong> trechos <strong>de</strong> software.<br />
Todos os componentes e controladores utilizados no sistema digital <strong>de</strong>dicado a<br />
ví<strong>de</strong>o integrado neste trabalho estão <strong>de</strong>scritos na Tabela 4 :<br />
Tabela 4 - <strong>Co</strong>mponentes e controladores utilizados para a implementação do sistema digital<br />
<strong>de</strong>dicado a ví<strong>de</strong>o.<br />
<strong>Co</strong>mponente Descrição Função<br />
CPU Nios II – tipo f Processador <strong>de</strong> 32 bits<br />
<strong>de</strong> arquitetura RISC,<br />
com cache <strong>de</strong><br />
instrução e cache <strong>de</strong><br />
dados e uma ULA que<br />
faz multiplicação e<br />
divisão em hardware.<br />
JTAG_UART <strong>Co</strong>mponente <strong>de</strong><br />
comunicação entre a<br />
Interface USB do<br />
computador e o<br />
processador Nios II.<br />
<strong>Co</strong>nfigurado com uma<br />
FIFO (First In First<br />
Out ou Primeiro a<br />
Entrar é o Primeiro a<br />
Sair) com 64 bytes <strong>de</strong><br />
tamanho.<br />
Memória No Chip Memória do tipo<br />
RAM (Random<br />
Access Memory ou<br />
Memória <strong>de</strong> Acesso<br />
Aleatório), com<br />
Executar os processos da<br />
camada <strong>de</strong> software através das<br />
pilhas <strong>de</strong> execução com o uso<br />
<strong>de</strong> 4 Kbytes <strong>de</strong> memória cache.<br />
Executar a comunicação com<br />
outros componentes que<br />
gerenciam E/S e controle <strong>de</strong><br />
barramento.<br />
<strong>Co</strong>municação <strong>de</strong> dados entre<br />
interface USB no computador<br />
(através da FIFO mo<strong>de</strong>lada<br />
como cliente-servidor) e a placa<br />
DE2. Este componente é<br />
utilizado para a escrita do<br />
hardware na placa e para a<br />
leitura <strong>de</strong> dados durante a<br />
execução <strong>de</strong> uma tarefa no<br />
sistema embarcado.<br />
Usada para armazenar o<br />
processo, pilha <strong>de</strong> execução e<br />
outros dados relevantes para a<br />
execução do processo. Dispensa<br />
controlador <strong>de</strong>vido a ser criada<br />
29
<strong>Co</strong>ntrolador<br />
SDRAM<br />
largura <strong>de</strong> dados <strong>de</strong> 32<br />
bits e tamanho total <strong>de</strong><br />
32 Kbytes.<br />
<strong>Co</strong>ntrolador <strong>de</strong><br />
Memória do tipo<br />
SDRAM <strong>de</strong> 8 MBytes<br />
com largura <strong>de</strong> dados<br />
<strong>de</strong> 16 bits <strong>de</strong> 1 chip<br />
select e 4 bancos <strong>de</strong><br />
dados.<br />
na FPGA e controlada pela<br />
CPU Nios II.<br />
<strong>Co</strong>ntrolar o chip <strong>de</strong> memória<br />
que é utilizado como buffer<br />
para os pixels que são enviados<br />
à saída VGA da placa DE2.<br />
Clocks <strong>Co</strong>ntrolador <strong>de</strong> clocks <strong>Co</strong>ntrola e gera os sinais <strong>de</strong><br />
<strong>Co</strong>ntrolador VGA <strong>Co</strong>ntrolador da saída<br />
<strong>de</strong> ví<strong>de</strong>o VGA<br />
clock que precisam ser em<br />
frequências diferentes das da<br />
CPU Nios II. Neste caso<br />
utilizou-se este componente<br />
para gerar os seguintes clocks<br />
<strong>de</strong> memória:<br />
50 MHz <strong>de</strong>fazado em -3ns -<br />
SDRAM<br />
25 MHz - <strong>Co</strong>re <strong>de</strong> ví<strong>de</strong>o VGA<br />
25 MHz <strong>de</strong>fazado em 180º -<br />
VGA-DAC<br />
<strong>Co</strong>ntrola e coor<strong>de</strong>na os sinais<br />
que serão enviados à saída <strong>de</strong><br />
ví<strong>de</strong>o VGA da placa DE2.<br />
Define o tipo <strong>de</strong> saída <strong>de</strong> ví<strong>de</strong>o<br />
da placa, e qual tipo <strong>de</strong> saída<br />
será usado. Além da saída<br />
VGA, existe a possibilida<strong>de</strong> <strong>de</strong><br />
enviar sinais para as GPIO<br />
(General Purpose I/O ou E/S <strong>de</strong><br />
propósito geral) da DE2, que<br />
po<strong>de</strong> ser usada para conectar<br />
30
Pixel Buffer <strong>Co</strong>ntrolador do Buffer<br />
<strong>de</strong> Pixels da saída<br />
VGA<br />
PIO – Parallel I/O Saída dos LED’s<br />
vermelhos<br />
painéis <strong>de</strong> touch-screens ou<br />
câmeras.<br />
Buffer <strong>de</strong> Pixels para saída<br />
VGA criado na memória<br />
SDRAM, on<strong>de</strong> se escolhe o<br />
formato <strong>de</strong> en<strong>de</strong>reçamento na<br />
tela (X-Y ou consecutivo) e a<br />
quantida<strong>de</strong> <strong>de</strong> bits na<br />
informação RGB. Mais <strong>de</strong>talhes<br />
sobre a forma <strong>de</strong><br />
en<strong>de</strong>reçamento e conteúdo dos<br />
pixels serão dados na próxima<br />
seção do texto.<br />
Saída <strong>de</strong> dados paralela que será<br />
utilizada para enviar dados aos<br />
LED’s vermelhos através da<br />
técnica <strong>de</strong> mapeamento <strong>de</strong><br />
dispositivos <strong>de</strong> E/S com acesso<br />
direto a memória.<br />
PIO – Parallel I/O Entrada dos switchs Entrada <strong>de</strong> dados paralela que<br />
<strong>Co</strong>ntador <strong>de</strong><br />
Desempenho<br />
(Performance<br />
<strong>Co</strong>unter)<br />
<strong>Co</strong>ntrolador <strong>de</strong><br />
performance <strong>de</strong> 32 e<br />
64 bits<br />
será utilizada para leitura <strong>de</strong><br />
dados dos switchs através da<br />
técnica <strong>de</strong> mapeamento <strong>de</strong><br />
dispositivos <strong>de</strong> E/S com acesso<br />
direto a memória.<br />
<strong>Co</strong>ntador <strong>de</strong> ciclos <strong>de</strong> clocks<br />
realizados pela CPU Nios II.<br />
Utilizado como acessório ao<br />
sistema para medir o<br />
<strong>de</strong>sempenho <strong>de</strong> trechos <strong>de</strong><br />
código. Possibilita a medição <strong>de</strong><br />
até sete trechos diferentes <strong>de</strong><br />
código, através <strong>de</strong> contadores<br />
31
<strong>de</strong> 64 bits (variáveis alt_u64).<br />
3.2 Etapa III: integração do hardware feita na IDE Quartus II (Subetapas <strong>de</strong><br />
Mo<strong>de</strong>lagem, “pinagem” e compilação)<br />
No caso do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o aqui realizado, <strong>de</strong>ntre os vários<br />
controladores <strong>de</strong> periféricos utilizados, será <strong>de</strong>scrito com maior <strong>de</strong>talhe apenas o<br />
controlador <strong>de</strong> ví<strong>de</strong>o, o mais importante do sistema embarcado proposto para este<br />
trabalho.<br />
O componente controlador <strong>de</strong> ví<strong>de</strong>o foi configurado para exibir imagens com<br />
resolução <strong>de</strong> 640 x 480 pixels com dimensões <strong>de</strong> 16 bits (ilustrado na Figura 19). O<br />
controlador VGA guarda a imagem a ser exibida através da SDRAM externa. O<br />
componente prove duas interfaces Avalon: uma é um controlador DMA (Direct<br />
Memory Access ou <strong>de</strong> Memória <strong>de</strong> Acesso Direto), que transfere a imagem linha por<br />
linha da fonte <strong>de</strong> memória, e a segunda é uma interface que escreve e acessa o banco <strong>de</strong><br />
registradores para configurar o controlador DMA e a temporização do circuito VGA.<br />
Esta configuração do componente VGA está ilustrada na Figura 19.<br />
Figura 19 - Mo<strong>de</strong>lagem da configuração do controlador <strong>de</strong> ví<strong>de</strong>o VGA.<br />
[Altera <strong>Co</strong>rp.: Using SOPC Buil<strong>de</strong>r & DSP Buil<strong>de</strong>r Tool Flow, 2005]<br />
Após a parametrização e a configuração do componente <strong>de</strong> ví<strong>de</strong>o na IDE SOPC,<br />
o mesmo se torna nesta etapa uma entida<strong>de</strong> gráfica como uma caixa preta, sem nenhuma<br />
32
conexão <strong>de</strong> qualquer sinal. Um exemplo <strong>de</strong>ste tipo <strong>de</strong> entida<strong>de</strong> gráfica está apresentado<br />
na Figura 20.<br />
Figura 20 - Um tipo <strong>de</strong> controlador <strong>de</strong> ví<strong>de</strong>o oriundo do SOPC. [Hamblen, 2008]<br />
Desta forma, são importados quaisquer outros componentes oriundos da IDE<br />
SOPC para o módulo gráfico <strong>de</strong> <strong>de</strong>senvolvimento do Quartus II, e assim se são criados<br />
e conectados todos os sinais necessários para a mo<strong>de</strong>lagem das conexões que integrarão<br />
o sistema. A mo<strong>de</strong>lagem completa do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o, meta <strong>de</strong>ste<br />
trabalho, po<strong>de</strong> ser encontrada na Figura 21.<br />
33
Figura 21 - Integração dos sinais do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o a seus respectivos pinos da<br />
FPGA.<br />
34
A “pinagem” do hardware <strong>de</strong>ve ser feita <strong>de</strong> maneira interligada aos sinais <strong>de</strong><br />
entrada e saída que foram criados na mo<strong>de</strong>lagem gráfica anterior (Figura 21 acima). É<br />
importante que estes sinais sejam conectados corretamente aos pinos da FPGA, os quais<br />
têm a numeração disponibilizada pelos manuais <strong>de</strong> pinos da <strong>de</strong>vida FPGA da Altera,<br />
como mencionado anteriormente.<br />
Ou seja, para que o controlador <strong>de</strong> ví<strong>de</strong>o funcione corretamente, é necessário<br />
que os sinais sejam conectados aos <strong>de</strong>vidos pinos da FPGA Cyclone II. Os pinos <strong>de</strong><br />
interesse neste caso têm sua nomenclatura apresentada na Tabela 5 , que será<br />
esquematizada e preenchida no modulo Pin-Planner da IDE Quartus II.<br />
Tabela 5 - Sinais do controlador <strong>de</strong> ví<strong>de</strong>o e suas respectivas conexões aos pinos da FPGA Cyclone<br />
II<br />
Sinal Pino<br />
FPGA<br />
Sinal Pino<br />
FPGA<br />
Sinal Pino<br />
FPGA<br />
VGA_R[0] PIN_C8 VGA_G[0] PIN_B9 VGA_B[0] PIN_J13<br />
VGA_R[1] PIN_F10 VGA_G[1] PIN_A9 VGA_B[1] PIN_J14<br />
VGA_R[2] PIN_G10 VGA_G[2] PIN_C10 VGA_B[2] PIN_F12<br />
VGA_R[3] PIN_D9 VGA_G[3] PIN_D10 VGA_B[3] PIN_G12<br />
VGA_R[4] PIN_C9 VGA_G[4] PIN_B10 VGA_B[4] PIN_J10<br />
VGA_R[5] PIN_A8 VGA_G[5] PIN_A10 VGA_B[5] PIN_J11<br />
VGA_R[6] PIN_H11 VGA_G[6] PIN_G11 VGA_B[6] PIN_C11<br />
VGA_R[7] PIN_H12 VGA_G[7] PIN_D11 VGA_B[7] PIN_B11<br />
VGA_R[8] PIN_F11 VGA_G[8] PIN_E12 VGA_B[8] PIN_C12<br />
VGA_R[9] PIN_E10 VGA_G[9] PIN_D12 VGA_B[9] PIN_B12<br />
Sinal Pino<br />
FPGA<br />
VGA_CLK PIN_B8<br />
VGA_BLANK PIN_D6<br />
VGA_HS PIN_A7<br />
VGA_VS PIN_D8<br />
VGA_SYNC PIN_B7<br />
35
A “pinagem” da FPGA já leva em consi<strong>de</strong>ração o mo<strong>de</strong>lo <strong>de</strong> leitura e escrita dos<br />
diversos periféricos que foram implementados pela <strong>de</strong>scrição <strong>de</strong> hardware do<br />
componente, obtida por meio do SOPC ou <strong>de</strong>senvolvida pelo próprio projetista do<br />
sistema.<br />
O controlador <strong>de</strong> ví<strong>de</strong>o embarcado proveniente do SOPC/University <strong>Co</strong>res é<br />
responsável por ler/escrever toda essa informação digital processada na CPU Nios II,<br />
também embutida na FPGA. Os comandos <strong>de</strong> controle são provenientes do código<br />
escrito na camada <strong>de</strong> software, para que <strong>de</strong>sta forma sejam realizadas quaisquer<br />
conversões, discretizações e filtros necessários para obter a comunicação <strong>de</strong>sta camada<br />
com a camada <strong>de</strong> hardware, e, portanto, com o periférico envolvido em questão. No<br />
caso da saída VGA, os sinais <strong>de</strong> saída estão disponibilizados na Figura 22.<br />
Figura 22 - “Pinagem” da saída VGA para um dispositivo <strong>de</strong> saída <strong>de</strong> ví<strong>de</strong>o como um monitor ou<br />
um projetor. [Hamblen, 2008]<br />
3.2.1 A resolução da imagem, a estrutura da informação dos pixels e o<br />
frame-buffer <strong>de</strong> pixels embarcado<br />
A configuração do controlador <strong>de</strong> ví<strong>de</strong>o na IDE SOPC foi on<strong>de</strong> a configuração<br />
do modo <strong>de</strong> en<strong>de</strong>reçamento e a resolução da imagem do sistema digital <strong>de</strong>dicado a<br />
ví<strong>de</strong>o foram estipulados. O modo <strong>de</strong> en<strong>de</strong>reçamento <strong>de</strong> um pixel na tela ocorre em um<br />
eixo <strong>de</strong> abscissas e or<strong>de</strong>nadas X-Y que cresce para a direita e para baixo. O tamanho<br />
<strong>de</strong>sses eixos <strong>de</strong> abscissas e or<strong>de</strong>nadas <strong>de</strong>limita a resolução da imagem a ser exibida na<br />
tela. Na Figura 23, são ilustradas estas duas informações.<br />
36
Figura 23 - À esquerda, o modo <strong>de</strong> en<strong>de</strong>reçamento X-Y, único disponibilizado para a placa DE2 e a<br />
resolução 640 x 480, que foi a escolhida para este trabalho. [Altera <strong>Co</strong>rp.: Vi<strong>de</strong>o Out IP <strong>Co</strong>res for<br />
Altera DE Boards, 2009]<br />
A cor <strong>de</strong> cada pixel que é escolhida em software po<strong>de</strong> ser imposta como uma<br />
variável <strong>de</strong> 32 bits, com uma variável unsigned int em C; entretanto, para sistemas da<br />
Altera, utiliza-se o tipo “alt_u32”. A cor será formada pela codificação binária do<br />
conteúdo da variável “alt_u32” <strong>de</strong> cor. Esta codificação está ilustrada na Figura 24.<br />
Figura 24 - <strong>Co</strong>nteúdo <strong>de</strong> uma variável <strong>de</strong> cor. [Altera <strong>Co</strong>rp.: Vi<strong>de</strong>o Out IP <strong>Co</strong>res for Altera DE<br />
Boards, 2009]<br />
3.3 Etapa III: A camada <strong>de</strong> software na IDE Nios II<br />
3.3.1 O uso da biblioteca “system.h” no sistema digital <strong>de</strong>dicado a<br />
ví<strong>de</strong>o<br />
<strong>Co</strong>mo explanado na metodologia abordada no capítulo anterior, a compilação na<br />
IDE Nios gera, por meio do arquivo “.ptf”, a “system.h”, que é crucial para o<br />
<strong>de</strong>senvolvimento da camada <strong>de</strong> software. Na Tabela 6 são encontradas algumas<br />
constantes utilizadas na implementação do código do projeto:<br />
37
Tabela 6 - Tabela <strong>de</strong> algumas constantes usadas no <strong>de</strong>senvolvimento da camada <strong>de</strong> software na<br />
IDE Nios II.<br />
<strong>Co</strong>ntante Definição na “system.h”<br />
En<strong>de</strong>reço <strong>de</strong> memória<br />
dos LED’s vermelhos<br />
En<strong>de</strong>reço <strong>de</strong> memória<br />
dos botões <strong>de</strong> switch<br />
En<strong>de</strong>reço <strong>de</strong> memória<br />
do contador <strong>de</strong><br />
performance<br />
String que nomeia o<br />
buffer <strong>de</strong> pixels<br />
#<strong>de</strong>fine RED_LEDS_BASE 0x00811090<br />
#<strong>de</strong>fine SWITCH_BASE 0x008110a0<br />
#<strong>de</strong>fine PERFORMANCE_COUNTER_0_BASE<br />
0x00811000<br />
#<strong>de</strong>fine PIXEL_BUFFER_NAME “/<strong>de</strong>v/pixel_buffer”<br />
3.3.2 O uso das bibliotecas HAL no sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o<br />
Para o uso das funções HAL para o sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o, <strong>de</strong>ve-se incluir<br />
a seguinte linha no código:<br />
#inclu<strong>de</strong> “altera_up_avalon_pixel_buffer.h”<br />
Esta biblioteca HAL permite o uso das seguintes funções no código <strong>de</strong> auto nível:<br />
int alt_up_pixel_buffer_draw (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer, unsigned<br />
int color, unsigned int x, unsigned int y)<br />
o Função que <strong>de</strong>senha um pixel <strong>de</strong> acordo com a codificação binária da<br />
variável color nas coor<strong>de</strong>nadas (x,y) da tela.<br />
alt_up_pixel_buffer_<strong>de</strong>v* alt_up_pixel_buffer_open_<strong>de</strong>v (const char *name)<br />
o Função que abre e retorna um ponteiro à estrutura<br />
alt_up_pixel_buffer_<strong>de</strong>v. Esta estrutura in<strong>de</strong>xada por tal ponteiro<br />
armazena todos os dados referentes ao buffer <strong>de</strong> pixels do sistema que<br />
são prioritariamente utilizado nas várias chamadas <strong>de</strong> funções HAL para<br />
a saída <strong>de</strong> ví<strong>de</strong>o. Retorna NULL se houver falha ao abrir o dispositivo <strong>de</strong><br />
ví<strong>de</strong>o.<br />
38
int alt_up_pixel_buffer_change_back_buffer_address (alt_up_pixel_buffer_<strong>de</strong>v<br />
*pixel_buffer, unsigned int new_address)<br />
o Função que muda o en<strong>de</strong>reço inicial do back_buffer para o new_address.<br />
Retorna 0 se a mudança foi realizada com sucesso.<br />
int alt_up_pixel_buffer_swap_buffers (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer)<br />
o Função que troca o buffer que está sendo enviado para o controlador<br />
VGA. Retorna 0 se a mudança foi realizada com sucesso.<br />
int alt_up_pixel_buffer_check_swap_buffers_status (alt_up_pixel_buffer_<strong>de</strong>v<br />
*pixel_buffer)<br />
o Função que verifica se o controlador <strong>de</strong> ví<strong>de</strong>o ainda está efetuando a<br />
troca do buffer <strong>de</strong> pixels. Retorna 0 se já tiver completado e 1 caso<br />
contrário.<br />
void alt_up_pixel_buffer_clear_screen (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer,<br />
int backbuffer)<br />
o Função que limpa a tela do monitor. Retorna 0 se já tiver completado e 1<br />
caso contrário.<br />
void alt_up_pixel_buffer_draw_box (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer, int<br />
x0, int y0, int x1, int y1, int color, int backbuffer)<br />
o Função que <strong>de</strong>senha uma caixa da dada cor, no dado buffer, entre os<br />
pontos (x0,y0) e (x1,y1). Se a opção do backbuffer for 1, a caixa será<br />
<strong>de</strong>senhada no backbuffer, caso a opção seja 0, a caixa será <strong>de</strong>senhada na<br />
tela corrente. Retorna 0 se já tiver completado e 1 caso contrário.<br />
void alt_up_pixel_buffer_draw_hline (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer,<br />
int x0, int x1, int y, int color, int backbuffer)<br />
o Função que <strong>de</strong>senha uma linha horizontal da dada cor entre os pontos<br />
(x0, y) e (x1,y). Se a opção do backbuffer for 1, a linha será <strong>de</strong>senhada<br />
no backbuffer, caso a opção seja 0, a caixa será <strong>de</strong>senhada na tela<br />
corrente. Retorna 0 se já tiver completado e 1 caso contrário.<br />
39
void alt_up_pixel_buffer_draw_vline (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer,<br />
int x, int y0, int y1, int color, int backbuffer)<br />
o Função que <strong>de</strong>senha uma linha vertical da dada cor entre os pontos (x,<br />
y0) e (x,y1). Se a opção do backbuffer for 1, a linha será <strong>de</strong>senhada no<br />
backbuffer, caso a opção seja 0, a caixa será <strong>de</strong>senhada na tela corrente.<br />
Retorna 0 se já tiver completado e 1 caso contrário.<br />
void alt_up_pixel_buffer_draw_rectangle (alt_up_pixel_buffer_<strong>de</strong>v<br />
*pixel_buffer, int x0, int y0, int x1,int y1, int color, int backbuffer)<br />
o Função que <strong>de</strong>senha um retângulo da cor <strong>de</strong>terminada, no buffer<br />
especificado, entre os pontos (x0,y0) e (x1,y1). Se a opção do backbuffer<br />
for 1, o retângulo será <strong>de</strong>senhado no backbuffer; caso a opção seja 0, o<br />
retângulo será <strong>de</strong>senhada na tela corrente. Retorna 0 se já tiver<br />
completado e 1 caso contrário.<br />
void alt_up_pixel_buffer_draw_line (alt_up_pixel_buffer_<strong>de</strong>v *pixel_buffer, int<br />
x0, int y0, int x1, int y1, int color, int backbuffer)<br />
o Função que <strong>de</strong>senha uma linha da cor <strong>de</strong>terminada entre os pontos (x0,<br />
y0) e (x0,y1). Se a opção do backbuffer for 1, a linha será <strong>de</strong>senhada no<br />
backbuffer; caso a opção seja 0, a caixa será <strong>de</strong>senhada na tela corrente.<br />
Retorna 0 se já tiver completado e 1 caso contrário.<br />
3.3.3 Código <strong>de</strong>monstrativo do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o<br />
#inclu<strong>de</strong> “system.h”<br />
#inclu<strong>de</strong> “alt_types.h”<br />
#inclu<strong>de</strong> “sys/alt_stdio.h”<br />
#inclu<strong>de</strong> “time.h”<br />
#inclu<strong>de</strong> “io.h”<br />
embarcado em FPGA<br />
Tabela 7 - Código embarcado no sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o<br />
40
#inclu<strong>de</strong> “altera_up_avalon_pixel_buffer.h”<br />
#inclu<strong>de</strong> “altera_avalon_performance_counter.h”<br />
void *performance_name = PERFORMANCE_COUNTER_0_BASE;<br />
int main(void)<br />
{<br />
/*Estrutura do buffer <strong>de</strong> pixels*/<br />
alt_up_pixel_buffer_<strong>de</strong>v *pixel_buf_<strong>de</strong>v;<br />
/*Função para a inicialização do contador <strong>de</strong> performance embarcado*/<br />
PERF_RESET(PERFORMANCE_COUNTER_0_BASE);<br />
/*Inicialização do buffer <strong>de</strong> pixel embarcado*/<br />
pixel_buf_<strong>de</strong>v=alt_up_pixel_buffer_open_<strong>de</strong>v(PIXEL_BUFFER_NAME);<br />
/*Verificação da abertura com sucesso do buffer <strong>de</strong> pixel*/<br />
if (pixel_buf_<strong>de</strong>v==NULL)<br />
else<br />
{<br />
alt_printf("Erro: Falha ao abrir o pixel buffer!\nAbortando Sistema!");<br />
alt_printf("Pixel buffer aberto com sucesso!\n");<br />
/*Variáveis <strong>de</strong> controle <strong>de</strong> chamada <strong>de</strong> função*/<br />
alt_u16 sentinela0, sentinela1;<br />
sentinela0=sentinela1=0;<br />
/*Variável do switch embarcado; utilizado para chamar <strong>de</strong> funções*/<br />
alt_u32 var_switch;<br />
/*Variável que conta a quantida<strong>de</strong>s <strong>de</strong> ciclo <strong>de</strong> clocks da CPU Nios II*/<br />
41
egister unsigned long n_clocks;<br />
/*Limpeza <strong>de</strong> tela*/<br />
alt_up_pixel_buffer_clear_screen(pixel_buf_<strong>de</strong>v);<br />
while(1) /*Loop Eterno do Sistema*/<br />
{<br />
alt_u32*/<br />
/* Ler os valores da SWITCH_BASE, e converte-los para o tipo<br />
var_switch = IORD(SWITCH_BASE, 0);<br />
/* Escreve os valores da var_switch para o barramento dos LED’s<br />
vermelhos; usado para observação se os switchs estão em nível lógico alto*/<br />
IOWR(RED_LEDS_BASE, 0, var_switch);<br />
/*Neste trecho do código, se pinta dois quadrados na tela e se me<strong>de</strong><br />
quantos ciclos <strong>de</strong> clocks cada trecho requisitou da CPU. Esta escolha é dada<br />
pelas chamadas <strong>de</strong> função <strong>de</strong> acordo com o valor lido pelo switch da placa DE2*/<br />
switch(var_switch)<br />
{<br />
case 0:<br />
160, 160, 63488, 0);<br />
if(sentinela0==0)<br />
{<br />
PERF_START_MEASURING(performance_name);<br />
PERF_BEGIN(performance_name, 1);<br />
alt_up_pixel_buffer_draw_box(pixel_buf_<strong>de</strong>v, 20, 20,<br />
PERF_END(performance_name,1);<br />
PERF_STOP_MEASURING(performance_name);<br />
printf(“O trecho 1 do código levou %ld ciclos <strong>de</strong> clock<br />
para ser <strong>de</strong>senhada\n, perf_get_section_time(performance,1) );<br />
sentinela0=0;<br />
42
}<br />
case 1:<br />
150, 150, 100, 0);<br />
break;<br />
if(sentinela1==0)<br />
{<br />
PERF_START_MEASURING(performance_name);<br />
PERF_BEGIN(performance_name, 2);<br />
alt_up_pixel_buffer_draw_box(pixel_buf_<strong>de</strong>v, 30, 30,<br />
PERF_END(performance_name,2);<br />
PERF_STOP_MEASURING(performance_name);<br />
printf(“O trecho 2 do código levou %ld ciclos <strong>de</strong> clock<br />
para ser <strong>de</strong>senhada\n, perf_get_section_time(performance,2) );<br />
}<br />
<strong>de</strong>fault:<br />
break;<br />
break;<br />
}//fim do switch<br />
}//fim do while<br />
}//fim do else<br />
}//fim do int main<br />
sentinela1=0;<br />
3.4 Etapa IV: A execução e <strong>de</strong>monstração do sistema <strong>de</strong>dicado a ví<strong>de</strong>o, alvo<br />
<strong>de</strong>ste TCC<br />
A aplicação <strong>de</strong> toda esta metodologia modular <strong>de</strong>scrita para a integração do sistema<br />
digital <strong>de</strong>dicado a ví<strong>de</strong>o teve sucesso, e é apresentada na Figura 25.<br />
43
Figura 25 - Execução do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o embarcado na placa DE2 utilizando uma<br />
FPGA Cyclone II.<br />
44
4.0 Aplicações propostas do sistema embarcado <strong>de</strong>dicado a ví<strong>de</strong>o<br />
Para este trabalho, a meta <strong>de</strong> implementação do sistema embarcado <strong>de</strong>dicado a<br />
ví<strong>de</strong>o foi alcançada, como apresentado no capítulo anterior. Também foram <strong>de</strong>scritos<br />
todos os passos necessários e realizados para <strong>de</strong>senvolver qualquer sistema embarcado<br />
nas placas da Altera através do uso das IDE’s Nios II e SOPC no terceiro capítulo.<br />
Entretanto, mesmo com o êxito <strong>de</strong>sta implementação, também há o interesse em<br />
<strong>de</strong>senvolver uma possibilida<strong>de</strong> <strong>de</strong> evolução <strong>de</strong> integração do mesmo projeto. Desta<br />
forma, este capítulo apresenta uma proposta para a transformação <strong>de</strong>ste sistema<br />
embarcado, <strong>de</strong>senvolvido puramente para fins estudantis, em um sistema mais<br />
complexo, robusto e audacioso que <strong>de</strong>tenha maior valor econômico e maior<br />
possibilida<strong>de</strong> <strong>de</strong> incorporação no mercado comercial atual <strong>de</strong> sistemas embarcados.<br />
4.1 A evolução proposta do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o<br />
Atualmente existem vários sistemas que mo<strong>de</strong>lam objetos, ações e meios das<br />
mais diversas formas gráficas possíveis. Por exemplo, vi<strong>de</strong>ogames que mo<strong>de</strong>lam o mais<br />
complexo dos movimentos dos cabelos <strong>de</strong> um personagem quando o mesmo pula <strong>de</strong><br />
uma colina para um helicóptero em 3D. Também existem aparelhos <strong>de</strong> celular que<br />
funcionam com o uso <strong>de</strong> aparelhos auxiliares como os acelerômetros para mo<strong>de</strong>lar o<br />
movimento <strong>de</strong> uma bolinha <strong>de</strong> pong em um jogo. Todos estes, e outros inúmeros<br />
exemplos, funcionam como sistemas que, através <strong>de</strong> uma entrada, seja o sinal do<br />
acelerômetro ou o <strong>de</strong> um botão no controle do jogador, reagem e proporcionam uma<br />
saída ao ví<strong>de</strong>o do usuário.<br />
Propõe-se nesta seção uma embarcação <strong>de</strong> uma linguagem <strong>de</strong> computação<br />
gráfica no sistema produzido neste trabalho. Durante a implementação <strong>de</strong>ste projeto, foi<br />
feita uma reflexão que permitiu perceber que as estruturas do controlador e do<br />
dispositivo <strong>de</strong> ví<strong>de</strong>o VGA da Altera favorecem tal proposta. A maioria das linguagens<br />
<strong>de</strong> computação gráfica atuais, funcionam através do mesmo princípio <strong>de</strong> composição <strong>de</strong><br />
cores e do uso <strong>de</strong> frame-buffers, <strong>de</strong>pth-buffers e/ou double-buffers, que armazenam<br />
informações referentes aos pixels a serem exibidos na tela pela saída <strong>de</strong> ví<strong>de</strong>o. Essa<br />
estrutura é semelhante às discutidas na seção 3.2.1, que explicou o uso do frame-buffer<br />
e a codificação dos pixels do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o implementado neste<br />
trabalho.<br />
45
Devido ao fato da linguagem C ter sido escolhida para o sistema, pelas razões<br />
explanadas na seção 2.2.4.1, optou-se pela linguagem <strong>de</strong> computação gráfica OpenGL<br />
(Open Graphics Library ou Biblioteca Gráfica Aberta) para esta proposta. Esta<br />
linguagem <strong>de</strong> computação gráfica open source se constitui na mais atuante e abrangente<br />
em mo<strong>de</strong>lagem gráfica no presente momento, utilizada em vi<strong>de</strong>ogames, mo<strong>de</strong>lagem<br />
arquitetônica 3D e animações gráficas em 3D. Nos tópicos a seguir <strong>de</strong>ste capítulo, serão<br />
<strong>de</strong>scritas as vantagens e <strong>de</strong>safios <strong>de</strong> tal proposta, intitulada “OpenGL Embarcado”.<br />
4.1.1 O que é OpenGL?<br />
O OpenGL é uma interface <strong>de</strong> software para aplicações gráficas que é incorporada a<br />
programas em C. Esta interface tem aproximadamente 250 comandos distintos (200 no<br />
core do OpenGL e mais outros 50 na biblioteca <strong>de</strong> utilida<strong>de</strong>s do OpenGL), que po<strong>de</strong>m<br />
ser utilizados para especificar operações e objetos necessários para produzir aplicações<br />
interativas em tridimensionais.<br />
4.1.2 A proposta: OpenGL Embarcado<br />
No OpenGL, o frame-buffer é o buffer final <strong>de</strong> imagem enviado à tela. Da mesma<br />
forma que qualquer processo sendo executado em um computador, o buffer consiste em<br />
uma região <strong>de</strong> memória, on<strong>de</strong> é armazenada e processada toda uma vasta gama <strong>de</strong> dados<br />
referente à imagem que <strong>de</strong>ve ser exibida na saída <strong>de</strong> ví<strong>de</strong>o.<br />
A proposta para a criação do OpenGL Embarcado consiste dos seguintes requisitos<br />
básicos para o seu funcionamento:<br />
Todo processo tem uma saída padrão <strong>de</strong> execução e uma saída padrão <strong>de</strong> erro, e nos<br />
processos gráficos, existe uma saída extra <strong>de</strong> ví<strong>de</strong>o, aberta através das chamadas <strong>de</strong><br />
sistema no sistema operacional. O OpenGL Embarcado <strong>de</strong>ve <strong>de</strong>sabilitar a saída<br />
padrão <strong>de</strong> ví<strong>de</strong>o do processo, <strong>de</strong>vido ao fato da saída padrão <strong>de</strong> ví<strong>de</strong>o não ser<br />
controlada pelo sistema operacional como <strong>de</strong> costume, e sim pelo sistema <strong>de</strong>dicado<br />
a ví<strong>de</strong>o embarcado na placa. Simplesmente não <strong>de</strong>sabilitando esta saída faria a CPU<br />
Nios II per<strong>de</strong>r tempo fazendo uma tarefa que nesta mo<strong>de</strong>lagem vem a ser sem<br />
sentido.<br />
Em um loop infinito ou com alta frequência, <strong>de</strong>ve-se copiar o conteúdo da região <strong>de</strong><br />
memória do frame-buffer do processo OpenGL, executado na CPU Nios II, para a<br />
46
egião do pixel-buffer do sistema digital <strong>de</strong>dicado a ví<strong>de</strong>o. Isto é feito na etapa final<br />
em hardware, mas em primeira instância, em software.<br />
Em software, o OpenGL proporciona funções que copiam trechos <strong>de</strong> memória do<br />
frame-buffer do processo. Esta tarefa po<strong>de</strong> ser realizada através das seguintes chamadas<br />
<strong>de</strong> função apresentadas na Tabela 8 .<br />
Tabela 8 - Funções usadas para escrever, ler e copiar dados <strong>de</strong> uma área <strong>de</strong> pixels no framebuffer<br />
<strong>de</strong> um programa em OPENGL.<br />
Chamada <strong>de</strong> função Função<br />
glReadPixels() Ler uma área retangular em forma <strong>de</strong> vetor <strong>de</strong> pixels do<br />
framebuffer e o guardar na memória do processador.<br />
glDrawPixels() Escrever uma área retangular em forma <strong>de</strong> vetor <strong>de</strong><br />
pixels <strong>de</strong> dados guardados na memória do processador<br />
para o framebuffer na corrente posição <strong>de</strong> rasterização.<br />
gl<strong>Co</strong>pyPixels() <strong>Co</strong>piar uma área retangular em forma <strong>de</strong> vetor <strong>de</strong> pixels<br />
<strong>de</strong> uma parte do framebuffer para outra. Este comando<br />
funciona <strong>de</strong> maneira similar a uma chamada <strong>de</strong><br />
glReadPixels() seguida por uma chamada <strong>de</strong><br />
glDrawPixels(), mas <strong>de</strong>sta forma os dados jamais<br />
passam pela memória do processador.<br />
4.1.3 Dúvida relativa ao <strong>de</strong>sempenho do OpenGL Embarcado<br />
Uma imagem em movimento precisa no mínimo, <strong>de</strong> acordo com o teorema <strong>de</strong><br />
Nyquist (Enuncia que a freqüência <strong>de</strong> amostragem <strong>de</strong> um sinal analógico <strong>de</strong>ve ser igual<br />
ou maior a duas vezes a maior frequência do espectro <strong>de</strong>sse sinal para que haja somente<br />
o mínimo <strong>de</strong> perdas possíveis na reconstrução do sinal, isto é, ≥ 2), ser<br />
re<strong>de</strong>senhada em uma frequência <strong>de</strong> 30 vezes por segundo para que o olho humano não<br />
sinta efeitos <strong>de</strong> movimentação (motion-effect). <strong>Co</strong>nsequentemente, sabendo que o<br />
OpenGL é uma ferramenta po<strong>de</strong>rosa e pesada <strong>de</strong> <strong>de</strong>sign em 3D, fica uma dúvida<br />
significativa relativa ao processamento <strong>de</strong>stes dados no Nios.<br />
O OpenGL usa bastante tempo <strong>de</strong> processamento <strong>de</strong> uma CPU, <strong>de</strong>vido às suas<br />
ren<strong>de</strong>rizações, translações e rotações serem calculadas matematicamente em forma<br />
47
vetorial. Caso o po<strong>de</strong>r <strong>de</strong> processamento da CPU Nios II não seja suficiente para<br />
executar as tarefas pesadas do OpenGL, assim como copiar todos estes dados para a<br />
tela, surge a questão <strong>de</strong> como fazer para que este sistema realize os cálculos vetoriais<br />
necessários e também fique constantemente copiando o frame-buffer para o pixel-buffer<br />
que é exibido na tela. Uma solução proposta para evitar a sobrecarga <strong>de</strong> uma CPU Nios<br />
II será dada na seção a seguir.<br />
4.1.4 Uma solução proposta em caso <strong>de</strong> fraco <strong>de</strong>sempenho do OpenGL<br />
Embarcado<br />
Partindo <strong>de</strong> que uma das maiores vantagens <strong>de</strong> uma FPGA, que é a<br />
reconfigurabilida<strong>de</strong>, questiona-se como solução a possibilida<strong>de</strong> <strong>de</strong> adicionar outra CPU<br />
Nios ao sistema. Isto é, usar a FPGA da placa DE2 como um processador dual-core<br />
através <strong>de</strong> uma nova mo<strong>de</strong>lagem, on<strong>de</strong> as duas CPU Nios II se complementariam a<br />
tarefa em fluxos distintos, <strong>de</strong> forma que uma seria especifica para a cópia <strong>de</strong> dados <strong>de</strong><br />
uma memória partilhada e envio a saída VGA enquanto a outra realizaria os cálculos<br />
vetoriais e escrita na mesma memória partilhada.<br />
Uma CPU Nios II do tipo f calcularia todo o processamento vetorial requerido pelo<br />
OpenGL, enquanto outra CPU Nios II do tipo e (simples acesso a pontos flutuantes)<br />
realizaria a cópia dos dados processados no frame-buffer ao pixel-buffer do sistema<br />
<strong>de</strong>dicado a ví<strong>de</strong>o.<br />
Mesmo que a cópia dos dados <strong>de</strong> um setor da memória para o sistema <strong>de</strong> ví<strong>de</strong>o seja<br />
um algoritmo <strong>de</strong> complexida<strong>de</strong> ( ∗ ) (on<strong>de</strong> l representa largura e a representa altura<br />
da imagem), ter um processador exclusivo para esta tarefa unido a outro para os<br />
cálculos vetoriais do OpenGL, torna o sucesso <strong>de</strong>sta hipótese <strong>de</strong> execução muito<br />
pertinente. A comunicação proposta entre os processadores seria realizada através das<br />
técnicas <strong>de</strong> exclusão mútua (uso <strong>de</strong> Mutex, o que em C não seria algum problema), para<br />
que assim os processadores não entrem em conflito ao ler e/ou escrever dados na área<br />
da região crítica <strong>de</strong> memória do funcionamento <strong>de</strong>ste sistema.<br />
A arquitetura do sistema dual-core <strong>de</strong> processamento do OpenGL Embarcado<br />
proposto, está ilustrada na Figura 26.<br />
48
Figura 26 - Mo<strong>de</strong>lagem do Sistema Embarcado Dedicado a OpenGL.<br />
4.2 Aplicações do OpenGL Embarcado proposto<br />
Após a implementação com sucesso <strong>de</strong>ste sistema aqui proposto, são diversas as<br />
vantagens que po<strong>de</strong>m alcançadas, sejam estas acadêmicas ou inclusive <strong>de</strong> mercado.<br />
Dedicando este sistema a mo<strong>de</strong>lagens especiais tem-se uma gama <strong>de</strong> varieda<strong>de</strong>s <strong>de</strong> uso<br />
bem abrangente graças a reconfigurabilida<strong>de</strong> da FPGA e agora da mo<strong>de</strong>lagem em 3D<br />
também. Nesta parte do texto, serão expostas e <strong>de</strong>scritas duas ativida<strong>de</strong>s completamente<br />
distintas, on<strong>de</strong> se acredita que a implantação do OpenGL Embarcado po<strong>de</strong>ria influenciar<br />
ao ponto <strong>de</strong> trazer gran<strong>de</strong>s contribuições aos respectivos projetos projetos.<br />
4.2.1 Aplicação BioFeedArt<br />
A aplicação BioFeedArt que está em <strong>de</strong>senvolvimento, vinculada à FAPERN<br />
(Fundação <strong>de</strong> Apoio e Pesquisa do Estado do Rio Gran<strong>de</strong> do Norte), tem como enfoque<br />
a controlabilida<strong>de</strong> <strong>de</strong> arte gráfica abstrata em uma saída <strong>de</strong> ví<strong>de</strong>o, <strong>de</strong> tal forma que este<br />
49
controle seja baseado na aquisição <strong>de</strong> biopotenciais. Os biopotenciais em <strong>de</strong>staque nesta<br />
ativida<strong>de</strong> são: o EEG (Eletroencefalograma), o ECG (Eletrocardiograma) e EMG<br />
(Eletromiograma).<br />
Os pesquisadores <strong>de</strong>sse projeto objetivam utilizar os potenciais humanos para<br />
gerenciar algoritmos gráficos abstratos <strong>de</strong> Fractais. <strong>Co</strong>res, iluminação e velocida<strong>de</strong> <strong>de</strong><br />
um Fractal são algumas gran<strong>de</strong>zas possíveis <strong>de</strong> serem gerenciadas por um pulso R <strong>de</strong><br />
um ECG ou da subida das ondas <strong>de</strong> um EEG, por exemplo.<br />
Fractais são figuras da geometria não-Euclidiana que po<strong>de</strong>m ser criadas<br />
algoritmicamente. Embora existir a ciência (geometria fractal) que estuda o<br />
comportamento dos mesmos, a característica mais notória <strong>de</strong> alguns fractais, quais se<br />
preten<strong>de</strong>m usar neste projeto, se dá <strong>de</strong>vido ao fato que mesmo constituindo imagens em<br />
2D, fractais tem a capacida<strong>de</strong> <strong>de</strong> serem interpretados em 3D ou em movimento pelo<br />
cérebro humano. O <strong>de</strong>senvolvimento algorítmico <strong>de</strong> diversos Fractais é realizado por<br />
equações <strong>de</strong> diferenças que escolhem a posição <strong>de</strong> novos pontos () em relação ao<br />
ponto anterior ( − ). Por <strong>de</strong>trás da linda arte <strong>de</strong> Fractais po<strong>de</strong>m existir complexas<br />
análises matemáticas, que chegam a envolver processos estocásticos e teoria do Caos<br />
<strong>de</strong>ntre outros mo<strong>de</strong>los matemáticos. Na Figura 26, se é exibido um exemplo <strong>de</strong> Fractal<br />
que mostra uma folha <strong>de</strong> samambaia que foi <strong>de</strong>senhada por um sistema <strong>de</strong> equações <strong>de</strong><br />
diferenças.<br />
Figura 27 - Uma folha <strong>de</strong> samambaia formada por um Fractal. Matematicamente conhecido por<br />
Feto-Fractal.<br />
50
<strong>Co</strong>m o sistema <strong>de</strong>dicado a ví<strong>de</strong>o para pesquisa biomédicas (principalmente o fato da<br />
possível interferência dos sinais vitais no que é exibido e no que é visto pelo paciente),<br />
pensa-se em criar circuitos <strong>de</strong> aquisição dos biopotenciais que seriam acoplados a um<br />
componente especial <strong>de</strong> aquisição do sistema embarcado na FPGA, que seja capaz <strong>de</strong><br />
receber os biopotenciais através das GPIO.<br />
Figura 28 - Mo<strong>de</strong>lagem esquemática do BioFeedArt<br />
Para aumentar o grau <strong>de</strong> realida<strong>de</strong> virtual, entra a possibilida<strong>de</strong> do estudo <strong>de</strong> Fractais<br />
em 3D, on<strong>de</strong> novas gran<strong>de</strong>zas como espessura, tamanho, largura, altura, distancia,<br />
ângulo da visualização e outras, permitirão que este projeto tenha uma maior gama <strong>de</strong><br />
dados que influenciariam os sinais vitais do individuo em teste. Para o <strong>de</strong>vido uso <strong>de</strong>stas<br />
gran<strong>de</strong>zas, o projeto OpenGL Embarcado po<strong>de</strong> ser <strong>de</strong> suma importância.<br />
Finalmente, este projeto visa expandir a interdisciplinarida<strong>de</strong> entre medicina,<br />
instrumentação biomédica, sistemas embarcados e artes gráficas. Atualmente, o projeto<br />
BioFeedArt está em andamento, supervisionado pelo Sr. Mathieu Duvignaud do<br />
Departamento <strong>de</strong> Artes da <strong>UFRN</strong> para o auxílio do <strong>de</strong>senvolvimento artístico gráfico<br />
abstrata, e pelos Prof. Dr. Gláucio Bezerra Brandão e Prof. Dr. George Carlos do<br />
Nascimento, ambos do Departamento <strong>de</strong> Engenharia Biomédica da <strong>UFRN</strong>, quanto ao<br />
<strong>de</strong>senvolvimento tecnológico.<br />
4.2.2 Aplicação <strong>de</strong> sistemas embarcados da Altera na criação <strong>de</strong><br />
sistemas <strong>de</strong> tempo real petrolíferos<br />
51
4.2.2.1 <strong>Co</strong>ntextualização em relação ao petróleo<br />
O petróleo atualmente se constitui na principal matriz energética do mundo.<br />
Alimentar energeticamente si<strong>de</strong>rúrgicas, fornecer matéria prima para indústrias e<br />
abastecer automóveis são alguns dos inúmeros exemplos da utilização do petróleo no<br />
cenário global atual. O petróleo e seus <strong>de</strong>rivados se constituem em matéria prima para<br />
mais <strong>de</strong> 3.000 produtos petroquímicos e materiais <strong>de</strong> construção, <strong>de</strong>ntre vários outros.<br />
<strong>Co</strong>nsequentemente, a <strong>de</strong>scoberta <strong>de</strong> novas jazidas <strong>de</strong> petróleo tem uma gran<strong>de</strong><br />
importância para que a reserva energética mundial seja mantida, <strong>de</strong> forma a suprir a<br />
<strong>de</strong>manda das ativida<strong>de</strong>s petrolíferas dos países. Entretanto, ao consi<strong>de</strong>rar que a<br />
exploração <strong>de</strong> petróleo nas bacias sedimentares se constitui em uma ativida<strong>de</strong> muito<br />
dispendiosa, o <strong>de</strong>senvolvimento <strong>de</strong> tecnologia para esta área torna-se <strong>de</strong> suma<br />
importância. Descobertas inovadoras tanto na área <strong>de</strong> perfuração <strong>de</strong> poços quanto na<br />
área <strong>de</strong> <strong>de</strong>scoberta <strong>de</strong> reservatórios são necessárias para que esta tarefa <strong>de</strong> exploração<br />
seja mais rentável e tenha maior valor agregado para o investidor, o qual po<strong>de</strong> ser<br />
privado ou estatal.<br />
Ultimamente, em um cenário <strong>de</strong> atenção nacional, tem-se ouvido muito a<br />
respeito das novas <strong>de</strong>scobertas <strong>de</strong> fontes imensas <strong>de</strong> petróleo na Bacia <strong>de</strong> Campos, on<strong>de</strong><br />
se encontra a mais relevante área da região do Pré-sal brasileiro. A Petrobras prevê<br />
atingir a marca <strong>de</strong> 1,8 milhão <strong>de</strong> barris diários <strong>de</strong> petróleo extraído da camada pré-sal<br />
nos próximos 12 anos.<br />
No Brasil o Pré-sal por lei vai do estado <strong>de</strong> Santa Catarina até o Espírito Santo;<br />
geologicamente, entretanto, esta área vai até a Bahia. Mais especificamente, por lei esta<br />
área marítima é <strong>de</strong>finida a partir <strong>de</strong> 300 km da costa leste brasileira <strong>de</strong> Santa Catarina<br />
até o Espírito Santo, com 800 km <strong>de</strong> extensão por até 200 km <strong>de</strong> largura que totalizam<br />
149 mil km 2 . Esta localização está ilustrada na Figura 26.<br />
52
Figura 29 - Região do Pré-sal brasileiro.<br />
Sob uma lâmina <strong>de</strong> 2.000 metros <strong>de</strong> água somada a uma camada <strong>de</strong> 5.000 metros<br />
<strong>de</strong> sal, existe uma jazida muito farta <strong>de</strong> petróleo o que acarreta na perfuração offshore<br />
(no mar) <strong>de</strong> poços que exce<strong>de</strong>m 7.000 metros <strong>de</strong> profundida<strong>de</strong>. A gran<strong>de</strong> diferença na<br />
exploração do Pré-sal se <strong>de</strong>ve ao fato <strong>de</strong> que, nos <strong>de</strong>mais países, o processo <strong>de</strong><br />
exploração era interrompido quando se alcançava uma camada <strong>de</strong> sal. Entretanto, esta<br />
camada <strong>de</strong> sal funcionou como uma armadilha adicional para o petróleo, que não<br />
conseguiu escoar a superfície (fluxo natural).<br />
Figura 30 - Formações geológicas antes do Pré-sal<br />
53
Estudos sísmicos da região sempre mostravam imagens sísmicas <strong>de</strong> péssima<br />
qualida<strong>de</strong>. Entretanto, a Petrobrás realizou um gran<strong>de</strong> investimento em<br />
<strong>de</strong>senvolvimento voltado para a tecnologia <strong>de</strong> imagens, perfuração e robótica. Os<br />
estudos da robótica são amplamente conhecidos no mundo, mas somente a Petrobrás é<br />
<strong>de</strong>tentora da tecnologia robótica remota que suporte altas pressões como as encontradas<br />
a 2.000 metros, no fundo do mar da Bacia <strong>de</strong> Campos.<br />
A evolução maciça da tecnologia <strong>de</strong> processamento <strong>de</strong> imagens acarretou nas<br />
atuais <strong>de</strong>scobertas da Bacia <strong>de</strong> Campos. Neste escopo das atuais necessida<strong>de</strong>s da área,<br />
após uma pesquisa dos sistemas atuais com alguns engenheiros da área do <strong>de</strong>partamento<br />
<strong>de</strong> Engenharia <strong>de</strong> Petróleo da <strong>UFRN</strong> (Prof. Dr. José Romualdo Dantas Vidal e Prof. Dr.<br />
Edney Rafael Viana Pinheiro Galvão), propõe-se <strong>de</strong>senvolver sistemas embarcados <strong>de</strong><br />
mo<strong>de</strong>lagem em 3D <strong>de</strong> tempo real para o auxilio <strong>de</strong> perfuração <strong>de</strong> poços direcionais, uma<br />
área que carece <strong>de</strong>ste tipo <strong>de</strong> sistema.<br />
4.2.2.2 Proposta <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> um Sistema Gráfico Para<br />
o Auxilio do Processo <strong>de</strong> Perfuração <strong>de</strong> Poços Direcionais<br />
Um poço é <strong>de</strong>nominado direcional quando o reservatório a ser atingido se<br />
encontra em uma direção inviável <strong>de</strong> ser atingida verticalmente, isto é, torna-se<br />
necessário utilizar técnicas especiais, distintas das empregadas na perfuração <strong>de</strong> poços<br />
verticais, com o objetivo <strong>de</strong> realizar o <strong>de</strong>svio necessário para atingir o poço.<br />
Estes poços, mesmo exigindo mais investimentos em perfuração, no projeto, em<br />
material e na preservação do meio ambiente (principalmente na exploração offshore,<br />
que acarreta diversos riscos <strong>de</strong> vazamento como os vistos no caso recente do Golfo do<br />
México em um poço offshore da companhia British Petrolium), geralmente resultam em<br />
bons resultados <strong>de</strong> extração.<br />
Diferentemente dos poços verticais, os poços direcionais requisitam um projeto<br />
<strong>de</strong> perfuração mais complexo. Este projeto consiste na <strong>de</strong>terminação da trajetória que o<br />
poço <strong>de</strong>verá seguir para atingir o reservatório <strong>de</strong>sejado. Para elaborar este projeto, <strong>de</strong>ve-<br />
se coletar e montar um banco <strong>de</strong> dados <strong>de</strong> a<strong>de</strong>quação da forma <strong>de</strong> perfuração em relação<br />
aos diversos perfis <strong>de</strong> formações geológicas que serão atravessadas durante a<br />
perfuração. Na Figura 28, é apresentada a ilustração <strong>de</strong> um poço direcional.<br />
54
Figura 31 - Mo<strong>de</strong>lagem <strong>de</strong> um poço direcional<br />
A mo<strong>de</strong>lagem gráfica <strong>de</strong>sta trajetória é realizada após a perfuração dos poços. Os<br />
dados referentes à direção e angulação da trajetória <strong>de</strong> perfuração são adquiridos já no<br />
formato digital e são enviados a uma central <strong>de</strong> controle, para que seja mo<strong>de</strong>lada a<br />
trajetória realizada após a perfuração.<br />
A idéia proposta nesta seção é a da integração <strong>de</strong> um componente no sistema do<br />
OpenGL Embarcado para a aquisição <strong>de</strong>stes sinais digitais através das GPIO numa<br />
placa DE2, por exemplo. Na camada <strong>de</strong> software no OpenGL, seriam mo<strong>de</strong>lados<br />
objetos gráficos em 3D como as formações geológicas, os diversos tipos <strong>de</strong> brocas<br />
(tungstênio com <strong>de</strong>ntes <strong>de</strong> aço, diamantadas, etc.), colunas <strong>de</strong> perfuração e quaisquer<br />
outros objetos gráficos que sejam necessários para representar graficamente o processo<br />
<strong>de</strong> perfuração <strong>de</strong> um poço. O sistema <strong>de</strong>ve receber os dados da perfuração e assim<br />
mo<strong>de</strong>lar as ativida<strong>de</strong>s em tempo real.<br />
Através <strong>de</strong> cálculos <strong>de</strong> mecânica dos solos e dos fluídos, seria possível implementar<br />
estes ambientes graficamente, os quais são <strong>de</strong> suma importância para o auxilio <strong>de</strong> uma<br />
perfuração direcional, que em média não po<strong>de</strong> variar mais que 5% da trajetória<br />
planejada, porém não visualizada.<br />
Os dados a serem utilizados são os colhidos <strong>de</strong> acordo com a técnica atual <strong>de</strong><br />
perfuração conhecida como MWD (Measuring While Drilling, ou Medindo Enquanto<br />
Perfurando), que faz uma aquisição e digitalização dos dados <strong>de</strong> perfuração em tempo<br />
55
eal <strong>de</strong> acordo com a dinâmica do processo. Alguns dos dados coletados pela tecnologia<br />
atual são listados a seguir:<br />
• Direção da perfuração.<br />
• Inclinação <strong>de</strong> perfuração.<br />
• Velocida<strong>de</strong> <strong>de</strong> rotação da coluna <strong>de</strong> perfuração.<br />
• Grau <strong>de</strong> suavida<strong>de</strong> da rotação da broca.<br />
• Tipo vibrações da formação no poço.<br />
• Temperaturas do poço.<br />
• Torque e peso da broca.<br />
• Volume para o controle da injeção <strong>de</strong> lama.<br />
Dos dados relacionados acima, os principais e <strong>de</strong> extrema necessida<strong>de</strong> para o auxílio<br />
da perfuração <strong>de</strong> poços direcionais são os dois primeiros, isto é, a direção e a inclinação<br />
da perfuração. Estes dados po<strong>de</strong>m ser alimentados em um sistema <strong>de</strong> simulação e<br />
mo<strong>de</strong>lagem <strong>de</strong> imagens em 3D qual po<strong>de</strong> exercer gran<strong>de</strong> serventia a este processo. <strong>Co</strong>m<br />
isso, po<strong>de</strong>-se criar um banco <strong>de</strong> dados em tempo real que auxilie a perfuração dos poços<br />
direcionais para manter tanto a trajetória da perfuração <strong>de</strong>stes poços como a segurança<br />
durante tal procedimento. Estes dados <strong>de</strong> perfuração serão mais <strong>de</strong>talhados na Tabela 9.<br />
Tabela 9 - Dados que po<strong>de</strong>m ser utilizados na mo<strong>de</strong>lagem em 3D do sistema embarcado voltado ao<br />
auxílio <strong>de</strong> sistemas petroliferos.<br />
Nomenclatura dos dados <strong>de</strong><br />
perfuração<br />
<br />
<br />
Descrição<br />
Direção (x,y,z) - ângulo <strong>de</strong> direção<br />
entre a trajetória do poço e o norte<br />
geográfico<br />
Grau <strong>de</strong> inclinação entre a trajetória e<br />
a direção do vetor gravida<strong>de</strong><br />
Outra técnica <strong>de</strong> aquisição <strong>de</strong> dados que trabalha com o MWD é o LWD<br />
(Logging While Drilling ou Anotando Enquanto Perfura), que registra dados referentes<br />
aos reservatórios petrolíferos, tais como porosida<strong>de</strong>, BSW, <strong>de</strong>ntre outros. <strong>Co</strong>mo o<br />
56
projeto objetiva auxiliar especificamente a perfuração <strong>de</strong> poços direcionais, tais dados<br />
não são pertinentes para esta mo<strong>de</strong>lagem.<br />
5.0 <strong>Co</strong>nclusão<br />
Este trabalho teve como enfoque o estudo, pesquisa e <strong>de</strong>senvolvimento <strong>de</strong> sistemas<br />
embarcados, fazendo uso das ferramentas tais como as placas <strong>de</strong> <strong>de</strong>senvolvimento da<br />
corporação Altera, uma das empresas mais atuantes, abrangentes e fortes do mercado.<br />
Através da pesquisa aqui realizada, foram explanados todos os passos necessários<br />
para a realização da mo<strong>de</strong>lagem, <strong>de</strong>senvolvimento e integração <strong>de</strong> sistemas embarcados<br />
utilizando as ferramentas e as IDE’s disponibilizadas pela corporação Altera. Além<br />
disso, abordou-se a metodologia modular <strong>de</strong> <strong>de</strong>senvolvimento que a Altera propõe para<br />
seus sistemas. Partindo <strong>de</strong>sta forma <strong>de</strong> <strong>de</strong>senvolvimento, foram discutidos todos os<br />
passos necessários para a integração <strong>de</strong> um sistema digital <strong>de</strong> ví<strong>de</strong>o. Este sistema digital<br />
<strong>de</strong>dicado a ví<strong>de</strong>o foi integrado com sucesso e <strong>de</strong>monstrado na <strong>de</strong>fesa do trabalho, com o<br />
auxilio do uso da placa <strong>de</strong> estudo DE2 também proveniente da Altera.<br />
Através <strong>de</strong> códigos em auto nível na IDE Nios II na linguagem C, e das bibliotecas<br />
<strong>de</strong> abstração <strong>de</strong> hardware (HAL) disponibilizadas pela Altera, foi criada uma camada <strong>de</strong><br />
software que tornou possível a leitura/escrita <strong>de</strong> dados nos diversos periféricos da placa<br />
DE2, assim como na saída <strong>de</strong> ví<strong>de</strong>o VGA, através da camada <strong>de</strong> hardware integrada.<br />
Esta camada <strong>de</strong> hardware foi mo<strong>de</strong>lada com os componentes disponíveis das IDE’s<br />
SOPC e University <strong>Co</strong>res, quais têm como finalida<strong>de</strong> automatizar e tornar mais eficaz o<br />
processo <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> sistemas embarcados nos sistemas <strong>de</strong>senvolvidos para<br />
produtos Altera. Através da IDE Quartus II e seus módulos, esta camada <strong>de</strong> hardware<br />
pô<strong>de</strong> ser integrada com os periféricos e seus respectivos controladores. Os principais<br />
periféricos utilizados foram as memórias, processadores, contadores, clocks, além <strong>de</strong><br />
botões, LED’s e o mais especial para este projeto, a saída <strong>de</strong> ví<strong>de</strong>o VGA.<br />
5.1 <strong>Co</strong>nsi<strong>de</strong>rações finais<br />
A área <strong>de</strong> sistemas embarcados tem uma <strong>de</strong>manda significativa no mercado<br />
atualmente. Celulares, vi<strong>de</strong>ogames, marca-passos e muitos outros dispositivos nos<br />
mostram que estes sistemas, por diversas vezes <strong>de</strong> dimensão reduzida, são <strong>de</strong> extrema<br />
importância. A necessida<strong>de</strong> <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong>stes sistemas obriga os<br />
57
pesquisadores da área <strong>de</strong> tecnologia a inovar sobre criações anteriores, para que <strong>de</strong>sta<br />
forma encontrem soluções para problemas que sequer ainda foram formulados. A<br />
possibilida<strong>de</strong> <strong>de</strong> contribuir para a presente revolução tecnológica se mostra como um<br />
elemento adicional <strong>de</strong> motivação para a elaboração <strong>de</strong> trabalhos nesta área.<br />
5.2 Perspectivas futuras<br />
Espera-se seguir com esta linha <strong>de</strong> pesquisa, pois a mesma vai além das linhas<br />
traçadas neste projeto. Na etapa final <strong>de</strong>ste trabalho, foi proposto um grau maior <strong>de</strong><br />
integração do sistema digital <strong>de</strong> ví<strong>de</strong>o embarcado aqui implementado, com uma<br />
conhecida linguagem <strong>de</strong> programação <strong>de</strong> ambientes gráficos em 3D, o OpenGL. Esta<br />
proposta visa à integração <strong>de</strong> um sistema mais robusto, complexo e po<strong>de</strong>roso em<br />
processamento, já que propõe o uso <strong>de</strong> um sistema dual-core <strong>de</strong> Nios II. Uma CPU Nios<br />
teria a responsabilida<strong>de</strong> <strong>de</strong> realizar o processamento gráfico vetorial que o OpenGL<br />
requer, enquanto a outra seria responsável pela cópia continua dos dados dos pixels do<br />
frame-buffer do OpenGL da primeira CPU para o pixel-buffer <strong>de</strong>sta CPU e assim,<br />
consequentemente, para a saída <strong>de</strong> ví<strong>de</strong>o VGA também conectada ao processador Nios<br />
II <strong>de</strong>sta CPU.<br />
O sistema dual-core Nios II é formado pelo forte acoplamento <strong>de</strong> processadores<br />
Nios II, os quais, munidos <strong>de</strong> todos os benefícios dos controladores e periféricos das<br />
placas <strong>de</strong> estudo da Altera, po<strong>de</strong>m ser aplicados a outras diversas linhas <strong>de</strong> pesquisas<br />
como a <strong>de</strong> sistemas paralelos distribuídos a sistemas embarcados.<br />
58
REFERENCIAS BIBLIOGRÁFICAS<br />
Adam Kinsman, Nicola Nicolici(2009), COE4DS4 Embed<strong>de</strong>d Systems - Lab #2 -<br />
Introduction to Embed<strong>de</strong>d Software for the NIOS II Processor. Hamilton, ON –<br />
CA: McMaster University.<br />
Addison-Wesley (1999), OpenGL Programming Gui<strong>de</strong>: The official gui<strong>de</strong> to<br />
learning OpengGL, Third Edition, Version 1.2. Massachusetts, USA: Sylicon<br />
Graphics.<br />
ALTERA CORPORATION. (2010), Nios II Performance Benchmarks. DS-<br />
N28162004-5.0.<br />
ALTERA CORPORATION. (2009), Introduction to SOPC Buil<strong>de</strong>r, QII54001-9.1.0<br />
ALTERA CORPORATION. (2009), SOPC Buil<strong>de</strong>r <strong>Co</strong>mponents, QII54004-9.1.0.<br />
ALTERA CORPORATION. (2009), SOPC Buil<strong>de</strong>r Memory Subsystem<br />
Development Walkthrough, QII54006-9.1.0.<br />
ALTERA CORPORATION. (2009), System Interconnect Fabric for Streaming<br />
Interfaces, QII54019-9.1.0.<br />
ALTERA CORPORATION. (2009), Avalon Streaming Interconnect <strong>Co</strong>mponents,<br />
QII54021-9.1.0.<br />
ALTERA CORPORATION. (2009), VGA Out IP <strong>Co</strong>res for Altera DE Boards,<br />
QII54004-9.1.0.<br />
ALTERA CORPORATION. (2009), Avalon Interface Specifications, Version.1.2,<br />
MNL-AVABUSREF-1.2.<br />
ALTERA CORPORATION. (2009), Instantiating the Nios II Processor in SOPC<br />
Buil<strong>de</strong>r, NII51004-9.1.0.<br />
59
ALTERA CORPORATION. (2009), Nios II Processor Reference Handbook,<br />
NII5V1-9.0.<br />
ALTERA CORPORATION. (2008), Pixel Buffer for Altera DE2/DE1 Boards,<br />
Version 8.0.0.1.<br />
ALTERA CORPORATION. (2008), Quartus II Introduction Using Schematic<br />
<strong>Design</strong>.<br />
ALTERA CORPORATION. (2008), Introduction to the Altera Nios II Soft<br />
Processor, 6XX-40020R.<br />
ALTERA CORPORATION. (2008), DE2 Using C.<br />
ALTERA CORPORATION. (2007), Nios Development Board: Cyclone II Edition<br />
Reference Manual, 6XX-40020R.<br />
ALTERA CORPORATION. (2006), Using the SDRAM Memory on Altera’s DE2<br />
Board.<br />
ALTERA CORPORATION. (2006), VGA <strong>Co</strong>re for Altera DE2/DE1 Boards<br />
ALTERA CORPORATION. (2005), Using SOPC Buil<strong>de</strong>r & DSP Buil<strong>de</strong>r Tool Flow,<br />
Version.1.0, Aplication Note 394.<br />
ALTERA CORPORATION. (2005), Using DDR/DDR2 SDRAM With SOPC<br />
Buil<strong>de</strong>r, Version.1.1, Aplication Note 398.<br />
ALTERA CORPORATION. Mason Woo, Jackie Nei<strong>de</strong>r, Tom Davis, Dave Shreiner<br />
(2004), Introduction to Quartus II, Version 4.1. California, USA.<br />
Luis Alberto Santos Rocha, Denize Azuaga, Renata Andra<strong>de</strong>, João Luiz Bastos Vieira,<br />
Otto Luiz Alcântra Santos (2008), Perfuração direcional. Editora Interferência.<br />
60
James O. Hamblen, Tyson S. Hall, Michael D. Furman (2008), Rapid prototyping of<br />
digital systems SOPC Edition. New York: Springer Science + Business Media, LLC.<br />
61