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