Programovatelné a neprogramovatelné
logické obvody
Komplexní studijní materiál · PLD, CPLD, FPGA, NPLD (74xx)
Úvod: Dvě kategorie logických obvodů
V digitální elektronice potřebujeme realizovat logické funkce – obvody, které na základě vstupních signálů produkují výstupy podle určitých pravidel. Historicky se to dělalo dvěma základními způsoby.
Základním principem PLD je, že jakákoli kombinační logická funkce se dá vyjádřit jako součet součinů (disjunktivní normální forma – DNF). Fyzicky to realizujeme polem AND hradel a polem OR hradel s programovatelnými spoji.
Architektura PLD a rozdělení
Klíčová otázka je, která pole jsou pevná a která programovatelná. Právě podle toho se PLD dělí:
| Typ | AND pole | OR pole | Poznámka |
|---|---|---|---|
| ROM | pevné (dekodér) | programovatelné | Historický předchůdce |
| PLA | programovatelné | programovatelné | Maximální flexibilita, pomalejší |
| PAL | programovatelné | pevné | Jednodušší, rychlejší než PLA |
| GAL | programovatelné | pevné + OLMC | EEPROM, opakovaně programovatelné |
SPLD: PLA a PAL
PAL vzniklo jako pragmatická odpověď na složitost PLA. Klíčové zjednodušení: AND pole je programovatelné, ale OR pole je pevné – každý výstup má přiřazený pevný počet produktových termů (typicky 2, 4 nebo 8). Nižší zpoždění, jednodušší výroba, nižší cena.
PLA má obě pole – AND i OR – programovatelná. To přináší maximální flexibilitu: produktové termy lze sdílet mezi více výstupy (P₂ může přispívat do f₁ i f₂ zároveň). Za cenu většího zpoždění a vyšší složitosti.
GAL – Generic Array Logic
GAL přináší dvě klíčové inovace oproti PAL: elektrické mazání (EEPROM) a programovatelnou výstupní makrobuňku OLMC. Jeden typ čipu GAL dokáže emulovat různé typy PAL obvodů.
CPLD – Complex Programmable Logic Device
CPLD je více bloků SPLD propojených programovatelnou propojovací maticí. Architektura zajišťuje deterministické časování – zpoždění od vstupu k výstupu je garantováno výrobcem bez ohledu na konkrétní design. Konfigurace uložena v nevolatilní Flash paměti.
Příklady: Xilinx CoolRunner-II, Altera MAX7000, Lattice ispMACH
FPGA – Field Programmable Gate Array
FPGA je kategoricky jiná architektura. Místo AND-OR polí používá LUT (Look-Up Table) – malou SRAM paměť realizující libovolnou logickou funkci přímo z pravdivostní tabulky. N-vstupová LUT má 2ᴺ paměťových buněk.
| Blok | Zkratka | Funkce |
|---|---|---|
| Configurable Logic Block | CLB | LUT (look-up table na principu RAM) + D flip-flop + carry logika pro sousední CLB |
| Input/Output Block | IOB | Propojení vnitřní logiky s I/O piny; může obsahovat registr, budič, MUX, ochranné obvody |
| Block RAM | BRAM | Synchronní SRAM bloky pro ukládání dat (typicky 18 nebo 36 kbit) |
| Digital Clock Manager | DCM | Auto-kalibrace, rozvod CLK ke všem CLB, násobení/dělení frekvence, fázový posun |
| DSP / Multiplier | DSP | Hardwarové násobiče a akumulátory pro signálové zpracování |
Vývojový tok: HDL (VHDL/Verilog) → Syntéza → Implementace (Place & Route) → Static Timing Analysis → Bitstream → JTAG konfigurace
Makrobuňka vs. logický blok
- Výstupní buňka AND-OR pole
- D flip-flop (DKO) pro sekvenční logiku
- Programovatelná polarita výstupu
- Třístavový výstupní budič + OE
- Zpětná vazba do AND pole
- Typicky 8–256 na čipu
- LUT (Look-Up Table) = autonomní logika
- D flip-flop (nebo latch)
- Carry chain pro sčítačky
- MUX pro volbu kombinační/registrový výstup
- Propojení přes routing fabric
- Tisíce až miliony na čipu
| Vlastnost | Makrobuňka (CPLD) | Logický blok/CLB (FPGA) |
|---|---|---|
| Realizace logiky | Výstup AND-OR pole | LUT (Look-Up Table) |
| Časování | Deterministické (garantované) | Závisí na routingu |
| Konfigurace | Flash (nevolatilní) | SRAM (volatilní) |
| Granularita | Větší (výsledek celé fce) | Menší (max N vstupů LUT) |
| Kapacita čipu | Desítky–stovky MC | Tisíce–miliony LUT |
NPLD – Neprogramovatelné logické obvody
NPLD jsou obvody, jejichž logická funkce je neměnně definována při výrobě. Série 74xx je standardizovaná rodina od 60. let, dostupná v technologiích TTL, CMOS (74HCT, 74AHCT, 74LVC…).
Vybrané obvody rodiny 74xx
Princip: 8 D flip-flopů v řetězu. Každá náběžná hrana CLK posune obsah o jeden bit. Vstup: AND(A, B). CLR̄ asynchronní reset.
- Převod sériové informace na paralelní
- Rozšíření počtu výstupů mikrokontroléru
- LFSR generátory pseudonáhodných sekvencí
Princip: Opak 74164. SH/LD̄ = LOW → načtení paralelních dat A–H; HIGH → posun. CLK INH blokuje hodiny.
- Převod paralelní informace na sériovou
- Snímání stavu 8 přepínačů/senzorů
- Rozšíření počtu vstupů mikrokontroléru
- Kombinace s 74164: kompletní sériový přenos po 2 vodičích
Princip: Dvoustupňová architektura: Shift Register (SRCLK) + Storage Register (RCLK). Výstupy Q0–Q7 se mění jen při RCLK pulzu → žádné glitches.
- Řízení LED maticí, 7-seg. displeji, relé
- Rozšíření výstupů MCU (Arduino → 8+ výstupů ze 3 pinů)
- Světelné tabule
- Řetězení: QH' → SER dalšího čipu (16, 24... bitů)
Princip: 8 úrovňově-citlivých latchů. LE=HIGH → výstup sleduje vstup (transparentní). Sestupná hrana LE uzamkne hodnotu. OE̅ uvede výstupy do tristate.
- Rychlé zachytávání informací na sběrnici
- Multiplexovaná sběrnice (Intel 8051, starší x86)
- Rozšíření MCU o vnější paměť
Princip: 8 neinvertujících buferů ve dvou skupinách po 4 s oddělenými 1OE̅ a 2OE̅. Zesiluje proudovou schopnost – zvládne větší fan-out a delší vedení.
- Jednosměrný bufer adresové/řídicí sběrnice
- Distribuce signálu s velkým fan-out
- Spínání náročnějších součástek
Princip: DIR=HIGH → A→B; DIR=LOW → B→A. OE̅=HIGH → odpojení (tristate). Pro každou linku jsou dvě antiparalelní buffery. Podporuje level shifting.
- Datová sběrnice CPU ↔ paměť/periferie
- Level shifting 5V TTL ↔ 3.3V LVTTL
- Brány mezi dvěma sběrnicovými segmenty
Princip: Pro každý bit XNOR(Pi, Qi)=1 při shodě. Výstup Ȳ je LOW pokud všech 8 bitů P=Q. Ḡ (enable, aktivní LOW) povoluje/blokuje porovnávání.
- Adresní dekodér: P = adresní bity od CPU, Q = pevná referenční hodnota → výstup aktivuje CS/OE paměti
- Detekce specifické hodnoty na datové sběrnici
Princip: Synchronní = všechny FF přepínají simultánně (žádné glitches). CPU vstup = čítání nahoru, CPD vstup = čítání dolů. LOAD̄ asynchronně nastaví hodnotu A–D. CLR reset.
- Čítač událostí, odpočítávání (LOAD nastaví start)
- Polohové enkodéry (UP/DOWN dle směru otáčení)
- Kaskádování: TCŪ prvního → CPU druhého (8 bit, 12 bit…)
- Pořadník, generátor časových sekvencí
| Obvod | Funkce | Vstup | Výstup | Klíčový vstup |
|---|---|---|---|---|
| 74164 | Posuvný registr | Sériový (A, B) | Paralelní (QA–QH) | CLK, CLR̄ |
| 74166 | Posuvný registr | Paralelní (A–H) | Sériový (QH) | SH/LD̄, CLK |
| 74595 | Posuvný registr + latch | Sériový (SER) | Paralelní (Q0–Q7) + QH' | SRCLK, RCLK, OE̅ |
| 74573 | Záchytný registr (latch) | Paralelní (D0–D7) | Paralelní (Q0–Q7) | LE, OE̅ |
| 74244 | Jednosměrný bufer | A1–A4, A1–A4 | Y1–Y4, Y1–Y4 | 1OE̅, 2OE̅ |
| 74245 | Obousměrný transceiver | A1–A8 nebo B1–B8 | B1–B8 nebo A1–A8 | DIR, OE̅ |
| 74688 | Komparátor rovnosti | P0–P7, Q0–Q7 | Ȳ (LOW = shoda) | Ḡ (enable) |
| 74193 | UP/DOWN čítač | A–D (data), CPU, CPD | QA–QD, TCŪ, TCD̄ | LOAD̄, CLR |