Bacharelado em Engenharia de Controle e Automação
Por: Ewerton Osbourne • 1/3/2023 • Trabalho acadêmico • 1.566 Palavras (7 Páginas) • 101 Visualizações
Instituto Federal de Educação, Ciência e Tecnologia de Goiás – IFG, Campus Itumbiara.[pic 1]
Bacharelado em Engenharia de Controle e Automação
Prática 03
DESCRIÇÃO DE HARDWARE USANDO VHDL
Disciplina:
Eletrônica Digital 2
Prof. Dr. Bruno Gabriel Gustavo Leonardo Zambolini Vicente
Ewerton Albany Silva, 20211040070287
Data de Entrega: 07/12/2022
ITUMBIARA – GO
12/2022
- Objetivos
O objetivo desta prática é realizar o desenvolvimento de um hardware utilizando a linguagem de programação VHDL (VHSIC Hardware Description Language), que é específica para a descrição de hardware, em especial para projeto de circuitos digitais. O propósito é que seja construído uma unidade de cálculo lógica, Ucalc, composta por duas LUTs (LookUp Table) que realizam operações lógicas em dois pares de entradas de mesmo tamanho e resulte em um par de saídas referentes a cada par de entrada. A saída deverá ser dada tanto em número binário, quanto em número inteiro.
- Introdução teórica
Os FPGAs são conhecidos como um dos inventos mais complexos da humanidade e é o responsável pelo avanço significativo da tecnologia nos últimos anos. A sua complexidade se dá pelo fato de ser um circuito reconfigurável, ou seja, que pode se moldar a qualquer circuito por meio de uma linguagem de descrição de hardware. Isso facilita bastante a criação de ASICs (“Application Specific Integratec Circuit”), pois possibilita uma prototipação rápida de diversos módulos digitais. As aplicações se expandem até a ala aeroespacial e de defesa, onde os FPGAs podem ser utilizados como partes redundantes dos circuitos: a FPGA pode reconfigurar-se para atender uma parte do circuito danificada por eventos externos.
Dita essas vantagens, é de interesse que se compreenda o funcionamento básico de tais circuitos. Um dos principais componentes das FPGAs são as LUTs (LookUp Tables). Elas são blocos lógico pré-definidos que consistem em um número finito de portas lógicas e Flip-Flops. As LUTs ainda são implementadas conforme a tabela lógica que recebem, de onde se deriva o seu nome. O roteamento entre as LUTs é feito por blocos chaveadores e por blocos de conexão, tal como visto na figura 1, que são de fato um conjunto de transistores controlados para criar o caminho entre os blocos lógicos (LUTs).
[pic 2]
Figura 1 - Princípio básico do funcionamento de uma FPGA.
A partir desse princípio básico de funcionamento, é possível realizar a criação de circuitos complexos como unidades aritméticas, memórias, processadores, entre outros dispositivos digitais. Aliado as FPGAs, é possível encontrar nos chips alguns outros módulos já implementados para auxiliar na integração das aplicações, tais como circuitos gerenciadores de rede, memórias DDRx, gerenciadores ULPI (protocolo para o gerenciamento de interface USB de alta velocidade), processadores (ARMs são muito comuns) e etc. Essa conexão entre diversos módulos é chamada de SoC (“System On Chip”).
- Procedimentos experimentais
- Software
O software utilizado foi o Quartus II, na versão 13.1 edição web. Distribuído pela Intel, tal software é o ambiente de desenvolvimento utilizado para o desenvolvimento da descrição de hardware, compilação, síntese, implementação e programação das FPGAs da marca.
Neste projeto, será utilizado como base o chip FPGA Cyclone IV, modelo EP4CGX15BF14A7.
- Código VHDL
A primeira etapa é realizar a descrição das variáveis genéricas e das portas. Como variáveis genéricas, foi escolhido o tamanho do comprimento de bits a ser utilizado (“bit_lenght”), e a escolha se será utilizado borda de subida ou de descida para a sincronização da saída (“rising_or_fallen_edge”). Como portas, foi inserido o reset (rst) e o clock (clk) para a sincronia da LUT. O comando de operação é dado pela porta OP, e as duas entradas dadas por in1 e in2, sendo que possuem seus comprimentos definidos pelo tamanho do comprimento dos bits. Por último, a saída, também em função do tamanho do comprimento dos bits.
[pic 3]
Como trabalharemos com processos, é importante definir sinais para que seja feita as operações dentro dessa etapa sequencial. O sinal definido foi o da saída, dado também em função do tamanho do comprimento dos bits, como visto abaixo.
O processo LUT_OPERATION é responsável por realizar as operações sincronamente através da sensibilidade aos pinos de clock e reset. O reset é assíncrono, assim, ele realizará a sua operação independentemente do sinal de clock.
[pic 4]
Se o reset estiver inativo, o clock será comparado para descobrir se está em borda de subida ou de descida, em função da variável genérica rising_or_fallen_edge. Se a condição for satisfeita, então é realizado a operação entre os bits de entrada em função dos bits de OP, que definem a operação realizada. Isso foi implementado por meio de uma estrutura de case, mas poderia ser implementado utilizando if.
Ao final do processo, o sinal é atualizado, e é associado de maneira paralela à saída out1.
[pic 5]
No código do Ucalcs.vhd, tem-se a declaração também da biblioteca numeric_std, para futuramente ser realizado uma operação de conversão. As portas são as mesmas definidas no diagrama em blocos da figura 2. Os inteiros intOpAB e intOpCD foram limitados a apenas 8 bits. Isso foi feito pois o inteiro integral possui 32 bits, o que ocuparia desnecessariamente boa parte dos pinos do chip.
[pic 6]
Nessa etapa apenas é feito a instanciação do componente LUT, que será utilizado adiante.
[pic 7]
Cria-se agora os sinais em com o mesmo tipo das entradas e saídas para que faça o roteamento das portas do Ucalcs para as portas das LUTs.
[pic 8]
Abaixo, é feito o gerenciamento de portas e a definição das variáveis genéricas. Tendo feito isso, é realizado o roteamento das saídas das LUTs para as saídas do Ucalcs. Além disso é feito uma conversão da saída binária para inteiro utilizando a função to_integer, que é enviada para os pinos de saída intOpXX.
...