2.2
Kodér a dekodér, převodníky kódů
Definice
Obecně lze kodér definovat jako kombinační logický obvod, který má n vstupů a m výstupů, kde maximální počet výstupů je dán: mmax=log2n . Na vstupu kodéru může být obecně pouze jeden z n vstupů aktivní (kód 1 z n) a kodér přiřadí tomuto jednomu aktivnímu vstupu danou kombinaci hodnot na m výstupech [5].
Dekodér je pak analogicky opačný kombinační obvod, který obsahuje n vstupů a m výstupů, kde maximální počet výstupů je dán: mmax=2n a z těchto m výstupů je v každý okamžik aktivní pouze jeden (kód 1 z n), který dekóduje vstupní kódovou posloupnost na n vstupech [5].
Poznámka
Zjednodušeně tedy kodér představuje obvod, který na výstupu „zakóduje“ vstupní kód do jiného, a dekodér naopak tento kód „dekóduje“ zpět na původní.
Kodéry a dekodéry tak velmi často plní v obvodech funkce převodníků kódů [5], ať už se jedná o převody mezi různými binárními kódy (např. z BCD kódu na jiný), převody mezi číselnými soustavami (z binární na osmičkovou, desítkovou apod.), nebo i převody kódů pro specifické aplikace a periferie (např. převod kódu pro segmentový displej) apod.
Pro ukázku jednoduchého kodéru a dekodéru si uvedeme příklad kodéru 4 na 2 a dekodéru 2 na 4. Kodér 4 na 2 má tedy čtyři datové vstupy, z nichž pouze jeden smí být v daný okamžik aktivní. Aby tato podmínka platila, musíme ji buď zajistit na jeho vstupech, nebo použít tzv. prioritní kodér. Jedná se o specifický případ kodéru, jehož vstupy mají nastavenu prioritu (obvykle ve směru vzestupném od jednoho vstupu k poslednímu v řadě), která zajistí, že stav vstupu s nejvyšší prioritou vždy převáží nad stavy vstupů s nižší prioritou (ty tak budou ignorovány). Proto je v následující zkrácené pravdivostní tabulce 6 tohoto kodéru použit vždy neurčitý stav, protože na stavech těchto vstupů v daném okamžiku nezáleží. V příkladu prioritního kodéru 4 na 2 v tabulce 6 a na obrázku 7 se vstupy a, b, c, d s prioritou vzestupně od vstupu a do d jsou výstupy kodéru označeny Q0Q1. Algebraické vyjádření výstupů je uvedeno níže pod tabulkou 6.
Tabulka 6. Pravdivostní tabulka jednoduchého prioritního kodéru 4 na 2.
d
c
b
a
Q1
Q0
0
0
0
1
0
0
0
0
1
X
0
1
0
1
X
X
1
0
1
X
X
X
1
1
0
0
0
0
X
X
Q0=bc¯d ,
Q1=cd .
+
7. Jednoduchý prioritní kodér 4 na 2.
Obr. 7. Jednoduchý prioritní kodér 4 na 2.
Jako příklad jednoduchého dekodéru můžeme uvést přesně opačný dekodér 2 na 4. V tomto případě platí podmínka, že pouze jeden výstup Q smí být v daném okamžiku aktivní. Kombinacím možných stavů dvou datových vstupů dekodéru a, b odpovídá tedy pouze jeden aktivní výstup v jednom okamžiku z možných Q0Q3, jak ukazuje pravdivostní tabulka 7.
Tabulka 7. Pravdivostní tabulka jednoduchého dekodéru 2 na 4.
b
a
Q3
Q2
Q1
Q0
0
0
0
0
0
1
0
1
0
0
1
0
1
0
0
1
0
0
1
1
1
0
0
0
Pro jednotlivé výstupy vyjádříme jejich výstupní funkce:
Q0=a¯b¯ ,
Q1=ab¯ ,
Q2=a¯b ,
Q3=ab .
A schéma zapojení tohoto dekodéru ukazuje obrázek 8.
+
8. Jednoduchý dekodér 2 na 4.
Obr. 8. Jednoduchý dekodér 2 na 4.
Zajímavost
Pro zajímavost porovnejte realizaci a funkci tohoto jednoduchého dekodéru 2 na 4 na obrázku 8 a předchozího demultiplexoru 1 na 4 na obrázku 6. Tento dekodér v podstatě představuje daný demultiplexor pouze s tím rozdílem, že původní adresové vstupy demultiplexoru jsou v případě dekodéru realizovány přímo datovými vstupy a, b, a datový vstup x původního demultiplexoru tak chybí.
Zajímavost
Kodéry a dekodéry nalezneme rovněž mezi integrovanými obvody řady 7400 jako již hotové (de)kodéry určené pro různé aplikace, převody různých kódů, s různými počty vstupů a výstupů. Pro kodéry je častá realizace prioritního kodéru 10 na 4 nebo 8 na 3. Kodér 10 na 4 lze totiž využít pro převod čísel z desítkové (decimální) soustavy do dvojkové (binární), zatímco kodér 8 na 3 pro převod čísel z osmičkové (oktalové) do dvojkové (binární) soustavy. Kodér 10 na 4 lze nalézt v katalogu jako integrovaný obvod 74LS147, zatímco kodér 8 na 3 jako integrovaný obvod 74LS148.
Dekodéry mají mezi obvody řady 7400 větší zastoupení, např. integrovaný obvod 74LS137 představuje dekodér 3 na 8, 74LS139 obsahuje 2× v jednom pouzdře dekodér 2 na 4, 74LS145 je integrovaný dekodér (převodník) z BCD kódu do desítkové číselné soustavy a další. Samostatnou skupinu pak tvoří dekodéry pro zobrazení znaků (číslic) na segmentových displejích, např. 74LS24774LS248 a další, které jsou k dispozici v různých úpravách (s tzv. otevřeným kolektorem, s pull-up rezistorem apod.)
Poznámka
Až dosud jsme ve všech textech operovali s binárními čísly v tzv. přímém dvojkovém kódu, tedy s přímou reprezentací (převodem) čísel mezi soustavami binární (dvojkovou) a decimální (desítkovou). Avšak kromě přímého převodu mezi číselnými soustavami lze pro vyjádření čísel ve dvojkové soustavě vytvořit i jiné binární kódy.
Definice
Kód představuje soubor pravidel pro jednoznačné vyjádření čísla v dané soustavě pomocí dostupných číslic.
Číslice představují symboly s určitou definovanou hodnotou v dané číselné soustavě.
V předchozím i následujícím textu uvažujeme pouze tzv. číselné soustavy polyadické, tedy takové soustavy, které jsou založeny na vyjádření čísla v dané soustavě pomocí jeho rozvoje v polynom a které mají základ číselné soustavy stejný na všech řádových místech (stupních polynomu). Tento základ soustavy je následně použit pro její pojmenování, mezi nejznámější patří soustavy: dvojková (binární), osmičková (oktalová), desítková (decimální), šestnáctková (hexadecimální).
Zajímavost
Kromě nich však existují i tzv. číselné soustavy nepolyadické, které nejsou založeny na polynomiálním rozvoji čísel, protože nemají stejný základ na všech řádových místech daného čísla. K těmto číselným soustavám patří např. tzv. číselné soustavy zbytkových tříd, jiným příkladem nepolyadické číselné soustavy jsou římská čísla.
Uveďme si v tabulce 6 pro ukázku převodní tabulky mezi BCD kódem a několika vybranými a v praxi častými binárními kódy.
Tabulka 6. Převodní tabulka vybraných binárních kódů.
N(10)
BCD kód
Váhový 5421
Váhový 84-2-1
Grayův kód
F+3 kód
Kód 1 z n
0
0000
0000
0000
0000
0011
0000000001
1
0001
0001
0111
0001
0100
0000000010
2
0010
0010
0110
0011
0101
0000000100
3
0011
0011
0101
0010
0110
0000001000
4
0100
0100
0100
0110
0111
0000010000
5
0101
1000
1011
0111
1000
0000100000
6
0110
1001
1010
0101
1001
0001000000
7
0111
1010
1001
0100
1010
0010000000
8
1000
1011
1000
1100
1011
0100000000
9
1001
1100
1111
1101
1100
1000000000
  • BCD kód (Binary Coded Decimal) představuje přímý binární kód se čtyřmi řádovými pozicemi aplikovaný na každou jednotlivou číslici v desítkové soustavě, např. 27(10) = 0010 0111(2) v BCD kódu.
  • Váhové kódy využívají systém vah (koeficientů), kterými jsou násobeny (váhovány) jednotlivé řádové pozice. Některé kombinace vah umožňují vyjádřit všechny číslice 0–9 a některé mají rovněž své názvy v literatuře, např. 5421, 84-2-1 (Rubinoffův kód), 2421 a 3331 (Aikenovy kódy), aj.
  • Grayův kód je typ kódu se změnou na n řádech, konkrétně na jednom řádovém místě v případě dvou po sobě následujících číslech, a byl podrobně popsán v předchozích textech.
  • Kód F+3 (někdy též BCD+3, v angličtině Excess 3) je typ kódu s posunem, v tomto případě jsou všechny číslice v tomto kódu posunuty o tři oproti BCD kódu. Kód F+3 vykazuje symetričnost při vyjádření číslic vůči svému středu (např. 9 je negací 0, 8 je negací 1, atd.)
  • Kód 1 z n (v angličtině one-hot) je tzv. poziční kód, kdy číselné vyjádření určuje pozice číslice 1 v kódovém slově.
Definice
Převodníky kódů jsou dalšími často využívanými kombinačními logickými obvody v nejrůznějších situacích. Obvykle slouží k jednosměrnému převodu z jednoho binárního kódu do jiného, můžeme se ale setkat i s převodníky z jedné číselné soustavy do druhé (ty jsou nejčastěji realizovány pomocí dekodérů).
Převodníky kódů slouží k převodu kódů například při komunikaci různých periferií, převodu kódu na výstupu čítače či posuvného registru apod.
Jako ukázku jednoduchého převodníku si uveďme příklad realizace převodníku z BCD kódu do váhového kódu 5421, viz převodní tabulka 6 výše.
Příklad
Vyjdeme z uvedené převodní tabulky 6 a každému řádovému místu kódu 5421 přiřadíme vstupní proměnnou a, b, c, d a výstupy označíme Q0, Q1, Q2Q3. Obecně je zvykem v logických obvodech přiřadit proměnnou a (Q0) na nejnižší řádové místo, tzv. LSB (Least Significant Bit), a v tomto případě proměnnou d (Q3) na nejvyšší řádové místo, tzv. MSB (Most Significant Bit), čímž dostaneme převodní tabulku 7.
Tabulka 7. Převodní tabulka mezi BCD kódem a kódem 5421.
N(10)
Kód 5421
Q3d
Q2c
Q1b
Q0a
0
0
0
0
0
1
0
0
0
1
2
0
0
1
0
3
0
0
1
1
4
0
1
0
0
5
1
0
0
0
6
1
0
0
1
7
1
0
1
0
8
1
0
1
1
9
1
1
0
0
Z ní můžeme jednoduše zapsat Karnaughovy mapy pro jednotlivé výstupní funkce Q0, Q1, Q2Q3, provést jejich minimalizace a získat např. minimální disjunktní formu pro každou výstupní funkci. Vzhledem k tomu, že v kódu uvažujeme pouze číslice 0–9, budou v políčkách Karnaughovy mapy pro indexy 10–15 neurčité stavy X, které můžeme využít při minimalizaci, jak ukazuje obrázek 9.
+
9. Karnaughovy mapy pro vyjádření a minimalizaci jednotlivých výstupních funkcí převodníku.
Obr. 9. Karnaughovy mapy pro vyjádření a minimalizaci jednotlivých výstupních funkcí převodníku.
Díky tomu můžeme vyjádřit minimální disjunktní tvary jednotlivých funkcí a upravit je pro realizaci pomocí hradel NAND:
Q0=a¯dac¯d¯a¯bc=a¯d¯ac¯d¯¯a¯bc¯¯ ,
Q1=aba¯dbc¯=ab¯a¯d¯bc¯¯¯ ,
Q2=ada¯b¯c=ad¯a¯b¯c¯¯ ,
Q3=dacbc=d¯ac¯bc¯¯ .
Konečnou realizaci převodníku pomocí hradel NAND představuje obrázek 10.
+
10. Zapojení převodníku z kódu BCD do kódu 5421 pomocí hradel NAND.
Obr. 10. Zapojení převodníku z kódu BCD do kódu 5421 pomocí hradel NAND.