Um problema de usar ROM para implementar uma função lógica é que
muitas vezes a maior parte das possíveis combinações de variáveis
de entrada nunca ocorre. Muitas funções lógicas precisam apenas de uma
pequena fração de todas as palavras, resultando assim em um
desperdício de espaço.
A PLA (``Programmable Logic Array'') é uma estrutura que possui a
generalidade de uma memória para implementar funções lógicas,
porém bem mais compacta que a ROM. A Figura 1.17 mostra um exemplo de uma
PLA. Uma PLA consta de dois planos, chamados plano AND e plano OR.
Numa linha vertical do plano AND, os pontos ou ``bolinhas'', especificados
pelo cliente, indicam quais as variáveis (complementadas ou não) que devem
participar de um termo de produto. O exemplo mostra uma PLA com 6 entradas e
13 termos de produto. As 13 linhas verticais formam os 13 termos de produto: etc.
Numa linha horizontal do plano OR, os pontos ou bolinhas indicam quais os
produtos que devem participar numa soma (ou num circuito OR). Cada linha
horizonta dá origem a uma saída. O exemplo produz assim 4 saídas.
As saídas e implementam as funções lógicas seguintes:
Notem que o mesmo produto aparece nas funções e . aparece tanto na coluna 2 como na coluna 6, sendo que na coluna 6 ele é usado tanto para gerar como . A PLA pode ser otimizada definindo apenas uma vez.