**Programovateľné logické obvody** je skupina viacerých druhov digitálnych integrovaných obvodov, ktorých funkcia je určená užívateľom prostredníctvom predpisu (programu) definujúcemu prepoje jednotlivých blokov vo vnútri obvodu. Nemyslia sa tým však obvody postavené na mikroprocesoroch (mikrokontroléry).

Jednoduchšie programovateľné logické obvody typu PAL/GAL sú schopné zastúpiť niekoľko štandardných digitálnych obvodov (napr. z radu 7400). Zložitejšie obvody CPLD sú v podstate integráciou niekoľkých jednoduchších obvodov typu GAL. Obvody FPGA predstavujú najzložitejší druh programovateľnej logiky.

PLD – PAL, GAL
--------------

Prvé užívateľom programovateľné logické obvody (Programmable Logic Device, PLD) vznikli zo snahy nahradiť pomerne rozsiahle, avšak nekomplikované kombinatorické logické obvody (typicky adresné dekodéry) jedným obvodom aj tam, kde cena a počet výrobkov vylučovali použitie ASIC. Takéto obvody sa často realizovali pomocou bipolárnych PROM pamätí, toto však bolo pomerne nákladné a ťažkopádne riešenie. Keďže väčšina takýchto obvodov pozostáva z niekoľkých mnohovstupových hradiel typu AND s výstupmi spojenými hradlom OR, boli (firmou MMI) navrhnuté prvé PLD obvody ako matica AND/OR, kde sa prepaľovacími prepojkami (rovnakej technológie ako v PROM) určovali vstupy zapojené do AND matíc. Neskôr boli na výstupy OR hradiel pridané klopné obvody, čo umožnilo aj tvorbu jednoduchých sekvenčných obvodov.

Tieto jednorazovo programovateľné obvody boli nazvané PAL (Programmable Array Logic, programovateľná logika v tvare poľa) a v ich označení sa odzrkadľoval počet možných vstupov a výstupov (pričom však vstupy a výstupy zdieľali jednotlivé fyzické piny), napr. PAL16L8 bol obvod s max. 16 vstupmi a max. 8 výstupmi, ktorý realizoval čisto logickú funkciu (písmeno L v označení; písmeno R znamenalo PAL doplnený klopnými obvodmi).

Neskôr boli prepaľovacie prepojky nahradené pamäťovými bunkami typu EEPROM, čím sa obvody stali preprogramovateľnými. Súčasne sa modifikovala ich štruktúra tak, že sa okolo výstupného klopného obvodu pridali ďalšie obvody umožňujúce napr. uvedenie výstupu do tretieho stavu alebo presmerovanie fyzického vstupu na iný vstup AND/OR matice. Tak sa vytvorila tzv. výstupná makrocela, ktorej presná funkcia je konfigurovaná ďalšími pamäťovými bunkami. Tieto obvody sa označujú GAL (Generic Array Logic), pričom je zachovaná schéma s číslovaním ako u PAL (niektorí výrobcovia po drobných úpravách vyrábali GAL aj pod názvami PEEL, PALCE a pod.)

CPLD
----

Zväčšovanie počtu vstupov a výstupov obvodov GAL narazilo na problém príliš veľkej AND/OR matice (ktorá rastie s počtom vstupov približne kvadraticky). Preto sa pre zložitejšie obvody navrhla štruktúra, kde niekoľko pomerne uzavretých blokov podobných GAL je prepojených pomerne jednoduchou prepojovacou sústavou. Takto je možné dosiahnuť obvody s niekoľkými stovkami vstupov a výstupov. Štruktúra GAL zostala v základnej podobe zachovaná, a CPLD sa kategorizujú podľa počtu výstupných makrociel – toto číslo je obvykle prítomné aj v označení obvodu, napr. XC95144 je obvod z radu XC95xx a obsahuje 144 makrociel.

FPGA
----

Obvody FPGA majú odlišnú genézu a vznikli ako programovateľná verzia hradlového poľa známeho z ASIC technológií. Prepoje jednotlivých buniek poľa, ako aj samotná funkcia (pomerne malých) buniek je daná obsahom RAM buniek, ktorý je do obvodu „nahraný" obvykle po zapnutí napájania. To znamená, že FPGA nie sú pripravené na činnosť hneď po zapnutí, aj keď existujú obvody s integrovanou konfiguračnou pamäťou ako aj obvody založené na technológii ROM (antifuse) aj EEPROM (najmä firma Actel).
Niektoré dnešné FPGA majú integrované aj ďalšie funkcie, napríklad generátor niekoľkých hodinových signálov pomocou fázového závesu (PLL), zabudovanú pamäť RAM, zabudované procesorové jadro apod.

Porovnanie CPLD a FPGA
----------------------

Výhody aj nevýhody oboch druhov PLD vychádzajú z ich štruktúry. Keďže CPLD majú štruktúru blízku GAL, sú vhodné na konštrukciu kombinatorickej logiky s mnohými vstupmi a s dobre odhadnuteľnými oneskoreniami (vďaka „priamočiarej" štruktúre). Nie sú však vhodné pre rozsiahlu sekvenčnú logiku, keďže každý klopný obvod zaberie jednu makrocelu, ktorých je obmedzený počet.
Naopak, FPGA nie sú vhodné pre rozsiahlu kombinatorickú logiku, keďže signály by museli prechádzať veľkým množstvom buniek. Naopak, aj zložitá sekvenčné logika sa implemntuje pomerne jednoducho. Keďže väčšina aplikácií si vyžaduje práve sekvenčné obvody a nie kombinatorické, na obvody FPGA sa kladie väčší dôraz a sú vyrábané aj v mimoriadne veľkých a rýchlych verziách.

Návrhové prostriedky
--------------------

Na návrh PLD boli napísané pomerne jednoduché prekladače typu „PAL assembler". Tieto umožňovali jednoduchý symbolický popis obvodu v textovej podobe, ktorý prekladač preložil do bitového toku ktorý slúžil ako predpis na programovanie obvodu.
Zložitejšie obvody sa už nedajú navrhovať takýmito jednoduchými prostriedkami a dnes sa používajú v podstate tie isté návrhové prostriedky ako u ASIC. Používa sa jednak symbolický popis obvodu v jazyku podobnom vyšším programovacím jazykom, a taktiež schematický návrh podobný návrhu bežných elektronických obvodov. Z takto vytvorených návrhových súborov sa konečný bitový tok získa sústavou programov: najskôr sa z návrhového súboru odvodí logická funkcia, ktorá sa optimalizuje a nakoniec sa prevedie do samotného bitového toku. Dôležité sú aj simulačné programy a tiež utility ktoré umožňujú sledovať časovanie jednotlivých signálov, tiež sledovať a ovplyvňovať rozloženie jednotlivých funkčných blokov v obvode.

### Jazyky

Na popis činnosti či štruktúry CPLD/FPGA slúžia jazyky podobné programovacím jazykom počítačov. Najznámejšie z nich sú:

* Abel (dnes už málo používaný a len pre PLD/CPLD)
* VHDL
* Verilog
* Jazyk C – verzia pre FPGA
* SystemC – knižnica C++, IEEE 1666-2005 štandard

IP
--

Niektoré zložitejšie logické funkcie, ktoré sa opakujú v rôznych obvodoch, sa zvyknú vytvoriť a potom používať ako celok vo forme akejsi knižnice. Takýmto celkom sa hovorí IP jadrá (IP cores, Inetellectual Property) a sú často tvorené menšími nezávislými spoločnosťami, ktoré súčasne poskytujú aj konzultačné služby pre návrh PLD.
IP jadrá môžu byť:

* pamäť
	+ RAM
		- FIFO
		- dualport RAM
		- asociatívna pamäť
	+ ROM
* komunikačné rozhranie
	+ UART
	+ I2C
	+ SPI
	+ ethernet
* procesorové jadro
* šifrovacie algoritmy

Použitie
--------

* priemyselná elektronika
* telekomunikácie

V súčasnosti sú FPGA pomerne často používané napr. pri rýchlom kódovaní analógového videa do digitálnych formátov (MPEG1-4, DivX, XVid atď.) alebo dekódovaní týchto v reálnom čase; a pre podobné úlohy v oblasti digitálneho spracovania signálov.

Výrobcovia
----------

Najvýznamnejší výrobcovia programovateľných logických obvodov obvykle vyrábajú niekoľko radov FPGA aj CPLD a ponúkajú (niekedy v spolupráci s ďalšími firmami) aj príslušné vývojové prostriedky.

Niektorí významní výrobcovia:

* Altera
* Xilinx
* Lattice Semiconductor
* Actel
* Atmel