Un Programmable Logic Array (PLA) es un tipo de dispositivo lógico programable que permite implementar funciones lógicas booleanas arbitrarias en forma de suma de productos. Consiste en una matriz AND programable conectada a una matriz OR programable. Ambas matrices son configurables por el usuario, lo que significa que las conexiones entre las entradas y las compuertas AND, y entre las salidas de las compuertas AND y las compuertas OR, pueden ser establecidas o rotas para definir la lógica deseada. Esta estructura permite una gran flexibilidad en la implementación de múltiples funciones de salida a partir de múltiples entradas, donde cada función es una suma de términos producto.

En el mundo real, los PLAs fueron precursores de dispositivos lógicos programables más complejos como los Programmable Array Logic (PALs) y los Generic Array Logic (GALs), y eventualmente de los Field-Programmable Gate Arrays (FPGAs). Aunque los PLAs discretos son menos comunes hoy en día debido a la prevalencia de FPGAs y ASICs, los principios de su arquitectura (matrices AND-OR) se encuentran embebidos en la microarquitectura de muchos componentes digitales. Por ejemplo, se utilizan internamente en la implementación de controladores de estado finito (Finite State Machines), decodificadores de direcciones en sistemas de memoria, y en la lógica de control de unidades de procesamiento central (CPUs) y unidades de procesamiento gráfico (GPUs) para tareas específicas donde la flexibilidad de la lógica combinacional es crucial.

Para un Arquitecto de Sistemas, entender los PLAs es fundamental para comprender los fundamentos del hardware programable y sus trade-offs. Aunque rara vez se diseñe directamente con PLAs, el concepto subyacente de lógica programable es clave para evaluar soluciones basadas en FPGAs o para entender las capacidades y limitaciones de la lógica de control en ASICs. Permite apreciar cómo la flexibilidad de la lógica puede ser implementada en hardware, impactando el rendimiento, el consumo de energía y el costo. Un arquitecto debe considerar si la flexibilidad de una solución programable (como un FPGA que internamente usa estructuras similares a PLAs) justifica el costo y la complejidad frente a una solución fija (ASIC), o si la implementación de lógica combinacional específica puede ser optimizada a nivel de hardware para cumplir requisitos estrictos de latencia o throughput.