# Dispositivo lógico programável

Um dispositivo lógico programável (Programmable logic device - PLD) é um componente eletrônico utilizado para construir circuitos digitais.
Ao contrário de uma porta lógica, que tem uma função fixa, um PLD tem uma função indefinida quando do seu fabrico. Antes de se utilizar um PLD num circuito, este deve ser programado.

## Usando a ROM como um PLD

Antes das PLD's serem inventadas, as memórias ROM foram utilizadas para várias funções lógicas combinatórias arbitrárias com um certo número de entradas. Consideramos uma ROM com m entradas (Linhas de endereço) e n saídas (Linhas de Dados). Quando usadas como memória, as ROM contêm $2^{n}$ palavras de n-Bits cada. Agora imagine que as entradas são ligadas não a um endereço M-Bits mas sim a M-sinais lógicos independentes. Teoricamente irão existir $2^{m}$ funções boleanas possíveis destes m sinais, mas a estrutura da ROM permite apenas n destas funções nos pinos de saída. A ROM torna-se equivalente a n de circuitos lógicos independentes, cada qual gerando um função das m entradas.
A vantagem em usar ROMs desta forma é que qualquer função concebível com m entradas pode aparecer em qualquer uma das n saídas, tornando o dispositivo lógico disponível para aplicações mais abrangentes. Também as PROMs (Rom programavel), EPROMs (PROM apagável)e as EEPROMs (PROM apagável eléctricamente) podem ser programadas utilizando um programador PROM comum sem requisitos especializados de Hardware e Software.
No entanto há algumas desvantagens:
* Normalmente são mais lentas que os circuitos lógicos dedicados;
* Não dão uma cobertura segura para transmissões lógicas assíncronas;
* Consomem mais energia e devido a pequena fracção utilizada da sua capacidade levam uma ineficiência do espaço em uso.
Por si só não podem ser utilizadas para lógica sequencial, porque não contém flip-flops. Um registo TTL externo foi utilizado para projectos sequenciais tais como máquinas de estados.
EPROMs comuns, por exemplo 2716, continuam a ser utilizadas algumas vezes desta forma como passatempo de técnicos de circuitos electrónicos. Esta utilização algumas vezes é chamada de "PAL dos pobres".

## Primórdios da lógica programável

Em 1970, a Texas Instruments desenvolveu um circuito integrado programável por máscara baseado na memória associativa da IBM. Este componente, o TMS2000 era programado alterando-se a camada de metal durante a fabricação. O TMS2000 tinha até 17 entradas e 18 saídas com 8 flip-flops JK como memória. A Texas criou o termo Programmable Logic Array (PLA) para este dispositivo.
Em 1973, a National Semiconductor introduziu um dispositivo PLA programável por máscara (DM7575) com 14 entradas e 8 saídas sem registradores de memória. Foi mais popular que o da Texas, mas o custo de fazer a máscara de metal limitou seu uso. Este dispositivo foi significativo porque era a base para o array lógico programável em campo (field programmable logic array) produzido pela Signetics em 1975, o 82S100. (A Intersil na realidade adiantou-se à Signetics mas o baixo aproveitamento arruinou seu dispositivo).
Em 1971, a General Electric (GE) estava desenvolvendo um dispositivo lógico programável baseado na nova tecnologia PROM . Este dispositivo experimental era melhor em relação ao ROM da IBM por permitir lógica multiníveis. A Intel tinha acabado de introduzir a PROM apagável por ultravioleta com gate flutuante e os pesquisadores da GE incorporaram esta tecnologia. O dispositivo da GE foi o primeiro PLD regravável, precedendo a EPLD da Altera por mais de uma década. A GE obteve muitas das primeiras patentes em dispositivos lógicos programáveis.
Em 1974 a GE fez um acordo com a Monolithic Memories para desenvolver um dispositivo lógico programável por máscara incorporando as inovações da GE. O dispositivo foi chamado 'Programmable Associative Logic Array' ou PALA. O MMI5760 foi finalizado em 1976 e podia implementar circuitos multiníveis ou sequenciais de mais de 100 portas lógicas. O dispositivo era apoiado por ambiente de projeto da GE onde as equações booleanas eram convertidas em padrões para a máscara do dispositivo. Este componente nunca chegou a ser comercializado.

## PAL - (Matriz lógica programável)

A MMI introduziu um dispositivo em 1978. A arquitetura era mais simples que o FPLA Signetics porque omitia a matriz programável OR. Isto tornava os componentes mais rápidos, menores e mais baratos. Estavam disponíveis em encapsulamento DIP de 20 pinos 300mil enquanto que as FPLA vinham em encapsulamentos de 28 pinos 600mil. O manual da PAL desmistifica o processo de construção. O software de design PALSM converte equações booleanas de engenharia em padrões fusiveis necessários para programar o componente. Os componentes PAL rapidamente foram produzidos por National Semiconductors, Texas Instruments e AMD. Após a MMI ter êxito com a PALs de 20 pinos, a AMD introduziu a PAL de 24 pinos 22V10 com funcionalidades adicionais. Após comprar MMI EM 1987, a AMD consolidou a operação com Vantis, e este negócio foi comprado por Lattice Semiconductor em 1989.

## GALs (generic array logic)

Uma invasão das PAL foi a GAL inventada pela Lattice semiconductor em 1985. Este componente tem as mesmas propriedades lógicas das PAL mas podem ser apagadas e reprogramadas. A GAL é muito útil no estágio de prototipagem de um projecto, quando alguns erros lógicos podem ser corridos pela reprogramação. As GAL podem ser programadas e reprogramadas usando um programador PAL ou usando uma técnica de um circuito embutido em alguns chips.
Um componente similar, o PEEL (programmable electrically erasable logic), foi produzido pela ICT (International CMOS Technology)

## CPLDs

As PALs e GALs estão disponíveis somente em tamanhos pequenos, equivalentes a algumas centenas de portas lógicas. Para circuitos lógicos maiores pode-se usar Complex PLD ou CPLDs. Este contém o equivalente a muitas PALs ligadas por interconexão programadas, tudo num circuito integrado. Os CPLDs podem substituir milhares ou até centenas de milhares portas lógicas. Algumas CPLDs são programadas usando o programador PAL, mas este método torna-se inconveniente para dispositivos com centenas de pinos. O segundo método de programação é soldar o componente à sua placa de circuito impresso, e depois ligar um cabo de série de dados ao PC. O CPLD contém um circuito que descodifica os dados e configura-o para realizar a função lógica específica. Cada fabricante tem um nome proprietário para este sistema de programação. Por exemplo, a Lattice Semicondutor chama-lhe "programação in-system". No entanto este sistema proprietário começa a abrir caminho para uma normalização através da Joint Test Action Group (JTAG).

## FPGA (field programmable gate array)

Enqunto as PAL's se foram desenvolvendo para GAL's e CPLD's, uma linha de desenvolvimento separado ocorreu. Este tipo de componente é baseado na tecnologia gate array (porta matriz) e é chamado de field programmable gate array (FPGA). Os primeiros exemplos de FPGA's foram a matriz 82s100 e a sequela 82s105 produzido pela Signetics nos finais de 1970. O 82s100 foi uma matriz de termos AND. O 82s105 também tinha funções flip-flop.
O FPGA usa uma rede de portas lógicas, semelhante a uma matriz gate ordinário, mas cuja programação é feita pelo cliente e não pelo fabricante. O termo "campo programavel" pode ser estranho para alguns, mas "campo" é apenas um termo da engenharia utilizada para indicar o mundo de fora da fabrica, onde vivem os clientes.
FPGA's são normalmente programadas depois de terem sido soldadas a placa de circuito, de forma semelhante aos CPLD's maiores. Nos FPGA's grandes a configuração é volatil, e tem que ser recarregada no componente quando lhe é aplicada energia eléctrica ou diferentes funcionalidades são requeridas. A configuração é normalmente guardada numa configuração PROM EEPROM são programáveis embutidamente (tipicamente por JTAG).
FPGA's e CPLD's oferecem boas escolhas para tarefas particulares. Algumas vezes a decisão é mais económica do que técnica, ou pode depender da experiência ou preferência pessoal do engenheiro.

## Outros tipos de PLDs

Atualmente há muito interesse nos sistemas reconfiguráveis. Há circuitos microprocessadores que contêm algumas funções predefinidas e outras e outras funções que podem ser alteradas pelo código que corre no processador. Projectar sistemas autoconfiguráveis exige uma aprendizagem por parte dos engenheiros de novos métodos, e provavelmente requererá o desenvolvimento de novas ferramentas de software. As PLDs vendidas actualmente contêm um microprocessador com uma função fixa, (chamada core) envolvida por lógica programável. Estes componentes permitem ao projetista concentrar-se em novas funcionalidades do seu projeto, sem se preocupar como funciona o microprocessador.

## Como a PLD guarda a configuração

Um PLD é uma combinação de dispositivos lógicos e de memória. A memória é usada para guardar o padrão que é dado ao chip durante a programação. Muitos dos métodos para armazenar dados no circuito integrado foram adaptados para serem usados em PLDs. Isto inclui:
* Antifusíveis de Silício
* SRAM
* Células EPROM, EEPROM
* Memória Flash
Antifusíveis de Silicio são elementos de armazenamento na PAL, o 1º tipo de PLD. Estas conexões são criadas aplicando uma tensão eléctricas ao longo da área de silício modificada,dentro do chip. São Chamados antifusíveis porque trabalham de forma contrária aos fusíveis normais que começam a funcionar até serem quebrados pela corrente eléctrica.
SRAM ou Static RAM é um tipo de memória volátil ou seja o seu conteúdo perde-se quando se desliga a energia electríca. PLDs baseadas em SRAM tem que ser programadas cada vez que a energia é ligada isto normalmente é feito por outra parte do circuito. Uma célula EPROM é um transistor MOS (semicondutor de óxido metálico) que pode ser comutada por uma carga eléctrica permanente aplicada no seu eléctrodo 'gate'. Isto é feito por um programador PAL expondo o chip a fortes doses de raios ultravioleta por um dispositivo chamado apagador EPROM. Uma memória FLASH é não-volátil, retendo a informação mesmo que a energia eléctrica seja desligada. Pode ser apagada e reprogramada sempre que quisermos.Isto torna-se útil para memória PLD. Em 2005, a memória das CPLD'S eram electricamente programável e apagáveis e não voláteis. Pelo fato de serem muito pequenas não justificam a configuração interna das células SRAM. Cada vez que arrancam, as células EPROM são mais caras devido ao seu invólucro de cerâmica com uma janela de quartzo.

## Linguagens de programação

Muitos dispositivos programáveis PAL,aceitam na entrada um formato de ficheiro comum, normalmente conhecido por "ficheiro JEDEC". Para assistir na criação desde ficheiros,foram criados programas de computador, especiais, chamados compiladores lógicos, Estes são análogos aos computadores de Software. as linguagens utilizadas como código fonte para compiladores lógicos, são chamados linguagens de descrição de hardware ou HDLs.
PALASM e ABEL são muito usados para componentes pouco complexos enquanto Verilog e VHDL são linguagens populares para PLDs mais complexos.
Sendo mais limitado o ABEL é ainda usado por razões históricas, mas para novos projetos, mesmo de baixa complexidade, a VHDL é mais popular.