13.04.2013 Views

Desenvolvimento de Sistemas Embarcados Co-Design - DCA - UFRN

Desenvolvimento de Sistemas Embarcados Co-Design - DCA - UFRN

Desenvolvimento de Sistemas Embarcados Co-Design - DCA - UFRN

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!