# 23 — Kombinační logické obvody
> [!abstract] O tématu
> ==**Kombinační logické obvody**== = obvody, jejichž ==**výstup závisí jen na aktuálních hodnotách vstupů**== (žádná paměť, žádné minulé stavy). Sestaveny z **hradel AND, OR, NOT, NAND, NOR, XOR**.
> [!info] Maturitní otázka
> **a)** Parametry a vlastnosti · **b)** Návrh kombinačního obvodu · **c)** Využití · **d)** Příklady kombinačních obvodů · **e)** Aritmetické operace
---
## a) Parametry a vlastnosti
### Definice
==**Kombinační obvod**== má pro stejnou kombinaci vstupů ==**vždy stejný výstup**==. ==**Nemá paměť**== — výstup nezávisí na minulosti, jen na aktuálních vstupech. ==**Okamžitě reaguje na změnu na vstupech**==.
### Vlastnosti
- výstup závisí jen na ==**kombinaci aktuálních vstupů**==
- ==**nebere ohled na předchozí stavy**==
- má většinou ==**jednodušší strukturu**== a návrh
- na určitou kombinaci vstupů reaguje vždy stejně
- činnost lze popsat ==**logickou funkcí (rovnicí)**== s proměnnými, které mají jen 2 stavy (0/1)
### Rozdíl proti sekvenčním obvodům
| | Kombinační | Sekvenční |
|---|---|---|
| Závislost výstupu | jen na aktuálních vstupech | na vstupech **i minulých stavech** |
| Paměť | ==**NEMÁ**== | ==**má**== (klopné obvody) |
| Hodinový signál | nepotřebuje | obvykle ano |
| Příklad | sčítačka, multiplexor | čítač, registr, paměť |
### Základní logické členy (hradla)
==**Stavební bloky**== kombinačních obvodů — kombinací vznikají složitější funkce:
| Hradlo | Funkce |
|---|---|
| ==**AND**== | výstup 1, jen když jsou **všechny vstupy 1** |
| ==**OR**== | výstup 1, když je **alespoň jeden vstup 1** |
| ==**NOT**== | **invertuje** vstupní hodnotu |
| ==**NAND**== | inverzní AND |
| ==**NOR**== | inverzní OR |
| ==**XOR**== | výstup 1, když jsou **vstupy různé** |
### Klíčové parametry
- ==**Počet vstupů a výstupů**==
- ==**Zpoždění (propagation delay)**== — ns, jak rychle se výstup ustálí po změně vstupu
- ==**Spotřeba**==
- ==**Fan-in / Fan-out**== — max počet vstupů hradla / kolik vstupů můžu napájet
- ==**Funkční tabulka**== (pravdivostní tabulka)
- ==**Statické a dynamické hazardy**== — nežádoucí krátké pulzy na výstupu během přechodů
---
## b) Návrh kombinačního obvodu
### Postup
1. ==**Zadání**== — slovní popis chování (kdy má být výstup 1?)
2. ==**Pravdivostní tabulka**== — všechny kombinace vstupů a požadovaný výstup
3. ==**Booleovský výraz**== — pomocí mintermů (úplná disjunktivní normální forma)
4. ==**Minimalizace**== — Karnaughovou mapou nebo algebraickou cestou
5. ==**Schéma z hradel**== — nakreslit
6. ==**Realizace**== — IC nebo FPGA
### Příklad — funkce „většinového hlasování" 3 vstupů
==**Výstup = 1, když alespoň 2 ze 3 vstupů = 1**==.
#### 1. Pravdivostní tabulka
| A | B | C | F |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | **1** |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | **1** |
| 1 | 1 | 0 | **1** |
| 1 | 1 | 1 | **1** |
#### 2. Mintermy (kde F=1)
F = ¬A·B·C + A·¬B·C + A·B·¬C + A·B·C
#### 3. Minimalizace (K-mapa)
F = A·B + A·C + B·C
#### 4. Schéma
3× AND + 1× OR (4 hradla).
---
## c) Využití kombinačních obvodů
### V CPU a paměti
- ==**ALU**== — aritmetické a logické operace (sčítání, AND, OR…)
- ==**Adresové dekodéry**== v paměti
- ==**Multiplexory / demultiplexory**== pro výběr signálů
- ==**Komparátory**== pro porovnání hodnot
### V periferiích a I/O
- ==**Převodníky kódů**== (BCD na 7-segment displej)
- ==**Generátory parity**== pro detekci chyb v přenosu
- ==**Kódery a dekodéry**==
### V počítačových sítích
- ==**Switching matrix**== ve switchích
- ==**Generátory CRC**== pro kontrolu chyb
### V průmyslu
- ==**Řízení strojů**== (PLC)
- ==**Bezpečnostní logika**== (alarmy)
---
## d) Příklady kombinačních obvodů
### Kodér
==**Převádí z kódu k z n na jiný druh kódu**== (komprimuje informaci — méně výstupních vodičů).
- např. ==**z kódu 1 z 10 na BCD**== (obvod **74147**)
- snižuje počet vodičů při přenosu
### Dekodér
==**Opak kodéru**== — převádí jiný kód na ==**kód k z n**== (1 z N výstupů aktivní).
- např. ==**z kódu BIN na 1 z 16**== (obvod **74154**)
- ==**Použití**==: adresování paměti, BCD na 7-segment, výběr zařízení
### Rekodér (kodek)
==**Provádí kódování i dekódování zároveň**== — převádí z jiného kódu na jiný kód.
- např. ==**z BIN na BCD**== (obvod **74185**)
### Multiplexor (MUX)
==**Přenáší informaci z 1 z N vstupů na 1 výstup**==. Přepínání řízeno ==**adresovým signálem**==.
- vstupy se označují jako ==**kanály**==, vybraný kanál určuje číslicová adresa
- např. **1 z 16 vstupů na 1 výstup** (obvod **74150**)
- 2:1, 4:1, 8:1, 16:1, ...
- ==**Analogie**==: ==**„přepínač"**== — vyberu, který vstup jde na výstup
### Demultiplexor (DEMUX)
==**Opak MUXu**== — přenáší informaci z 1 vstupu na ==**1 z N výstupů**==, řízeno adresovým signálem.
- např. **1 vstup na 1 ze 4 výstupů** (obvod **74155**)
### Komparátor
==**Porovnává mezi sebou několikabitová čísla**==. Dva druhy:
| Druh | Vyhodnocuje |
|---|---|
| ==**Logický komparátor**== | jen **rovnost / nerovnost** (A = B, A ≠ B) |
| ==**Aritmetický komparátor**== | relace **=, <, >** |
### Detektor chyb
==**Zjišťuje mimokódové kombinace**== (kombinace, které v daném kódu nemají význam).
- např. u **BCD kódu**: pro hodnoty **0–9** je výstup Y = 0, pro **10–15** Y = 1
### Generátor parity
==**Přidá kontrolní bit (paritu)**== k datům pro detekci chyb v přenosu. Generuje sudou i lichou paritu.
- ==**Sudá parita**== — počet 1 (včetně bitu) je sudý
- ==**Lichá parita**== — počet 1 je lichý
- např. **8-bitový generátor** (obvod **74180**)
### BCD na 7-segment
==**Převádí 4-bitové BCD číslo (0–9) na 7 signálů**== pro segmentový displej.
### ALU (Arithmetic Logic Unit)
==**Komplexní kombinační obvod**== v CPU, který umí různé operace (+, −, AND, OR, XOR, posuny) podle ovládacích signálů.
---
## e) Aritmetické operace
### Sčítačka (Adder)
#### Polosčítačka / půlsčítačka (Half Adder)
==**Sčítá 2 bity**== (1 bit). Výstup = součet (S) + přenos (C).
| A | B | S | C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | **1** |
==**S = A ⊕ B**== (XOR)
==**C = A · B**== (AND)
#### Úplná sčítačka (Full Adder)
==**Sčítá 3 bity**== — A, B a ==**přenos z nižšího řádu (Cin)**==. Výstup = součet + nový přenos.
#### Paralelní sčítačka
==**Počítá všechny bity najednou**== — spojení více úplných sčítaček vedle sebe (např. 8-bit, 32-bit).
#### BCD sčítačka
==**Sčítá v BCD kódu**== (po dekadických cifrách 0–9).
#### Sčítačka s pohyblivou řádovou čárkou
Pro operace v plovoucí řádové čárce (floating point).
### Další aritmetické obvody
- ==**Odčítačka**==
- ==**Násobička**==
- ==**Dělička**==
### Posuvy
==**Posuv bitů**== ve slově:
- ==**Doprava**==
- ==**Doleva**==
- ==**Rotace**== (vysunutý bit se vrací na druhý konec)
---
## Shrnutí
> [!summary] Co si pamatovat
> **a) Vlastnosti:** ==**výstup závisí jen na aktuálních vstupech**==, **bez paměti**. Stavební bloky: **AND, OR, NOT, NAND, NOR, XOR**. Parametry: zpoždění, spotřeba, fan-in/out.
> **b) Návrh:** ==**zadání → tabulka → mintermy → minimalizace (K-mapa) → schéma**==.
> **c) Využití:** ==**ALU, dekodéry pamětí, multiplexory, generátory parity, převodníky kódů, komparátory**==.
> **d) Příklady:** ==**kodér, dekodér, rekodér (kodek), MUX, DEMUX, komparátor (logický/aritmetický), detektor chyb, generátor parity, BCD/7-seg, ALU**==.
> **e) Aritmetika:** ==**sčítačka (polo/úplná/paralelní/BCD), odčítačka, násobička, dělička, posuvy (doprava/doleva/rotace)**==.