Buscar

Projeto de hardware reconfigurável com FPGA

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 1/57
Projeto de hardware recon�gurável com
FPGA
Profª. Marcos Santana Farias
Descrição
As ferramentas para o desenvolvimento de sistemas embarcados de alto desempenho baseados em
hardware reconfigurável.
Propósito
O entendimento e a utilização das ferramentas para o fluxo de projeto em dispositivos de hardware
reconfigurável é essencial para a formação do profissional que se integrará em equipes de desenvolvimento
de sistemas embarcados de alto desempenho.
Objetivos
Módulo 1
Dispositivos de hardware recon�gurável
Avaliar a arquitetura de dispositivos de hardware reconfigurável.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 2/57
Módulo 2
Fluxo de projeto de dispositivos recon�guráveis
Distinguir as etapas no fluxo de projeto de dispositivos reconfiguráveis.
Módulo 3
Circuitos combinacionais e sequenciais com as
ferramentas para FPGA
Empregar circuitos combinacionais e sequenciais com as ferramentas para FPGA.
Módulo 4
Circuitos aritméticos e de controle com as
ferramentas para FPGA
Formular circuitos aritméticos e de controle com as ferramentas para FPGA.
Não faz muito tempo, a maioria dos softwares eram gravados permanentemente juntos com seus
respectivos hardwares, em sistemas embarcados que não possuíam possibilidade de atualização.
Contudo, com o progresso da tecnologia, os fabricantes encontraram maneiras de atualizar o
software (chamado de firmware nos sistemas embarcados) com recursos adicionais ou correções de
bugs no mesmo hardware já desenvolvido.
Agora, imagine se as atualizações de hardware também se tornassem uma possibilidade — isso não
seria fascinante? Bem, esse hardware programável, cujas configurações de subsistema podem ser
modificadas mesmo após a fabricação, já está disponível aos projetistas e cai na categoria de
sistema de hardware reconfigurável. Neste conteúdo, analisaremos a arquitetura básica desses
dispositivos e exploraremos as ferramentas de software utilizadas no fluxo de projeto, com
aplicações práticas de circuitos digitais básicos para o desenvolvimento de sistemas embarcados de
alto desempenho.
Introdução
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 3/57
1 - Dispositivos de hardware
recon�gurável
Ao �nal deste módulo, você será capaz de avaliar a arquitetura de
dispositivos de hardware recon�gurável.
Evolução da tecnologia de componentes
de hardware
Nós lidamos todos os dias com dispositivos e circuitos eletrônicos presentes em eletrodomésticos,
computadores, sistemas de transporte, telefones celulares, câmeras, TVs etc. O mundo da eletrônica fez
grandes incursões em várias áreas, como diagnósticos médicos, automóveis, indústrias, convencendo a
todos de que sem a eletrônica é realmente impossível trabalhar. As tecnologias de hardware eletrônico
estão em constante evolução para acomodar mais desempenho e menor custo aos novos produtos. A
imagem a seguir apresenta um resumo das tecnologias de componentes de hardware mais utilizados.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 4/57
Tecnologias de componentes de hardware.
Os componentes eletroeletrônicos convencionais incluem os circuitos eletrônicos analógicos e os
componentes eletrônicos digitais. Os circuitos eletrônicos analógicos compõem a eletrônica analógica, um
ramo da eletrônica que lida com um sinal continuamente variável. É amplamente utilizada em equipamentos
de rádio e áudio junto com outras aplicações em que os sinais são derivados de sensores analógicos antes
de serem convertidos em sinais digitais para armazenamento e processamento.
Dentre os componentes eletroeletrônicos considerados convencionais, temos também os circuitos lógicos
digitais ou portas lógicas, que são os componentes que trabalham com funções lógicas básicas (AND, OR,
XOR, NOT, NAND, NOR e XNOR). Esses componentes eletrônicos digitais possuem poucas unidades de
portas lógicas integradas em um chip.
Do lado direito da imagem Tecnologias de componentes de hardware, estão representados os circuitos
integrados digitais de larga escala. Os circuitos integrados de larga escala vieram para dar um enorme
impulso no poder de processamento digital. Os sistemas baseados em microprocessadores e
microcontroladores formam a grande maioria dos sistemas embarcados e dos computadores que
utilizamos, com toda a flexibilidade proporcionada pela integração hardware e software embarcado. Os
circuitos integrados de aplicação específica (ASICs) são projetados e fabricados sem possibilidade de
serem reprogramados depois de produzidos e com um custo de projeto muito alto. Isso torna a sua
utilização viável somente quando uma grande quantidade de unidades deve ser produzida, essencialmente
para sistemas com larga demanda.
Os dispositivos lógico-programáveis (PLDs) começaram a ser utilizados como alternativa de hardware
reconfigurável aos sistemas microprocessados, primeiramente com os dispositivos mais simples como
PLAs (programmable logic array), com dois níveis de lógica programáveis (AND e OR), e PALs
(programmable array logic) com um nível de lógica programável (AND) e um fixo (OR). Dispositivos mais
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 5/57
complexos, como os CPLDs (complex PLDs), com um arranjo de múltiplos blocos, já permitem realizar um
projeto lógico de alto desempenho com um único dispositivo. Ainda mais flexíveis, com capacidade de
portas lógicas chegando aos milhões e centenas de portas de entrada e saída, os dispositivos FPGA
permitem projetos digitais complexos, como processadores, com alto desempenho e totalmente
reconfiguráveis.
O FPGA surgiu nos anos 1980, quando um primeiro produto comercial foi criado pela empresa Xilinx. Esse
dispositivo não teria apenas portas lógicas programáveis, como os PLDs, mas também interconexões
programáveis entre as portas. O primeiro modelo (XC2064) tinha 64 blocos lógicos configuráveis
(configurable logic blocks – CLBs). A evolução rápida do dispositivo e do volume de produção por parte dos
fabricantes que dominaram o mercado popularizou os FPGAs nas áreas de telecomunicações e redes nos
anos 1990, além das aplicações em eletrônica de consumo, automotivas e industriais no final dessa década.
A capacidade de configurar o hardware do FPGA, reconfigurá-lo quando necessário e otimizá-lo para
determinado conjunto de funções, tornou o FPGA uma opção atraente em muitas aplicações.
Os FPGAs são frequentemente usados para fornecer uma solução
personalizada em situações nas quais o desenvolvimento de um
ASIC seria muito caro ou demorado.
Uma aplicação em FPGA pode ser configurada em horas ou dias em vez de meses, como os ASICs.
Obviamente, a flexibilidade do FPGA tem um preço: um FPGA provavelmente será mais lento, exigirá mais
área em placa de circuito e consumirá mais energia do que um ASIC equivalente.
Arquitetura de um FPGA
Cada fornecedor de FPGA tem sua própria arquitetura, mas em termos gerais, todos são uma variação
daquela mostrada na imagem a seguir. A arquitetura consiste em blocos lógicos configuráveis (CLBs),
blocos de entrada/saída (E/S) configuráveis e grade de interconexão programável.
Arquitetura básica de um FPGA.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 6/57
CLB
O CLB é o recurso lógico básico de um FPGA. Quando ligados pelos recursos de roteamento da grade de
interconexão, os componentes do CLB executam funções lógicas complexas, implementam funções de
memória e sincronizam o código no FPGA. Os CLBs contêm componentes menores, incluindo:Blocos de E/S con�guráveis
Um bloco de entrada/saída configurável é usado para trazer e enviar sinais do FPGA para os circuitos
externos ao chip. Ele consiste em um buffer de entrada e um buffer de saída com três estados e controles
Tabela de consulta (look-up table ou LUT)
A tabela de consulta é, na verdade, uma tabela verdade personalizada, carregada com valores
relevantes para o FPGA, com base em suas necessidades e instruções específicas. Você pode
considerar como um pequeno pedaço de RAM que é carregado sempre que você liga o chip
FPGA. Ela define e direciona o comportamento da lógica em circuitos combinacionais no chip
com base no seu código de descrição de hardware VHDL ou Verilog. Portanto, você pode
concluir que as tabelas de consulta servem basicamente para atuar como portas lógicas em
várias combinações. Em vez de conectar várias portas NAND e NOR diferentes, usa-se uma
tabela de consulta para obter todas as combinações possíveis.
Flip �op
Um circuito capaz de dois estados estáveis que representam um único bit. Um flip-flop é o
menor recurso de armazenamento, uma célula de memória no FPGA capaz de implementar
circuitos sequenciais. Cada flip-flop em um CLB é um registrador binário usado para salvar
estados lógicos entre ciclos de clock em um circuito.
Multiplexador
Um circuito que seleciona entre duas ou mais entradas e retorna a entrada selecionada.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 7/57
de saída de coletor aberto. Normalmente existem resistores pull up nas saídas e, às vezes, resistores pull
down, que podem ser usados para encerrar sinais e barramentos sem a necessidade de resistores discretos
externos ao chip.
Grade de interconexão programável
A interconexão programável é o elemento de maior contribuição para a configuração da matriz de elementos
CLBs e o tempo de ciclo em dispositivos FPGA. Transistores são usados para ligar ou desligar conexões
entre linhas diferentes. Existem também várias matrizes de chaves programáveis no FPGA para conectar
linhas longas e curtas em combinações específicas e flexíveis.
Além desses componentes, existem circuitos de relógio (clock) para cada bloco lógico. Recursos lógicos
adicionais, como Unidades Lógicas e Aritméticas, memórias de dados (os blocos de RAM – BRAM) e
decodificadores, também podem estar disponíveis em alguns modelos.
Memória de con�guração
Os elementos de memória programáveis para armazenar a configuração do hardware na FPGA podem ser
de três tipos:
FPGA baseado em SRAM
O mais amplamente utilizado, possuindo vantagens como alta velocidade, ser reprogramável,
com grande capacidade, ricos recursos programáveis e com arquitetura lógica altamente
integrada e de alto desempenho. É volátil, o que significa que retém sua configuração
somente enquanto a tensão de alimentação está presente. Logo, FPGAs com SRAM precisam
ser configurados cada vez que são ligados por uma memória externa, não volátil.
FPGA baseado em antifusível
Com uma capacidade menor, o FPGA antifusível é programável apenas uma vez.
FPGA baseado em �ash
É b d t l i h d EEPROM ( l t i ll bl bl d
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 8/57
Critérios para escolha de um FPGA
O processo de escolha de um FPGA é como qualquer outro processo de tomada de decisão em um projeto.
Primeiro você olha para dentro para coletar todos os requisitos do seu projeto e, em seguida, pondera seus
requisitos por importância. Por exemplo, se a questão mais importante for o custo, isso pode tornar alguns
FPGAs mais atraentes do que outros. Você precisa fazer essa determinação e é isso que o levará a escolher
um FPGA. Portanto, você deve investir algum tempo para entender seu projeto e seus requisitos. Claro, seu
objetivo é encontrar um FPGA que seja a melhor combinação para o seu produto agora e no futuro,
lembrando que é possível atualizar o código do FPGA.
Sua decisão não deve ser meramente baseada em requisitos técnicos, mas também comerciais. Você não
deve escolher um FPGA que tenha muitos recursos ou E/S se esses não forem exigidos por seu projeto.
Para tomar uma boa decisão, é recomendável que se analise pelo menos quatro critérios, os mais comuns
para qualquer projeto de sistema embarcado com FPGA.
A contagem de pinos E/S é o requisito mais fácil para começar. Você deve calcular ou estimar o
número de E/S necessários para o projeto do FPGA. Basicamente, significa quantos pinos você
precisa para conectar o FPGA ao mundo externo. É uma boa ideia criar um diagrama de blocos para
seu FPGA descrevendo todas as funcionalidades e, em seguida, adicionar ao lado de cada bloco o
número de E/S necessários. É sempre uma boa ideia adicionar alguns pinos E/S extras à lista para
É baseado em uma tecnologia chamada EEPROM (electronically erasable programmable read-
only memory) uma memória somente de leitura programável e apagável eletronicamente.
Assim como a SRAM, é reprogramável, mas, ao contrário, não é volátil. A tecnologia é menos
madura do que FPGAs baseados em SRAM, tendo capacidade tipicamente menor.
Número de pinos de E/S 
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 9/57
garantir que você tenha sobressalentes no caso de precisar fazer alterações de projeto no futuro.
FPGAs podem variar em número de pinos E/S, em média, de 100 até 500 pinos digitais.
Existem diferentes categorias de FPGA no mercado e dentro de cada categoria existem diversos
tamanhos de FPGA, em termos de portas lógicas ou recursos. FPGAs grandes custam muito mais do
que FPGAs pequenos, portanto, você deve escolher o menor FPGA em que seu projeto pode caber.
Isso não é uma estimativa fácil de se fazer. As ferramentas de síntese apresentam relatórios que
mostram o número de LUTs e flip-flops necessários para implementar o circuito lógico que foi
descrito, ajudando na escolha do modelo de FPGA adequado ao projeto.
O desempenho de algumas aplicações de hardware exigirá mais ou menos velocidade, que se
estabelece pela frequência de operação do FPGA. Em geral, um FPGA mais rápido custa mais caro.
Todos os fornecedores de FPGAs têm graduação de velocidade para suas diferentes ofertas de
FPGA, e o objetivo nessa escolha é, obviamente, encontrar o FPGA mais barato que possa atender
aos requisitos do projeto.
Para a maioria dos projetos que precisem utilizar FPGA, a temperatura de operação não é um
problema. Mas se o projeto deve atender à indústria espacial, automotiva ou de defesa, esse pode
ser um requisito importante. Levar o FPGA a temperaturas operacionais maiores do que a
temperatura ambiente significa que seu fornecedor de FPGA testou o dispositivo e pode garantir que
ele atenda a esses requisitos estendidos.
Considerações �nais sobre a escolha de um FPGA
Todos estes critérios definirão as possíveis famílias de FPGA e o fornecedor, chegando a um custo por
unidade que fará parte do projeto. Existem quatro fornecedores principais de dispositivos FPGA. Os dois
Número de portas ou elementos lógicos 
Frequência de operação 
Temperatura de operação 
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 10/57
maiores fornecedores são Xilinx e Intel (que adquiriu a Altera). Dois fornecedores de médio porte são Lattice
Semiconductor e Microsemi (que adquiriu a Actel).
Se você se atentar para as diferentes ofertas de produtos FPGA de vários fornecedores, verá que alguns
fornecedores podem oferecer modelos com maior frequência de operação ou blocos especiais que podem
lhe dar uma vantagem no projeto. É sempre bom começar com kits de desenvolvimento que facilitam os
testes, sem perda de tempo com o projeto da placa de circuito impresso, que pode ser bem complicado com
dispositivos maiores. A escolhado fabricante também definirá o ambiente de desenvolvimento, que são
específicos de cada fabricante e bem diferentes entre si. A curva de aprendizado nas ferramentas de um
fabricante costuma definir a escolha do fornecedor do FPGA pela equipe de desenvolvimento, pois em geral
não se quer levar uma equipe a aprender uma nova ferramenta, a não ser que os benefícios sejam muito
atraentes.
O que é um FPGA e como é sua
arquitetura
Abordamos, no vídeo a seguir, o dispositivo FPGA, o seu surgimento e sua arquitetura básica.


09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 11/57
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Módulo 01 - Vem que eu te explico!
Importância das FPGAs
Módulo 01 - Vem que eu te explico!
Memória de con�guração da FPGA

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 12/57
Vamos praticar alguns
conceitos?
Falta pouco para atingir
seus objetivos.
Questão 1
Um dispositivo de lógica programável FPGA SRAM possui uma memória externa que pode ser gravada
por uma interface especial. Essa memória também é conectada aos terminais da FPGA destinados à
inicialização (configuração) dela. 
A respeito dessa memória, é correto afirmar que ela desempenha, para a FPGA, o papel fundamental de
uma
A
memória volátil, para armazenamento de variáveis e parâmetros usados durante a
partida do algoritmo programado no FPGA.
B
memória não volátil, para armazenamento de variáveis e parâmetros usados durante
o funcionamento do algoritmo programado no FPGA.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 13/57
C
memória não volátil, usada durante a inicialização do FPGA para configurar e
estabelecer as ligações entre as unidades funcionais na implementação da lógica
sintetizada.
D memória volátil, para depuração da lógica implementada no FPGA.
E
memória não volátil, usada durante o funcionamento do FPGA para que se possa
inicializar outros dispositivos externos, conforme a lógica sintetizada.
Responder
Questão 2
Avalie as asserções a seguir e a relação sugerida entre elas.
I. O FPGA é um dispositivo que possibilita a concepção exclusivamente de circuitos lógicos
combinacionais
PORQUE
II. consiste em um arranjo de unidades lógicas de natureza configurável, encapsulado em um circuito
integrado.
A respeito dessas asserções, assinale a alternativa correta.
A As asserções I e II são proposições verdadeiras e a II é uma justificativa correta da I.
B
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa
correta da I.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 14/57
2 - Fluxo de projeto de dispositivos
recon�guráveis
C A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
D A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
E As asserções I e II são proposições falsas.
Responder

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 15/57
Ao �nal deste módulo, você será capaz de distinguir as etapas no
�uxo de projeto de dispositivos recon�guráveis.
O mundo da programação para FPGAs tem mudado bastante nos últimos anos. As opções tradicionais para
programar FPGAs são as linguagens de descrição de hardware (HDL). Com as HDLs, é possível descrever a
arquitetura de hardware, o comportamento dos componentes lógicos e as ligações necessárias para que o
circuito realize a funcionalidade especificada pelo projetista. Os principais padrões de HDLs são o Verilog e
o VHDL. Nessa “programação”, que na verdade realiza a descrição do hardware, os componentes têm que
ser trabalhados ao nível de flip-flops e portas lógicas. Assim, criar circuitos em um FPGA sempre foi
considerado uma tarefa para projetistas de chips, algo não muito confortável para programadores.
Assim, é necessário ter atenção na evolução dessas novas ferramentas, que podem ser imprescindíveis em
algum tempo em função da evolução dos dispositivos SOC. No entanto, para configurar FPGAs, ainda não
podemos dispensar as linguagens de descrição de hardware e as ferramentas que se utilizam delas. Vamos
analisar o fluxo de projeto para FPGA com linguagens HDL. Antes, vamos comparar como FPGAs e
microcontroladores executam tarefas em sistemas embarcados.
Comparando o comportamento de FPGAs
e microcontroladores
FPGAs e microcontroladores são frequentemente comparados. Isso é especialmente verdadeiro para
pessoas com experiência em trabalhar com placas como o Arduino ou microcontroladores, como PIC ou
Comentário
Essas barreiras para programadores têm sido diminuídas com a adoção de novas ferramentas por
parte dos fabricantes e de iniciativas de softwares de código aberto para expandir o envolvimento
da comunidade e incentivar mais inovação. A cadeia de ferramentas Vitis da Xilinx e a OneAPI da
Intel estão tentando mudar a forma de se programar para FPGAs que integram processadores
ARM, o SOC — System-on-a-chip (sistemas em um chip), para permitir que uma gama mais ampla
de novos desenvolvedores projete hardware em FPGA usando linguagem C/C++ com uma ampla
quantidade de bibliotecas e recursos, inclusive para aplicações de IA (inteligência artificial).

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 16/57
ARM. FPGAs têm se tornado mais populares recentemente e começaram a aparecer mais nas opções de
projeto de sistemas embarcados.
Antes, se você queria melhorar o desempenho de uma aplicação embarcada, simplesmente comprava ou
esperava por um microprocessador/microcontrolador mais rápido. No entanto, nos últimos anos, o
desempenho dos processadores está em grande parte estagnado com os transistores extras sendo usados
para amontoar mais núcleos em um único chip. Por causa disso, os projetistas começaram a recorrer aos
FPGAs para acelerar as tarefas criando hardware personalizado.
Quando estamos trabalhando com FPGAs, como já sabemos, estamos projetando hardware, não software.
Para deixar isso um pouco mais claro, vejamos algo que poderia ser feito com um FPGA ou um
microcontrolador: ligar um LED ao pressionar um botão.
Microcontrolador
Com um microcontrolador, como na plataforma Arduino, o código para fazer isso leria a entrada do
botão e, se fosse pressionado, ligaria o LED. Caso contrário, desligaria o LED. Isso continuaria
acontecendo continuamente. O problema com isso é que o processador agora está gastando todo o
seu tempo mantendo o LED atualizado com o valor atual do botão.
FPGA
Com um FPGA, seria possível simplesmente conectar o LED e o botão através do FPGA. Como eles
estão conectados, não há loop e não há software; o LED apenas acende quando o botão é pressionado.
Agora, caso deseje-se ligar o LED quando o botão não estiver sendo pressionado:
1. Com um microcontrolador, isso seria possível alterando a condição de teste;
2. No entanto, com um FPGA, bastaria simplesmente inserir uma porta NOT entre o LED e o botão.

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 17/57
Com o microcontrolador, o processador estará totalmente ocupado com essa tarefa trivial, se você não
utilizar as opções de interrupção, é claro.
O que acontece quando você deseja que o microprocessador também faça outra coisa, como ler outras
entradas ou realizar cálculos?
E com FPGA, o que aconteceria se você desejasse ler outras entradas ou realizar cálculos?
Outro recurso poderoso dos FPGAs é que eles podem ler ou gravar cada pino de E/S a cada ciclo de clock.Com um microcontrolador, normalmente você está limitado a ler registros de 8 ou 32 bits que correspondem
Resposta
O processador tem que fazer malabarismos com as tarefas, gastando apenas quantidades finitas
de tempo em cada uma. À medida que a complexidade do código aumenta, a quantidade de tempo
que o processador gasta verificando o botão e atualizando o LED diminui, demorando cada vez
mais para que o LED desligue depois que você pressiona o botão. Isso pode não ser um problema
neste caso. Mas, dependendo da aplicação, aguardar pode não ser uma opção. Imagine esperar
para acionar um airbag em um carro.

Resposta
FPGAs não são assim. Em vez disso, com um FPGA, uma vez que é tudo hardware, o circuito que
você projetou para ler o botão e atualizar o LED irá operar de forma completamente independente
de qualquer outra coisa que você inserir em seu projeto. Ou seja, cada descrição de circuito opera
de forma paralela. Você poderia ter outra parte do FPGA processando alguns cálculos pesados,
mas o LED ainda seria tão responsivo quanto antes.

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 18/57
aos pinos de E/S. Se você precisar verificar o sinal de mais pinos, precisará fazê-lo em vários ciclos, o que
pode não ser o ideal. Essa característica do FPGA torna muito fácil controlar tarefas que exigem muitas E/S,
como matrizes de LED. Também é possível ler e gravar pinos de E/S em taxas muito mais altas.
FPGAs básicas são capazes de velocidades de E/S de até 200MHz;
isso são 200 milhões de leituras ou gravações por segundo.
Comparando isso a uma taxa de alternância máxima de E/S típica do Arduino, de cerca de 3-4MHz (com um
clock de 16MHz), vemos a diferença em desempenho. É claro que maior desempenho tem seu preço. Os
projetistas costumam usar microcontroladores em sistemas embarcados menos exigentes, pois são mais
fáceis de programar, depurar e projetar e, na maioria das vezes, têm menor custo de implementação.
Processo de compilação em FPGAs
Os fornecedores de FPGA fornecem software de projeto que oferece suporte a seus dispositivos no
processo de implementação do hardware. Esse processo envolve pegar uma entrada de projeto
(esquemático ou circuito digital baseado em linguagem de descrição de hardware — HDL) e criar um arquivo
de gravação para nosso FPGA de destino. O software realiza isso em três etapas principais: síntese,
localização e roteamento (place-and-route) e geração do arquivo que contém as informações de gravação
do FPGA (bitstream).
Entrada de projeto (design entry)
Existem dois métodos de entrada de projeto: usando um desenho esquemático e usando um arquivo HDL.
Entrada de desenho esquemático
Com a entrada de projeto esquemático, você desenha seu projeto em seu computador usando portas e fios.
A entrada esquemática é boa porque documenta o projeto em um formato de fácil leitura. Mas os grandes
projetos rapidamente se tornam difíceis de manter. Além disso, os formatos de arquivo são incompatíveis
entre os fornecedores e os HDLs são mais fáceis de parametrizar. Então, muitos usuários de FPGA evitam a
entrada de projetos esquemáticos.
Entrada de projeto HDL
Os fornecedores costumavam ter linguagens proprietárias. Mas então surgiram duas linguagens HDL (VHDL
e Verilog) que rapidamente se tornaram populares. Agora, os fornecedores de FPGAs oferecem suporte
principalmente a essas duas linguagens, que permitiram a portabilidade do código entre fabricantes com
muita facilidade. Aprender um HDL exige certo esforço e este é, provavelmente, o investimento mais
importante que um iniciante terá que fazer ao mergulhar no mundo FPGA.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 19/57
Observe o circuito lógico ao lado, com duas entradas (A e B), duas saídas (R e Q) e com duas portas lógicas:
uma porta OR e uma porta AND. Vê-se que a saída R = A OR B, e saída Q = A AND B. Vamos ver o código
para descrever este circuito em VHDL e Verilog para entendermos a lógica envolvida.
Ficam claras as diferenças entre as linguagens na criação do componente gates com as duas portas
lógicas. Verilog usa a cláusula module enquanto VHDL usa entity com a definição de pinos (port) de entrada
(in) e saída (out). VHDL define a arquitetura do componente gates dentro da definição architecture, entre
begin e end. As atribuições também são diferentes: enquanto Verilog usa =, VHDL usa <=. Por fim, a lógica
AND e OR entre dois bits em Verilog é & e |, respectivamente. Em VHDL, usam-se as palavras and e or,
respectivamente. 
Vamos ver agora a implementação de um flip-flop tipo D.
Com ambas as linguagens, observe como o flip-flop D é expresso por seu comportamento (ou seja, em cada
transição positiva do clock, copia-se a entrada 'd' para a saída 'q'). VHDL e Verilog são chamados de
"linguagens comportamentais" por causa disso. Esses dois exemplos são sintetizáveis (você pode colocá-
los diretamente em um FPGA), mas as linguagens comportamentais também podem produzir projetos não
sintetizáveis, que podem ser simulados, mas não possuem equivalentes em hardware.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 20/57
Síntese
A principal tarefa do software para FPGA, além de facilitar a entrada do projeto, é sintetizar seu projeto. O
que isso significa?
A síntese recebe seu projeto (HDL ou esquemático) e cria uma netlist plana a partir dele. Uma netlist é
apenas uma "lista de redes", conectando portas e flip-flops. Plana significa que a netlist não tem uma
hierarquia; é um grande arquivo com todas as redes do projeto. A síntese pode ser feita pelo software do
fornecedor FPGA (versão gratuita ou não), mas também pode ser feita por software de terceiros (não
gratuito) como o Synplify Pro. As ferramentas pagas são normalmente capazes de fornecer netlists mais
otimizadas do que as ferramentas gratuitas. Normalmente, precisamos apenas das ferramentas pagas para
projetos grandes ou de alta velocidade.
Place-and-route
O place-and-route descreve vários processos nos quais os elementos da netlist são colocados fisicamente e
mapeados para os recursos físicos do FPGA, para criar um arquivo que pode ser baixado no chip FPGA. O
place-and-route pode levar alguns segundos para um pequeno projeto, ou algumas horas para um grande
projeto. O place-and-route é sempre feito pelo software FPGA do fornecedor do FPGA, porque os
fornecedores não publicam informações suficientes sobre a parte interna de seus dispositivos a fim de
permitir que qualquer outra empresa crie o software para place-and-route. Após a síntese e o place-and-
route, a ferramenta tem as informações para gerar um arquivo binário que estará pronto para ser baixado no
FPGA.
Introdução ao ambiente de projeto Xilinx
Vivado
Vivado é o nome de um conjunto de ferramentas da Xilinx, com várias versões, para síntese e análise de
projetos em HDL. Essas ferramentas costumam ser chamadas de EDA (Electronic Design Automation ou
Automação de Design Eletrônico). O Vivado veio substituir o Xilinx ISE, com recursos adicionais para
desenvolvimento de SOCs, permitindo programar e integrar os mais novos FPGAs com processador ARM
embutido no chip. As etapas básicas para criação do projeto e gravação de uma placa com FPGA são:
Os projetos do Vivado são estruturas de pastas que contêm todos os arquivos necessários para um
determinado projeto. Alguns desses arquivos são arquivos fonte criados pelo usuário que descrevem
e restringem o projeto. Mas muitos outros são arquivos de sistema criados pelo Vivado para
Criação de um projeto Vivado 
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 21/57
gerenciar o desenho, simulação e implementação de projetos. Em um projeto típico, você só se
preocuparácom os arquivos fonte criados pelo usuário.
Com o Vivado aberto, clicar em “Create Project” no painel “Quick Start” irá abrir o diálogo da janela
“New Project”. Depois de entrar com o nome e localização do projeto, abre-se uma janela para
selecionar o tipo do projeto (Project Type), que configura certas ferramentas de projeto e a aparência
do ambiente com base no tipo de projeto que você pretende criar. Na maioria das vezes, você
escolherá “Projeto RTL” (RTL Project) para configurar as ferramentas para a criação de um novo
design. RTL significa Register Transfer Language, que é um termo às vezes usado para se referir a
uma linguagem de descrição de hardware como VHDL.
Clicando em next, abre-se a janela para adicionar novos arquivos fontes. Em um típico projeto novo
ou em estágio inicial, você não adicionará nenhuma fonte existente porque ainda não as criou. Mas,
à medida que você completa mais projetos e constrói uma biblioteca de designs validados
anteriormente e conhecidos, você pode optar por adicionar fontes e usá-las em um novo projeto.
A próxima janela determina a adição dos constraints ou restrições. Os arquivos de restrição
fornecem informações sobre a implementação física do design. Eles são criados pelo usuário e
usados pelo sintetizador. As restrições são parâmetros que especificam certos detalhes sobre o
design. Como exemplo, algumas restrições identificam quais pinos físicos no chip devem ser
conectados a quais nós de circuito nomeados em seu projeto. O .xdc é o formato de arquivo usado
para descrever as restrições de projeto, e você precisará criar um arquivo .xdc para sintetizar seus
projetos para uma placa real.
Na janela seguinte, escolhe-se o modelo do FPGA que será usado. Para especificar a peça correta,
você precisa saber a família e o pacote do dispositivo e, de forma menos crítica, os graus de
velocidade e temperatura. Os graus de velocidade e temperatura afetam apenas os resultados da
simulação para fins especiais e não têm efeito na capacidade do sintetizador de produzir circuitos
precisos. Você deve escolher a peça apropriada para o dispositivo instalado em sua placa. Na última
página do Assistente de Criação de Projeto, um resumo da configuração do projeto é mostrado.
Depois de concluir o Assistente de Criação de Projeto, a janela principal do ambiente será exibida.
Esta é a janela principal de trabalho onde você insere e simula seu código, inicia o sintetizador e
grava o arquivo em sua placa. O painel mais à esquerda é o navegador de fluxo que mostra todos os
arquivos atuais no projeto e os processos que você pode executar nesses arquivos. À direita do
navegador de fluxo está a janela do gerenciador de projeto, onde você insere o código-fonte, visualiza
os dados da simulação e interage com o seu projeto. A janela do console na parte inferior mostra um
registro do estado da execução.
Janela do projeto Vivado 
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 22/57
Todos os projetos requerem pelo menos dois tipos de arquivos fonte: um arquivo HDL (Verilog ou
VHDL) para descrever o circuito, e um arquivo de restrições para fornecer ao sintetizador as
informações de que ele precisa para mapear seu circuito no chip de destino.
Depois que o arquivo fonte é criado, ele pode ser simulado. A simulação permite que você trabalhe
com um modelo de circuito, para que você possa verificar seu comportamento antes de implementá-
lo em um dispositivo físico. O simulador permite que você acione todas as entradas do circuito com
padrões variados ao longo do tempo e verifique se as saídas se comportam conforme o esperado
em todas as condições.
Depois que seus arquivos fonte e de restrição estiverem completos, você pode sintetizar o projeto.
No processo de síntese, como já foi mencionado, o código fonte é traduzido em uma “netlist” que
define todos os componentes de circuito exigidos pelo projeto. Você pode iniciar o processo de
síntese clicando em “Run Synthesis” no painel “Flow Navigator”. Quando a síntese está em execução,
você pode selecionar o painel log localizado na parte inferior do “Project Manager” para ver um
registro dos processos em execução no momento. Quaisquer erros que ocorram durante o processo
de síntese serão descritos no registro.
Depois que o design for sintetizado, você deve executar o processo de implementação, nome dado
na ferramenta para o place-and-route. O processo de implementação mapeia o design sintetizado no
chip Xilinx designado no projeto. Clique em “Run Implementation” no painel “Flow Navigator”. Quando
o processo de implementação está em execução, o painel log na parte inferior do “Project Manager”
irá mostrar detalhes sobre quaisquer erros que ocorram.
Editar o projeto 
Simulador do circuito 
Síntese e place-and-route 
Gerar Bitstream 
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 23/57
Depois que o design for implementado com sucesso, você pode criar um arquivo .bit clicando no
“Generate Bitstream” localizado no painel “Flow Navigator”. O processo traduz o design
implementado em um arquivo Bitstream que pode ser gravado diretamente no dispositivo de sua
placa.
Ferramenta para simulação, síntese e
con�guração de FPGAs
No vídeo a seguir, apresentamos a ferramenta Vivado para simulação, síntese e configuração de FPGAs da
Xilinx.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.


09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 24/57
Módulo 02 - Vem que eu te explico!
FPGAs x microcontroladores
Módulo 02 - Vem que eu te explico!
Resumo do processo de compilação

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 25/57
Vamos praticar alguns
conceitos?
Falta pouco para atingir
seus objetivos.
Questão 1
Ferramentas EDA, como o Vivado da Xilinx, ajudam os desenvolvedores no setor de automação de
projeto eletrônico, com as mais recentes possuindo até mesmo algoritmos e técnicas de machine
learning para trazer maior eficiência ao projeto. Qual é o uso básico das ferramentas EDA?
A Comunicação de dispositivos eletrônicos.
B Fabricação de hardware eletrônico.
C Automação industrial.
D Simulação e síntese de circuitos eletrônicos.
E Desenho de circuitos eletrônicos.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 26/57
Responder
Questão 2
Você forneceu a descrição de um circuito em código VHDL para um colega implementar em um FPGA.
Ele então te pergunta qual fabricante de FPGA ele deve escolher em função do código que você
escreveu. Essa pergunta tem sentido? Por quê?
A
Sim, porque a codificação da descrição do hardware em VHDL muda em função do
fabricante.
B
Sim, porque, dependendo do fabricante da FPGA, deverá ser usado Verilog em vez de
VHDL.
C
Não, porque somente pode ser usado código VHDL, independentemente do
fabricante.
D Sim, porque é escolhido o fabricante dependendo do tamanho do código em VHDL.
E Não, porque a descrição de um circuito em VHDL possui portabilidade.
Responder
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 27/57
3 - Circuitos combinacionais e sequenciais
com as ferramentas para FPGA
Ao �nal deste módulo, você será capaz de empregar circuitos
combinacionais e sequenciais com as ferramentas para FPGA.
Vamos reforçar um conceito. Embora as próprias ferramentas, como o Vivado, tenham a função “Program
device”, ou seja, programar o dispositivo, na prática nós não programamos um FPGA. Muitas vezes é
conveniente dizer dessa forma, e não há problema quanto a isso, porqueparece que realmente estamos
programando. Você escreve algum texto, ele é transformado em um arquivo binário e o arquivo binário é
carregado no FPGA. Mas você não está escrevendo um programa.
Você não usa linguagens de programação para criar circuitos, e sim linguagens de
descrição de hardware (HDLs). Descrevemos o comportamento que queremos do
circuito e as ferramentas, como o Vivado, descobrem como realmente implementá-
lo.
Então, a primeira peça que precisamos para descrever circuitos combinacionais e sequenciais em FPGAs é
o código da descrição desses circuitos em uma HDL. Além disso, precisamos das configurações para a

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 28/57
ligação desse circuito com os pinos da FPGA (arquivo de restrições .xdc na ferramenta Vivado), para o
exterior do chip, de forma que o circuito descrito possa ser acionado. Por último, ao criar qualquer circuito
em um FPGA, você terá que descrever um módulo de nível superior, o módulo principal ou de topo. Este é o
módulo cujas entradas e saídas serão as entradas e saídas reais nos pinos do FPGA.
Circuitos combinacionais
Circuitos combinacionais estabelecem uma lógica combinatória. Assim, as saídas dos circuitos lógicos
combinacionais são determinadas apenas pela função lógica do seu estado de entrada atual, em qualquer
instante no tempo. O resultado é que os circuitos lógicos combinacionais não têm realimentação (feedback)
e quaisquer alterações nos sinais aplicados às suas entradas terão um efeito imediato na saída. Em outras
palavras, em um circuito lógico combinacional, a saída depende o tempo todo da combinação de suas
entradas. Assim, um circuito combinacional não tem memória.
Os circuitos lógicos combinacionais são constituídos por portas lógicas básicas NAND, NOR ou NOT, que
são “combinadas” ou conectadas para produzir circuitos mais complexos. Essas portas lógicas são os
blocos (ou células) de construção dos circuitos lógicos combinacionais.
As três maneiras principais de especificar a função de um circuito lógico combinacional são:
Álgebra booleana
Forma a expressão booleana que mostra a operação do circuito lógico para cada variável de
entrada Verdadeira ou Falsa que resulta em uma saída lógica verdadeira ou “1”.
Tabela verdade
Uma tabela verdade define a função de uma porta lógica, fornecendo uma lista concisa que mostra
todos os estados de saída em forma tabular para cada combinação possível de variáveis de
entrada que a porta pode receber.
Diagrama lógico
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 29/57
Esta é uma representação gráfica de um circuito lógico que mostra a fiação e as conexões de cada
porta lógica individual, representada por um símbolo gráfico específico, que implementa o circuito
lógico.
As três representações da função de um circuito lógico são mostradas na imagem a seguir.
Três representações da função de um circuito lógico.
Multiplexadores
O multiplexador digital, abreviado para “MUX”, é um circuito lógico combinacional projetado para comutar
uma das várias linhas de entrada para uma única linha de saída comum pela aplicação de um sinal de
controle. Multiplexadores operam como interruptores rotativos de múltiplas posições de ação muito rápida,
conectando ou controlando múltiplas linhas de entrada chamadas “canais”, uma de cada vez para a saída.
Multiplexadores digitais podem ser feitos de portas lógicas de alta velocidade usadas para comutar dados
digitais ou binários. Veja, na imagem a seguir, a representação e o circuito que estabelece um MUX 2 para 1.
Exemplo
Exemplos de circuitos lógicos combinacionais comuns incluem meio somadores, somadores
completos, multiplexadores, demultiplexadores, codificadores e decodificadores.

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 30/57
Representação e circuito de um multiplexador 2 para 1
Circuitos combinacionais descritos em
VHDL
A lógica combinacional é implementada em VHDL com declarações de atribuição de sinal concorrente ou
com declarações de processo que descrevem o comportamento puramente combinacional, ou seja, o
comportamento que não depende do sinal de sincronismo do clock.
Em VHDL, tanto a atribuição de sinal concorrente quanto as declarações de processo devem ser colocadas
em um corpo de arquitetura, conforme mostrado a seguir.
ARQUITETURA nome_arquitetura OF nome_dispositivo IS 
BEGIN 
<atribuições de sinal concorrentes> 
<instruções de processo> 
<outras instruções concorrentes> 
END nome_arquitetura;
Atribuições de sinais concorrentes
As instruções de atribuição de sinais concorrentes estabelecem valores aos sinais, direcionando a
ferramenta para criar portas simples e conexões lógicas. Veja os diferentes tipos de declarações de
atribuição de sinal concorrente:
Atribuições de sinais simultâneos simples
As instruções de atribuição de sinal simples mostradas no exemplo a seguir criam uma porta AND e
conectam dois nós, respectivamente. Essas instruções estabelecem uma execução simultânea
(concorrente), ou seja, como esperado, a descrição estabelece um hardware com seus circuitos todos
ligados e funcionando ao mesmo tempo.

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 31/57
Esse é um atributo da descrição de hardware que causa estranheza a muitos programadores de sistemas
computacionais quando migram para VHDL. As linhas de instrução devem ser entendidas como uma
execução em paralelo, pois na verdade implementam um hardware.
Atribuições de sinais condicionais
As instruções de atribuição de sinal condicional listam uma série de expressões que são atribuídas a um
sinal de destino após a avaliação positiva de uma ou mais expressões booleanas. O exemplo a seguir
mostra um multiplexador 2 para 1 no qual o valor ent_0 é atribuído para a saída output quando a entrada sel
é igual a '0'; caso contrário, o valor ent_1 é atribuído a output.

 ENTITY simples IS
 PORT
 (
 a, b, e: IN STD_LOGIC;
 c, d: OUT STD_LOGIC
 );
 END simples;
 ARCHITECTURE nome OF simples IS
 BEGIN
 c <= a AND b; -- cria uma porta AND 
 d <= e; -- conecta dois nós
 END nome;
 ENTITY Mux2x1 IS
 PORT
 (
 ent_0, ient_1, sel : IN STD_LOGIC;
 output: OUT STD_LOGIC
 );
 END Mux2x1;
 ARCHITECTURE nome OF Mux2x1 IS
 BEGIN
 output <= ent_0 WHEN sel = '0' ELSE ent_1; 
 END nome;
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 32/57
Quando uma declaração de atribuição de sinal condicional é executada, cada expressão booleana é testada
na ordem em que foi escrita. O valor da expressão que precede uma palavra-chave WHEN é atribuído ao
sinal de destino para a primeira expressão booleana avaliada como verdadeira. Se nenhuma das expressões
booleanas for verdadeira, a expressão após a última palavra-chave ELSE é atribuída ao destino. A seguinte
declaração de atribuição de sinal condicional tem várias alternativas.
q <= 3 WHEN high = '1' ELSE 
    2 WHEN mid = '1' ELSE 
    1 WHEN low = '1' ELSE 
    0;
Nesse exemplo, high, mid e low são sinais de entrada de módulo. Assim:
3 é atribuído a q quando high é '1'. 
2 é atribuído a q quando mid é '1', mas high não é '1'. 
1 é atribuído a q quando low é '1', mas não high e mid são ' 1'. 
0 é atribuído a q quando high, mid e low não são iguais a '1'.
Atribuições de sinais selecionados
As instruções de atribuição de sinais selecionados listam alternativas que estão disponíveis para cada valor
de uma expressão e, em seguida, seleciona umcurso de ação com base no valor da expressão. Você
também pode usar as atribuições de sinais selecionados para criar multiplexadores, como o MUX 4 para 1
mostrado a seguir.

ENTITY Mux4x1 IS
 PORT
 (
 d0, d1, d2, d3: IN STD_LOGIC;
 sel: IN INTEGER RANGE 0 TO 3;
 output: OUT STD_LOGIC
 );
 END Mux4x1;
 ARCHITECTURE nome OF Mux4x1 IS
 BEGIN
 WITH sel SELECT -- Cria um multiplexador 4 para 1
 output <= d0 WHEN 0,
1
2
3
4
5
6
7
8
9
10
11
12
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 33/57
A expressão de seleção (sel), que está localizada entre as palavras-chave WITH e SELECT, seleciona o sinal
a ser atribuído ao sinal alvo. Nesse exemplo, quando o valor da expressão de seleção do multiplexador é 0, a
saída do multiplexador d0 é atribuída ao sinal de saída output. Quando o valor de sel é 1, a saída é d1;
quando sel é 2, a saída é d2; e quando sel é 3, a saída é d3.
Declarações de processo
As declarações process, de processo, incluem um conjunto de instruções sequenciais que atribuem valores
aos sinais. Essas instruções permitem que você execute cálculos passo a passo. As declarações de
processo que descrevem o comportamento puramente combinacional também podem ser usadas para criar
lógica combinacional.
O processo é sensível a um ou mais sinais, chamado de lista de sensibilidade. Assim, uma lista de
sensibilidade contém os sinais que fazem com que as instruções do processo sejam executadas se seus
valores mudarem. Para garantir que um processo seja combinacional, sua lista de sensibilidade deve conter
todos os sinais lidos no processo. O exemplo a seguir mostra instruções de um processo que conta o
número de bits iguais a 1 no sinal p. O sinal p é o único contido na lista de sensibilidade que segue a palavra-
chave process, ou seja, o único sinal ao qual o processo é sensível.

Nesse exemplo, p é declarado como um vetor na declaração da entity, o módulo em VHDL. Cada vez que
 d1 WHEN 1,
d2 WHEN 2,
ENTITY proc IS
 PORT
 (
 p : IN STD_LOGIC_VECTOR (4 DOWNTO 0);
 q : OUT INTEGER RANGE 0 TO 3
 );
 END proc;
 ARCHITECTURE nome OF proc IS
 BEGIN
 PROCESS (p) -- conta o número de bits iguais a 1 no sinal p 
 VARIABLE num_bits : INTEGER;
 BEGIN 
 num_bits := 0; 
 FOR i IN p'RANGE LOOP
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 34/57
passa pelo loop FOR, i é definido para o próximo valor, e p(i) acessa informações do vetor. Se p(i) for igual 1,
a instrução if incrementa a variável num_bits. Depois, num_bits é então atribuída ao sinal q, que também é
declarado na entity.
Arquivos de restrições e módulo principal
Arquivos de restrições
Ao programar um FPGA por meio de um software como o Vivado da Xilinx, você precisa informar ao
software quais pinos físicos no FPGA você planeja usar ou conectar em relação ao código HDL que você
escreveu para descrever o comportamento do circuito.
No mundo do microcontrolador, isso é muito parecido como escrever em um bit do registrador da porta o
valor alto ou baixo para ligar ou desligar um LED. No entanto, em um microcontrolador, muitos desses pinos
tem ligação fixada.
Este não é o caso de um FPGA, em que você pode criar uma interface de hardware
em HDL e então restringir as entradas e saídas correspondentes nessa interface
para, essencialmente, quaisquer pinos que você queira no FPGA, tornando os
FPGAs muito flexíveis para projetos complexos e personalizados.
No entanto, isso não quer dizer que você possa reorganizar fisicamente o layout de uma placa por meio do
software. Fabricantes de placas FPGA, usadas para desenvolvimento de protótipos (kits FPGA), podem
conectar fisicamente alguns dos pinos do FPGA a certos componentes na placa, como rotear algumas das
vias para chaves liga/desliga ou um LED. Você não poderá alterar esses locais físicos, evidentemente.
O arquivo de restrições de design que o Vivado usa é chamado de arquivo XDC.
Atenção
Escrever o próprio arquivo de restrições, para usuários inexperientes, pode ser muito difícil pois
você fica restrito a qual pino do FPGA está conectado a qual local físico na placa; e se você não
sabe onde eles estão e qual padrão de propriedade elétrica eles suportam, pode se tornar muito
frustrante colocar sua placa para funcionar.

09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 35/57
Felizmente, os fabricantes dos kits FPGA disponibilizam os arquivos-mestre XDC. Esses arquivos listam
todos os pinos do FPGA que são roteados para os pinos físicos na placa. Eles são organizados por grupos
de componentes externos na placa para conveniência. Nos arquivos-mestre XDC, os usuários só precisarão
comentar (desabilitar a utilização com #) os pinos que não pretendem usar. A imagem a seguir mostra um
arquivo XDC mestre da placa Basys 3. Essa placa possui, dentre vários componentes, um FPGA da Xilinx da
família Artix-7, modelo XC7A35T-1CPG236C.
Trecho do arquivo XDC mestre da placa Basys 3.
Basicamente, são duas configurações a serem feitas para cada pino do FPGA:
Em geral, a única parte do arquivo XDC que você alterará é o nome do pino externo, depois de get_ports,
circundado por colchetes {} para corresponder ao nome de entrada/saída que você criou no código do
set_property PACKAGE_PIN V17 [get_ports {sw[0]}]
Essa configuração define que o pino V17 será chamado como sw[0] no código HDL. Nessa
placa, existem 16 chaves liga/desliga que recebem o nome sw. Logo, sw[0] é uma dessas
chaves. Usando sw(0) (usando parênteses mesmo) no código HDL, teremos acesso ao valor
binário dessa chave, se ela está ligada ou desligada. Usando sw no código HDL, teremos
acesso aos valores de todas as 16 chaves, semelhante a um vetor em uma linguagem de
programação tradicional.
set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]
Essa configuração define o padrão elétrico utilizado, no caso o padrão CMOS de 3,3 Volts.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 36/57
módulo principal. Outra opção, logicamente, é usar os nomes no módulo principal como descrito no arquivo
XDC. A imagem a seguir mostra a placa Basys 3.
Placa Basys 3.
Módulo principal
Arquivos de descrição de hardware VHDL (.vhd) em um projeto podem ser combinados com outros arquivos
VHDL em um projeto hierárquico. Nesse contexto, teremos um arquivo principal ou de topo e arquivos de
nível inferior na hierarquia. Vejamos um arquivo VHDL que define o comportamento de um multiplexador 2
para 1.

O nome Behavioral foi dado para a arquitetura por opção padrão de nomeá-la com a forma como ela é
descrita, no caso da forma comportamental (Behavioral), com processo sensível às entradas A, B e S. Veja
pelo código que, se a entrada de seleção do multiplexador S é igual a 0, a saída R recebe o valor da entrada
A. Caso contrário, com S = 1, a saída R recebe o valor da entrada B.
library IEEE;
 use IEEE.STD_LOGIC_1164.ALL;
 entity Mux2x1 is
 port( A,B,S: in std_logic;
 R: out std_logic);
 end Mux2x1;
 architecture Behavioral of Mux2x1 is
 begin
 process(A, B, S)
 begin
 if (S='0') then
 R <= A;
 else
 R <= B;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 37/57
Para usar o módulo Mux2x1 em um módulo principal (o módulo cujas entradas e saídas serão as entradas e
saídas reais nos pinos do FPGA), temos que instanciá-lo no módulo principal. Vejamos um arquivo VHDL
que define o comportamento de um módulo principal, chamado deTOP, que usa o módulo Mux2x1.

Veja que, para a instanciação, dentro da cláusula architecture (mas antes da cláusula begin), o módulo
Mux2x1 deve ser definido como um componente do módulo TOP. Dessa forma, a instanciação é feita em
uma única linha com o nome Mux (pode ser qualquer nome, mas deve ser único no código). Nessa linha,
Mux2x1 é o nome do módulo a instanciar e port map define a ligação desse módulo com os sinais ou pinos
utilizados no módulo principal (TOP).
Observe que, pela ordem, a chave sw(0) é ligada à entrada A do Mux, sw(1) à entrada B, e sw(2) à entrada de
seleção S do MUX. O led(0) é ligado a saída R. Os nomes sw e led se referem aos nomes que estão no
arquivo XDC de restrições, permitindo que o módulo TOP interaja com as chaves e led na placa Basys 3.
Arquivos inferiores em uma hierarquia de projeto podem ter outros arquivos em nível mais inferior, que vão
formando blocos maiores de um hardware. Por exemplo, um multiplexador 4 para 1 pode ser formado por
três multiplexadores 2 para 1.
Comentário

library IEEE;
 use IEEE.STD_LOGIC_1164.ALL;
 entity TOP is
 Port(sw: in std_logic_vector (15 downto 0);
 led: out std_logic_vector (15 downto 0));
 end TOP;
 architecture Behavioral of TOP is
 Component Mux2x1 is
 port(A,B,S: in std_logic;
 R: out std_logic); 
 end Component;
 begin
 Mux: Mux2x1 port map (sw(0), sw(1), sw(2), led(0));
 end Behavioral;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 38/57
Circuitos sequenciais
A lógica é sequencial se as saídas em um momento especificado forem uma função das entradas naquele
momento e em todos os momentos anteriores. Todos os circuitos sequenciais devem incluir um ou mais
registradores. As máquinas de estado são especialmente úteis para implementar a lógica sequencial em
sistemas de controle. Outros exemplos de lógica sequencial são contadores, registradores de deslocamento
e temporizadores. A lógica sequencial é implementada em VHDL com declarações de processo. Essas
instruções direcionam a ferramenta para criar circuitos lógicos que são controlados (sincronizados) pelo
sinal de clock.
Implementando registradores
O elemento básico de um registrador é o flip-flop, um registrador de um bit. Abaixo vemos uma das diversas
possibilidades de implementação de um flip-flop tipo D com reset.

Vimos que o comportamento dos circuitos combinacionais não depende do sinal de sincronismo
do clock, e por isso mesmo o sinal de clock não faz parte dos sinais de entrada dos módulos
descritos como circuitos combinacionais, mesmo quando usamos declaração de processo. Mas, a
declaração de processo também pode ser usada na criação de circuitos sequenciais, nesse caso
com o sinal de clock do FPGA sendo parte da lista de sensibilidade do processo.
entity FF_D is
 port( clk, reset, D: in std_logic;
 Q: out std_logic);
 end FF_D;
 
 architecture Behavioral of FF_D is
 begin
 process(clk, reset) -- lista de sensibilidade para os sinais de clock e rese
 begin
 if(reset='1') then
 Q <= '0';
 elsif (clk='1' and clk'event) then 
 Q <= D;
1
2
3
4
5
6
7
8
9
10
11
12
13
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 39/57
Veja que linha elsif (clk='1' and clk'event) then verifica se o evento de clock é de subida para registrar a
entrada D para a saída Q. Pode ser usado rising_edge(clk) no lugar de (clk='1' and clk'event).
Um registrador de deslocamento (shift register) de 4 bits pode ser descrito de forma estrutural a partir da
célula flip-flop D elementar, conforme o código VHDL a seguir. Veja o esquema desse registrador na imagem
a seguir.

Registrador de deslocamento de 4 bits.
Observe que as instanciações dos quatro flip-flop tipo D, nas linhas nomeadas como DFF3, DFF2, DFF1,
DFF0, realizam as ligações vistas na imagem anterior É necessário um sinal auxiliar (signal Q_temp) para
fazer as ligações dos flip-flops e evitar que os 4 pinos de saída Q tenham mais de uma ligação com pinos de
diferentes flip-flops, o que ocasionaria um erro na síntese do circuito.
entity ShiftReg4bits is
 Port ( Din, clk, reset : in STD_LOGIC;
 Q : out STD_LOGIC_VECTOR (3 downto 0));
 end ShiftReg4bits;
 architecture Structural of ShiftReg4bits is
 component FF_D is
 port( clk, reset,D: in std_logic;
 Q: out std_logic);
 end component;
 signal Q_temp: std_logic_vector(3 downto 1);
 begin
 DFF3: FF_D port map (clk, reset, Din, Q_temp(3));
 DFF2: FF_D port map (clk, reset, Q_temp(3), Q_temp(2));
 DFF1: FF_D port map (clk, reset, Q_temp(2), Q_temp(1));
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 40/57
Prática com circuitos combinacionais e
sequenciais na ferramenta Vivado
Assista, no vídeo a seguir, a criação e configuração de circuitos combinacionais e sequenciais com
hierarquia no FPGA.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Módulo 03 - Vem que eu te explico!
Circuitos combinacionais em FPGA – sinais concorrentes
Módulo 03 - Vem que eu te explico!
Circuitos sequenciais em FPGA - processos


09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 41/57

Vamos praticar alguns
conceitos?
Falta pouco para atingir
seus objetivos.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 42/57
Questão 1
A figura a seguir é a representação em circuito lógico da função de um multiplexador 2 para 1. Qual das
opções abaixo mostra a atribuição de sinal correta em VHDL para que a descrição represente este
circuito?
A O <= ((not S and E2) or (S and E1)
B O <= ((not (S and E1) or S and E2))
C O <= ((not S) and E1) or (S and E2)
D O <= not S and E1 or S and E2
E O <= (not S and E1) or (S and E2)
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 43/57
Responder
Questão 1
O processo abaixo, escrito em VHDL, define um flip-flop tipo D com reset. Em que instante o flip-flop
descrito registra a entrada D para a saída Q?
    process(clk, reset) 
     begin 
     if(reset='0') then 
     Q <= '0'; 
     elsif (clk='0' and clk'event) then 
     Q <= D; 
     end if; 
     end process;
A Quando o sinal reset é '1' e clock está no evento de subida.
B Quando o sinal reset é '1' e clock está no evento de descida.
C Quando o sinal reset é '0' e clock está no evento de descida.
D Quando o sinal reset é '0' e clock está no evento de subida.
E Quando o sinal reset está no evento de descida e clock está no evento de subida.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 44/57
4 - Circuitos aritméticos e de controle
com as ferramentas para FPGA
Ao �nal deste módulo, você será capaz de formular circuitos
aritméticos e de controle com as ferramentas para FPGA.
Uma das aplicações mais comuns em circuitos combinacionais são os circuitos que realizam cálculos
aritméticos diversos. As unidades lógicas e aritméticas dos processadores, por exemplo, são baseadas em
circuitos combinacionais para essa finalidade. Circuitos de controle para uma arquitetura, por sua vez, são
baseados em circuitos sequenciais, que possuem uma memória dos estados anteriores do circuito. Uma
das formas mais eficientes de realizar controle em uma arquitetura de hardware é usando máquinas de
estados finitas (FSMs).
Responder

09/05/2022 17:38 Projeto de hardwarereconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 45/57
Circuitos aritméticos em FPGA
A adição é a operação aritmética mais comumente executada em sistemas digitais. Um somador é um
circuito digital que adiciona dois números de N bits e gera um número de N bits, podendo gerar um bit
indicando o estouro (overflow) da soma. A implementação direta de um circuito somador de N bits seria
muito complexa e não escalável. Cada vez que o tamanho do somador fosse alterado, uma nova
implementação deveria ser projetada. Uma abordagem mais simples é criar um somador de N bits a partir
de circuitos de módulos menores, que podem ser replicados e expandidos à medida que o tamanho do
somador aumenta em número de bits. Essa é uma abordagem muito utilizada para a implementação de
circuitos em FPGA.
O processo de adição de dois números de N bits pode ser realizado por uma sequência de N operações
simples de adição de 1 bit. Para construir um somador de N bits, utilizamos dois circuitos distintos: o meio-
somador e o somador completo.
Meio-somador
Um meio de somador de 1 bit adiciona dois operandos de 1 bit, A e B, e produz um resultado de 2 bits. O
resultado pode variar de 0 a 2, o que requer 2 bits para representar. O bit de ordem inferior da soma é
referido como S (soma) e o bit de ordem superior como transporte ou vai-um (carry). A tabela verdade e o
circuito lógico otimizado do meio-somador de 1 bit são mostrados na imagem a seguir. Com a tabela
verdade é mais fácil ver que o circuito realmente realiza a soma de 2 bits com carry.
Circuito lógico e tabela-verdade do meio-somador.
Somador completo
Quando um bit de transporte está disponível, outro somador de 1 bit deve ser usado, pois um meio-somador
de 1 bit não aceita um bit de transporte (vem-um). Um somador completo de 1 bit adiciona três operandos e
gera um resultado de 2 bits: o bit de soma S e o bit de transporte (vai-um). A tabela verdade e o circuito
lógico otimizado do somador completo de 1 bit são ilustrados na imagem a seguir.
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 46/57
Circuito lógico e tabela-verdade do somador completo.
Para estabelecer um somador de N bits em FPGA, precisamos instanciar o meio-somador e somador
completo em um módulo. A seguir você pode examinar esses três códigos:
• Código VHDL do meio-somador

Veja que as portas lógicas OU Exclusivo (XOR) e E (AND) podem ser utilizadas para implementar o circuito
sintetizado correspondente.
• Código VHDL do somador completo

Library IEEE;
 Use IEEE.std_logic_1164.all;
 Entity Meio_Somador is
 Port (A, B: in bit;
 S, Carry: out bit);
 end Meio_Somador;
 Architecture Fluxo_de_dados of Meio_Somador is
 Begin
 S <= A XOR B;
 Carry <= A AND B;
 end Fluxo_de_dados;
Library IEEE;
 Use IEEE.std_logic_1164.all;
 Entity Somador_Completo is
1
2
3
4
5
6
7
8
9
10
11
1
2
3
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 47/57
• Código VHDL do somador
Este código instancia o meio-somador e o somador completo de 1 bit para criar um somador de N bits. Para
isso, vamos usar a declaração generate em um loop FOR.
A declaração generate é usada para criar loops em atribuições simultâneas. Esses loops são muito
diferentes dos loops de software. Suponha que a instrução “for i = 1 to N” seja um loop. No software, 'i' terá
um valor atribuído por vez, isto é, primeiro i = 1, depois no próximo ciclo i = 2 e assim por diante. Já em
VHDL, a lógica implementada para esse loop fará com que ele seja executado em paralelo, criando um
circuito com N instâncias. Além disso, no software, são necessários 'N' ciclos para completar o loop,
enquanto no VHDL o loop será executado em um ciclo.
Normalmente usamos a instrução for generate para descrever o hardware que tem uma estrutura regular e
repetitiva. O trecho de código abaixo mostra a sintaxe geral para a instrução de geração iterativa em VHDL.
<nome_ou_rótulo>: for <variável> in <range> > generate 
-- Instância a ser repetida 
end generate < nome_ou_rótulo>;
Outra forma de usar generate é a instrução if - generate. Isso geralmente é usado dentro de FOR - generate
para contabilizar irregularidades. Por exemplo, no nosso caso de somador, como vimos, o bit menos
significativo é um meio somador e os demais bits são somadores completos (precisam do vem-um ou
carry_in). O código VHDL a seguir descreve esse módulo:

 Port (A, B, Carry_in: in bit;
 S, Carry: out bit);
 end Somador_Completo;
 Architecture Fluxo_de_Dados of Somador_Completo is
 Signal S1, S2, S3: bit;
 Begin
 S1 <= A XOR B;
 S2 <= A AND B;
 S3 <= S1 AND Carry_in;
 S <= Carry_in XOR S1;
C < S3 OR S2
Entity Somador is
 Generic (n: natural);
 Port (A, B: in bit_vector (n-1 downto 0);
 S: out bit_vector (n-1 downto 0);
 Carry: out bit);
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 48/57
Observe que dentro do For - generate, na linha com rótulo Soma_0, a instrução if i=0 generate leva a
instanciação de um meio-somador para o primeiro bit (bit 0) do somador de N bits. Para i maior do que 0, ou
seja, para todos os bits maiores que 0, o código gera um somador completo.
Note também que instrução generic é usada como uma forma local de constante à qual pode ser atribuído
um valor quando instanciamos um componente. Assim, o mesmo código pode criar um somador com n bits,
com n definido pelo módulo que instancia esse somador.
Por fim, veja que em todas as portas, dos três módulos, usamos bit e bit_vector, em vez de std_logic e
std_logic_vector. Bit é um tipo predefinido e só pode ter o valor 0 ou 1, sendo por isso considerado um valor
idealizado. Já std_logic faz parte do pacote std_logic_1164 e fornece modelagem mais realista de sinais em
um sistema digital. É capaz de ter nove valores diferentes. Normalmente dentro de seu código você só vai
usar 0, 1 e Z (alta impedância). Mas U (não inicializado) e X (desconhecido) também são muito úteis ao
modelar o sistema em simulações. Para instanciar esse código no módulo principal usando std_logic,
precisaremos converter, quando necessário, de bit e bit_vector para std_logic e std_logic_vector, e vice-versa,
com instruções to_bit, to_bitvector, to_stdulogic e to_StdLogicVector.
Vejamos este código, em que instanciamos um somador de 8 bits com a instrução generic map(8). As
chaves sw de 0 a 7 e de 8 a 15 são os fatores da soma. Os leds de 0 a 7 são usados para mostrar o
resultado da soma, e o led 8 é usado como o vai-um ou bit de overflow do somador de 8 bits.

 end Somador;
 Architecture Fluxo_de_Dados of Somador is
 Component Meio_Somador is
 Port ( A, B: in bit;
 S, Carry: out bit);
 end Component; 
 Component Somador_Completo is
 Port (A, B, Carry_in: in bit;
bi )
library IEEE;
 use IEEE.STD_LOGIC_1164.ALL;
 entity TOP is
 Port(sw: in STD_LOGIC_VECTOR (15 downto 0);
 led: out STD_LOGIC_VECTOR (15 downto 0));
 end TOP;
 architecture Behavioral of TOP is
 Component Somador is
 Generic (n: natural);
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 49/57
A arquitetura dos FPGAs os torna ideais para a implementação de funções matemáticas, embora a
implementação de seu algoritmo possa exigir um pouco mais de reflexão inicial e modelagem em
ferramentas de nível de sistema, como MATLAB. Fabricantes oferecem IPs (núcleos de propriedade
intelectual), como o Multiplier LogiCORE da Xilinx, que simplificam esse desafio, abstraindo as
especificações do dispositivo FPGA, enquanto mantêm odesempenho máximo necessário e a eficiência de
recursos. O pacote std_logic_arith da biblioteca ieee inclui vários operadores aritméticos e relacionais para
uso com os tipos SIGNED (com sinal) e UNSIGNED (sem sinal), como soma (+), subtração (-), multiplicação
(*), maior (>), maior ou igual (>=) etc.
Circuitos de controle em FPGA
Os elementos de armazenamento, por exemplo, flip-flops ou registradores, são necessários para circuitos
sequenciais. As informações armazenadas nesses elementos podem ser vistas como os estados do
sistema. Se um sistema transita entre um número finito de tais estados internos, então as máquinas de
estados finitas (FSMs) podem ser usadas para projetar o controle do sistema.
O comportamento das máquinas de estados pode ser observado em muitos dispositivos da sociedade
moderna realizando uma sequência predeterminada de ações, dependendo de uma sequência de eventos
com a qual são apresentadas. Exemplos simples são máquinas de venda automática que dispensam um
produto quando uma combinação adequada de moedas é depositada, elevadores que deixam os
passageiros nos andares superiores antes de descer, semáforos e fechaduras que requerem a entrada de
uma combinação de números na ordem correta.
As máquinas de estados são modeladas usando dois tipos básicos de redes sequenciais:
Mealy
Em uma máquina Mealy, a saída depende do estado atual (corrente) e das entradas atuais.
Moore
 Port (A, B: in bit_vector (n-1 downto 0);
 S: out bit_vector (n-1 downto 0);
 Carry: out bit);
 end Component;
Si l A1 bit t (7 d t 0)
10
11
12
13
14
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 50/57
Na máquina Moore, a saída depende apenas do estado atual.
Vamos ver um exemplo de uma máquina de vendas com as seguintes características:
aceita moedas de 5, 10 e 15;
dispensa o produto com o valor 20 ou mais;
se chegar a mais de 20, dispensa o troco, além do produto.
Em geral, desenha-se um diagrama de estados para facilitar a visualização de todos os estados e as
transições a serem representadas. Mas, sem desenhar o diagrama, podemos ver que essa máquina possui
um estado sem moeda (que vamos chamar de S0), e estados em que ela possui valores em moeda que são
a soma dos valores que recebe, considerando que a partir de 20 ela dispensa o produto e retorna ao estado
inicial S0. Assim, podemos ver que os estados possíveis, além do sem moeda, são com valores 5, 10, 15, 20,
25 e 30. Vamos nomear esses estados como S5, S10, S15, S20 e S25 e S30, respectivamente.
Para representar esta FSM em VHDL, o mais comum é descrever dois processos: um, sensível ao clock, que
promove a transição entre estados, e um segundo processo, sensível à transição entre os estados, que
estabelece a saída. O código a seguir mostra a descrição dessa FSM no modelo Moore. Observe os
comentários no código para detalhes da implementação.

entity Maquina_venda is
 Port ( clk, reset : in STD_LOGIC;
 moeda : in STD_LOGIC_VECTOR(1 downto 0);
 produto : out STD_LOGIC;
 troco : out STD_LOGIC_VECTOR(1 downto 0));
 end Maquina_venda;
 architecture Behavioral of Maquina_venda is
 type estado is (S0,S5,S10,S15,S20,S25,S30);
 signal S: estado := S0;
1
2
3
4
5
6
7
8
9
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 51/57
Prática com circuitos aritméticos e de
controle na ferramenta Vivado.
No vídeo a seguir, abordamos a criação e configuração de circuitos aritméticos e de controle no FPGA.
Vem que eu te explico!
Os vídeos a seguir abordam os assuntos mais relevantes do conteúdo que você acabou de estudar.
Módulo 04 - Vem que eu te explico!


 begin
 Process(clk,reset)
 begin
 if(reset = '1')then
 S <=S0;
10
11
12
13
14
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 52/57
Desa�os para implementar operações aritméticas em FPGAs
Módulo 04 - Vem que eu te explico!
Máquinas de estado em sistema de controle

Falta pouco para atingir
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 53/57
Vamos praticar alguns
conceitos?
seus objetivos.
Questão 1
Existe a possibilidade de, a partir de uma tabela verdade de uma função lógica combinacional, como a
de um somador completo dado na tabela abaixo, estabelecer o código VHDL comportamental da
função, sem o conhecimento do circuito.
Observe o processo abaixo, que estabelece o comportamento em função da tabela verdade.
begin process (A, B, vem-um) 
begin 
if (A=’0’ and B = ‘0’ and vem-um = ‘0’) then 
S <= '0'; 
C <= '0'; 
elsif ((A=’0’ and B = ‘0’ and vem-um = ‘1’) or (A=’0’ and B = ‘1’ and vem-um = ‘0’) or (A=’1’ and B = ‘0’ and 
vem-um = ‘0’)) then 
S <= '1'; 
C <= '0'; 
elsif ((A=’1’ and B = ‘0’ and vem-um = ‘1’)) then ← 
S <= '1'; 
C <= '1'; 
else 
S <= '0'; 
C <= '1'; 
end if; 
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 54/57
end process; 
end Behavioral; 
A linha marcada com uma seta (←) tem um erro de implementação. Como deveria ser essa instrução?
A elsif ((A=’0’ and B = ‘1’ and vem-um = ‘1’)) then
B elsif ((A=’1’ and B = ‘1’ and vem-um = ‘0’)) then
C elsif ((A=’0’ and B = ‘0’ and vem-um = ‘1’)) then
D elsif ((A=’1’ and B = ‘0’ and vem-um = ‘0’)) then
E elsif ((A=’1’ and B = ‘1’ and vem-um = ‘1’)) then
Responder
Questão 2
Você foi designado para implementar uma máquina de estados finita (FSM) em FPGA para controlar
uma máquina de vendas. A máquina de vendas recebe moedas de 5, 10 e 25, dispensando o produto
quando recebe pelo menos o valor 20. Quantos estados você deve descrever para essa FSM, contando
com o estado inicial, sem moeda recebida?
A 5
09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 55/57
Considerações �nais
Verificamos as características mais importantes dos dispositivos FPGA e a ferramenta profissional Vivado
para descrever e sintetizar o hardware para esses dispositivos usando VHDL, incluindo exemplos de
circuitos combinacionais e sequenciais mais importantes.
B 6
C 7
D 8
E 9
Responder


09/05/2022 17:38 Projeto de hardware reconfigurável com FPGA
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html# 56/57
Podcast
No podcast a seguir, abordamos as características dos FPGAs e o que eles oferecem para a
melhora no desempenho de sistemas.
00:00 11:38
1x

Referências
D'AMORE, R. VHDL - Descrição e Síntese de Circuitos Digitais. 2. ed. Rio de Janeiro: LTC, 2012.
FLOYD, T. Sistemas Digitais: Fundamentos e Aplicações, 9. ed. Porto Alegre: Bookman, 2011.
OLIVEIRA, A. S.; ANDRADE, F. S. Sistemas Embarcados - Hardware e Firmware na Prática. 1. ed. São Paulo:
Érica, 2010.
VAHID, Frank. Sistemas Digitais - Projeto, Otimização e HDLs. Porto Alegre: Bookman, 2011.
Explore +
Veja a aplicação de FPGA em uma plataforma de simulação para estudos de transitórios eletromagnéticos
no artigo: Simulação de transitórios eletromagnéticos em tempo real via FPGA, de Felipe Rafael Farias de
Sá, Alexandre Cunha Oliveira e Washington Luiz Araujo Neves.
Veja o desenvolvimento de estudo sobre trajetória de robôs usando FPGA no artigo: Execução de Self-
Organizing Maps em FPGA aplicada ao cálculo de trajetória de deslocamento de robôs, de Kenny Shogo
Nakamura, Alan Belém Santos e Miguel Angelo de Abreu de Sousa.
Veja a prototipação de videogame em FPGA no artigo: Uno Raid: prototipação em FPGA de um vídeo game
desenvolvido em linguagem VHDL, de Laura Quevedo Jurgina, Arthur Piccoli, Ítalo Nolasco Ramos, Rafael
Iankowisk Soares e Leomar Soares da Rosa Junior.
https://stecine.azureedge.net/repositorio/00212ti/02750/index.html

Continue navegando