Baixe o app para aproveitar ainda mais
Prévia do material em texto
Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD CAPÍTULO 13 DISPOSITIVOS LÓGICOS PROGRAMÁVEIS Dispositivos Lógicos Programáveis – DLP (Programmable Logic Devices – PLD) são circuitos integrados que podem ser configurados para implementar circuitos digitais, capazes de abranger desde funções lógicas básicas até sistemas complexos como processadores e controladores, e recentemente até processadores de múltiplos núcleos. O uso de DLP permite a implementação de sistemas digitais em um único circuito integrado. Ao se implementar sistemas em um chip, asseguram-se várias vantagens: Elevação de confiabilidade: menor número de soldas e roteamento em placas de circuito impresso, portanto menos susceptibilidade à falhas. Redução de área: menor número de componentes implica em menor área, o que por sua vez permite a obtenção de produtos finais menores. Proteção de propriedade intelectual: dificuldade maior em engenharia reversa. Menor consumo de energia: menor número de componentes e utilização de componente mais avançado propricia menor consumo de energia. Redução de custo: combinação dos fatores acima implica em menor custo final. Além dos Dispositivos Lógicos Programáveis poderem ser utilizados no produto final, também podem ser utilizados durante o desenvolvimento. Havendo erro detectado em alguma fase do projeto, basta uma nova programação. A desvantagem dos Dispositivos Lógicos Programáveis reside no seu custo, ainda não otimizado para produção em larga escala. Nesse caso, o uso de circuitos integrados dedicados se torna a melhor solução econômica. Ainda assim, o DLP pode ser usado durante o desenvolvimento do produto. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD 13.1 ARRANJOS LÓGICOS PROGRAMÁVEIS Funções lógicas podem ser implementadas com portas lógicas básicas, com multiplexadores e também com memórias ROM. Considere novamente a memória ROM da Figura 14.9, reapresentada agora como Figura 13.1. A saída 00 do decodificador pode ser vista como termo 01 AA . Da mesma forma, a saída 01 corresponde ao termo 01AA , a saída 10 equivale ao termo 01 AA e finalmente a saída 11 corresponde ao termo 01AA . Em outras palavras, cada saída do decodificador corresponde à um mintermo. Desta forma, a saída D3 é dada por 0101013 AAAAAAD , que pode ser simplificado em 013 AAD . Isto é possível, pois se 01 AA ou 01AA ou 01 AA forem 1, a saída será 1. Observa-se então que os diodos perfazem uma função OU. Seguindo o mesmo raciocínio, tem-se 001012 AAAAAD , 0101011 AAAAAAD e 010101010 AAAAAAAAD . Figura 13.1 – Implementação de funções usando memória ROM 4x4. Desta forma, para implementar uma função com 8 variáveis, necessita-se de um decodificador de 8 entradas. O número de saídas da memória corresponde ao número de funções que podem ser implementadas. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD 13.1.1 Arranjo Lógico Programável – PLA A implementação de função por meio de memória ROM não é otimizada pois cada linha de saída do decodificador corresponde à um mintermo. Isso pode se tornar complexo para memórias maiores. Como exemplo, uma memória com 10 linhas de endereço apresenta 210 = 1024 mintermos. Uma solução mais adequada seria combinar esses mintermos, de acordo com a função a ser implementada. A Figura 13.2 apresenta essa solução, implementando as mesmas funções da Figura 13.1. Essa estrutura recebe o nome de Arranjo Lógico Programável – PLA (Programmable Logic Array). Figura 13.2 – Implementação de funções usando arranjos E e OU. Assim, a função 010101013 AAAAAAAAF requer 0A e 1A , onde 0A é dado pela primeira linha horizontal do circuito e 1A é dada pela segunda linha horizontal do circuito. Sendo 00 A , então 10 A , a primeira linha horizontal do circuito permanece em nível alto através do resistor ligado em Vcc. Se ocorresse 10 A , então 00 A , e a linha horizontal tornaria 0, pois o diodo laranja ligado a ela conduziria. Seguindo o mesmo princípio, obtém-se 1A , 0A , e 1A na segunda, terceira e quarta linhas horizontais, respectivamente. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD A quinta linha horizontal é dada por 01AA , obtida pelos diodos ligados em 1A e 0A . Isso implica que somente 01 A ( 11 A ) e 10 A mantém a linha em nível alto. Isso implica que houve uma operação E entre 1A e 0A . Da mesma forma há uma operação E entre 0A e 1A na última linha horizontal. Houve dessa forma o estabelecimento de um arranjo E. Assim, dispondo de entre 0A , 0A , 1A , 1A , 01AA e 01 AA , podem-se implementar 013 AAF , 02 AF , 01011 AAAAF e 010 AAF através do arranjo OU. Com o conceito de arranjos E e OU, o circuito equivalente é dado pela Figura 13.3. A1 A0 F3 F2 F1 F0 A0 A1 A0 A1 A1A0 A1A0 Arranjo OU Arranjo E Figura 13.3 – Equivalência de arranjos E e OU em uma PLA. As Figura 13.1 e Figura 13.2 utilizam diodos para implementar as conexões. Entretanto, como visto no capítulo anterior, esses diodos podem ser substituídos por conexões com transistores bipolares ou transistores MOS. As estruturas podem ser igualmente implementadas por PROM e EPROM. A Figura 13.4 apresenta a representação simplificada da estrutura da Figura 13.2, em que os pontos representam as conexões. Isto facilita a visualização das funções implementadas. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD Figura 13.4 – Representação simplificada da estrutura da Figura 13.2. 13.1.2 Arranjo Programável Lógico – PAL Na estrutura da PLA existem dois arranjos que podem ser programados: E e OU. Essa flexibilidade na verdade acaba sendo inconveniente por não ser prática. Em 1978 a empresa Monolithic Memories lançou o Arranjo Programável Lógico – PAL (Programmable Array Logic). Na PAL, o arranjo OU é fixo e os fusíveis são empregados no arranjo E, como na Figura 13.5. Figura 13.5 – Estrutura básica de uma PAL. Desta forma o usuário faz a programação somente do arranjo E. Como exemplo, a função BABABAY pode ser implementada mantendo-se intactos os fusíveis F1F2 (para gerar BA ) e F7F8 (para gerar BA ), e queimam-se os fusíveis F3F4F5F6. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD A Figura 13.6 apresenta uma representação simplificada da PAL da Figura 13.5, com a implementação da função BABABAY . Os X vermelhos representam os fusíveis que são mantidos intactos. Assim, na porta E superior são feitas as conexões gerar BA , e na porta E inferior é gerado BA . Figura 13.6 – Representação simplificada de uma PAL. As PAL naturalmente têm uma quantidade maior de entradas e saídas, como exemplificado pela Figura 13.7 que pode implementar 4 funções de entradas. Observe que há uma saída realimentada, para implementação de funções mais complexas. Figura 13.7 – PAL genérica de 4 entradas e 4 funções. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD 13.2 DISPOSITIVOS PROGRAMÁVEIS SEQUENCIAIS 13.2.1 Arranjo Lógico Genérico – GAL Uma variação da PAL, chamada Arranjo Lógico Genérico – GAL (Generic Array Logic) foi criada pela Lattice Semiconductor e é diferente da PLA por usar EPROM no lugar de PROM, o que lhe permite a capacidade de reprogramação. A GAL também incorpora célula de saída programável, chamada de Macrocélula Lógica de Saída – OLMC (Output Logic Macro Cell) que permite a implementação de várias configurações de saída, como mostrado pelo quadro vermelho da Figura 13.8. Figura 13.8 – Macrocélula lógica de saída de uma GAL. Essa macrocélula incorpora um flip-flop, permitindo assim a obtenção de registro. Adicionalmente o pino E/S pode funcionar como entrada ou saída. Através das linhas de programação S1 e S0 assim como através da funções implementadas podem-se obter várias funções e vários modos de operação para a célula. 13.2.2 Dispositivos Lógicos ProgramáveisComplexos - CPLD Dispositivos Lógicos Programáveis Complexos – CPLD (Complex Programmable Logic Devices) são implementados a partir de estruturas similares a GAL em um único circuito integrado, juntamente com uma matriz de interconexões programáveis, e blocos de controle de entrada e saída. Cada GAL passa a se chamar Bloco Lógico ou Bloco Funcional. A Figura 13.9 apresenta a estrutura típica de um CPLD. Como se pode observar pela figura, a matriz de conexões programável é capaz de interconectar a entrada ou saída de qualquer Bloco Lógico na entrada de qualquer outro Bloco Lógico. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD Bloco Lógico Bloco Lógico Bloco Lógico Bloco Lógico Matriz de Interconexões Programáveis Bloco Lógico Bloco Lógico Bloco Lógico Bloco Lógico Entrada/ Saída Entrada/ Saída Figura 13.9 – Arquitetura típica de um CPLD. Um exemplo de CPLD é a família Altera MAX 7000, com 2500 portas lógicas e com a programação feita através de E2PROM. Outros exemplos são famílias CoolRunner-II e XC9500XL da Xilinx. Cada fabricante, ou modelo, tem suas características próprias, mas a estrutura é basicamente a mesma. As variações predominantes ocorrem nos tipos de flip- flops (JK, T, D e RS) e nos arranjos lógicos para a implementação das funções. A Figura 13.10 apresenta a estrutura de uma macrocélula ou bloco lógico de uma CPLD. Pode-se observar que apesar de mais complexa que a estrutura de uma GAL, ainda preserva o mesmo princípio. Com base no roteamento dos multiplexadores, podem-se implementar várias funções e mesmo interconectar mais de um bloco lógico para perfazer uma função. Figura 13.10 – Estrutura de um Bloco Lógico de um CPLD. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD Ainda com relação a Figura 13.10, pode-se observar que é possível a utilização de um set/reset global ou gerado a partir das entradas lógicas. O mesmo vale para o sinal de clock. 13.2.3 Arranjo de Portas Programável em Campo – FPGA O Arranjo de Portas Programável em Campo – FPGA (Field Programmable Gate Array) foi lançado em 1985 pela empresa Xilinxm com a família XC2000. Logo em seguida surgiram as famílias XC3000 e XC4000, que deram caminho para as famílias Spartan e Virtex. Outros fabricantes também lançaram seus produtos, mas o conceito é basicamente o mesmo entre todos. A Figura 13.11 apresenta a estrutura típica de uma FPGA. As conexões com os Blocos de Entrada/Saída foram omitidos por simplicidade. Podem-se observar os Blocos Lógicos e os Blocos de Entrada/Saída, que são programáveis, similares a um CPLD. Entretanto, a grande diferença está na presença da Matriz de Chaveamento, inexistente no CPLD, e que também é programável. Bloco Lógico Bloco Lógico Matrix de Chaveamento Matrix de Chaveamento Bloco Lógico Bloco Lógico Matrix de Chaveamento Matrix de Chaveamento Matrix de Chaveamento Matrix de Chaveamento Matrix de Chaveamento Matrix de Chaveamento Matrix de Chaveamento Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Bloco E/S Figura 13.11 – Estrutura típica de uma FPGA. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD A Figura 13.12 ilustra o posicionamento da Matriz de Chaveamento na estrutura da FPGA. Esse bloco oferece a grande vantagem e flexibilidade da FPGA, pois permite o roteamento dos sinais em qualquer direção, como representado pela Figura 13.13. As chaves são implementadas por meio de transistores. Além dos sinais que transitam pela Matriz de Chaveamento há também as linhas verticais e horizontais de sinais diretos. Essas linhas servem para conduzir sinais rápidos, sinais globais ou sinais que não precisam ser roteados. Bloco Lógico Bloco Lógico Bloco Lógico Bloco Lógico Matrix de Chaveamento Figura 13.12 – Posicionamento da Matriz de Chaveamento. Figura 13.13 – Chaves da Matriz de Chaveamento. A possibilidade de programar o roteamento dos sinais dentro da Matriz de Chaveamento permite a condução de sinais dentro da FPGA de forma mais eficiente e bem mais versátil do que a Matriz de Interconexões Programáveis do CPLD (Figura 13.9). A Figura 13.14 ilustra a estrutura interna de um Bloco Lógico da família Xilinx XC4000. Como se pode observar, há 16 multiplexadores e três tabelas de valores. As tabelas de valores permitem a implementação de qualquer função lógica, sendo duas tabelas de 4 entradas e uma tabela de 3 entradas. A função lógica é obtida através de do armazenamento da tabela verdade em uma memória. Os multiplexadores executam o roteamento interno dos dados e assim configuram o Bloco Lógico. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD G1 FF D/T S R Q M U X Tabela de Valores Tabela de Valores Tabela de Valores M U X M U X M U X M U X M U X M U X M U X Controle SR M U X Controle SR M U X MUXMUX MUXMUX EC FF D/T S R Q M U X EC M U X 1 1 G2 G3 G4 F1 F2 F3 F4 K X XQ Y YQ C1 C2 C3 C4 Figura 13.14 – Bloco Lógico de uma FPGA da família Xilinx XC4000. Os multiplexadores e as tabelas de valores, através de suas programações, determinam as operações e as funções de cada bloco lógico. A matriz de chaveamento por sua vez faz as interconexões destes blocos. As configurações da matriz de chaveamento, dos multiplexadores e das tabelas de valores ficam armazenadas em uma memória. Tipicamente uma memória RAM. Assim, toda vez que a FPGA for energizada, sua memória deve ser carregada. A solução típica é carregar a memória da FPGA através de uma memória E2PROM ou Flash, ou de um periférico, toda vez que o sistema for energizado. O fato da FPGA perder sua programação pode ser visto como vantagem, pois isso deixa a FPGA pronta para ser reprogramada. Por outro lado também é visto como uma desvantagem, pois precisa ser recarregada. Adicionalmente, os dados armazenados na memória externa podem ser facilmente copiados por terceiros. Uma possível solução é o uso de criptografia (Altera e Xilinx oferecem a possibilidade de criptografia AES de 256 bits). Outra possibilidade é armazenar a programação da FPGA em uma memória Flash interna (Microsemi ProAsic 3 e Lattice XP2). Alguns fabricantes (MicroSemi and Actel) oferecem também a possibilidade de utilizar uma memória PROM interna. Finalmente, existem também as opções de FPGA com memória Flash no lugar da memória RAM. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD Algumas FPGA já incorporam a capacidade de serem reprogramadas “ao vivo”, isto é, sem a perda de energia. Isto permite o desenvolvimento de computação reconfigurável ou sistemas reconfiguráveis, em que se adequam às atividades a serem executadas momentaneamente. Em 2010 a Xilinx introduziu o conceito de Sistema Programável em um Chip (Programmable System on a Chip) através da família Zynq 7000. Há um microprocessador ARM dual-core de 32 bits, memória e interface de entrada/saída. Ao incorporar um processador, além do processamento em hardware, passa-se também a ter o processamento por software, aumentando assim as aplicações de FPGA. Essa integração de componentes permite implementar todo o sistema em um único chip, permitindo assim redução na dissipação de potência, redução de volume, elevação da confiabilidade e consequente redução de custos. A família Altera Arria V também tem um processador dual-core ARM Cortex-A9 e a família Actel SmartFusion incorpora um processador ARM Cortex-M3, além de periféricos analógicos como conversores AD e DA. Uma forma alternativa de se utilizar um processador em FPGA é através da sua implementação através da estrutura da FPGA, como Nios II, MicroBlaze e Mico32. Nesse caso o processador é feito utilizando a estrutura da FPGA. Da mesma forma, há FPGA com memória RAM, porém em outros, a memóriaé obtida pela utilização dos registradores dos blocos lógicos. Além de conversores AD e DA, alguns fabricantes já oferecem blocos analógicos programáveis, e mesmo sistemas analógicos completos. Em função do elevado número de programações em uma FPGA, torna-se essencial o uso de ferramentas de software para fazer a seleção das conexões da matriz de chaveamento, dos multiplexadores e dos blocos de entrada e saída. Essas ferramentas cuidam da determinação de quais conexões serão efetivadas para se implementar as funções/operações determinadas pelo projetista. Assim, o projetista se preocupa com seu projeto e não como ele é implementado no FPGA. Ocasionalmente, o projetista pode usar diretivas da ferramenta de programação para otimizar determinados parâmetros do projeto, ou para atingir condições limitantes do circuito, como por exemplo, velocidade de operação. Notas de Aula – ELTD01 Prof. Tales C Pimenta, PhD 13.3 DISPOSITIVOS LÓGICOS PROGRAMÁVEIS EM VERILOG Memórias utilizando Verilog. 13.4 EXERCÍCIOS 1. Utilizando uma ROM, como na Figura 13.1, implemente as seguinte funções: a. 01010 AAAAD b. 01011 AAAAD c. 012 AAD d. 013 AAD 2. Implemente as mesmas funções do exercício anterior, porém usando uma PLA, como na Figura 13.2 ou Figura 13.4. 3. Implemente as funções do primeiro exercício, porém usando uma PAL, como na Figura 13.7. 4. Utilizando a PAL da Figura 13.7, implemente as seguintes funções: a. BABAX b. ABBAY c. ABCDCBDCAZ d. CBAABDCBAW 5. Utilizando a PAL da Figura 13.7, implemente a função CDBCBAABDCBAF . 6. Utilizando a GAL da Figura 13.8, implemente BABAX . 7. Utilizando a GAL da Figura 13.8, implemente um flip-flop T.
Compartilhar