Baixe o app para aproveitar ainda mais
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.
Compartilhar