Buscar

Gerador de Curvas em Verilog para Processamento Gráfico

Prévia do material em texto

UNIVERSIDADE FEDERAL DA BAHIA - UFBA 
ESCOLA POLITÉCNICA / DEPARTAMENTO DE ENGENHARIA ELÉTRICA 
2014.2 – ENGG52 – LABORATÓRIO INTEGRADO I-A – PROF. WAGNER L. A. OLIVEIRA 
 
Especificação do Produto: Gerador de Curvas em Verilog 
 
Temas: 
 
• Projeto de componentes de hardware em Verilog; 
• Programação em linguagem C; 
• Interfaceamento com dispositivo FPGA; e 
• Controle de acesso a memórias. 
 
Objetivos: 
 
• Compreender as estruturas básicas da linguagem Verilog; 
• Construir programas em C padrão para aquisição e envio de dados para FPGA; 
• Entender o funcionamento de uma memória em questões como endereçamento, tempo 
de leitura e gravação; 
• Projetar e implementar módulos Verilog que permitam calcular e exibir os pontos de 
uma curva e de segmentos de reta; 
• Simular o funcionamento dos módulos isoladamente e em conjunto; e 
• Escrever um relatório técnico, contendo a apresentação do problema, a descrição do 
projeto, a discussão das escolhas, os resultados e as conclusões. 
 
Problema: 
 
 A área de processamento gráfico demanda poder computacional elevado. Inúmeros 
cálculos são necessários para que uma imagem, mesmo que composta apenas por linhas, 
possa ser gerada. Com vistas a minimizar a carga do processador principal houve, desde os 
anos 80, um movimento para “transferir” o processamento das rotinas gráficas do processador 
principal para um processador dedicado, localizado na placa gráfica. Foi o tempo das “placas 
de vídeo aceleradas”. No início essa “aceleração” era restrita ao processamento de primitivas 
em 2D. Mais tarde, com o avanço dos jogos eletrônicos, placas com “aceleração 3D” 
começaram a surgir, sendo capazes de processar polígonos em 3D. Atualmente temos 
processadores sofisticados, as GPUs, com arquitetura vetorial, vários pipelines e programáveis. 
 
 As curvas e superfícies são, sem dúvida, primitivas importantes em aplicações de 
modelagem 3D. Projetos em engenharia, arquitetura e design gráfico necessitam criar objetos 
de contornos suaves, e para tanto se valem de vários tipos de curvas / superfícies. Uma classe 
de curvas bastante utilizada é a das curvas /superfícies de subdivisão. O processo construtivo 
desse tipo de curva é bastante simples. Imagine que alguém lhe fornece um cubo de madeira e 
um canivete e pede que você faça uma esfera de madeira. A solução imediata é ir removendo 
as “pontas” do cubo (seus vértices), num processo contínuo, ate que o bloco fique 
“arredondado”. Esse processo pode ser transposto para a construção de uma curva suave, a 
partir de uma curva poligonal simples que aproxime a forma final da curva. Tal processo é 
chamado de “Paradigma de Corte dos Cantos” (Corner-Cutting Paradigm), e foi proposto por 
George Chaikin, em 1978. O algoritmo por ele proposto, e que leva seu nome, é representado 
na figura 1. 
 
Figura 1. Processo do Paradigma de Corte dos Cantos. 
 A partir de uma poligonal inicial, cada segmento é dividido em três partes iguais. O 
terço central de cada segmento da poligonal inicial é mantido e todos são conectados entre si, 
formando uma nova poligonal. Aplicando o mesmo processo, iterativamente, a poligonal torna-
se cada vez mais suave, e no limite (quando os segmentos tendem a pontos) torna-se uma 
curva suave. 
 
 Pensando em incorporar um processo “acelerado” de geração de curvas, seu trabalho 
será projetar um módulo, utilizando a linguagem Verilog, capaz de calcular uma curva suave 
utilizando o algoritmo de Chaikin, tal como descrito acima. Um dos sinais de entrada de seu 
módulo será o número de iterações. Os pontos de controle estarão armazenados previamente 
na memória, em um endereço a ser informado também como sinal de entrada. Considere que, 
no máximo, a poligonal de controle inicial poderá ter seis pontos. 
 
 Em um primeiro momento, para determinar o conjunto de pontos da poligonal inicial e 
visualizar a curva final gerada pelo seu módulo, você deverá desenvolver um programa auxiliar 
capaz de permitir que o usuário marque até seis pontos na tela e que esses pontos sejam 
registrados em um arquivo. O conteúdo desse arquivo é formado por um valor inteiro, 
indicando a quantidade de pontos da poligonal, seguido das coordenadas (x,y) de cada ponto, 
em valores inteiros. Você deverá então codificar um script que converta esse arquivo em um 
formato compatível com o software Quartus, de modo que esses dados possam ser utilizados 
para inicializar o conteúdo da memória utilizada na simulação do seu módulo. Da mesma 
forma, o conteúdo final da memória, contendo a poligonal inicial e a curva gerada, deverá ser 
gravado pelo software Quartus. Um outro programa script deverá ser construído, de forma que 
o programa em C possa ler o seu conteúdo e mostrar a curva final calculada. 
 
 Uma vez que o módulo de geração da curva esteja funcionando adequadamente, você 
deverá pensar em como construir um segundo módulo em Verilog, que consiga desenhar a 
curva e sua poligonal, diretamente em um display VGA. Para tanto você deverá pesquisar 
como é o funcionamento de um monitor VGA, entender como é feita a varredura, considerar 
que cada pixel deve ser “desenhado” em um tempo máximo de 40ns, etc. O objetivo dessa 
ultima etapa é ao final desse trabalho implementar os seus módulo em um FPGA e visualizar a 
curva em um monitor VGA real. 
 
Produtos a Serem Entregues: 
 
Organizem-se em equipes de no máximo 4 alunos. Cada equipe de projeto deverá entregar os 
seguintes releases, no site do grupo da disciplina, até as 23:59 das datas indicadas (atrasos 
serão penalizados): 
 
R1. (16/09) Programa em C padrão para definição de vértices 
R2. (30/09) Scripts para conversão de formatos (ou programa C padrão equivalente) 
R3. (21/10) Programa em C padrão para exibição das curvas geradas 
R4. (18/11) Módulo Verilog para cálculo de curvas 
R5. (16/12) Módulo Verilog para exibição das curvas geradas 
R6. (16/12) Relatório técnico detalhado 
- com no máximo 15 páginas, descrevendo a proposta do seu projeto. Nesse relatório 
devem constar: descrição do problema, fundamentação teórica, descrição detalhada do 
projeto (destacando as decisões de projeto, o projeto dos circuitos lógicos e resultados 
das simulações comentados), conclusões e referências bibliográficas. Lembrando que 
todas as fontes de pesquisa utilizadas devem ser citadas no relatório, sendo 
completamente desnecessário sua reprodução. 
R7. (16/12) Apresentação dos protótipos 
 
Nota Final (F): F = 0,1*(R1 + R2 + R3 + R6 + R7 + P) + 0,2*(R4 + R5) 
 (onde P = nota de participação nas sessões) 
 
Obs.: 1. Outros produtos parciais poderão ser solicitados pelo professor, em datas a serem 
 definidas, conforme o andamento do projeto, alterando a composição acima. 
 2. A nota final será dividida por 2 caso o release R4 não seja entregue.

Outros materiais