VYSOKÁ ŠKOLA BÁŇSKÁ–TECHNICKÁ UNIVERZITA OSTRAVA Fakulta elektrotechniky a informatiky
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO Garant předmětu: Jaroslav Zdrálek Autor textu: Jaroslav Zdrálek
Ostrava 2014
Vznik těchto skript byl podpořen projektem č. CZ.1.07/2.2.00/28.0062 Evropského sociálního fondu a státním rozpočtem České republiky.
Za odbornou náplň tohoto vydání odpovídá autor. Jaroslav Zdrálek je docentem na Fakultě elektrotechniky a informatiky VŠB-Technické univerzity v Ostravě, kde přednáší předmět Programovatelné logické prvky pro studenty bakalářského studia, který součástí studijního programu Informační a komunikační technologie. Vznik skript byl podpořen projektem č. CZ.1.07/2.2.00/28.0062 Evropského sociálního fondu a státním rozpočtem České republiky.
Tato publikace neprošla redakční ani jazykovou úpravou.
© Jaroslav Zdrálek, 2014, VŠB-Technická univerzita Ostrava
Autor:
Jaroslav Zdrálek
Katedra:
Katedra telekomunikační techniky
Název:
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Místo, rok, vydání:
Ostrava, 2014, 1. vydání
Počet stran:
50
Vydala:
Vysoká škola báňská-Technická univerzita Ostrava
Náklad
CD-ROM, 10 ks
Neprodejné ISBN 978-80-248-3648-5
CD
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Obsah
1
Úvod ................................................................................................................................. 1 1.1
2
3
4
5
Význam PLD v praxi .................................................................................................. 1
Základní stavební bloky FPGA........................................................................................... 3 2.1
Paměťový element ................................................................................................... 3
2.2
Logická síť na principu LUT tabulek .......................................................................... 5
2.3
Buňka jako hradlo ..................................................................................................... 6
2.4
Vstupně-výstupní buňka........................................................................................... 7
2.5
Rozvody hodinových signálů .................................................................................. 10
2.6
Správce hodinového signálu ................................................................................... 10
2.7
Paměťové bloky ...................................................................................................... 11
2.8
Procesor.................................................................................................................. 14
2.9
Doplňující bloky PLD prvku ..................................................................................... 15
2.10
Literatura ................................................................................................................ 15
Obvody FPGA .................................................................................................................. 17 3.1
Základy FPGA obvodu ............................................................................................. 17
3.2
Propojovací síť a rozvody hodinového signálu ....................................................... 18
3.3
Programovatelné propojky..................................................................................... 18
3.4
Vstupně-výstupní buňky ......................................................................................... 19
3.5
Pouzdra................................................................................................................... 19
3.6
Bloky ....................................................................................................................... 19
3.7
Literatura ................................................................................................................ 20
Systémy SoC ................................................................................................................... 21 4.1
IP moduly ................................................................................................................ 22
4.2
Procesory ................................................................................................................ 23
4.3
Hardwarové řešení SoC .......................................................................................... 23
4.4
Poznámky, trademarks ........................................................................................... 26
4.5
Literatura ................................................................................................................ 26
Kombinační obvod .......................................................................................................... 29 iii
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
6
5.1
Návrh Boolean funkce ............................................................................................ 30
5.2
Návrh Hammingova kodéru a dekodéru ................................................................ 31
5.2.1
Matematika související s lineárními kódy ...................................................... 31
5.2.2
Návrh kodéru .................................................................................................. 32
5.2.3
Návrh dekodéru .............................................................................................. 33
5.3
Zápis v jazyky VHDL ................................................................................................ 35
5.4
Literatura ................................................................................................................ 36
Návrh synchronního číslicového systému ...................................................................... 37 6.1
Desítková sčítačka .................................................................................................. 38
6.2
Datová jednotka decimální sčítačky ....................................................................... 39
6.3
Řídící jednotka ........................................................................................................ 41
6.4
Simulace a realizace ............................................................................................... 44
6.5
Literatura ................................................................................................................ 44
6.6
Příloha 0601............................................................................................................ 45
iv
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
1 Úvod
Báze obvodů pro realizaci číslicových systémů je dnes rozsáhlá množina a je možné ji charakterizovat na základě různých kritérií. Jednoznačnou definici kritérií nelze stanovit, protože se mění rozvojem technologie a prosazováním vyšších stupňů do nižších. Osobně dávám přednost dělení, které je uvedeno dále. Základem i dnes zůstávají obvody malé integrace, které můžeme také nazvat jako standardní obvody. Jedná se o skupinu obvodů řady 74, které stály u začátku technologie TTL – Transistor-Transistor Logic, která byla definována v 60. letech 20. století. Další skupinu tvoří polozákaznické obvody, které se vyrábějí ve spolupráci mezi výrobcem obvodu a zákazníkem. Zákazník většinou specifikuje funkci, podílí se na návrhu zapojení na logické úrovní a výrobce jej potom realizuje na předem dané struktuře. Jedná se o skupinu obvodů, kde základ tvoří hradlová pole a standardní buňky. Skupina zákaznických obvodů – ASIC – Application Specific Integrated Circuit je skupina, která je navrhována přesně na míru požadavků zákazníka. Jedná se o jedinečné zapojení a jedinečnou výrobu obvodů. Návrh a výroba ASIC obvodů je úzce svázána s jeho výrobcem. Skupinu programovatelných logických obvodů PLD někdo zařazuje do polozákaznických obvodů, někdo ji definuje jako samostatnou skupinu. Já se přimlouvám za samostatnou skupinu, protože na definování obsahu neboli funkce obvodu již není nutná spolupráce s výrobcem. Výrobce totiž dodává univerzální zapojení, ve kterém může zákazník naprogramováním realizovat logickou síť definovaných vlastností. Programovatelné logické prvky, Programmable Logic Devices - PLD jsou moderní součástky pro realizaci logických sítí. Vznikly postupně s rozvojem technologie výroby polovodičových prvků a dnes dokáží na ploše několika čtverečních milimetrů soustředit zapojení, které je ekvivalentem až miliónů hradel. Výhodou programovatelných logických prvků je jejich možnost, že sám uživatel definuje funkci, kterou bude prvek plnit. Způsob zadávání logické sítě do prvku se nazývá programování prvku. Po naprogramování každý programovatelný logický prvek realizuje logickou síť.
1.1
Význam PLD v praxi
Význam PLD obvodů v praxi je možné chápat v několika směrech. První je ve zvyšování integrace, a tím ve snižování počtu integrovaných obvodů k realizaci daného zapojení, obr. 01-01. Výsledkem je zmenšení rozměru desky plošného spoje a zároveň menší plocha, kterou zabírají integrované obvody. Jedná se asi o 50-ti násobný pokles zastavěné plochy v porovnání s realizací pomocí standardních obvodů řady 74. Potom skutečnou velikost 1
PLD Programmable Logic Devices
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
desky určuje konektor desky a počet propojovaných signálů na okolí. Z pohledu spotřeby elektrické energie dochází k jejímu poklesu.
108 integrovaných obvodů řady 74
30 integrovaných obvodů GAL
1 integrovaný obvod CPLD nižší velikosti
Obr. 01-01 Význam zvyšování integrace
Další význam je ve zkrácení cyklu vývoj, výroba a použití výrobku. Nutno si uvědomit, že návrhové systémy, které má návrhář, poskytují prostředky jednak pro návrh a také pro simulaci a programování PLD prvku. Tím je možné měnit návrh velmi rychle, řádově minuty, hodiny. Nehledě, že tyto změny nemusí mít vliv na zapojení desky plošných spojů. Proto zde dochází k výraznému zkrácení cyklu vývoj, výroba a použití. Při porovnání s manuálními postupy používanými v minulosti jako je kreslení schémat, návrh desky plošných spojů, ověření a zapracování změn dochází dnes použitím PLD prvků k výrazným časovým úsporám. Dalším významným principem, který může zkrátit cyklus vývoj, výroba a použití je program IP – Intellectual Properties u výrobců PLD obvodů. Jedná se o program v rámci, kterého si můžeme zakoupit již vyřešený programový zápis číslicového bloku a tento zápis použít ve vlastním řešení. Nákupem vyřešeného bloku se urychluje návrh vlastního číslicového systému. Jako již vyřešené bloky lze zakoupit například komunikaci na PCI sběrnici, USB řadič, Ethernet řadič, procesor a jiné. Aplikace technologie ISC umožňuje programovat PLD prvek osazený na desce plošných spojů. Tento princip je také součástí zkrácení cyklu vývoj, výroba a použití, ale také přímo zlevňuje výrobu. Na programování PLD prvků nemusí být speciální zařízení, jako jsou hardwarové programátory. Další význam technologie ISC je možnost upgradů obsahu PLD prvků, ke kterým může docházet během používání. Nezanedbatelný význam je i možnost změny zapojení principem reprogramování. Jedná se o skutečnost, že v prvotním návrhu se mohou vyskytnout chyby, které lze dalším návrhem odstranit a tyto změny uplatnit již na vyrobených či dokonce distribuovaných systémech. Význam PLD obvodů lze spatřovat i v ochraně zapojení proti neautorizovanému kopírování pomocí bezpečnostní propojky – Security Fuse. Tímto způsobem je znemožněno kopírování zapojení konkurencí a ochrana vlastnických práv k zapojení.
2
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
2 Základní stavební bloky FPGA
FPGA – Field Programmable Gate Array, obvody mají dnes mnoho společných vlastností, zapojení. Principy zvyšování integrace vedly i k změně znázorňování obvodů, kdy se dává přednost pohledu na organizaci čipu v integrovaném obvodu, obr. 02-01.
Piny integrovaného obvodu
Vstupně výstupní buňky Jádro programovatelného logického obvodu
Obr. 02-01 Pohled na křemík PLD obvodu
Obvody obsahují vstupně-výstupní buňky a jádro obvodu. Jádro obvodu slouží k vytváření logické sítě a vstupně-výstupní buňky jej propojují na piny integrovaného obvodu. Vstupněvýstupní buňky jsou umístěny na okraji křemíku a jsou napojeny na jádro programovatelnou propojovací sítí. Programovatelné propojovací sítě se již detailně nerozkreslují pro svoji rozsáhlost a složitost. Nutno si uvědomit, že tyto sítě mají desetitisíce až statisíce programovatelných propojek a spojů různých vlastností. Jako vlastnosti je možno uvést délku spojů, hierarchické uspořádání spojů, možnost propojit každou druhou, čtvrtou buňku apod. Detailní znalost propojovací sítě pro návrháře není nutná, protože konečné propojení vždy provádí návrhový systém. Proto všechny detaily o propojovací sítí musí znát návrhový systém.
2.1
Paměťový element
V PLD prvcích se používá pojem paměťový element jako všeobecné označení, protože představuje různé typy klopných obvodů s různými vlastnostmi. Nejčastěji se používá D klopný obvod, popřípadě D/T klopný obvod. Jiné typy klopných obvodů se vyskytují ojediněle. Typické zapojení paměťového elementu je na obr. 02-02 a vyznačuje aplikací paměťového elementu a multiplexeru. Potom multiplexer umožňuje buňku použít jako kombinační obvod nebo jako buňku s paměťovým elementem. 3
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Kombinační obvod
D/T S
Zapojení buňky s D/T klopný obvod
Q
EN
CLK R
Obr. 02-02 D/T klopný obvod jako paměťový element
Paměťový element jako D/T klopný obvod je na obr. 02-02. Tento element buď pracuje jako D nebo T klopný obvod, výběr se provádí programovatelnými propojkami. Součástí paměťového elementu je i povolovací vstup, který povoluje synchronní činnost klopného obvodu. Před hodinovým a povolovacím vstupem bývají předřazeny multiplexery pro výběr signálů z možných zdrojů. Zdrojem těchto signálů může být logická síť, kterou navrhuje uživatel nebo signál odvozený od pinů PLD prvků. Aplikace multiplexeru na hodinovém vstupu klopného obvodu umožňuje i volit, na kterou hranu bude klopný obvod reagovat, vzestupnou nebo sestupnou.
Din EN CLK
D
Q
Din
D
D/T klopný obvod jako paměťový element
Q
EN C
CLK
C
Obr. 02-03 Povolovací vstup D klopného obvodu
Použití povolovacího vstupu je možné chápat jako zapojení na obr. 02-03. Hodinový signál pro D klopný obvod je vytvářen na součinovém hradlu. Tento princip se běžně používá při zápisu dat do registru. Jiná modifikace je uplatněním multiplexeru na D vstupu klopného obvodu. V tomto případě, je-li signál EN=0 se výstup Q opětovně přivádí na D vstup. Jedná se o NOP operaci, výstup se nemění. Je-li signál EN=1 provede se zápis nové informace ze signálu Din. Paměťový element může reagovat na hranu nebo úroveň hodinového signálu. D klopný obvod, který reaguje na hranu, se nazývá D-FF, D – Flip Flop a D klopný obvod reagující na úroveň se nazývá D – Latch. T klopný obvod reaguje pouze na hranu (flip flop). Dalšími vstupy paměťového elementu jsou nastavení - set a nulovaní - reset výstupu Q. Příslušné signály se vytvářejí buď logickou sítí, nebo jsou odvozeny od vyhrazených pinů integrovaného obvodu. Uvedené signály mohou být vytvářeny pro každý paměťový element
4
Povolení hodin pro D/T klopný obvod
Nulování a nastavení pro D/T klopný obvod
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
nebo pro více paměťových elementů, které vytvářejí určitý blok. Společné nastavení a nulování pro blok paměťových elementů je častější řešení. Nastavení a nulování může být synchronní nebo asynchronní. Asynchronní nulování a nastavení není závislé na hodinovém signálu, naproti synchronní se provede pouze s hodinovým signálem. Akce nulování a nastavení má vždy přednost před datovým vstupem D/T klopného obvodu. Existují i zapojení paměťového elementu bez nulování a nastavení. V tomto případě se uplatňuje akce nulování po náběhu napětí, power up-reset.
2.2
Synchronní a asynchronní nulování a nastavení
Logická síť na principu LUT tabulek
a b c d
y LUT Paměťový element
Propojovací pole
Propojovací pole
Buňky na základě LUT tabulek – Look Up Table vůbec nesouvisí s teorii AND a OR matice. Základní zapojení buňky s LUT tabulkou je na obr. 02-04. Buňka s LUT tabulkou je logické zapojení, které dokáže pracovat jako kombinační síť nebo kombinační síť s paměťovým elementem.
LUT tabulka
Obr. 02-04 Základní zapojení buňky s LUT tabulkou
Základ tvoří LUT tabulka, která odpovídá logické kombinační síti a dokáže realizovat libovolnou B-funkci o čtyřech vstupních proměnných. Počet vstupních proměnných signálů do LUT tabulky bývá malý, typicky 4 signály. Buňka dále obsahuje paměťový element a multiplexer na výstupu buňky, který umožňuje konfigurovat výstup jako kombinační, přímo z LUT tabulky nebo jako výstup s paměťovým elementem. Skutečné zapojení, a tím i funkci buňky definují programovatelné propojky. Vstupy a výstup buňky jsou zapojeny na programovatelnou propojovací síť. Jako paměťový element se převážně používá D klopný obvod nebo D/T klopný obvod, skutečný typ závisí na konkrétním typu PLD prvku. Jiná modifikace zapojení LUT buňky je, že výstup klopného obvodu je přiveden přes multiplexer na vstup LUT tabulky místo jedné vstupní proměnné, obr. 02-05. Tato volba zapojení pomáhá při realizaci sekvenčních obvodů, kdy může dojít k zmenšení zpoždění kombinační sítě vytvářející následující stav, a tím k možnému zvýšení hodinové frekvence.
5
Propojení výstupu D klopného obvodu na vstup LUT
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
a b c
y
LUT Paměťový element
d
Propojovací pole
Propojovací pole
Předcházející buňka
Následující buňka
Obr. 02-05 Modifikace zapojení buňky s paměťovým elementem
Další modifikace spočívá v možnosti propojit klopné obvody sousedních buněk jako posuvný registr. Možnost použít LUT tabulku k vytváření kombinačního obvodu zůstává. Uvedená zapojení se dají realizovat propojením přes propojovací síť, ale toto řešení má menší zpoždění.
2.3
Propojení D klopných obvodů jako sériový registr
Buňka jako hradlo
U FPGA obvodů se objevuje řešení, kdy buňka má velmi jednoduché zapojení. Celkové zapojení obvodů pak používá jenom jeden typ buňky nebo několik typů. Buňka může obsahovat zapojení pouze kombinačního obvodu, pouze paměťový element nebo kombinaci obou typů. Jako příklad, kdy obvod obsahuje pouze kombinační buňku, lze uvést buňku jako hradlo NAND o 4 vstupech. V tomto případě se všechny prvky logické sítě musí sestavit pouze z tohoto hradla.
Q C
Q
D
Obr. 02-06 Zapojení D klopného obvodu pomocí hradel
Potřebné paměťové elementy je také nutno sestavovat z těchto hradel, obr. 02-06. Toto sestavení je většinou již dáno výrobcem jako element knihovny. Sestavení kombinační logické sítě není problém.
6
Buňka jako hradlo
Hodnoty
B-funkce
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
0
0
1
1
0
2
0
3
1
4
1
5
1
6
0
7
x2
Pravdivostní tabulka
MUX
x2 0 0 0 0 1 1 1 1
y
x1 0 0 1 1 0 0 1 1
B-funkce
x0 0 1 0 1 0 1 0 1
y 0 1 0 0 1 1 1 0
x1 x0
Obr. 02-07 Buňka jako multiplexer
Jiné řešení kombinační buňky je zapojení, které dokáže realizovat libovolnou
B-funkci
o
definovaném počtu proměnných, například 3 vstupních proměnných, obr. 02-07. Použití této buňky jako paměťového elementu není možné. Paměťový element ani nelze sestavit vhodným zapojením kombinačních buněk, jedná se čistě pouze o kombinační buňku. Potom obvod také obsahuje buňky s paměťovým elementem a jiné použití není možné.
C
C
R
C
C
R
C
C
R
C
C
R
C
C
R
C
C
C
R
C
C
R
C
C
R
C
C
R
C
C
R
C
Propojovací síť
Kombinační buňka
PLD prvek jako moře hradel
Registrová buňka
Obr. 02-08 Uspořádání PLD prvku principem moře hradel Konečný PLD prvek obsahuje vhodný počet kombinačních a paměťových buněk. Příklad pohledu na čip je na obr. 02-08 a jedná se o uspořádání moře buněk – sea of gates. Jedná se o uspořádání, kdy jednotlivé buňky jsou těsně vedle sebe a propojovací síť je nad nimi. Jedná se o uspořádání v prostoru.
2.4
Buňka jako multiplexer
Vstupně-výstupní buňka
Vstupně-výstupní buňka je často označována jako IO buňka – Input Output Cell, která propojuje interní logiku obvodu s okolím PLD prvku. IO buňka může být pouze kombinační 7
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Z propojovací sítě
nebo s paměťovými elementy. Zapojení pouze kombinační IO buňky je na obr. 02-09. IO buňka je obousměrná. To značí, že ji lze konfigurovat buď jako vstupní, dále jako výstupní nebo jako obousměrnou – vstupně-výstupní. Výstupní budič je proto třístavový a jeho stav je řízen povolovacím signálem z logiky.
Kombinační I/O buňka
Do propojovací sítě
pin
Obr. 02-09 Základní IO buňka bez paměťových elementů
Aplikace jako vstupní buňky je dáno pouze tím, že povolovací signál třetího stavu bude aktivní, výstupní budič bude v třetím stavu. IO buňka je napojena na interní propojovací síť, a tím je umožněn velký výběr zdrojů pro výstup. Při propojování IO buněk na interní logiku se můžeme setkat s různými omezeními, které závisí na konkrétním PLD prvku.
Přizpůsobující horní odpor
VCCIO
Bus hold
Do propojovací sítě
Z propojovací sítě
Omezující horní dioda
Zapojení dalších vlastností IO buňky
Přizpůsobující sériový odpor
pin Velikost výstupního proudu
Otevřený kolektor
Omezující dolní dioda
Logika Strmost výstupu – slew rate
zpoždění
Přizpůsobující dolní odpor Logika
Obr. 02-10 Zapojení IO buňky s dalšími možnými obvody
8
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Skutečné zapojení IO buňky je mnohem složitější a může být doplněno o obvody uvedené na obr. 7 - 20. Jedná se o obvody a vlastnosti, které určují výsledné vlastnosti IO buňky na pinu integrovaného obvodu. U skutečných IO buněk mohou být aplikovány pouze některé obvody nebo vlastnosti. VCCIO1 Blok IO buněk
VCCIO4
Bloky I/O buněk
VCCIO2
VCCIO3
Obr. 02-11 Vytváření IO bloku a přiřazení napájecího napětí Číslicové systémy pracují s různými napěťovými definicemi úrovní L a H a různou definicí překlápěcího napětí – threshold level VTH. Tyto definice se slučují pod pojmem logika. Vstupně-výstupní buňku je možné konfigurovat pro různé logiky. Proto vstupně-výstupní buňky se slučují do bloků a celému bloku se definuje jedna logika. Tyto bloky mají samostatné napájecí napětí VCCIO, které je vyvedeno na samostatný pin obvodu, obr. 02-11. Hodnota tohoto napájecího napětí je součástí definice logiky, ve které bude tento blok pracovat. Počet vstupně-výstupních buněk v bloku a počet bloků v PLD prvku je dán konkrétním typem. Toto řešení umožňuje zapojit PLD prvek do různých logik současně.
D
Q
EN
I/O buňka s paměťovým elementem
Propojovací síť
CLK D
Q
pin
EN CLK
D
Q
EN CLK
Obr. 02-12 Základní zapojení IO buňky s paměťovými elementy
9
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
IO buňka může být realizována s paměťovým elementem, většinou se jedná o D klopný obvod, obr. 02-12. Na každý vodič IO buňky je zařazen D klopný obvod. Zapojení multiplexeru dovoluje konfigurovat daný vodič jako kombinační nebo s paměťovým elementem. Paměťové elementy mají i povolovací vstup pro hodinový vstup a také mohou být doplněny o vstupy pro nulování nebo nastavení. Samozřejmě, že po náběhu napětí se očekává nastavení L úrovně na výstupu. Skutečné zapojení IO buňky může být ještě doplněno o Boundary Scan Register, který slouží k testování PLD prvku a desky plošného spoje. V IO buňce se aplikují tři buňky Boundary Scan Registru, pro vstupní signál, pro výstupní signál a pro signál řízení třetího stavu. Každá buňka může být realizována jedním nebo dvěma D klopnými obvody a zapojení buňky registru je dáno definicí Boundary Scan.
2.5 Rozvody hodinových signálů Rozvod hodinových signálů je velice složitá problematika, kterou v rámci PLD prvku zvládá jeho výrobce. Jedná se o splnění podmínky, že vzorkovací hrana musí být u všech klopných obvodů ve stejném čase, ideální případ. V praxi se jedná, aby rozdílový čas – skew time byl minimální, obr. 02-13. C1 CLK
D Q
CLK
C
C1 C2
D Q
C2
C
Skew time Obr. 02-13 Problém rozvodu hodinového signálu
Nutno si uvědomit, že spoj od budiče po hodinový vstup má určité zpoždění. Pokud bude toto zpoždění ve větvích různé, dojde k časovému posuvu na hodinových vstupech klopného obvodu, a tím k vzniku časového rozdílu – skew time. Při velké hodnotě rozdílového času může být funkce registru nebo sekvenčního obvodu ohrožena. Typický příklad je sériový posuvný registr, kdy může dojít k ztrátě informace. Uživatel nemusí být s touto problematiku detailně seznámen, protože výrobce PLD prvku věnuje této problematice velkou pozornost a problém se snaží eliminovat. Skutečné rozvody hodinových signálů v PLD prvcích jsou realizovány samostatnou a složitou sítí.
2.6
Správce hodinového signálu
Dnešní PLD prvky používají hodinový signál až stovky MHz. Generovat takové hodiny mimo PLD prvek a navrhnout jejich rozvod do více prvků je velice náročné. Za další, v zapojení může být použito více hodinových signálů s definicí vzájemného časového posuvu. Proto výrobci přímo v PLD prvku vytvořili speciální obvody pro generování hodinových signálů pod 10
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
různými názvy, ale ve všeobecnosti se jedná o správu hodinového signálu. Jeho základní vlastnosti je násobení vstupního hodinového signálu definovanými koeficienty pomocí fázového závěsu - PLL obvod. Výstupem může být několik hodinových signálů různé frekvence s možností definovat fázové nebo časové posuvy mezi nimi, obr. 02-14. Podrobněji o dané problematice pojednává například literatura [Altera 2003], [Actel 2004], [Latticesemi 2003] a [Xilinx 2003].
CLK IN Správce hodinového signálu
CLK IN x m/n CLK IN x m/n
Definovaný fázový posun
Obr. 02-14 Možná činnost správce hodinového signálu
2.7
Paměťové bloky
PLD prvky dnes obsahují paměti, které mohou sloužit k uchovávaní informace. Tyto paměti jsou v PLD prvku vytvořeny jednak jako samostatné zapojení nebo existuje varianta, kdy část PLD prvku sloužící k vytváření logické sítě může být konfigurována jako paměť. Tyto paměti mají různé provedení a možné zapojení. U každého prvku je definován způsob napojení na propojovací síť a buňky vytvářející logickou síť. Jedná se o paralelní napojení nebo sériové napojení. Obě verze ještě v synchronním nebo asynchronním provedení. Paralelní napojení značí, že adresa a data jsou k paměti přivedena samostatně, paralelně. Synchronní napojení značí, že se komunikace probíhá synchronně podle hodinového signálu. V některých PLD prvcích se můžeme také setkat s blokem EPROM paměti, která slouží k uchování informací získaných v průběhu zpracování nebo k uchování konfigurace pro zpracování i v případě, že prvek bude bez napájení. Zajímavější je aplikace SRAM paměti - Static RAM, kdy se můžeme setkat s různými řešeními a použitím. Organizace paměti je konfigurovatelná v daných mezích, například SRAM paměť o kapacitě 1 024 bitů může být organizována jako 1 024 x 1 bit, 512 x 2 bity až 32 x 32 bitů. Skutečné kapacity závisí na konkrétním PLD prvku. Z pohledu přístupu k datům se může jednat o asynchronní přístup nebo synchronní. Asynchronní přístup je dán signály povolení a zápis, enable and write nezávislé na hodinovém signálu. U synchronního přístupu jsou všechny akce v paměti jako čtení a zápis prováděny podle hodinového signálu. Další možné konfigurace SRAM paměti jsou uvedeny dále.
11
Typy paměťových bloků a přístupy k datům
Statická RAM paměť
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO Adresa Data
Jednoportová paměť
Blok paměti
Řízení
Obr. 02-15 Jednoportová paměť
Jednoportová paměť, jedná se o klasickou SRAM paměť. K paměťové informaci lze přistupovat pomocí jedné sady - adresy, dat a řídicích signálů, obr 02-15.
Adresa zápisu Data zápisu
Adresa čtení Blok paměti
Řízení zápisu
Řízení 1. portu
Čtená data Řízení čtení
Adresa 1. portu Data 1. portu
Dvouportová paměť
Adresa 2. portu Blok paměti
Data 2. portu
Řízení 2. portu
Obr. 02-16 Principy dvouportové paměti
Dvouportová paměť, jedná se o přístup k paměťové informaci ze dvou různých nezávislých zdrojů, obr. 02-16. Paměť má dva porty a podle jejich použití se dvouportová paměť dělí na dvě skupiny. První skupina jsou paměti, kdy jeden port slouží k zápisu informace na danou adresu a druhý port k čtení informace z dané adresy. Paměť má samostatný vstup pro data a adresu zápisu a další vstup pro adresu čtení a výstup pro čtená data. Druhá skupina je paměť, kdy každý port může informaci do paměti zapisovat a číst nezávisle na druhém portu.
Sériový posuvný registr
Sériový posuvný registr, paměť může být konfigurována do funkce sériového posuvného registru. FIFO, LIFO – fronta, zásobník, jedná se o zapojení paměti jako fronta, FIFO – First In First Out nebo zásobník, LIFO – Last In First Out. Potřebné obvody pro jejich činnost jsou již
12
FIFO a LIFO paměť
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
vytvořeny a uživatel nepracuje s adresou buňky ale pouze s principem činnosti. Má k dispozici pouze signály čtení a zápis, popřípadě signalizační signály o překročení kapacity.
Klíč
Maska
Data in
Čtení Klíče pamatované
Zápis
Data
Data out Obr. 02-17 Blokové zapojení CAM paměti
CAM paměť, Contents Access Memory, je dalším významným typem paměti, viz obr. 02-17. Jedná se o paměť, kde se k pamatované položce přistupuje podle klíče. S každou paměťovou buňkou dat je pevně spojen klíč. Klíč je kombinace bitů, která charakterizuje data podle představ uživatele. Právě tento klíč se používá k čtení a zápisu CAM paměti. Asociativní paměť se používá k vyhledávání dat podle klíče, třídění dat nebo jako cache paměť. Při čtení CAM paměti se na vstup přivede klíč, který se porovná s pamatovanými klíči. Řádek paměti, kde nastane shoda se vstupním klíčem, se aktivuje a příslušná data se objeví na výstupu paměti. Maska je modifikací CAM paměti a určuje, které bity klíče mají být porovnávány. Zápis do CAM paměti je komplikovanější a má dvě základní varianty. První je zápis nového klíče a dat do volné buňky CAM paměti. Druhá varianta je pouze změna dat pro daný klíč. Jedna buňka CAM paměti je na obr. 02-18. Každá buňka se skládá ze tří polí. Každá buňka obsahuje příznak O délky jeden bit, který určuje, zda buňka obsahuje data nebo je volná. Příznak je skrytý bit a je určen pouze pro interní potřebu CAM paměti. Pole pamatovaný klíč a data slouží k uchování informace. Každá buňka má komparátor, který porovná pamatovaný klíč se vstupním klíčem K1 až K3. Výstupní signál komparátoru aktivuje pouze jedno pole data, které je pevně spojeno s polem pamatovaného klíče. Signály masky M1 až M3 mohou být dalším vstupním signálem CAM paměti a určují, které bity klíče K1 až K3 se budou používat pro porovnání. Základní operace s CAM paměti jsou čtení a zápis. K1
K2 M1
O
K3 M1
M1
Klíč pam.
Komparátor
Data Shoda
Obr. 02-18 Možné zapojení jedné buňky CAM paměti
13
CAM paměť paměť adresovaná obsahem
Princip přístupu pomocí klíče
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Zápis se provádí do volné buňky a zapíše se hodnota klíče a příslušná data. Bit obsazení buňky se nastaví na hodnotu obsazeno. Jiný zápis může přepsat pouze pole data novým záznamem pouze u buněk, kde došlo ke shodě klíčů. Při čtení se na vstup CAM paměti přivede klíč K1 až K3, který je přiveden do každé buňky, obr. 02-18. V každé obsazené buňce se provede porovnání na shodu. V případě shody se na výstupu datového pole objeví datová informace spojená s klíčem. Vstupní klíč může být maskován, maska určuje, zda příslušný bit klíče bude použit pro výběr, zda bit klíče bude zahrnut do vyhodnocení shody nebo ne.
Zápis do CAM Princip přístupu paměti pomocí klíče
Čtení z CAM paměti
Toto je pouze základní princip, který neřeší krajní situace. Tyto krajní situace nutno potom signalizovat dalšími signály. Jedná se o situace:
2.8
Jak se bude chovat CAM paměť, když všechny buňky budou obsazeny a je požadavek na další zápis. Zapsat a kam nebo nezapsat. Jakým způsobem nulovat buňku CAM paměti. V případě čtení může nastat situace, že dvě a více buněk vyhodnotí shodu. Potom je nutno definovat, zda výstup bude pouze jeden, první buňka nebo více, sekvence dat ze všech buněk. Zápis dat do volné buňky nebo podle klíče.
Možné krajní situace při činnosti CAM paměti
Procesor
Dnes PLD prvky mohou obsahovat i procesor, který lze použít k návrhu číslicového systému. Některé části systému lze řešit softwarově a jiné hardwarově. Zde se setkáváme s dvojím provedením, soft a hard procesor. Hard procesor je hardwarový procesor je blok, který je přímo umístěný na křemíku a definovaným způsobem napojen na obvody PLD prvku. Může se jednat o mikroprocesor 8051 pro jednoduché aplikace až po Power PC procesor, pro složitější aplikace. V případě výkonných procesorů pro složité aplikace obsahuje PLD prvek ještě další speciální bloky. SRAM PLD
Hard procesor
SRAM PLD
Procesor
Procesor
EPROM
Hard procesor
EPROM
Soft procesor
Obr. 02-19 Hard a soft procesor v PLD prvku
Soft procesor je vlastně programový zápis, který se dodává jako IP. Soft procesor se vytváří z části PLD prvku naprogramováním a zbytek PLD prvku se použije pro podpůrné obvody procesoru, speciální zapojení podporující procesor. 14
Soft procesor
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Návrhář rozhoduje o použití procesoru v návrhu číslicového systému, a tím i o řešení některých situací programově. S tím souvisí i speciální nadstavba vývojového systému, která propojuje programový zápis s hardwarovým řešením, hlavně v oblasti simulace. Vývoj procesorových aplikací se zásadně předpokládá na bázi ANSI C jazyku. Zvládnutí asembleru pro několik typů procesorů a optimálního zápisu je náročné a proto je vhodné tyto činnosti přenechat překladačům.
2.9
Doplňující bloky PLD prvku
PLD prvky, hlavně nejvyšší integrace obsahují přímo na křemíku specializované obvody pro různé aplikace. Běžně to jsou paměťové bloky a procesory, které jsou uvedené výše. Výčet všech bloků není možný, protože se stále doplňuje o nové bloky. Proto si zde uvedeme jen některé a jejich možné použití.
PLD
Násobička
ADC
RAM
Procesor
PLD
PLD
SERDES
Násobička
Hardwarové násobičky. Hlavní použití je pro zpracování číslicových signálů, typicky číslicové filtry. A/D převodníky. Pro číslicové zpracování signálu, typicky číslicové filtry, řízení. Obvody pro vysílaní a příjem sériové informace SERDES – Serializer - Deserializer. Zde se jedná o sériové toky řádově Gbit za sekundu. Aplikace SDH, 10Gbps Ethernet a podobně.
Násobička
LVDS piny
PLD
Obr. 02-20 Další možné doplňující bloky PLD prvku
2.10 Literatura [Altera 2003]
Using the ClockLock & ClockBoost PLL Features in APEX Devices; AN115; Altera Corporation; 2003; http://www.altera.com/literature/an/an115.pdf?GSA_pos=3&WT.oss_r=1& WT.oss=AN115; on line 2014-010-21
[Actel 2004]
Using ProASICPLUS Clock Conditioning Circuits; PAPLUSdynamicAN; Actel Corporation; 2004; http://www.microsemi.com/documentportal/doc_view/129861-ac306-using-proasic-sup-u-plus-u-sup-clockconditioning-circuits-app-note; on line 2014-10-21 15
Další doplňující bloky PLD prvku
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
[Latticesemi 2003] isoLSI/GAL Matastability Report; Lattice Semiconductors Corporation; 2003; http://www.latticesemi.com/~/media/Documents/ApplicationNotes/IK/isp LSIGALMetastability.PDF?document_id=194; on line 2014-10-21 [Xilinx 2003]
Using Digital Clock Managers (DCMs) in Spartan-3 FPGAs; XAPP462; Xilinx Inc.; 2003; http://www.xilinx.com/support/documentation/application_notes/xapp46 2.pdf; on line 2014-10-21
[Xilinx_2014a] UltraScale Architecture and Product Overview; Xilinx, DS890, 2014; http://www.xilinx.com/support/documentation/data_sheets/ds890ultrascale-overview.pdf; on line 2014-10-21 [Xilinx_2014b] 7 Series FPGAs Overview; Xilinx, DS180; http://www.xilinx.com/support/documentation/data_sheets/ds180_7Serie s_Overview.pdf; on line 2014-10-21 [Xilinx_2014c] Spartan-6 Family Overview; Xilinx, DS160, 2011; http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf; on line 2014-10-21 [Zdralek_2006] Jaroslav Zdrálek: Programovatelné logické prvky, skripta VŠB-TU Ostrava, 2006, ISBN 80-248-1060-3
16
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
3 Obvody FPGA
Obvody FPGA – Field Programmable Gate Array považuji za nejvyšší stupeň PLD prvků. Jejich přesné vymezení je pro mne problematické, obdobně jako u CPLD obvodů. FPGA obvody vycházejí z hradlových polí, nepoužívají princip AND OR matice. Typickými znaky FPGA obvodů v minulosti bylo použití LUT buňky, programovatelné propojovací sítě v jedné úrovni a propojky na bázi statické RAM paměti. Z pohledu uživatele charakterizují FPGA FPGA – Field obvody následně: Programmable Aplikace propojovací sítě v jedné úrovni, která propojuje buňky vytvářející logickou Gate Array síť a vstupně-výstupní buňky. Aplikace vstupně-výstupních buněk s paměťovým elementem, výjimečně bez. Reprogramovatelné prvky, aplikace energeticky závislých propojek na principu statické RAM paměti, u některých typů také energetických nezávislých propojek. Počet programovatelných propojek je jednotky až desítky miliónů propojek. Stupeň integrace. Dnes FPGA prvky mají počet ekvivalentních hradel od několika desetitisíců až po milióny ekvivalentních hradel. FPGA prvky jsou nejvyšší třídou PLD prvků.
3.1 Základy FPGA obvodu Základní popis je vhodné začít pohledem na křemík FPGA prvku, obr. 03-01. Základem je buňka, která dokáže vytvářet určitou logickou funkci s nebo bez paměťového elementu. FPGA prvek pak obsahuje několik desítek tisíc až milióny takových buněk. Pro zajištění vstupu a výstupu se používají IO buňky jako u CPLD obvodů. Programovatelná propojovací síť Buňky
Programovatelná propojovací síť
piny
piny IO buňky IO buňky
Propojky, SRAM
Základní architektura FPGA prvku
Buňky, princip moře hradel Buňky
Obr. 03-01 Základní pohled na křemík pro FPGA obvody
17
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Původně se jednalo o umístění buněk, propojovací sítě a IO buněk v jedné vrstvě. Statická RAM paměť pro řízení propojek byla umístěná pod touto vrstvou. Dnes se spíše upřednostňuje uspořádání, kdy nejvyšší vrstva je propojovací síť s programovatelnými propojkami, pod ní je vrstva buněk a IO buněk. Uspořádáním buněk těsně vedle sebe umožnilo podstatně zvýšit hustotu buněk na křemíku, protože vrstva již neobsahuje propojovací síť. Tato síť je umístěna nad buňkami. Pro uspořádání buněk těsně vedle sebe se používá pojem moře hradel – sea of gates. Buňka je převážně realizována pomocí LUT tabulky s paměťovým elementem. Některé FPGA obvody mají v jedné buňce i dvě LUT tabulky s dvěma paměťovými elementy. Lze se setkat i s aplikací jiných speciálních zapojení, které tvoří buňku. Počet buněk FPGA obvodů na bází LUT tabulky se dnes pohybuje od desítek tisíc až po statisíce. V případě jednodušších buněk může FPGA obvod obsahovat až milióny buněk. Obdobný je i počet klopných obvodů.
3.2 Propojovací síť a rozvody hodinového signálu Propojovací síť je v jedné úrovni. Obsahuje spoje různých vlastností, které umožňují propojit jednotlivé buňky optimálním způsobem a hlavně s co nejmenším zpožděním. Proto se zde můžeme setkat se speciálními spoji propojující sousední buňky, propojující každou druhou, čtvrtou buňku, s třístavovými spoji přes celý FPGA obvod, spoji určenými pro napojení vstupně-výstupních buněk apod. Detailní znalost propojovací sítě mají vývojové systémy, pro uživatele je to jenom informativní záležitost. FPGA obvody obsahují samostatnou programovatelnou síť pro rozvod hodinového signálu k jednotlivým klopným obvodům, aby byl zajištěn minimální rozdílový čas – skew time na hodinových vstupech klopných obvodů. Jako zdroje hodinového signálu se dnes zásadně používají správci hodin.
3.3 Programovatelné propojky Pro FPGA obvody bylo význačné použití programovatelných propojek, jejichž stav je uchováván ve statické RAM paměti. Tím se FPGA obvody stávají energeticky závislé a po každém zapnutí napájení je nutno do nich nahrát obsah, který definuje propojení. Proto se FPGA obvody často kombinují s EPROM pamětí, která uchovává obsah FPGA obvodů. Většinou se jedná o speciální EPROM paměti, které jsou pro tento účel přímo určené. EPROM obvody a FPGA obvod se propojují definovaným způsobem podle katalogu. Samozřejmě, že paměť EPROM může být nahrazena jiným systémem pro uchování dat, např. počítačem. Základní způsob nahrávání dat je sériový nebo paralelní způsob, obr. 03-02. Řízení EPROM
FPGA Data paralelní sériová
Obr. 03–02 Nahrávání obsahu FPGA obvodu paralelním způsobem 18
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO FPGA
Nadřízený řídicí systém
FPGA
TDI
TDO
TDI
TDO
TMS
TCK
TMS
TCK
(Master)
Obr. 03–03 Aplikace BS interface pro nahrávání obsahu FPGA obvodu
V případě sériového způsobu se dost často používá Boundary Scan interface (IEEE 1149.1), obr. 03-03. Samozřejmě, že existují i FPGA obvody s energeticky nezávislými propojkami, ale je jich méně.
3.4 Vstupně-výstupní buňky Vstupně-výstupní buňky FPGA obvodů jsou většinou s paměťovým elementem, ale i s dvěma elementy. Dva paměťové elementy se dají použít pro vytvoření DDR interface na paměť nebo pro eliminaci metastabilního stavu. Vlastnosti samotného pinu, budiče a vstupního hradla jsou dané konkrétním typem a výrobcem PLD prvku. Jedná se o vlastnosti jako přizpůsobovací odpory, logika, ošetřující diody a další. Vstupně-výstupní buňka FPGA obvodů dále obsahuje buňky Boundary Scan registru, které jsou určené pro testování. Jedná se o prostředek umožňující snadné testování DFT – Design For Test. Mnohdy může být základem vestavěného testování BIST - Built In Self-Test.
3.5 Pouzdra FPGA obvody se dodávají v různých pouzdrech pro různá prostředí. Počet pinů je dán konkrétním typem a nejvyšší prvky mají až 1 500 pinů při rozměrech pouzdra 4 x 4 cm (pouzdro BGA 1508). Napájení obvodu je přes několik pinů, hlavně zemnící piny, aby se vyloučila možnost generovat falešné impulsy v důsledku posuvu potenciálu země. Jedná se o důsledky slew rate signálů. Další část pinů je věnována hodinovým vstupům, signálům určených pro nahrávání obsahu a také Boundary Scan interface.
3.6 Bloky FPGA obvody vždy byly špičkou PLD prvků, a proto jsou do nich zapracovány další podporné specializované bloky jako jsou:
Statické RAM paměti. Jedná se o několik bloků paměti, kdy celková kapacita může dosáhnout až jednotek Mbitů. Hardwarové násobičky, A/D a D/A převodníky pro číslicové zpracování signálů. Obvody SERDES pro zpracování sériového toku až do jednotek Gbitů za sekundu. Hardwarové procesory
19
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
3.7 Literatura [Xilinx_2014a] UltraScale Architecture and Product Overview; Xilinx, DS890, 2014; http://www.xilinx.com/support/documentation/data_sheets/ds890ultrascale-overview.pdf; on line 2014-10-21 [Xilinx_2014b] 7 Series FPGAs Overview; Xilinx, DS180; http://www.xilinx.com/support/documentation/data_sheets/ds180_7Serie s_Overview.pdf; on line 2014-10-21 [Xilinx_2014c] Spartan-6 Family Overview; Xilinx, DS160, 2011; http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf; on line 2014-10-21 [Zdralek_2006] Jaroslav Zdrálek: Programovatelné logické prvky, skripta VŠB-TU Ostrava, 2006, ISBN 80-248-1060-3
20
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
4 Systémy SoC
Systémy na chipu je nejnovější trend v oblasti programovatelných logických obvodů. Historicky, první SoC systémy vznikají v FPGA obvodech ale dnes se stávají samostatnou skupinou, kdy FPGA obvod je pouze dílčím blokem SoC. Jinak, integrovaný obvod obsahující SoC mívá jako dílčí blok FPGA obvod. Jednoznačná definice SoC je problematická a na Internetu lze nalézt více definicí, které se vzájemně liší, včetně názorů společnosti pro které je SoC předmět podnikání. Dále si uvedeme některé názory z Internetu co je to SoC. Wikipedia definuje SoC jako integrovaný obvod, který integruje všechny komponenty počítače nebo ostatních elektronických systémů do jednoho integrovaného obvodu, [wiki_0401]. Potom integrovaný obvod může obsahovat obvody pro digitální, analogové funkce, funkce zpracovávající oba typy signálů a často i obvody pro rádio-frekvenční funkce. Web findthedata, [Internet_0401], uvádí, že SoC obsahuje vice komponentů počítače v jednom integrovaném obvodu. Tyto obvody se používají v přenosných zařízeních jako tablet nebo smartphone. Moderní SoC obvody obsahují centrální procesorovou jednotku - CPU, ale také grafickou procesorovou jednotku - GPU, procesor pro zpracování signálů - DSP a dále počítačové interfejsy na moduly jako USB, Wi-Fi, Bluetooth a další. Jednotlivé procesory jsou zodpovědné za přidělené úkoly. Výkonnostně, takovýto systém nedosahuje výkonů procesorů na matiční desce, notebooků či ultrabooků. Společnost SOC Technology, [Internet_0402], se zaměřuje na IP moduly hlavně z oblasti kódování a dekódování videa ve formátu H264 a s tím související kity. Společnost Cypress, [Internet_0403], používá pojem PSoC – Programmable SoC a uvádí, že se jedná embedded systémy v integrovaném obvodu, které integrují vysoce výkonné analogové obvody, programovatelnou logiku, paměť, a microcontroller do jednoho integrovaného obvodu. Společnost Altera, [Altera_0401], uvádí, že jejich SoC integruje ARM hard procesory s dvěma jádry, periferie a paměťové řadiče do jednoho FPGA obvodu a tyto obvody jsou vzájemně propojené vysoce výkonnou sběrnicí - backbone. SoC jsou ideální pro redukci, jednak příkonu, ceny a prostoru na desce plošných spojů, tím že integruje procesor a FPGA do jednoho obvodu. Společnost dále uvádí, že dochází k vylepšení systémového výkonu pomocí vysoce propustných datových cest mezi procesorem a FPGA, dále k přizpůsobení hardwaru a softwaru koncovému zákazníkovi, k vylepšení systémové spolehlivosti aplikací vestavěných obvodů pro samo-opravné kódy a ochranu paměti proti potenciálním hardwarovým a softwarovým chybám a nakonec k použití kompatibilního programového vybavení pro vývoj a adaptivní možnost ladění pro ARM procesory.
21
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Společnost Xilinx, [Xilinx_0401], dnes používá pojem All Programmable SoC ve spojitosti se svým nejnovějšími produkty. Pojem All Programmable neznačí jenom přidání inteligence pomocí softwaru ale, že dodatečné zpracování dat a rozhodování může být vykonáno pomocí programovatelného hardwaru a systémový interfejs může být optimalizován prostřednictvím programovatelných I/O pinů. Je mnoho názorů, co je to systém na chipu a lze jej definovat na mnoha úrovních od obvodů po software, možnostmi použití, včetně vývoje i ekonomický pohledů na cenu konečného produktu, včetně nákladů na vývoj. Já chápu systém na čipu jako kombinaci následujících aspektů
Na úrovni systému Propojení softwarového a hardwarového návrhu do jednoho celku. Algoritmy mohou být řešeny softwarově nebo hardwarově. Zvyšování integrace, kdy do jednoho integrovaného obvodu se integruje více modulů a vytváří funkční celek. Na úrovni hardwaru Propojení analogových a digitálních obvodů v jeden celek, v jednom integrovaném obvodu. Aplikace procesoru a jeho podporných obvodů. Na úrovni softwaru Aplikace operačního systému na sestavený hardware, např. Linux jako základ pro softwarové řešení. Možnost aplikace jednoúčelových programů bez operačního systému, které realizují konkrétní aplikaci Vývoj Na úrovni bloků a jejich propojení pomocí již definovaných sběrnic. Aplikace IP modulů a jejich zařazení do systému. Hardwarový návrh modulů na úrovni hradel ustupuje do pozadí. Specializované vývojové systémy kombinující hardwarový a softwarový návrh. Zkrácení času vývoje. Použití Upgrady u uživatele. Spolehlivost, zvýšení parametrů spolehlivosti zvýšením integrace. Ochrana duševního vlastnictví. Zamezení jednoduchého kopírovat zapojení, s důsledkem, že není nutný patent. Ochrana před reverzním inženýrstvím. Ekonomika, snížení ceny konečného systému a zkrácení času vývoje.
4.1 IP moduly Základem SoC jsou IP cores – Intellectual Properties moduly. Samotný pojem IP se týká právní ochrany návrhu obvodů. V oblasti programovatelných prvků jsou důležité pojmy soft a hard IP modul, [wiki_0402]. IP moduly jsou dostupné a předmětem podnikání.
22
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Soft IP modul je digitální systém, který lze použít pro realizaci vlastního systému. Jako soft modul si můžeme představit procesory, video adaptery, RS232 adaptéry, Ethernet adaptéry, video a audio kodéry a dekodéry, bloky pro šifrování a dešifrování a další digitální systémy. Tyto moduly jsou navrženy a popsány HDL jazykem jako VHDL nebo Verilog, většinou na úrovni RTL - Register-Transfer Level. Úroveň RTL je popis digitálního systému na úrovni registrů. Soft IP moduly se většinou šíří ve dvou provedeních. První je zápis v jazyku HDL, který může uživatel modifikovat podle potřeby. Druhý způsob je tzv. netlist, což je definovaný popis digitálního systému, který je nezávislý na cílové architektuře PLD prvku. Jedná se o univerzální popis, který se nemodifikuje a lze jej implementovat do PLD prvků různých výrobců. Způsob práce se soft IP modulem definuje licence, kterou si uživatel kupuje. V softwarovém světě existuje open source a tento princip je přenesen i do oblasti soft IP modulů. Proto na Internetu lze najít open source soft IP moduly, [Internet_0404]. Hard IP moduly jsou elektronické systémy, které se dodávají na nízké úrovni popisu, např. na úrovni tranzistorů, na úrovni masek pro výrobu apod., [ARM_02]. Zde je použit pojem elektronické systémy, protože se může jednat o analogové obvody, digitální obvody či mix těchto obvodů, jako je ADC převodník. Tento typ IP modulů je určen pro výrobce integrovaných obvodů, který hard IP modul realizuje přímo ve křemíku aplikací masek. Z pohledu návrháře, uživatele je možné hard IP modul použít jako celek nebo jej nepoužít, modul se stává nadbytečný. Při dnešním stupni integrace převažuje univerzálnost a sériovost výroby nad přesným konkrétním řešením. IP modul – Intellectual Properties modul je hotový návrh určitého bloku pomocí jazyka HDL. Jedná se o bloku jako procesor, adaptéry jako je VGA, USB, Ethernet, Wi-Fi a další. Tyto návrhy lze koupit nebo aplikovat IP s kolekce s licencí open source.
4.2 Procesory Základem SoC obvodů je procesor a v prvních verzích se objevovaly soft IP procesory. Mezi nejznámější soft IP moduly jako soft procesory patří Blaze od společnosti Xilinx, Nios od společnosti Altera, Leon od společnosti Microsemi. Šířka slova soft procesorů je dána verzi procesoru a je 8, 16, 32 bitů. Vlastnosti procesoru jako je cache paměť, FPP procesor, správa paměti a další vlastnosti jsou konfigurovatelné ve vývojovém prostředí. Pro samotný návrh není nutno znát detailní zapojení či popis, ale základní vlastnosti bloků procesoru a ty modifikovat podle potřeby. Dnes se přechází k hard procesorům a většina SoC obvodů aplikuje jeden z ARM procesorů, [ARM_0401]. Jedná se o procesory dodávané jako hard IP modul a implementují se v různých verzích, jako je šířka slova, počet jader, frekvence a elektrický příkon.
4.3 Hardwarové řešení SoC První principy SoC lze spatřovat již na úrovni čistých FPGA obvodů, kde lze vytvářet pouze digitální systémy, obr. 03-01, kde základ tvoří soft IP moduly. Celý integrovaný obvod je 23
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
věnovaný FPGA struktuře na kterou se aplikují soft IP moduly. Daný modul se realizuje pomocí elementů FPGA. Velikost umístěného digitálního systému do integrovaného obvodu je dán velikostí FPGA obvodu a je možné jej rozšířit o další integrované obvody. V další fázi se již začínají objevovat řešení s hard procesory doplněné o hard moduly, hlavně sério-paralelní převodníky, které lze použít pro realizaci Ethernetu, obr. 04-02. Samozřejmě, všechny bloky v integrovaném obvodu jsou propojeny sběrnicí, na kterou lze také připojit soft moduly realizované v FPGA. V dalším vývoji je snaha aplikovat více hard IP modulů a tím definovat procesorový systém SoC. Piny integrovaného obvodu I/O mux PCI
DDR
AES kodér/dekod ér
…
Paměť
I/O mux
I/O mux
Integrovaný obvod FPGA obvod - soft IP moduly CPU
Sběrnice VGA
Ethernet
H264 kodér/dekod I/O mux ér
Obr. 04-01 Aplikace IP modulů na úrovni FPGA
Piny integrovaného obvodu I/O mux FPGA obvod - soft IP moduly Paměť PCI
DDR I/O mux
I/O mux
Integrovaný obvod Procesorový systém - hard IP CPU moduly
Sběrnice VGA
Ethernet
H264 kodér/dekod I/O mux ér
AES kodér/dekod ér
…
Obr. 04-02 Aplikace hard modulů Základem obou řešení je sběrnice, která propojuje jednotlivé moduly. Teoreticky lze použít jakoukoliv sběrnici, ale prakticky je výběr sběrnice dán vývojovým systémem. Rozsah systému je dán konkrétními vlastnostmi FPGA obvodu. V případě větších nároků je možnost rozšíření vně obvodu, kdy se moduly připojují na definovaný interfejs. V případě pamětí je běžně RAM připojit na DDR interfejs. Nejnovější řešení SoC mají rozsáhlou procesorovou část realizovanou pomocí hard IP modulů. Na obr. 04-03 je všeobecný špičkový SoC systém, který vychází z řady Zynq společnosti Xilinx, [Xilinx_0402]. SoC systém se rozděluje na dvě základní oblasti, procesorový systém a 24
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
univerzální FPGA oblast. Oba systémy jsou napojeny na I/O piny prostřednictvím propojovací sítě. V procesorové oblasti dominuje hard procesor s různými hard adaptéry, které jsou propojené vysoce rychlostní sběrnicí. Tato sběrnice je samozřejmě přístupná i v oblasti FPGA, kde se dají aplikovat soft moduly nebo vlastní moduly připojené na sběrnici procesoru. Tím vzniká ucelený systém, kde se dají jednotlivé algoritmy navrhovat softwarově nebo hardwarově. Také dochází k implementaci analogových obvodů, hlavně analogovo digitálních převodníku s návaznosti na číslicové zpracování signálů. Procesorový modul obsahuje procesor většinou v měnitelné konfiguraci, kdy lze některé bloky zablokovat. Jediný důvod tohoto postupu lze spatřovat v poklesu příkonu procesoru. Procesorový systém obsahuje sériové adaptéry pro různé provedení I/O sběrnic. Nutno si uvědomit, že moderní sběrnice jsou sériové. Integrovaný obvod může obsahovat i obvody pro zvýšení bezpečnosti a to různé bezpečnostní kodéry a dekodéry (AES, SHA, RHA, DES). Význam jednotlivých názvů pro sériové sběrnice je:
SPI – Serial Peripheral Interface, [wiki_0403], je sériová synchronní sběrnice pro přenos dat v obou směrech a je definovaná na 4 vodičích I2C - Inter-Integrated Circuit, [wiki_0404], je sériová sběrnice pro připojení pomalých periferii k embedded systémům či mikro-kontrolérům. UART - Universal asynchronous receiver/transmitter, [wiki_0405], je převodník mezi sériovou a paralelní formou dat a je základem interfejsů RS232, RS422 a RS485.
Piny integrovaného obvodu Integrovaný obvod - SoC systém I/O mux Flash DDR CAN SPI adapter adapter Propojovací síť – systémová USB I2C Procesor EtherUART sběrnice DSP, FPP coprocessor, net SerDes GPIO cache, přerušovací VGA SDIO systém, správa paměti - memory maDAC ADC PCIe Bezpečnagement unit adapter nost FPGA
I/O mux
I/O mux
Procesorový systém
AES, SHA, RSA, DES
I/O mux LUT elementy, DSP moduly, násobičky, RAM paměti Obr. 04-03 Ukázka struktury špičkového SoC
GPIO - General-purpose input/output, [wiki_0406], všeobecné 1 bitové signály, které se využívají jako vstup/výstupu pro digitální signály. SDIO - Secure Digital Input Output, [wiki_0407], je interfejs pro komunikaci s SD kartami.
25
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
CAN - Controller Area Network, [wiki_0408], je sběrnice propojující zařízení a kontroléry a tím vytvářejí síť typu každý s každým (peer to peer). CAN síť našla uplatnění v dopravních prostředcích jako vlak, autobus a další. USB - Universal Serial Bus. Ethernet. SerDes, [wiki_0409], speciální převodníky mezi sériovými a paralelními tokem dat pro vytváření vysoko rychlostních gigabitových interfejsů. Dnes je tato hranice 28 Gbps. ACD, DAC převodníky mezi analogovým a číslicovým signálem, které tvoří základ pro číslicové zpracování signálů. PCIe - PCI Express, Peripheral Component Interconnect Express, [wiki_0410], obvod vytvářející sběrnic PCI express a tím možnost připojovat standartní adaptéry ze světa PC. Bezpečnost, kodéry a dekodéry různých šifrovacích kódů.
Jeden konkrétní typ SoC může obsahovat všechny uvedené sériové interfejsy, Dává se přednost univerzálnosti SoC před konkrétním řešením. Specializace na konkrétní typy, které by obsahovaly pouze vybrané sériové sběrnice, není podporovaná, protože by vedlo k mnoha typům SoC. To se, ale promítá do vyšších nákladů na vývoj a samotnou výrobu SoC. Výrobci SoC dávají přednost univerzálnosti a výrobě jednoho univerzálního typu SoC. Ekonomicky se promítá ve snížení nákladů na vývoj a samotnou výrobu, což následně vede k nízkým cenám SoC. Dnešní stupeň integrace a počty hradel v SoC jsou tak vysoké, že nepoužití nějakého hard IP modul nelze to považovat za plýtvání.
4.4 Poznámky, trademarks AMBA, AMBA Designer, ARM, ARM1176JZ-S, CoreSight, Cortex, PriceCell, ARM Powered, and ARM Connected Partner are trademarks of ARM Ltd. Xilinx, the Xilinx logo, Artix, CoolRunner, ISE, Kintex, LogiCORE, Modelware, Petalogix, Pilot-sync, RocketIO, Spartan, Virtex, Vivado, Zynq, and WebPACK are registered trademarks of Xilinx. PCI-SIG, PCI, PCI Express, PCIe, PCI-X, PCI HOT PLUG, MINI PCI, and EXPRESSMODULE are trademarks of PCI Special Interest Group.
4.5 Literatura [Altera_0401] Altera’s Usrers Customizable ARM-Based SoC; http://www.altera.com/literature/br/br-soc-fpga.pdf; on line 2014-09-26
[ARM_0401]
Processors; http://arm.com/products/processors/index.php; on line 2014-11-11
[ARM_0402]
IP Solutions; http://www.arm.com/products/physical-ip/index.php; on line 2014-11-06
[Internet_0401]
System on a chip; http://system-on-a-chip.findthedata.org; on line 2014-09-26 26
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
[Internet_0402]
http://www.soctechnologies.com/index.php; on line 2014-09-26
[Internet_0403]
PSoC Portfolio; http://www.cypress.com/psoc/; on line 2014-09-26
[Internet_04]
Open cores; http://opencores.org/; on line 2014-11-06
[wiki_0401]
System on a chip; http://en.wikipedia.org/wiki/System_on_a_chip; on line 2014-09-26
[wiki_0402]
Semiconductor intellectual property core; http://en.wikipedia.org/wiki/Semiconductor_intellectual_property_core; on line
2014-11-06 [wiki_0403]
Serial Peripheral Interface Bus; http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus; on line 2014-11-07
[wiki_0404]
I²C; http://en.wikipedia.org/wiki/I%C2%B2C; on line 2014-11-07
[wiki_0405]
Universal asynchronous receiver/transmitter; http://en.wikipedia.org/wiki/UART; on line 2014-11-07
[wiki_0406]
General-purpose input/output; http://en.wikipedia.org/wiki/GPIO; on line 2014-11-07
[wiki_0407]
Secure Digital; http://en.wikipedia.org/wiki/Secure_Digital#SDIO; on line 201411-11
[wiki_0408]
CAN bus; http://en.wikipedia.org/wiki/CAN_bus; on line 2014-11-12
[wiki_0409]
SerDes; http://en.wikipedia.org/wiki/SerDes; on line 2014-11-12
[wiki_0410]
PCI Express; http://en.wikipedia.org/wiki/PCI_Express; on line 2014-11-12
[Xilinx_0401]
A generation Ahead for Smarter Systems: 9 reasons why the Xilinx Zynq7000 All Programmable SoC Platform is the Smartest Solution; http://www.xilinx.com/publications/prod_mktg/zynq-7000-generation-aheadbackgrounder.pdf; on line 2014-11-06
[Xilinx_0402]
Zynq™ All Programmable SoC Architecture; http://www.xilinx.com/products/silicon-devices/soc/index.htm; on line 2014-11-
07 [Xilinx_2014a] UltraScale Architecture and Product Overview; Xilinx, DS890, 2014; http://www.xilinx.com/support/documentation/data_sheets/ds890ultrascale-overview.pdf; on line 2014-10-21 [Xilinx_2014b] 7 Series FPGAs Overview; Xilinx, DS180; http://www.xilinx.com/support/documentation/data_sheets/ds180_7Serie s_Overview.pdf; on line 2014-10-21 [Xilinx_2014c] Spartan-6 Family Overview; Xilinx, DS160, 2011; http://www.xilinx.com/support/documentation/data_sheets/ds160.pdf; on line 2014-10-21 27
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
28
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
5 Kombinační obvod
V logických obvodech jsou Boolean výrazy (B-výrazy) základem pro návrh logické sítě. Z nich pro programovatelné logické prvky má význam výraz ve tvaru DNF - Disjunktivní Normálové Formy, součtové normálové formy. Základ formy tvoří součiny jednotlivých signálů a jednotlivé součiny se sčítají. Jedná se o součet součinů. Jednotlivé součiny se nazývají součinové termy, Product Terms, obr. 05 - 01. Počet součinových termů je důležitým parametrem PAL obvodů.
y=a.b + c.d.e.f + g
Součtová normálová forma - DNF
Součinové termy Obr. 05 - 01 Součtová normálová forma
Od základního tvaru součtové normálové formy se odvozuje základní realizace logické sítě, obr. 04 - 02. Jedná se realizaci pomocí hradel AND a OR, které vytváří specifické zapojení označované jako matice AND a matice OR. a b
matice AND
c d
matice OR y = a.b + c + a.d y = !b + a.d nepoužité a.b
c
!b
a.d
Obr. 05 - 02 Matice AND a OR
29
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
V místě křížení čar v jednotlivých maticích jsou propojky, které umožňují na sobě kolmé vodiče vzájemně propojit, a tím vytvářet logickou síť odpovídající Boolean výrazu v součtové normálové formě. Vstupní signály jsou přivedeny do programovatelné matice AND přes oddělující budiče, které mají dva výstupy odpovídající vstupnímu signálu v přímém a negovaném tvaru. V programovatelné matici AND se vytvářejí jednotlivé součinové termy pomocí propojek. Výsledný součinový term z výstupu součinového hradla je přiveden do součtové matice, kde se vytváří součet jednotlivých součinových termů a na výstupu součtového hradla je výsledný výraz.
c
b
a
y
0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 0 0 1 1 0 0 0
Úplná součtová normálová forma - DNF y = !c.b.!a + !c.b.a + c.!b.!a
Obr. 05 - 03 Úplná disjunktivní normálová forma
Další odvozeným tvarem B-výrazu je UDNF – Úplná Disjunktivní Normálová Forma. UDNF je tvar DNF, kdy každý součinový term obsahuje všechny vstupní proměnné B-funkce v přímé nebo negované formě, obr. 04 - 03.
5.1 Návrh Boolean funkce Základem návrhu je jazyk HDL – Hardware description language pomocí, kterého se popisuje Boolean funkce. Po sestavení popisu se provede syntéza, která převede programový zápis do formy vhodné k naprogramování FPGA obvodu. B funkce je dána zápisem
f(d, c, b, a) = ∑m(2, 3, 6, 10) + ∑d(1, 7, 9, 11, 14)
Odpovídající programový zápis v jazyku VHDL, na obr. 05-04 je zápis entity a obr. 05-05 je zápis odpovídajíc architektury.
Entity B_funkce is Port (a, b, c, d: in std_logic; Y: out std_logic}; End entity B_funkce;
30
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Architecture DF of B_funkce is f(d, c, b, a) = ∑m(2, 3, 6, 10) + ∑d(1, 7, 9, 11, 14)
Begin Y <=
‘1’ when d =’0’ and c =’0’and b = ‘1’ and a = ‘0’else ‘1’ when d =’0’ and c =’0’and b = ‘1’ and a = ‘1’else ‘1’ when d =’0’ and c =’1’and b = ‘1’ and a = ‘0’else ‘1’ when d =’1’ and c =’0’and b = ‘1’ and a = ‘0’else ‘X’ when d =’0’ and c =’0’and b = ‘0’ and a = ‘1’else ‘X’ when d =’0’ and c =’1’and b = ‘1’ and a = ‘1’else ‘X’ when d =’1’ and c =’0’and b = ‘0’ and a = ‘1’else ‘X’ when d =’1’ and c =’0’and b = ‘1’ and a = ‘1’else ‘X’ when d =’1’ and c =’1’and b = ‘1’ and a = ‘0’else ‘0’;
End architecture DF;
Obr. 05-05 Zápis architektury
5.2 Návrh Hammingova kodéru a dekodéru Binární kód se nazývá Hammingův, jestliže má kontrolní matici, jejíž sloupce jsou všechna nenulová slova dané délky n − k = r a žádné z nich se neopakuje. Jedná se o speciální případ lineárních dvojkových (n, k) kódů. Tyto kódy opravují jednu chybu při vzdálenosti kódových slov dmin(bi, bj ) =3.
5.2.1 Matematika související s lineárními kódy Lineární binární kódy jsou založeny na teorii konečného pole o dvou hodnotách, kde pro součet a násobení platí následující definice. Detailní popis a definice pole pro potřeby kódování je v literatuře [Adámek_1989]. V případě použití hodnot 0 a 1, platí pro součet pravidla matematické součtu modulo 2 a z pohledu logiky je to operace exklusive OR - XOR. V dalším textu znaménko „“ značí uvedený součet a znaménko „x“ nebo „*“ nebo „⊗“ značí uvedené násobení. V mnohých textech se znaménko „“ nahrazuje pouhým znaménkem „+“.
Součet 0⊕0=0 0⊕1=1 1⊕0=1 1⊕1=0
Součin 0*0=0 0*1=0 1*0=0 1*1=1
31
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Pro vytváření kódu jsou důležité operace součtu a násobení pro vektor a matice: Násobení – skalár a vektor
s v s vn1 ... v1
v0 s vn1 ... s v1
s v0
Součet – vektor a vektor
u v un 1 ... u1
u0 vn 1 ... v1
v0 un 1 vn 1 ... u1 v1
u0 v0
Násobení – vektor a matice
g3 g2 v u G (u3, u 2, u1, u0) g1 g0
u3 * g 3 u2 * g 2 u1* g1 u0 * g 0 (v 3, v 2, v1, v0) v
Kde:
v je kódové slovo
u je informační vektor
G je matice a g jsou její řádky
Výsledkem je vektor
5.2.2 Návrh kodéru Sestavení kodéru vychází z matematické operace násobení vektoru s matice Vstupním vektorem je informační slovo určené k zabezpečení pomocí Hammingova kódu. Informační slovo je v kodéru násobeno generující matici.
g3 g2 v u G (u3, u 2, u1, u0) u3 g 3 u 2 g 2 u1 g1 u0 g 0 g1 g0 Kde:
v je výstupní kódové slovo u je vstupní informační slovo G je generující matice
Pro praktickou realizaci je možné odvodit z generující matice G soustavu rovnic. Tyto rovnice pak stačí realizovat hardwarově nebo je zapsat pomocí jazyka VHDL a provést implementaci do CPLD/FPGA prvku. Z předchozí rovnice můžeme odvodit rovnice pro výpočet kódového slova. 32
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
1 0 v (v6 , v5 , v4 , v3 , v2 , v1 , v0 ) u * G (u3 , u2 , u1 , u0 ) * 1 0
0 1 0 1
0 1 1 0
1 0 1 1
1 0 0 1
0 1 0 0
0 1 1 1
Kodér Hammingova kódu pro uvedenou generující matici je potom dán následujícími rovnicemi:
v6 u3 u1 v5 u2 u0 v4 u2 u1
v3 u3 u1 u0 v2 u3 u0 v1 u2
v0 u2 u1 u0 v (v6 , v5 , v4 , v3 , v2 , v1 , v0 )
5.2.3 Návrh dekodéru Cílem dekodéru je získat původní informační slovo. Nutno si uvědomit, že Hammingův kód dokáže odstranit jednu chybu v přijatém slovu. Potom lze říci, že přijaté slovo je rovno součtu vyslaného kódového slova a chybového slova.
w v e Dekodér prvně zajistí opravu případné chyby v přijatém slovu a následně získaní původního vyslaného informačního slova. Detekce chyby v přijatém kódovém slově se děje pomocí syndromu S. V případě nulového syndromu je přijaté slovo bez chyby chybu a je možné jej dekódovat na původní informační slovo. Pokud syndrom není nulový, potom přijaté slovo obsahuje chybu a s hodnoty syndromu se dá odvodit pozice chybného bitu. Výpočet syndromu vychází z matematické operace násobení vektoru s matice.
H wT s T Kde
H je kontrolní matice w je přijaté slovo
s je syndrom 33
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Kontrolní matice lineárního kódu je pevně svázaná s generující maticí lineárního kódu, [Adámek_1989]. Pro naši generující matici a odvozenou kontrolní matici se syndrom vypočte podle následujících rovnic.
w6 w5 1 1 1 0 1 0 0 w4 s T 2 T H w 1 1 0 1 0 1 0 w3 s s1 s 1 0 1 1 0 0 1 w2 0 w1 w0
s2 w6 w5 w4 w2 s1 w6 w5 w3 w1 s0 w6 w4 w3 w0 Pokud je nulový syndrom, potom přijaté slovo je bez chyby. V případě nenulového syndromu se hodnota syndromu rovná také součinu kontrolní matice a chybového slova. Všechny chybové slova jsou
e = 000 0000, potom je hodnota syndromu s = 000, zadáno pro úplnost e1 = 100 0000, potom je hodnota syndromu s = 111 e2 = 010 0000, potom je hodnota syndromu s = 110 e3 = 001 0000, potom je hodnota syndromu s = 101 e4 = 000 1000, potom je hodnota syndromu s = 011 e5 = 000 0100, potom je hodnota syndromu s = 100 e6 = 000 0010, potom je hodnota syndromu s = 010 e7 = 000 0001, potom je hodnota syndromu s = 001
Potom k vyslané kódové slovo je dáno následujícím vztahem:
v we Vysílané informační slovo lze odvodit s rovnic kodéru. Výsledné rovnice jsou
u0 v1 v5
u1 v1 v4 u2 v1 u3 v1 v2 v5 34
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
5.3 Zápis v jazyky VHDL library IEEE; use IEEE.STD_LOGIC_1164.ALL;
-- Zápis entity definující vstupní a výstupní signály entity main_src is Port ( Uin : in
STD_LOGIC_VECTOR(3 downto 0); Vkoder : out STD_LOGIC_VECTOR(6 downto 0); Wdek: in STD_LOGIC_VECTOR(6 downto 0); Synd: out STD_LOGIC_VECTOR(2 downto 0); Uout : out STD_LOGIC_VECTOR(3 downto 0)); end main_src;
-- Zápis architektury popisující funkce architecture Behavioral of main_src is
-- Pomocné signály, potřebné pro výpočet signal pom: STD_LOGIC_VECTOR(2 downto 0); signal e : STD_LOGIC_VECTOR (6 downto 0); signal pom2 : STD_LOGIC_VECTOR (6 downto 0); begin
-- Následující rovnice popisují kóder Vkoder(6) Vkoder(5) Vkoder(4) Vkoder(3) Vkoder(2) Vkoder(1) Vkoder(0)
<= <= <= <= <= <= <=
InWord(3) XOR InWord(2) XOR InWord(2) XOR InWord(3) XOR InWord(3) XOR InWord(2); InWord(2) XOR
InWord(1); InWord(0); InWord(1); InWord(1) XOR InWord(0); InWord(0); InWord(1) XOR InWord(0);
-- Následující rovnice počítají syndrom Sx(2) <= Uin(6) XOR Uin(5) XOR Uin(4) XOR Uin(2); Sx(1) <= Uin(6) XOR Uin(5) XOR Uin(3) XOR Uin(1); Sx(0) <= Uin(6) XOR Uin(4) XOR Uin(3) XOR Uin(0);
-- Přiřazení chybového slova k vypočtenému syndromu case Sx is when "000" => Ex <= "0000000"; when "111" => Ex <= "1000000"; when "110" => Ex <= "0100000"; when "101" => Ex <= "0010000"; when "011" => Ex <= "0001000"; when "100" => Ex <= "0000100"; when "010" => Ex <= "0000010"; when "001" => Ex <= "0000001"; when others => NULL; end case; WxOK <= Wx XOR Ex;
-- Příkaz opaví případnou chybu ve -- přijatém slovu 35
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
-- Následující rovnice počítají vyslané informační slovo InWord(0) InWord(1) InWord(2) InWord(3)
<= <= <= <=
Uin(1) XOR Uin(5); Uin(1) XOR Uin(4); Uin(1); Uin(1) XOR Uin(2) XOR Uin(5);
End architecture;
-- Konec zápisu
5.4 Literatura [Adámek_1989]
J. Adámek: Kódování; SNTL Praha 1989
36
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
6 Návrh synchronního číslicového systému
Synchronní číslicový systém je systém synchronizován hodinami. Princip synchronizace zajišťuje stabilitu systému a snadnější návrh v porovnání s asynchronním systémem. Základní bloková struktura synchronního číslicového systému je na obr. 06-01. Tento systém má dva základní bloky, datovou jednotku a řídící jednotku, které jsou vzájemně propojeny mezi sebou a okolním prostředím. Popis jednotlivých bloků a signálů je:
Datová jednotka je blok vykonávající operace. Obsahuje kombinační logické obvody spolu s registry. Typickým příkladem datové jednotky je ALU - Arithmetic Logic Unit v procesoru, která obsahuje kombinační obvody a registry. Kombinační obvody vykonávají logické operace, binární aritmetické operace – součet, rozdíl, násobení, kódování informace, multiplexování atd. Naproti tomu registry se používají k uchování informace k výpočtu, jako jsou vstupní a výstupní data a pomocná data potřebná k výpočtu. Skuteční řešení datové jednotky závisí od požadavků na návrh. Datová jednotka je propojena s řídící jednotkou pomocí řídících a podmínkových signálů. Podmínkové signály jsou použity k větvení řídící jednotky. Datová jednotka je zároveň propojena s okolním prostředím pomocí příznaků a obousměrného vstupu a výstupu dat. Řídící jednotka je blok řídící datovou jednotku. Řídící jednotka je automat s konečným počtem stavů. Podmínkové signály z datové jednotky jsou vstupem automatu a výstupní řídící signály automatu se stávají vstupem datové jednotky. Řídící jednotka je propojena s okolním prostředím pomocí příznaků a příkazů.
Příznaky
Příkazy
Řídící jednotka
Příznaky
Řízení
Data
Datová jednotka
Podmínky CLK Init
Obr. 06-01 Bloková schéma synchronního číslicového systému
37
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Řídící signály jsou signály, které jsou použity pro definování časového bodu, kdy mají být data zapsána do registru, které definují výstup multiplexeru, který může vybírat příslušný registr na svůj výstup, které definují součet nebo rozdíl, které definují parametry kódování, atd. Podmínkové signály jsou signály, které jsou generovány datovou jednotkou a popisují výsledek vykonané operace. Například, „výsledek je roven nule“, „znaménkový bit“, „záporný výsledek“, „výstupní přenos“, „přetečení“, „podtečení“ apod. Data, jedná se o obousměrnou sběrnici pro vstup a výstup dat. Je přípustné ji nahradit samostatným vstupem a výstupem. Příznaky, jedná se o signály generované řídící nebo datovou jednotkou. Signalizují stav číslicového systému okolnímu prostředí. Příznaky lze pouze Ukázkové příznaky jsou například, „zadej následující příkaz“, „nastav vstupní data“, „systém pracuje“, „systém čeká“, „chyba“ apod. Příkazy, jedná se o signály generované okolním prostředím. Například „start“, „ukonči operaci“ apod. CLK, jedná se o hodinový signál použitý k synchronizaci systému, synchronizuje všechny akce. Hrana hodin definuje přechod mezi stavy automatu, zápis do registrů nebo klopných obvodů. Init, jedná se o inicializační signál, který zajišťuje přechod do výchozího stavu systému, řídící jednotky. Zároveň nuluje příznaky, registry apod. Je totiž žádoucí začít činnost číslicového systému z předem definovaného stavu. Začátek činnosti číslicového systému z náhodného stav negarantuje správný výsledek, správnou funkčnost.
6.1 Desítková sčítačka Sčítačka čísel v paket BCD kódu je použita jako příklad návrhu synchronního číslicového systému. BCD kód kóduje čísla v nibblech, kde každý nibble 4 bity. To značí realizovat desítkový součet dvou čísel na binární sčítačce. Základem tvoří korekce nibblu přičtením hodnoty 67 a to v případech:
Když mezisoučet v nibblu je větší než 9 nebo nibble generuje přenos, potom musí být nibble korigován přičtením 6. Když přičtení 6 k nibblu generuje přenos, potom nibble musí být korigován přičtením hodnoty 6. Druhý krok se opakuje až žádný nibble negeneruje přenos
Datová jednotka se skládá z 8 bitové binární sčítačky a 16 bitových registrů. Decimální číslo o 4 řádech je umístěno do registrů, proto součet musí být vykonán na dva. Základ je sekvence kroků:
Provede součet spodních bytů s tím, že výstupní přenos se zapamatuje v příznaku Podle potřeby se provede korekce mezi-součtu přičtením 6 38
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Provede se součet horních bytů spolu s přenosem ze součtu spodních bytů Podle potřeby se provede korekce mezi-součtu přičtením 6
6.2 Datová jednotka decimální sčítačky Datová jednotka má tři registry o délce 16 bitů. Dva registry A, B se používají k pamatování dvou vstupních čísel v BDC kódu. Třetí registr je akumulátor a slouží jako paměť mezivýsledku a výsledného součtu. Vstup 16 bitového akumulátor je připojen na výstup 8 bitové binární sčítačky, a proto zápis do akumulátoru se provádí po bytech. Ústředním blokem je 8 bitová binární sčítačka, která má vstupech multiplexery A, B. Tato binární sčítačka vykonává součet různých zdrojů v různých kombinacích. V našem příkladu jsou použity součty:
Součet spodních bytů registrů A, B Součet horních bytů registrů A, B Součet spodního bytu akumulátoru s jednou s konstant 0x06, 0x60 a 0x66 Součet horního bytu akumulátoru s jednou s konstant 0x06, 0x60 a 0x66
B registr, 16 bit
A registr, 16 bit
06 H
L
A mux
C8 A6 C4
3
Carry out
66
B mux
8 bitová binární sčítačka
Carry in
C8 A6
H Nibbles > 9
60
4
L
16 bitový akumulátor
Sum Obr. 06-01 Bloková schéma datové jednotky
Součty generují přenosy, které je nutno si zapamatovat v příznacích, které se potom stávají vstupním přenosem při dalších použití při součtech. Jednotlivé příznaky jsou:
„C8” je příznak ze 7 bitu sčítačky, když se sčítají spodní byty. Přenos „C8” je následně použitý jako vstupní přenos při součtu horních bytů. „A6” je přenos ze 7 bitu sčítačky, když se sčítá spodní byt akumulátoru s jednou korekčních konstant. Přenos „A6” je následně použitý jako vstupní přenos součtu, když se sčítají horní byte akumulátoru s jednou s korekčních konstant. 39
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Přenos „C4” je přenos z třetího bitu sčítačky. Přenos „C4” je přenos ze spodního nibblu do horního nibblu bytu. Je také použity k větvení řídící jednotky.
Akumulátor je 16 bitový registr a zápis do něj se vykává po bytech. Zároveň akumulátor obsahuje odvody, které vyhodnocují, že nibble je větší než 9. Tyto čtyři signály “Nibbles > 9” jsou použity ve větvení řídící jednotky. Následující obrázky prezentují signály, které se nezakreslují z důvodu přehlednosti. Čtenář si je musí automaticky domyslet na základě znalosti jednotlivých dílčích bloků. Za samozřejmost se pokládá znalost:
Každý multiplexer má výběrové signály, které určují vstup propojující se na výstup Každý registr je realizován pomocí paměťových členů, např. D klopný obvod Každý registr má povolovací signál k zápisu Každá sčítačka pracuje s přenosy Každý registr má hodinový vstup Je žádoucí nulovat příznaky
B registr, 16 bit
A registr, 16 bit
06 H
L
A mux
C8 A6 C4
3
Carry out
60
66
B mux
8 bitová binární sčítačka
Carry in
C8 A6
H Nibbles > 9
4
L
16 bitový akumulátor Datový vstup avýstup Sum
Podmínky pro řídící jednotku
Obr. 06-02 Zvýraznění datového vstupu, výstupu a podmínek Na obr. 06-02 jsou vyznačeny vstupní a výstupní cesty datové jednotky a signály použité pro větvení v řídící jednotce. Tyto signály jsou generované jednoduchými Boolean funkcemi. Na obr. 06-03 jsou pro změnu zakresleny řídící signály generované řídící jednotkou. Mezi tyto signály patří výběrové signály multiplexeru, povolovací signály zápisu do registru. Zároveň v obrázku jsou zakresleny synchronizační signál jako hodiny a inicializační signál – „Init“.
40
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
CLK CLK
A registr, 16 bit
Load_A
B registr, 16 bit 06
H
60
L
A_sel
A mux
B mux
Load_B
66 B_sel
Clear Load_ CLKxx
C8 A6 C4
3
Carry out
8 bitová binární sčítačka
Carry in
C8 A6
H
Load_ACC Nibbles > 9 Low/High
Cin_sel
L
16 bitový akumulátor
CLK
Synchronizace Řídící signály z řídící jednotky
Obr. 06-03 Zvýraznění řídících signálů a synchronizace
6.3 Řídící jednotka Řídící jednotka je blok, který je propojen s datovou jednotkou pomocí řídících a podmínkových signálů, obr. 06-04. Zároveň řídící jednotka je propojena s okolím pomocí příkazů „Start” a příznaku „End_cal”. Aktivace příkazu „Start” spustí výpočet a automaticky se předpokládá, že na datových vstupech jsou přítomná čísla pro výpočet. Příznak „End_cal” signalizuje, že výpočet je u konce a na výstupu je správný výsledek. Řídící jednotka je synchronizována hodinovým signálem „CLK” a inicializována signálem „ Init”. Příkazy - Start
P/řízanky - end_cal
Řídící jednotka
Řízení
Load_A, Load_B, A_sel(2), B_sel(3), Load_C8, Load_A6, Load_C4, Clear, Cin_sel, Load_ACC, High/Low
Podmínky
C8, C4, Nibble_higher_9 (4)
CLK Init Obr. 06-04 Vstupy a výstupy řídící jednotky
41
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Řídící jednotka je automat s konečným počtem stavů. Základní popis chování je pomocí stavového diagramu Moorova stroje. Návrh a jeho popis je:
Stav „First”, FSM čeká na aktivaci příkazu „Start” • Aktivní signál „Init_L” nastavuje inicializační Init_L stav „First” First No Start • Deaktivuje se příznak „End_cal” Start • Větvení podle signálu „Start”. Begin Stav „Begin”, decimální čísla A, B v paket formátu muClear, write A,B sí na vstupu datové jednotky • Zápis nových dat do registrů A, B Low_add • Nulování příznaků „C8”, „A6” a „C4” L_ACC<-L_A+L_B Stav „Low_add”, součet spodních bytů registrů A, B Přenos „C8” a „A6” je roven nula • Součet spodních bytů registrů A, B se vstupObr. 06-05 Stavový diagram, ním přenosem rovným 0 část A • Zápis příznaků „C8” a „C4”. • Zápis součtu do spodního bytu ACC Větvení ve stavu „Low_add”. • Když („nibble(0)>9” je pravda nebo „C4” je 1) a současně (“nibble(1)>9” je nepravda nebo „C8” je 0), potom FSM pokračuje následujícím stavem „Low_06”; • Když („nibble(0)>9” je nepravda nebo „C4” je 0) a současně (“nibble(1)>9” je pravda nebo „C8” je 1), potom FSM pokračuje následujícím stavem „Low_60”; • Když („nibble(0)>9” je pravda nebo „C4” je 1) a současně (“nibble(1)>9” je pravda nebo „C8” je 1), potom FSM pokračuje následujícím stavem „Low_66” • Jinak FSM pokračuje následujícím stavem Low_add „High_add”. L_ACC<-L_A+L_B Stav „Low_06”, low nibble ve spodním bytu ACC Low_06 musí být korigován přičtením 0x06 L_ACC+06 • Přičtení konstanty 0x06 ke spodnímu bytu ACC se vstupním přenosem rovným nule Low_60 • Zápis výstupního přenosu „A6” L_ACC+60 • Zápis korigovaného bytu do spodního byLow_66 tu ACC L_ACC+66 Větvení ve stavu „Low_06”. • Když („nibble(1)>9” je pravda nebo „C8” High_add je 1), potom FSM pokračuje následujícím H_ACC<-H_A+H_B stavem „Low_60”, jinak FSM pokračuje následujícím stavem „High_add”. Obr. 06-05 Stavový diagram, Stav „Low_60”, high nibble ve spodním bytu ACC část B musí být korigován přičtením konstanty 0x60.
42
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
•
Přičtení konstanty 0x60 ke spodnímu bytu ACC se vstupním přenosem rovným nule • Zápis do spodního bytu ACC Stav „Low_66”, both nibbles ve spodním bytu musí být korigovány přičtením 0x66 • Přičtení konstanty 0x66 ke spodnímu bytu High_add ACC se vstupním přenosem rovným nula H_ACC<-H_A+H_B • Zápis korigovaného bytu do spodního bytu ACC High_06 Stav “High_add”, součet horních bytů registrů A, B H_ACC+06 se vstupním přenosem z předcházejících součtů High_60 • Sečtení horních bytů registrů A, B se H_ACC+60 vstupním přenosem rovným „ C8” + “A6” • Zápis přenosů „C8” a „C4”. High_66 • Zápis součtu do horního bytu ACC H_ACC+66 Větvení ve stavu „High_add”. End_state • Když („nibble(2)>9” je pravda nebo „C4” je End_cal 1) a současně (“nibble(3)>9” je nepravda nebo „C8” je 0), potom FSM pokračuje náObr. 06-05 Stavový diagram, sledujícím stavem „High_06”; část C • Když („nibble(2)>9” je nepravda nebo „C4” je 0) a současně (“nibble(3)>9” je pravda nebo „C8” je 1), potom FSM pokračuje následujícím stavem „High_60”; • Když („nibble(2)>9” je pravda nebo „C4” je 1) a současně (“nibble(3)>9” je pravda nebo „C8” je 1), potom FSM pokračuje následujícím stavem „High_66” • Jinak FSM pokračuje následujícím stavem „End_state”. Stav „High_06”, low nibble v horním bytu ACC musí být korigován přičtením 0x06 • Akce jsou totožné se stavem „Low_06“ Stav „High_60”, high nibble v horním bytu ACC musí být korigován přičtením konstanty 0x60. • Akce jsou totožné se stavem „Low_60“ • FSM pokračuje následujícím stavem „End_state“ Stav „High_66”, both nibbles v horním bytu musí být korigovány přičtením 0x66 • Akce jsou totožné se stavem „Low_60“ • FSM pokračuje následujícím stavem „End_state“ End_state Start Stav „End_state”, End_cal • Aktivace příznaku „End_cal”, výsledek na No Start výstupu je správný • Čekání na deaktivaci příkazu „Start”. To the state “First” • Když „Start” je deaktivován, potom FSM poObr. 06-05 Stavový diagram, kračuje následujícím stavem „First”, systém část D je připraven k součtu nových čísel
43
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
Obr. 06-07 Simulace součtu 999 + 25, decimálně
6.4 Simulace a realizace Ukázkový příklad součtu dvou decimálních číslic v paket BCD formátu je popsán jazyku VHDL, příloha 0601. Uvedený zápis byl zpracován v IDE prostředí - Integrated development environment, [wiki_0601]. Toto prostředí jako celek zajišťuje překlad, simulaci a syntézu. Obr. 05-33 ukazuje časové průběhy při součtu 999 + 25 = 1024, decimálně, v prostředí IDE. V simulaci signálu současný stav – „current state“ a následující stav – „next state“ ukazují cestu ve stavovém diagramu řídící jednotky, která byla použita v ukázkovém součtu. Pomocí IDE prostředí se vykoná syntéza, jejíž výsledek se dá realizovat v programovatelných logických prvcích. Výsledkem syntézy je soubor, který se nahraje do programovatelného logického prvku. Programovatelné logické prvky jsou obvody CPLD a FPGA. Blíže o celé problematice pojednává literatura [wiki_0602], [wiki_0603], [wiki_0604], [Zdralek_2006] and [Zdralek_2008].
6.5 Literatura [wiki_0601]
Integrated development environment; http://en.wikipedia.org/wiki/Integrated_development_environment; on line 2014-09-23
[wiki_0602]
Field-programmable gate array; http://en.wikipedia.org/wiki/Fieldprogrammable_gate_array; online 2014-09-23
[wiki_0603]
Programmable logic device; http://en.wikipedia.org/wiki/Programmable_logic_device; on line 2014-0923
[wiki_0604]
Complex programmable logic device; http://en.wikipedia.org/wiki/Complex_programmable_logic_device; on line 2014-09-23
[Zdralek_2006] Jaroslav Zdrálek: Programovatelné logické prvky, skripta VŠB-TU Ostrava, 2006, ISBN 80-248-1060-3 [Zdralek_2008] Jaroslav Zdrálek: Programovatelné logické prvky; E-learningové prvky pro podporu výuky odborných a technických předmětů, OP RLZ CZ.04.1.03/3.2.15.2/0326; ISBN 978-80-248-1502-2 44
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO
6.6 Příloha 0601 -- Zápis dekadické sčítačky v jazyku VHDL --------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity BCD_adder is Port ( A: in STD_LOGIC_VECTOR (15 downto 0); B: in STD_LOGIC_VECTOR (15 downto 0); Sum: out STD_LOGIC_VECTOR (15 downto 0); Start: in STD_LOGIC; End_cal: out STD_LOGIC; CLK: in std_logic; Reset_L: in std_logic ); end BCD_adder; architecture Behavioral of BCD_adder is signal flags: std_logic_vector (5 downto 0); signal word: std_logic_vector (13 downto 0); component control_unit is Port ( flags: in STD_LOGIC_VECTOR (5 downto 0); Start: in std_logic; contr_word: out STD_LOGIC_VECTOR (13 downto 0); CLK: in STD_LOGIC; Reset_L: in STD_LOGIC; End_cal: out std_logic); end component control_unit; component data_unit is Port ( A: in STD_LOGIC_VECTOR (15 downto 0); B: in STD_LOGIC_VECTOR (15 downto 0); Sum: out STD_LOGIC_VECTOR (15 downto 0); CLK: in std_logic; contr_word: in STD_LOGIC_VECTOR (13 downto 0); flags: out std_logic_vector (5 downto 0) ); end component data_unit; begin IO1: control_unit port map (flags, start, word, clk, reset_L, end_cal); IO2: data_unit port map (A, B, Sum, clk, word, flags); end Behavioral;
----------------------------------------------------------------------- Data Unit --------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
45
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO entity data_unit is Port ( A: in STD_LOGIC_VECTOR (15 downto 0); B: in STD_LOGIC_VECTOR (15 downto 0); Sum: out STD_LOGIC_VECTOR (15 downto 0); clk: in std_logic; contr_word: in STD_LOGIC_VECTOR (13 downto 0); flags: out std_logic_vector (5 downto 0) ); end data_unit; architecture Behavioral of data_unit is signal signal signal signal alias alias alias alias alias alias alias alias alias alias alias
A_reg, B_reg: std_logic_vector (15 downto 0); ACC: std_logic_vector (15 downto 0):=(others => '0'); A_mux, B_mux, ADD: std_logic_vector (7 downto 0); cin, cout, cc44, C8, C4, c_A6: std_logic; A_sel is contr_word (11 downto 10); B_sel is contr_word (9 downto 7); cin_C8orA6 is contr_word (6); sel_ACC_high is contr_word (5); load_A_reg is contr_word (4); load_B_reg is contr_word (3); load_C4 is contr_word (2); load_C8 is contr_word (1); load_c_A6 is contr_word (12); clear_carry is contr_word (13); load_ACC is contr_word (0);
alias nibble is flags (3 downto 0); alias fC8 is flags (4); alias fC4 is flags (5); component add_8_bit is Port ( A: in STD_LOGIC_VECTOR (7 downto 0); B: in STD_LOGIC_VECTOR (7 downto 0); S: out STD_LOGIC_VECTOR (7 downto 0); cin: in STD_LOGIC; c4: out STD_LOGIC; cout: out STD_LOGIC); end component add_8_bit; begin Sum <= ACC; -- A and B registers A_reg <= A when clk='1' and clk'event and load_A_reg='1'; B_reg <= B when clk='1' and clk'event and load_B_reg='1'; -- AMUX A_mux <= ACC(15 downto 08) when A_sel="00" else ACC(07 downto 00) when A_sel="01" else A_reg (15 downto 08) when A_sel="10" else A_reg (07 downto 00) when A_sel="11"; -- B MUX B_mux <= B_reg (15 downto 08) when B_sel="000" else B_reg (07 downto 00) when B_sel="001" else "00000000" when B_sel="010" else "00000110" when B_sel="011" else
46
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO "01100000" when B_sel="100" else "01100110"; -- cin mux cin <= '0' when cin_C8orA6='0' else C8 or c_A6; IO_add: add_8_bit port map (A_mux,B_mux, ADD, cin, cc44, cout); -- carry flags process (clk) is begin if clk='1' and clk'event then if load_C8='1' then C8 <= cout; elsif clear_carry='1' then C8 <='0'; else C8 <= C8; end if; end if; end process; fC8 <= C8; -- carry when correction of 6 is added process (clk) is begin if clk='1' and clk'event then if load_c_A6='1' then c_A6 <= cout; elsif clear_carry='1' then c_A6 <='0'; else c_A6 <= c_A6; end if; end if; end process; -- C4 flag process (clk) is begin if clk='1' and clk'event then if load_C4='1' then C4 <= cc44; elsif clear_carry='1' then C4 <='0'; else C4 <= C4; end if; end if; end process; fC4 <= C4; -- ACC register and the encoding the conditions -- when nibbles are higher than 9 ACC(15 downto 08) <= ADD when clk='1' and clk'event and load_ACC='1' and sel_ACC_high='1'; ACC(07 downto 00) <= ADD when clk='1' and clk'event and load_ACC='1' and sel_ACC_high='0'; nibble(0) nibble(1) nibble(2) nibble(3)
<= <= <= <=
'1' '1' '1' '1'
when when when when
ACC(03 ACC(07 ACC(11 ACC(15
downto downto downto downto
00) 04) 08) 12)
> > > >
"1001" "1001" "1001" "1001"
else else else else
'0'; '0'; '0'; '0';
end Behavioral;
47
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO -------------------------------------------------------------- Control unit ----------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity control_unit is Port ( flags: in STD_LOGIC_VECTOR (5 downto 0); start: in std_logic; contr_word: out STD_LOGIC_VECTOR (13 downto 0); clk: in STD_LOGIC; reset_L: in STD_LOGIC; end_cal: out std_logic); end control_unit; architecture Behavioral of control_unit is type state_type is (First, Beginig, Low_add, Low_06, Low_60, Low_66, High_add, High_06, High_60, High_66, End_state); signal Next_state, Current_state: state_type; alias alias alias alias alias alias alias alias alias alias alias
A_sel is contr_word (11 downto 10); B_sel is contr_word (9 downto 7); cin_C8orA6 is contr_word (6); sel_ACC_high is contr_word (5); load_A_reg is contr_word (4); load_B_reg is contr_word (3); load_C4 is contr_word (2); load_C8 is contr_word (1); load_c_add6 is contr_word (12); clear_carry is contr_word (13); load_ACC is contr_word (0);
alias nibble is flags (3 downto 0); alias fc8 is flags (4); alias fc4 is flags (5); begin State_reg: process (clk, reset_L, next_state)is begin if reset_L='0' then current_state <= first; elsif clk='0' and clk'event then current_state <= next_state; end if; end process State_reg; State_diagram: process (current_state, start, fc8, fc4, nibble(0), nibble(1),nibble(2),nibble(3), flags) is begin case current_state is when first => contr_word <= (others => '0'); end_cal <= '0'; if start = '1' then next_state <= beginig; else next_state <= first; end if;
48
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO when beginig => contr_word <= (others => '0'); load_A_reg <= '1'; load_B_reg <= '1'; clear_carry <= '1'; next_state <= low_add; when low_add => contr_word <= (others => '0'); A_sel <= "11"; -- A_reg_low B_sel <= "001"; cin_C8orA6 <= '0'; -- cin is zero load_ACC <= '1'; sel_ACC_high <= '0'; load_C4 <= '1'; load_C8 <= '1'; if (fc8='1' or nibble(1)='1') and (fc4='0') and (nibble(0)='0') then next_state <= low_60; elsif (fc8='0') and (nibble(1)='0') and (fc4='1' or nibble(0)='1') then next_state <= low_06; elsif (fc8='1' or nibble(1)='1') and (fc4='1' or nibble(0)='1') then next_state <= low_66; else next_state <= high_add; end if; when low_66 => contr_word <= (others => '0'); A_sel <= "01"; B_sel <= "101"; cin_C8orA6 <= '0'; load_ACC <= '1'; sel_ACC_high <= '0'; load_C4 <= '1'; load_c_add6 <= '1'; next_state <= high_add; when low_60 => contr_word <= (others => '0'); A_sel <= "01"; B_sel <= "100"; cin_C8orA6 <= '0'; load_ACC <= '1'; sel_ACC_high <= '0'; load_C4 <= '1'; load_c_add6 <= '1'; next_state <= high_add; when low_06 => contr_word <= (others => '0'); A_sel <= "01"; B_sel <= "011"; cin_C8orA6 <= '0'; load_ACC <= '1'; sel_ACC_high <= '0'; load_C4 <= '1'; load_c_add6 <= '1'; if (fc8='1' or nibble(1)='1') then next_state <= low_60; else next_state <= high_add; end if; when high_add => contr_word <= (others => '0'); A_sel <= "10"; -- A_reg high B_sel <= "000"; cin_C8orA6 <= '1'; load_ACC <= '1'; sel_ACC_high <= '1';
49
Číslicové systémy II pro integrovanou výuku VUT a VŠB-TUO load_C4 <= '1'; load_C8 <= '1'; if (fc8='1' or nibble(3)='1') and (fc4='0') and (nibble(2)='0') then next_state <= high_60; elsif (fc8='0') and (nibble(3)='0') and (fc4='1' or nibble(2)='1') then next_state <= high_06; elsif (fc8='1' or nibble(3)='1') and (fc4='1' or nibble(2)='1') then next_state <= high_66; else next_state <= end_state; end if; when high_66 => contr_word <= (others => '0'); A_sel <= "00"; B_sel <= "101"; cin_C8orA6 <= '0'; load_ACC <= '1'; sel_ACC_high <= '1'; load_C4 <= '1'; load_c_add6 <= '1'; next_state <= end_state; when high_60 => contr_word <= (others => '0'); A_sel <= "00"; B_sel <= "100"; cin_C8orA6 <= '0'; load_ACC <= '1'; sel_ACC_high <= '1'; load_C4 <= '1'; load_c_add6 <= '1'; next_state <= end_state; when high_06 => contr_word <= (others => '0'); A_sel <= "00"; B_sel <= "011"; cin_C8orA6 <= '0'; load_ACC <= '1'; sel_ACC_high <= '1'; load_C4 <= '1'; load_c_add6 <= '1'; if (fc8='1' or nibble(3)='1') --and (fc4='0') and (flags(2)='0') then next_state <= high_60; else next_state <= end_state; end if; when end_state => contr_word <= (others => '0'); end_cal <='1'; if start='0' then next_state <= first; else next_state <= end_state; end if; end case; end process State_diagram; end Behavioral;
50