Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO

Rozměr: px
Začít zobrazení ze stránky:

Download "Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO"

Transkript

1 FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO Garant předmětu: Ing. Michal Kubíček, Ph.D. Autoři textu: Ing. Michal Kubíček, Ph.D. BRNO * 2014 Vznik těchto skript byl podpořen projektem č. CZ.1.07/2.2.00/ Evropského sociálního fondu a státním rozpočtem České republiky.

2 2 FEKT Vysokého učení technického v Brně Autor Název Vydavatel Vydání Ing. Michal Kubíček, Ph.D. Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO Vysoké učení technické v Brně Fakulta elektrotechniky a komunikačních technologií Ústav telekomunikací Technická 12, Brno první Rok vydání 2014 Náklad elektronicky ISBN Tato publikace neprošla redakční ani jazykovou úpravou.

3 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 3 Obsah 1 ÚVOD STRUČNÝ ÚVOD DO JAZYKA VHDL KNIHOVNY A SLOHY ENTITA, ARCHITEKTURA DATOVÉ TYPY VÝRAZY A OPERÁTORY OBJEKTY JAZYKA VHDL PŘÍKAZY A PROCESY ARCHITEKTURA OBVODŮ FPGA VÝVOJ A VÝROBA INTEGROVANÝCH OBVODŮ LOGICKÉ BUŇKY OBVODŮ FPGA A JEJICH VYUŽITÍ VLASTNOSTI VSTUPNĚ/VÝSTUPNÍCH BUNĚK KONFIGURACE OBVODŮ FPGA VÝROBNÍ TECHNOLOGIE OBVODŮ FPGA POUZDRA OBVODŮ FPGA ZÁKLADY LOGICKÝCH OBVODŮ KOMBINAČNÍ LOGICKÉ OBVODY KLOPNÉ OBVODY BINÁRNÍ ČÍTAČE DALŠÍ TYPY ČÍTAČŮ STAVOVÉ AUTOMATY PRAKTICKÝ NÁVRH MEALYHO A MOOROVA AUTOMATU VE VHDL PAMĚŤOVĚ REALIZOVANÉ STAVOVÉ AUTOMATY HODINOVÉ A GLOBÁLNÍ SIGNÁLY V FPGA DISTRIBUCE HODINOVÉHO SIGNÁLU PRÁCE S HODINOVÝMI SIGNÁLY V FPGA NULOVÁNÍ A NASTAVENÍ (RESET A SET) PŘEVOD SIGNÁLŮ MEZI HODINOVÝMI DOMÉNAMI ZVYŠOVÁNÍ PRACOVNÍ FREKVENCE HARD IP MAKRA V OBVODECH FPGA BLOKOVÉ PAMĚTI RAM BLOKY PRO PODPORU DSP OPERACÍ VYSOKORYCHLOSTNÍ TRANSCEIVERY

4 4 FEKT Vysokého učení technického v Brně 1 Úvod Obvody FPGA (Field Programmable Gate Array) v současné době prodělávají velmi dynamický vývoj. Ve srovnání s jinými typy digitálních obvodů (zákaznické integrované obvody, procesory) nabízejí zajímavý kompromis mezi poskytnutým výpočetním výkonem, cenou, spotřebou, flexibilitou a dobou potřebnou pro vývoj aplikace, což vede k jejich rostoucí popularitě a použití ve stále větším množství aplikací. Jejich rozšíření zpětně ovlivňuje nabídku výrobců obvodů FPGA. Ti nabízí stále širší portfolio různých typů obvodů, které se navzájem liší výkonem, cenou i architekturou a jsou tak vhodné pro další nové aplikace. Vzhledem k takto dynamickému vývoji je obtížné vytvořit univerzální výukový text, který by postihl všechny praktické aspekty návrhu systémů s FPGA a zároveň by byl aktuální po relativně dlouhou dobu. Proto v textu záměrně nejsou uvedeny konkrétní údajům a názvům, které rychle zastarávají a za několik let mohou působit až úsměvně. Na druhou stranu jsem přesvědčen, že pro rychlé pochopení problematiky hradlových polí jsou některé konkrétní údaje nezbytné, aby čtenář neznalý problematiky získal představu o parametrech obvodů. Proto si kladu za cíl kompenzovat zastarávání konkrétních údajů průběžnou aktualizací obsahu elektronické verze těchto skript do té míry, dokud bude základní struktura textu vyhovující a platná pro moderní postup návrhu systémů s FPGA. FPGA jsou dnes natolik složité, že kompletní dokumentace k jedné řadě obvodů čítá i několik tisíc stran textu (katalogové listy, uživatelské manuály, aplikační poznámky). Pokud chce čtenář proniknout hlouběji do některé části problematiky hradlových polí, sáhne jistě po jedné z doporučených knih, ve kterých je dané oblast popsána detailně. Tyto knihy, stejně jako dokumentace samotných obvodů, jsou momentálně dostupné téměř výhradně v angličtině. Pro snazší orientaci v anglicky psané literatuře jsou proto v textu těchto skript uvedeny nejen české výrazy týkající se problematiky FPGA, ale kurzívou i jejich anglické ekvivalenty (např. syntéza a synthesis). Druhým důvodem pro uvádění anglických výrazů je fakt, že mnohé termíny spojené s problematikou FPGA nemají vhodný český ekvivalent, nebo se český ekvivalent v běžné inženýrské praxi nepoužívá.

5 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 5 2 Stručný úvod do jazyka VHDL Jazyk VHDL vznikal v 80. letech minulého století původně jako nástroj pro dokumentaci a později také pro ověřování (verifikaci) funkčnosti číslicových systémů navržených jinými metodami (typicky schéma nebo nižší programovací jazyky). Později se zrodila myšlenka využít tento jazyk nejen pro verifikaci, ale i pro syntézu číslicových obvodů. Jde o otevřený standard IEEE číslo 1076 [1], jehož první revize byla zveřejněna v roce 1987 a běžně se označuje jako VHDL-87. Tato první revize měla řadu nedostatků, z nichž ty nejpodstatnější vyřešila revize jazyka označovaná jako VHDL-93, která je dnes nejpoužívanější variantou tohoto jazyka. Od té doby vznikly i další revize (2000, 2002, 2006, 2008), někdy souhrnně označované jako VHDL-200X, které přidávají řadu užitečných funkcí a vlastností. Jejich použití je ale zatím omezené, neboť dosud nejsou plně podporovány běžnými návrhovými systémy. Jak bylo uvedeno, jazyk VHDL lze použít jak pro verifikaci, tak pro syntézu číslicových obvodů. Syntézou elektronických obvodů se obecně rozumí vytvoření schématu zapojení elementárních buněk na základě abstraktního popisu, dnes prakticky výhradně s využitím počítače. Jedny z prvních obvodů, které bylo možné automaticky syntetizovat, byly analogové filtry. Abstraktním popisem, který slouží jako vstup syntézy, jsou parametry filtru: typ (dolní propust, horní propust ), toleranční schéma (mezní frekvence, útlumy), použitá aproximace, atd. Výstupem syntézy je obvodové zapojení filtru složené ze základních (ideálních) součástek, jako jsou například rezistory, kapacitory, induktory a operační zesilovače. V případě digitálních obvodů jsou těmito elementárními buňkami v nejjednodušším případě logická hradla (AND, OR, XOR, NOT) a klopné obvody, ze kterých jsou složeny všechny moderní číslicové obvody. Nástroje provádějící syntézu se v tomto případě nazývají syntetizéry (Synthesis Tool; prosím nezaměňovat se syntezátory). V případě analogových filtrů je vstup i výstup procesu syntézy relativně jednoduchý a jednoznačný. I poměrně složité filtry jsou složeny nanejvýš z několika desítek elementárních komponent. Naproti tomu číslicové systémy jsou podstatně složitější, často se skládají ze stovek tisíc elementárních buněk, což klade na syntetizéry značné nároky. Ideální syntetizér by měl být schopen vytvořit příslušný obvod pouze na základě popisu chování systému z vnějšího pohledu (jak je tomu např. u analogových filtrů), tedy na základě co nejabstraktnějšího pohledu. Vzhledem ke složitosti číslicových systémů a stavu nástrojů pro jejich vývoj (EDA tools; Electronic Design Automation) je tento úkol v současné době nerealizovatelný. Proto je nutné syntetizéru jako vstup předložit více či méně detailní popis jeho struktury, včetně popisu algoritmů, které mají požadovanou funkci realizovat. To je úloha designerů, tedy návrhářů číslicových systémů (Digital Design Engineer), a to jak v případě obvodů FPGA, tak obvodů ASIC (Application Specific Integrated Circuit). S vývojem syntetizérů pochopitelně roste jejich schopnost syntetizovat abstraktní popis a vývojář tak může systémy popisovat na stále vyšší (abstraktnější) úrovni. Nicméně stále existují a patrně budou existovat obtížně syntetizovatelné systémy, které jsou natolik specifické, že je bude muset návrhář popsat na nízké úrovni abstrakce, aby dosáhl potřebného výpočetního výkonu, propustnosti dat či nízké latence. Jde o stejný typ problému, který bylo možné před lety pozorovat v oblasti mikroprocesorů s příchodem jazyka C a opuštěním jazyka symbolických instrukcí. V současné době se pro návrh číslicových obvodů používá několik programovacích jazyků, které umožňují provádět návrh na různých úrovních abstrakce. Dnes nejčastěji

6 6 FEKT Vysokého učení technického v Brně používanými jazyky jsou VHDL, Verilog, SystemVerilog, SystemC a jazyky C/C++. Na Obr. 1 je výsledek studie, kde je patrný rozdíl v použití jednotlivých jazyků pro návrh číslicových systémů v obvodech FPGA a v ostatních obvodech (ASIC, ASSP; Application Specific Standard Part). Fakt, že součet jednotlivých kategorií přesahuje 100% je důsledkem toho, že některé systémy se navrhují více jazyky, respektive řada návrhářů aktivně využívá více jazyků. Procento využití FPGA non-fpga Obr. 1 Využití jazyků pro návrh číslicových systémů (výsledek studie Willson Research Group and Mentor Graphics 2010 Functional Verification Study). Na Obr. 2 je orientační porovnání možností úrovně abstrakce popisu číslicových systémů jednotlivými programovacími jazyky. Pro potřeby návrhu obvodů ASIC je často nutné pracovat na nejnižší úrovni abstrakce, tedy na úrovni hradel (gate-level design). Jazyk Verilog umožňuje provádět popis na nižší úrovni, než jazyk VHDL, což se v analýze na Obr. 1 projevilo právě tím, že je používanější v oblasti návrhu obvodů ASIC (kategorie non- FPGA). Jazyk VHDL naopak umožňuje použít některé prvky vyšších programovacích jazyků, které usnadňují návrh složitých systémů, respektive integraci dílčích bloků do systému. Advanced verification System Algorithm RTL Logic Gate Obr. 2 Přibližná úroveň abstrakce návrhu dosažitelná s využitím jednotlivých programovacích jazyků vhodných pro popis číslicových systémů.

7 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 7 Se zvyšující se složitostí systémů se také zvyšuje potřeba jejich abstraktního popisu, aby bylo možné vytvořit odpovídající popis dostatečně rychle a s přiměřeným úsilím. Díky tomu jsou vyšší programovací jazyky, jako System C a C/C++ stále více používány, často jako doplněk nízkoúrovňových jazyků VHDL a Verilog. Naproti tomu jazyk SystemVerilog představuje unifikovaný nástroj, který má jak prostředky pro popis systémů na nejnižší úrovni (jako Verilog), tak na úrovni nejvyšší (C/C++). Z hlediska použití v budoucnu se tak jeví jako nejperspektivnější. Většina návrhových systémů, které jsou v současné době dostupné (rok 2014), jej ale ještě nepodporuje. Proto má stále smysl zabývat se jazyky VHDL a Verilog, které dnes v oblasti EDA dominují. Na tomto místě považuji za důležité zmínit jeden fakt: i s pokročilými programovacími jazyky je nezbytné psát zdrojový kód s ohledem na cílovou platformu, tedy použitý číslicový obvod. Kód v jazyce C, který je vhodný ke spuštění na moderních vícejádrových výpočetních systémech, se většinou diametrálně odlišuje od kódu, který je vhodný pro popis systému, který má tutéž funkci vykonávat v obvodu FPGA nebo ASIC. Kód určený pro procesor má algoritmický charakter. Naproti tomu popis číslicových systémů lze spíše přirovnat k popisu propojení bloků (netlist), přičemž jeho základní komponenty mohou být popsány algoritmicky, pokud to použitý programovací jazyk a syntetizér umožní. Pro návrh číslicových systémů s FPGA (případně ASIC) je klíčové pochopit a ovládnout princip programování, který lze poté uplatnit s využitím kteréhokoliv z uvedených programovacích jazyků. Rozdíl mezi jazyky je pak z tohoto pohledu pouze v odlišné syntaxi a nabízených prostředcích pro popis systému na různých úrovních abstrakce. Na počátku 90. let se začal projevovat fakt, že návrháři jsou sice schopni poměrně rychle a efektivně navrhnout složitý číslicový systém, ale již neexistují vhodné nástroje pro jeho efektivní a dostatečně rychlou verifikaci. Tento jev, který se dnes označuje design verification gap, je jednou z hlavních příčin toho, že se vyšší programovací jazyky začaly již v té době používat pro verifikaci číslicových systémů (podstatně dříve, než pro jejich syntézu). Do jisté míry lze tedy chápat tuto potřebu rychlejší verifikace a následné použití vyšších programovacích jazyků jako podnět k jejich použití i pro syntézu. Následující úvod si neklade za cíl naučit čtenáře VHDL, ale upozornit na podstatné aspekty tohoto jazyka a některá známá i méně známá úskalí, se kterými se při jeho použití můžeme setkat. Pro podrobné seznámení mohu doporučit literaturu [5], [6], [7] nebo [8] (existuje mnoho dalších kvalitních publikací, především pak zahraničních). 2.1 Knihovny a slohy Knihovna je dle definice jazyka VHDL prostor, do kterého jsou kompilátorem ukládány informace o projektu a souborech, které k němu náleží. Obsahuje a umožňuje přístup k již zkompilovaným entitám, architekturám a slohám. Použití knihovny samo o sobě ale nedovoluje přístup k definicím objektů, které mohou být součástí sloh v knihovně. Samotný standard VHDL nespecifikuje způsob jejich implementace, proto se u různých návrhových systémů můžeme setkat s různou realizací knihoven. Typicky jde o složku, případně o soubor odpovídajícího jména v adresáři projektu. Slohy jsou speciální zdrojové kódy VHDL obsahující deklarace a definice objektů (datové typy, konstanty, funkce...), které pak mohou být použity ve zdrojovém kódu. Slohy jsou vždy součástí knihoven a existuje několik standardních sloh, které se používají při návrhu číslicových systémů pro FPGA/ASIC. Stručný výčet těchto sloh je uvede níže.

8 8 FEKT Vysokého učení technického v Brně Samotný jazyk VHDL obsahuje dvě knihovny: STD a WORK. Knihovna STD obsahuje slohy STANDARD a TEXTIO. Sloha STANDARD obsahuje deklarace základních datových typů (viz níže) a operací s nimi. Sloha TEXTIO pak umožňuje práci se soubory a textem. Knihovna WORK je pracovní knihovna daného projektu a obsahuje například deklarace entit a architektur zkompilovaných zdrojových kódů. Zároveň se do ní kompilují případné slohy, které jsou součástí projektu. Knihovny STD i WORK jsou implicitně součástí každého zdrojového kódu VHDL, aniž by bylo třeba jejich použití deklarovat. Stejně tak je automatické použití slohy STANDARD, nikoliv však slohy TEXTIO! Další používanou knihovnou je knihovna IEEE [3], která obsahuje deklarace datových typů a funkcí potřebných pro popis reálných číslicových systémů. Její použití je třeba v každém zdrojovém kódu explicitně deklarovat. Součástí knihovny je několik sloh, které lze rozdělit do dvojice skupin: standardní (standardizované) a tzv. průmyslově zavedené (nestandardizované, byť jsou v knihovně IEEE!!!). V současné době je již význam nestandardizovaných sloh nízký a prakticky se nepoužívají. Stále však existuje velké množství zdrojových kódů, které tyto knihovny používají. Navíc i mnohé aktuální vzorové zdrojové kódy dostupné přímo od výrobců obvodů FPGA (Xilinx) využívají tyto slohy, byť je jejich použití již dlouho dobu potlačováno. Z tohoto důvodu je nutné znát obsah a důvody použití alespoň těch nejčastěji používaných. Základní standardní slohou knihovny IEEE, která se používá ve všech zdrojových kódech pro popis a verifikaci číslicových systémů, je sloha STD_LOGIC_1164 a je pokryta samostatným standardem IEEE [2]. Tato sloha obsahuje především deklaraci klíčových datových typů STD_LOGIC a STD_LOGIC_VECTOR, které se používají pro popis vodičů (signálů) v reálném číslicovém obvodu (viz kapitola 2.3). Sloha dále obsahuje funkce, které umožňují provádět s těmito datovými typy základní logické operace (AND, OR, XOR, NAND...) a konverzní funkce pro vzájemný převod operandů typu STD_LOGIC, STD_ULOGIC a BIT, včetně jejich vektorových variant. Druhou důležitou slohou z hlediska syntézy číslicových systémů je sloha NUMERIC_STD. Ta obsahuje definici nových datových typů SIGNED a UNSIGNED, které slouží pro popis aritmetických operací. Tyto datové typy jsou definované stejně, jako datový typ STD_LOGIC_VECTOR tedy jako jednorozměrné pole prvků typu STD_LOGIC. Kromě definice nových typů obsahuje sloha také funkce pro objekty těchto typů. Jde především o základní aritmetické operace (+, -, *, /, REM, MOD), relační operátory, operace rotace a posuvů a logické operátory. Kromě toho obsahuje i konverzní funkce pro vzájemný převod datových typů INTEGER, SIGNED a UNSIGNED. Kromě uvedených sloh jsou v knihovně IEEE další standardní slohy, které se používají v menší míře. Jde o slohy numeric_bit, math_complex a math_real. Mimo standardní slohy obsahuje knihovna IEEE také slohy nestandardní, tzv. průmyslově zavedené. Tyto slohy vznikly krátce po vydání první revize jazyka VHDL jako reakce na potřeby reálného návrhu číslicových obvodů. V době, kdy ještě nebyla dostupná sloha NUMERIC_STD, neexistovaly vhodné vektorové datové typy, které by bylo možné využít pro implementaci aritmetických operací - typy SIGNED a UNSIGNED. Proto přední firmy z oblasti nástrojů EDA vytvořili vlastní (nestandardizované) knihovny, které tento nedostatek kompenzovaly. Dodnes se lze v mnoha zdrojových kódech setkat s knihovnami STD_LOGIC_ARITH, STD_LOGIC_UNSIGNED případně STD_LOGIC_SIGNED, přestože se je jejich použití nedoporučuje již od roku 1997, kdy byla standardizována sloha NUMERIC_STD [3]. Hlavní problém nestandardních sloh tkví v tom, že každý z výrobců EDA (Cadence, Synopsis, Mentor Graphics) si vytvořil svoji verzi těchto sloh. Výsledek

9 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 9 syntézy/simulace zdrojového kódu využívajícího tyto slohy tak mohl být funkčně odlišný podle verze nástroje, který byl použit pro syntézu/simulaci. Knihovna STD_LOGIC_ARITH je velmi podobná sloze NUMERIC_STD. Definuje datové typy SIGNED a UNSIGNED, aritmetické a logické operace s nimi a řadu potřebných konverzních funkcí. Knihovny STD_LOGIC_UNSIGNED a STD_LOGIC_SIGNED definují aritmetické operace pro operandy typu STD_LOGIC_VECTOR, který je podle použité slohy interpretován jako celé číslo bez znaménka (UNSIGNED) nebo celé číslo se znaménkem ve dvojkovém doplňku (SIGNED). Především se slohou STD_LOGIC_UNSIGNED se dodnes můžeme velmi často setkat ve zdrojových kódech, neboť výrazně zjednodušuje popis binárních čítačů a dalších bloků, které realizují základní aritmetické operace s neznaménkovými čísly. 2.2 Entita, architektura Zdrojový kód VHDL se skládá typicky ze tří částí: deklarace použitých knihoven a sloh deklarace entity (entity declaration) popis (tělo) architektury (architecture body) Níže je uvedený jednoduchý příklad typického zdrojového kódu VHDL popisující binární sčítačku. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; ENTITY ALU IS PORT (A,B: IN STD_LOGIC_VECTOR (7 DOWNTO 0); SUM: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END ALU; ARCHITECTURE Behavioral OF ALU IS BEGIN SUM <= STD_LOGIC_VECTOR(UNSIGNED(A) + UNSIGNED(B)); END Behavioral; A B A B ALU SUM ALU + SUM První část kódu zpřístupní pro další použití datové typy, funkce a již zkompilované bloky, které jsou součástí příslušných knihoven a sloh. Deklarace platí pouze pro aktuální zdrojový kód, neplatí pro hierarchicky nadřazené ani podřazené soubory. Na rozdíl od některých jiných programovacích jazyků použití knihoven a sloh ve VHDL neznamená zvýšení nároků na výslednou implementaci, pouze zpřístupňuje funkce a objekty, které umožňují psát samotný zdrojový kód efektivněji. Druhou částí kódu je popis entity. Obecně se předpokládá, že každý zdrojový kód VHDL popisuje určitou část číslicového obvodu (entitu), u které lze jednoznačně definovat vstupy a výstupy. Z vnějšího pohledu lze takový blok považovat za jakousi součástku. Deklarace entity popisuje tuto součástku z vnějšího pohledu, tedy pouze z hlediska jejích vstupů a výstupů. Základem deklarace entity je seznam portů (bran), které jsou vstupy a výstupy popisovaného bloku (entity). Jde o signály, které jsou dostupné mimo popisovanou

10 10 FEKT Vysokého učení technického v Brně entitu. Ve fyzické realizaci jsou porty reprezentovány vodiči propojujícími jednotlivé hierarchické bloky. Porty mohou být několika typů: IN vstupní brána OUT výstupní brána INOUT brána, která může být jak vstupní, tak výstupní. Doporučuje se používat pouze na nejvyšší hierarchické úrovni ve spojení s třístavovým výstupem (tri-state buffer) BUFFER výstupní brána, která zpřístupňuje příslušný signál i uvnitř popisované entity (signál pak lze použít jako argument podmíněných příkazů a na pravé straně přiřazovacích příkazů). Důrazně se nedoporučuje tento typ používat. Třetí část kódu obsahuje samotný popis funkce bloku, který se nazývá tělo architektury. Popis může být proveden některým ze základních stylů nebo jejich kombinací: Strukturální popis je založen na technice propojení již existujících komponent (entit), které mohou být popsány některým z uvedených způsobů, nebo jsou elementárními bloky cílového obvodu. Jde o textový popis schematického propojení komponent, tedy netlist. Tento typ popisu se používá při hierarchickém návrhu systémů jako náhrada grafického schématu. Oproti grafické podobě sice bývá méně přehledný, ale je zcela nezávislý na návrhovém systému. Tato nezávislost je klíčová, neboť neexistuje standard pro formát schematických dokumentů a ty jsou tak vždy vázány na konkrétní návrhový systém. RTL popis je styl, který popisuje logické obvody mezi registry, samotné registry a vazbu všech těchto obvodů na vstupy a výstupy (RTL = Register Transfer Logic). Popis bere v úvahu fakt, že cílový obvod bude fyzicky implementován (ASIC, FPGA). Obecně se tento popis chápe tak, že je vždy syntetizovatelný a pro implementaci preferovaný. Behaviorální popis umožňuje použít vyšší funkce programovacích jazyků a tak zjednodušit a zpřehlednit popis systému. Původně byl behaviorální popis určen pro verifikaci (simulaci), při níž je podstatné, aby byl kód jasný a přehledný, přičemž syntetizovatelnost není podmínkou. S rostoucími schopnostmi syntetizérů je ale stále více funkcí dříve vyhrazených behaviorálnímu popisu podporováno i pro implementaci. Typicky behaviorální prvky (např. cykly) tak dnes můžeme najít i v RTL popisu. Výsledek syntézy takového kódu již ale na první pohled nebývá zřejmý a při nesprávném použití některých funkcí a příkazů může být velmi neefektivní. Často dochází k mísení jednotlivých typů popisů v jednom zdrojovém kódu s cílem učinit popis co nejefektivnější z hlediska zápisu. Strukturální popis by ale takto měl být použit pouze v omezené míře, někdy dokonce bývá jeho použití ve spojení s ostatními styly zakázáno interními firemními předpisy. V praxi se doporučuje vždy v rámci jediného zdrojového souboru vytvořit jak popis entity, tak popis odpovídající architektury, byť to samotný jazyk VHDL ani návrhové systémy nevyžadují. Doporučení vychází ze zkušeností mnoha firem s návrhem číslicových systémů pomocí jazyka VHDL a opět bývá často předepsáno vnitřní normou.

11 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO Datové typy Základní definice jazyka VHDL obsahuje standardní datové typy, které jsou běžné ve většině současných programovacích jazyků. Jejich stručný seznam je zde: BOOLEAN -- True / False INTEGER or 64 bit NATURAL -- Integer >= 0 POSITIVE -- Integer > 0 REAL -- Floating-point BIT -- '0','1' BIT_VECTOR -- Pole prvku typu bit CHARACTER -- 7-bit ASCII STRING -- Pole prvku typu CHARACTER TIME -- hr, min, sec, ms, us, ns, ps, fs Popis číslicových systémů se provádí na úrovni signálů, které jsou v hardwarové realizaci reprezentovány vodiči. Vodiče propojují vstupy a výstupy bloků, ze kterých je systém složen. Jelikož dnešní systémy pracují výhradně jako binární, mohou výstupy a vstupy číslicových obvodů nabývat pouze dvojice definovaných stavů logické 0 nebo 1. Rozlišení stavů je provedeno na fyzické úrovni většinou jinou napěťovou úrovní (např. log. 0 odpovídá úroveň 0 V a log. 1 odpovídá úroveň 3,3 V), která je sice specifická pro cílovou technologii, ale z hlediska popisu funkce systému nemá význam. Pro popis signálů pomocí jazyka VHDL se tak jeví jako vhodné použít datový typ BIT, který byl pro tento účel skutečně navržen. Brzy se ale ukázalo, že takový dvoustavový signál nedostačuje pro popis reálných systémů, neboť například nedokáže postihnout stav vysoké impedance na vodiči nebo současné připojení dvojice aktivních budičů s rozdílným výstupem na jeden signál. Proto byla brzy standardizována nová sloha STD_LOGIC_1164 (slohy viz kapitola 2.1; [2]), která obsahuje definici nových datových typů, již vhodných pro popis reálných systémů. Prvním z těchto typů je STD_ULOGIC, který je definován výčtem možných hodnot: TYPE STD_ULOGIC IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-'); -- Don t care Kromě logické 0 nebo 1 tak může signál typu STD_ULOGIC nabývat hodnoty 'U' (typicky po spuštění systému, kdy signálu ještě nemá přiřazenu hodnotu), 'X' (log. 0 nebo 1, ale není známo která z hodnot, případně konflikt hodnot 0 a 1), 'Z' (stav vysoké impedance používaný u třístavových výstupů), 'H', 'L' (slabá úroveň '1', respektive '0'; odpovídá použití rezistorů připojených mezi signál a napájecí napětí, respektive zem obvodu), 'W' (podobně jako 'X', ale jde o konflikt úrovní 'H' a 'L') a '-' ( don t care hodnota; používá se především při verifikaci, ale v některých případech ji lze použít pro popis, když chceme vyjádřit, že nám nezáleží na hodnotě konkrétního výstupu v některém ze stavů systému).

12 12 FEKT Vysokého učení technického v Brně Dalším datovým typem definovaným ve sloze STD_LOGIC_1164 je typ STD_LOGIC. Tento datový typ je definován stejně, jako typ STD_ULOGIC jen s tím rozdílem, že pro datový typ STD_LOGIC je navíc definována tzv. rozlišovací funkce (resolution function): U X 0 1 Z W L H ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- U ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- X ( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- 0 ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- 1 ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- Z ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- W ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- L ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- H ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- - Tato funkce je klíčová pro simulaci systémů a řeší konflikty, které mohou běžně nastat při propojení aktivně buzených signálů. Bez použití této rozlišovací funkce by došlo při konfliktu k neřešitelnému problému a simulace by skončila chybou. Rozlišovací funkce jednoduše každé kombinaci hodnot signálů přiřazuje výslednou hodnotu. Díky rozlišovací funkci tak můžeme například propojit třístavový výstup ve stavu 'Z' s jiným výstupem ve stavu '1', přičemž výsledkem bude hodnota '1'. To odpovídá i situaci v reálných číslicových obvodech. Pro reálné obvody má ale význam pouze hodnota '0' nebo '1', neboť veškeré ostatní hodnoty jsou vždy na vstupech obvodu vyhodnoceny jako jedna z těchto hodnot. Důsledkem vystavení vstupu číslicového obvodu úrovni 'Z' sice může být krátkodobý stav metastability jeho výstupu, který ale obvykle rychle odezní a výsledkem je hodnota log. 0 nebo 1, byť nelze predikovat, který z obou stavů nastane. Pokud nevyužíváme třístavové výstupy, je z hlediska implementace použití typů BIT, STD_ULOGIC a STD_LOGIC zcela ekvivalentní. Jelikož se dnes prakticky veškeré systémy před vlastní implementací simulují, je použití datového typu STD_LOGIC prakticky nezbytné a stalo se standardem. Všechny tři zmíněné datové typy mají vždy definovaná i odpovídající jednorozměrná pole (vektory) BIT_VECTOR, STD_ULOGIC_VECTOR a STD_LOGIC_VECTOR. Níže jsou pro ilustraci uvedeny deklarace těchto datových typů: TYPE bit_vector IS ARRAY ( NATURAL RANGE <> ) OF bit; TYPE std_logic_uvector IS ARRAY ( NATURAL RANGE <> ) OF std_ulogic; TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_logic; Tyto vektory se v praxi používají pro reprezentaci sběrnic a vícebitových signálů. V případě potřeby je možné realizovat i vícerozměrná pole, což se využívá například k realizaci paměťových struktury: TYPE RAM_8b IS ARRAY ( NATURAL RANGE <> ) OF std_logic_vector(7 TO 0);

13 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 13 Často se lze setkat s diskuzí, zda je vhodnější pro popis systému použít datové typy STD_LOGIC nebo STD_ULOGIC. Z hlediska implementace je výsledek korektně napsaného kódu v obou případech identický. Rozdíl je ale v chování simulátorů v případě, že dojde k propojení výstupů. Při použití typu STD_ULOGIC, který nemá definovanou rozlišovací funkci, dojde při takovém konfliktu k chybě, kdežto u typu STD_LOGIC je dle rozlišovací funkce vyhodnocen stav, který je z hlediska simulátoru korektní. Jelikož je propojení výstupů v drtivě většině případů chybou v návrhu, je možné typ STD_ULOGIC využít k detekci takovýchto chyb na úrovni simulace. Chyby tohoto druhu jsou odhaleny i v případě použití datového typu STD_LOGIC, i když až nástroji implementačními. Obecně je datový typ STD_LOGIC ve VHDL pro popis číslicových systémů používanější a na tomto typu je také založeno několik dalších datových typů, především SIGNED a UNSIGNED: TYPE signed IS ARRAY ( NATURAL RANGE <> ) OF std_logic; TYPE unsigned IS ARRAY ( NATURAL RANGE <> ) OF std_logic; Kromě již předdefinovaných datových typů umožňuje VHDL deklarovat vlastní datové typy formou výčtu (enumerated type). Tento fakt se velmi často využívá například při popisu stavových automatů, kdy zpřehledňuje jejich popis a zároveň umožňuje snazší kontrolu funkce (verifikaci). V některých firmách je použití výčtových typů pro popis stavových automatů dokonce striktně požadováno. Níže je uveden příklad deklarace vlastního datového typu t_state a deklarace dvojice signálů pres_state a next_state tohoto typu s definicí výchozí hodnoty (inicializace). TYPE t_state IS (Idle, Run, Lap, Stop); SIGNAL pres_state, next_state: t_state := Idle; Veškeré výčtové datové typy jsou ordinální, tudíž je se signály takových typů možné provádět nejen operace porovnání ekvivalence a nonekvivalence (=, /=), ale také porovnání velikostí (>, <, >=, <=). Dle výše uvedené deklarace datového typu t_state platí, že výraz (Idle < Run) má hodnotu TRUE (výsledek relační operace je vždy typu boolean). Dále lze deklarovat i subtypy na základě již deklarovaného datového typu. TYPE t_0to9 IS INTEGER RANGE 0 TO 9; Takové datové typy lze využít k implicitní kontrole kódu během simulace systému (funkční verifikace). Pokud například během simulace signálu, který je výše uvedeného typu t_0to9, přiřadíme hodnotu 21, zahlásí simulátor ihned chybu. 2.4 Výrazy a operátory Výrazy jsou skupiny identifikátorů (objektů) navzájem propojených operátory. Vyhodnocování výrazů se provádí na základě priority zavedené definicí jazyka VHDL (celkem 7 úrovní). Operátory definované ve standardu VHDL jsou uvedeny níže v seznamu podle jejich priority od nejvyšší po nejnižší. V případě potřeby lze prioritu vyhodnocení výrazu libovolně upravit pomocí závorek.

14 14 FEKT Vysokého učení technického v Brně 1) ** exponent 2**8 = 256 ABS absolutní hodnota ABS(-128) = 128 NOT komplement NOT("1100") = "0011" negace NOT(FALSE) = TRUE 2) * násobení 8*3 = 24 / dělení 8/3 = MOD celočíselné dělení 14 MOD 8 = 1 REM zbytek po dělení 14 REM 8 = 6 3) + znaménko +(16) = 16 - znaménko -(16) = -16 4) + součet 2+8 = 10 - rozdíl 2-8 = -6 & sloučení (concatenate) "0110" & "11" = "011011" 5) SLL posun vlevo (log.) "100110" SLL 2 = "011000" SRL posun vlevo (log.) "100110" SRL 2 = "001001" SLA posun vlevo (aritm.) "100110" SLA 2 = "011000" SRA posun vlevo (aritm.) "100110" SRA 2 = "111001" ROL rotace vlevo "100110" ROL 2 = "011010" ROR rotace vpravo "100110" ROR 2 = "101001" 6) = rovno (5 = 12) = FALSE /= není rovno (5 /= 12) = TRUE < menší (5 < 12) = TRUE <= menší nebo rovno (5 <= 12) = TRUE > větší (5 = 12) = FALSE >= větší nebo rovno (5 >= 12) = FALSE 7) AND logický součin "1100" AND "0110" = "0100" FALSE AND TRUE = FALSE NAND negovaný logický součin "1100" NAND "0110" = "1011" FALSE NAND TRUE = TRUE OR logický součet "1100" OR "0110" = "1110" FALSE OR TRUE = TRUE NOR negovaný logický součet "1100" NOR "0110" = "0001" FALSE NOR TRUE = FALSE XOR exkluzivní OR "1100" XOR "0110" = "1010" FALSE XOR TRUE = TRUE XNOR exkluzivní NOR "1100" XNOR "0110" = "0101" FALSE XNOR TRUE = FALSE Jazyk VHDL je přísně typový. Pokud chceme nějaký objekt použít, musíme předem deklarovat jeho typ. Typ objektu pak určuje operace, které lze s objektem provádět. Jinými slovy, operace je možné provádět pouze s objekty takových datových typů, pro které jsou tyto operace definovány. Například ve standardní sloze STD_LOGIC_1164 je sice definován datový typy STD_LOGIC_VECTOR, ale již ne funkce pro sčítání operandů tohoto typu. Pokud chceme operaci sčítání objektů tohoto typu provádět, je nutné tuto funkci deklarovat

15 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 15 (jak je tomu například v nestandardní sloze STD_LOGIC_UNSIGNED). Přísná typovost také neumožňuje přímé přiřazení hodnot jednoho objektu na druhý. K přiřazení je nutné použít konverzní funkce, které bývají součástí standardních sloh. Příklady použití jsou uvedeny v kapitole Objekty jazyka VHDL Základními objekty jazyka VHDL jsou signály, proměnné, konstanty a soubory. Signál (signal) je objekt, který se přímo používá pro popis číslicových systémů, a je ekvivalentem vodiče v jejich fyzické realizaci. V rámci zdrojového kódu jsou signály deklarovány buď jako porty v deklaraci entity, nebo jako vnitřní signály dané entity v deklarativní části architektury. Nejběžnější typy signálů jsou definovány ve zdrojovém kódu níže a graficky znázorněny na Obr. 3. ENTITY ALU IS PORT (A,B: IN STD_LOGIC_VECTOR (7 DOWNTO 0); OpSel: IN STD_LOGIC; SUM: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); sig_1: INOUT STD_LOGIC; -- tristavove I/O sig_2: BUFFER STD_LOGIC); -- nepouzivat END ALU; ARCHITECTURE Behavioral OF ALU IS SIGNAL SUM_i: STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL CARRY: BEGIN... STD_LOGIC; ALU A B OpSel SUM_i CARRY SUM sig_1 sig_2 Obr. 3 Různé způsoby deklarace signálu z hlediska entity. Dalším objektem jsou proměnné (variable), které slouží pro zjednodušení popisu, ale již nemají fyzický ekvivalent v implementovaném designu. Typickým příkladem použití jsou iterační proměnné v cyklech. Proměnné jsou většinou definovány uvnitř procesů a funkcí. V takovém případě nejsou dostupné ve zbývající části kódu, jde tedy o jakýsi ekvivalent lokální proměnné. Pokud má být hodnota proměnné dostupná i mimo daný proces či funkci, je třeba její hodnotu přiřadit vhodnému signálu. Existuje možnost deklarovat i globální proměnné, ale jejich použití se v kódech určených pro syntézu nedoporučuje. Použití proměnných je častější v kódech určených pro simulaci, kódy určené pro syntézu je většinou možné efektivně zapsat i bez použití proměnných. Posledním pro syntézu důležitým objektem jsou konstanty (constant). Jejich význam tkví především v možnosti snadno parametrizovat design a/nebo zpřehlednit jeho popis. Konstanty mohou být definovány v deklarativní části architektury, kdy jsou dostupné pouze v příslušné architektuře, nebo v uživatelem definovaných slohách, které umožní použít takto

16 16 FEKT Vysokého učení technického v Brně definované konstanty ve všech zdrojových kódech, ve kterých je daná sloha použita. Obecně se nedoporučuje v samotném popisu používat explicitní číselné hodnoty, ale nahradit je právě konstantami. Týká se to například i definice rozměrů vektorů a polí při jejich deklaraci. Takový způsob popisu je snáze verifikovatelný a lze jej jednoduše modifikovat. 2.6 Příkazy a procesy Ačkoliv je jazyk VHDL určen pro syntézu číslicových obvodů, tak ne každý zdrojový kód napsaný ve VHDL lze úspěšně syntetizovat. Existuje podskupina příkazů a funkcí jazyka, označovaná jako syntetizovatelná (Synthesable Subset), která je podporována syntetizéry. Zbývající příkazy lze bez omezení použít pouze pro verifikaci. Zda lze konkrétní konstrukce a funkce syntetizovat, je třeba ověřit v dokumentaci použitého syntetizéru (viz např. [16]), možnosti syntetizérů se liší. Typickým příkladem nesyntetizovatelných příkazů je skupina příkazů WAIT nebo obecná operace dělení. Obecně je známa horší podpora cyklů (FOR, WHILE ). Jejich syntéza je sice možná, ale při nevhodném použití může vést na velmi neefektivní výslednou implementaci nebo dokonce nesyntetizovatelný zdrojový kód. Moderní syntetizéry dnes zpracovávají zdrojové kódy do určité míry intuitivně, v kódu se snaží rozpoznat typické struktury. Například klopný obvod typu D lze popsat mnoha způsoby, které vyhoví při simulaci. Syntetizér ale dokáže klopný obvod typu D ze zdrojového kódu extrahovat pouze v případě, že je popsán pomocí odpovídajícího procesu s předepsanou strukturou. Proto je třeba při psaní kódu dodržovat některé konvence, které sice často zdrojový kód zesložiťují, ale pro korektní syntézu jsou nezbytné. Některé tyto konvence jsou uvedeny níže. Ve VHDL existují tři skupiny příkazů: Souběžné příkazy (concurrent statement): jsou to příkazy, které jsou prováděny nezávisle na pořadí zápisu, vždy zároveň, souběžně. Patří mezi ně o podmíněný příkaz WHEN-ELSE o podmíněný příkaz WITH-SELECT-WHEN o instanciace komponent o procesy (PROCESS) jako celek o příkaz GENERATE Sekvenční příkazy (sequential statement): příkazy, které se používají pro algoritmický popis v procesech, funkcích a procedurách. Jejich provádění probíhá sekvenčně (postupně), jak je to obvyklé například u zdrojových kódů mikroprocesorů. Jsou to o příkaz bezprostředního přiřazení pro proměnné := o podmíněný příkaz IF-THEN-ELSE-ELSIF o podmíněný příkaz CASE-WHEN o smyčky a jejich pomocné ovládací příkazy (FOR, WHILE, LOOP, NEXT, EXIT) Příkazy sekvenčního i souběžného charakteru: lze je použít jako sekvenční i jako souběžné příkazy. o bezprostřední přiřazení hodnoty signálu <=

17 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 17 o volání funkcí a procedur o příkazy ASSERT a REPORT Souběžné příkazy lze psát v libovolném pořadí architektury. Každý souběžný příkaz je ekvivalentem propojení bloků nebo určité části číslicového obvodu, tedy kombinační části, sekvenční části nebo subsystému obsahující jak kombinační tak sekvenční část. V popisu systému pomocí souběžných příkazů lze vidět netlist s prvky vyšších programovacích jazyků. Níže je uveden příklad zdrojového kódu s trojicí souběžných příkazů v architektuře popisující entitu ALU a graficky naznačený výsledek syntézy tohoto kódu. Pořadí zápisu příkazů přiřazení pro signály Z, X a Y může být libovolné. ENTITY ALU IS PORT( A,B,C,D : IN INTEGER; Z : OUT INTEGER); END ALU; ARCHITECTURE Behavioral OF ALU IS SIGNAL X, Y : INTEGER; BEGIN Z <= X + Y; X <= A + B; Y <= C + D; END Behavioral; A B C D + + ALU X Y + Z Častou chybou při psaní kódu je přiřazení hodnoty jednomu signálu více souběžnými příkazy. Výsledkem dvojice příkazů by byla realizace dvojice číslicových obvodů, jejichž výstupy by byly propojeny. Takový kód nelze implementovat, při pokusu o syntézu dojde k chybovému hlášení, které oznamuje návrháři tuto chybu jako existenci více zdrojů pro jeden signál (multisource). Ukázka korektního a nekorektního způsobu zápisu je níže. BEGIN -- nekorektní kód (dva souběžné příkazy pro jeden signál) Z <= X + Y; Z <= "0000" WHEN reset = '1'; END Behavioral; BEGIN -- korektní kód (jeden souběžný příkaz pro jeden signál) Z <= "0000" WHEN reset = '1' ELSE (X + Y); END Behavioral; Sekvenční příkazy lze použít pouze v procesech, funkcích a procedurách. Proces (process) je speciální konstrukt jazyka VHDL, který slouží k zapouzdření části kódu, který má algoritmický charakter. Jako celek je pak proces chápán jako jediný sekvenční příkaz a obvykle je ve výsledné implementaci reprezentován kombinačním či sekvenčním logickým obvodem. Sekvenční popis dostupný v procesech umožňuje ve srovnání se souběžnými příkazy mnohem snazší zápis složitých algoritmů. Proto se procesy velmi často používají především v behaviorálním stylu popisu. Existují dva základní typy procesů: Proces obsahující některý z příkazů skupiny WAIT. Takový proces lze použít pouze pro simulaci, neboť samotný příkaz čekání (wait) nelze přímo realizovat žádným logickým obvodem. Proces obsahující citlivostní seznam (sensitivity list). Tyto procesy lze použít jak pro simulaci, tak pro implementaci. Lze je dále rozdělit na procesy realizující

18 18 FEKT Vysokého učení technického v Brně kombinační logické funkce (tzv. kombinační procesy) a procesy realizující sekvenční funkce (tzv. sekvenční procesy). Ukázka typického procesu je ve zdrojovém kódu níže. Proces realizuje funkci, která odpovídá klopnému obvodu typu D řízenému hranou se signálem asynchronního nulování. PROCESS (reset, clk) BEGIN IF reset = '1' THEN Q <= '0'; ELSIF rising_edge(clk) THEN Q <= D; END IF; END PROCESS; Za klíčovým slovem PROCESS je uveden tzv. citlivostní seznam (sensitivity list). Je to seznam signálů, na které proces reaguje. Z hlediska simulace dojde ke spuštění ( přepočítání ) procesu v případě, že se jakkoliv změní některý ze signálů v tomto seznamu. Vzhledem k tomu, že tyto signály bývají typu STD_LOGIC, může jít nejen o změnu z úrovně log. 0 do log. 1 a naopak, ale také přechod do stavu vysoké impedance 'Z', nedefinované hodnoty 'X' a podobně. Z hlediska implementace citlivostní seznam tak podstatný není, jelikož syntetizéry neinterpretují kód doslova, ale snaží se v něm rozpoznat typické struktury. Při implementaci kódu, v němž by byl citlivostní seznam neúplný, proběhne implementace korektně. Syntetizér pouze upozorní návrháře na chybějící signál(y) v citlivostním seznamu. To je velmi nebezpečná situace z hlediska funkční verifikace, neboť v simulaci se tento kód chová jinak, než po implementaci. Proto je vždy nezbytné citlivostní seznam korektně vyplnit. V případě procesů popisujících sekvenční systémy (řízené hranou hodinového signálu) je dovoleno do citlivostního seznamu uvést pouze hodinový signál (zde clk) a signál pro asynchronní nulování nebo nastavení (zde reset). Na pořadí zápisu signálu nezáleží. V případě procesů realizujících pouze kombinační logické funkce je třeba do citlivostního seznamu uvést všechny signály, které figurují na pravé straně přiřazovacích příkazů a ty, které jsou v argumentech podmíněných příkazů. Za citlivostním seznamem může následovat deklarace vnitřních proměnných, funkcí a procedur. Zde následuje rovnou klíčové slovo BEGIN uvozující samotný popis chování. Popis je proveden jediným sekvenčním podmíněným příkazem IF-THEN-ELSE-ELSIF. U klopného obvodu typu D má nejvyšší prioritu signál asynchronního nulování, proto je zapsán jako první v podmínce IF. V případě, že je podmínka reset = '1' platná, dojde k okamžitému vynulování výstupu Q. V opačném případě je vyhodnocována druhá podmínka, která obsahuje funkci rising_edge(clk). Tento výraz nabývá hodnoty TRUE v okamžiku náběžné hrany hodinového signálu. V ten okamžik je proveden příkaz přiřazení Q <= D. Pokud požadujeme reakci na sestupnou hranu hodinového signálu, můžeme použít komplementární funkci faling_edge. Ve starších zdrojových kódech se lze setkat s jinou podmínkou pro detekci náběžné hrany, která je ekvivalentem funkce rising_edge. Je to výraz clk'event AND clk = '1'. Přesně tímto způsobem je funkce rising_edge definována ve sloze STD_LOGIC_1164. V rámci procesů se pro usnadnění popisu často používají proměnné (variable). Pro přiřazení hodnoty proměnné se používá příkaz tzv. bezprostředního přiřazení :=, který je proveden ihned. Naproti tomu pro signály se používá tzv. odložené přiřazení <=, které je provedeno až v okamžiku skončení procesu (případně při provedení nejbližšího příkazu typu

19 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 19 WAIT). Níže je ukázka dvojice zdrojových kódů, které demonstrují rozdíl mezi odloženým a bezprostředním přiřazením. -- sig_a, sig_b, sig_c: STD_LOGIC_VECTOR(3 DOWTNO 0); -- v okamziku spusteni procesu je -- sig_a = 3, sig_b = 5, sig_c = 2 PROCESS (clk) VARIABLE v_a, v_b, v_c: STD_LOGIC_VECTOR(3 DOWTNO 0):= X"0"; BEGIN IF rising_edge(clk) THEN v_a := sig_a + 1; -- v_a = = 4 v_b := sig_b + v_a; -- v_b = = 9 v_c := v_a + v_b; -- v_c = = 13 sig_a <= v_a; sig_b <= v_b; sig_c <= v_c; END IF; END PROCESS; po skončení procesu: sig_a = 4 sig_b = 9 sig_c = 13 Tento proces využívá proměnných deklarovaných lokálně (nejsou dostupné mimo proces). V okamžiku náběžné hrany signálu clk dojde ke spuštění procesu a vyhodnocení příkazů za podmínku IF rising_edge(clk). Každé přiřazení hodnoty proměnné je provedeno ihned na příslušném řádku, takže v následujícím řádku je pro vyhodnocení výrazu použita již nová hodnota. Přiřazení proměnných externím signálům (tři příkazy v posledním řádku procesu) je provedeno v okamžiku skončení procesu). V tomto případě v procesu záleží na pořadí zápisu příkazů, pořadí zápisu ovlivní výsledné hodnoty signálů. -- sig_a, sig_b, sig_c: STD_LOGIC_VECTOR(3 DOWTNO 0); -- v okamziku spusteni procesu je -- sig_a = 3, sig_b = 5, sig_c = 2 PROCESS (clk) BEGIN IF rising_edge(clk) THEN sig_a <= sig_a + 1; -- sig_a = = 4 sig_b <= sig_b + sig_a; -- sig_b = = 8 sig_c <= sig_a + sig_b; -- sig_c = = 8 END IF; END PROCESS; po skončení procesu: sig_a = 4 sig_b = 8 sig_c = 8 Výše uvedený proces, který nevyužívá proměnné, se chová jinak, byť je zápis operací na první pohled stejný. Všechny tři příkazy v procesu představují odložené přiřazení, které se provede až v okamžiku skončení procesu. Proto je pro vyhodnocení všech příkazů použita hodnota signálů (sig_a a sig_b) taková, jaká byla v okamžiku spuštění procesu. Toto chování může být první pohled matoucí a může být zdrojem chyb především u začínajících návrhářů. Při správném použití ale umožňuje popisovat číslicové systémy velmi efektivně. Níže je ukázka dvojice ekvivalentních kombinačních procesů, kde je využita vlastnost odloženého přiřazení. PROCESS (a,b,reset) BEGIN PROCESS (a,b,reset) BEGIN IF reset = '1' THEN x <= a + b; -- default assignment x <= 0; IF reset = '1' THEN ELSE x <= 0; x <= a + b; END IF; END IF; END PROCESS; END PROCESS;

20 20 FEKT Vysokého učení technického v Brně Oba kódy popisují kombinační obvod, který provádí sčítání operandů a a b, pokud je vstupní signál reset neaktivní, v opačném případě je výstup x vynulován. Jelikož jde o tzv. kombinační procesy, musí citlivostní seznam v obou případech obsahovat všechny signály figurující na pravé straně příkazů přiřazení (zde a a b) a všechny signály figurující v argumentech podmíněných příkazů (zde reset). V procesu uvedeném vlevo je explicitně podmíněným příkazem specifikována priorita provádění příkazů. V procesu napravo je využito vlastností odloženého přiřazení pomocí tzv. výchozí přiřazení (default assignment). Pokud je aktivní signál reset, jsou při vyhodnocení procesu jako platné nalezeny dva příkazy přiřazující hodnotu signálu x. Proveden je vždy pouze poslední příkaz, který je při vyhodnocení procesu nalezen, v tomto případě tedy nulování signálu x. Důležitým typem popisu ve VHDL je strukturální popis, který reprezentuje schéma v textové podobě (netlist). Ukázka použití strukturálního popisu je uvedena níže na jednoduchém obvodu složeném ze tří hradel AND. Samotné hradlo AND je popsáno samostatným zdrojovým kódem a tvoří blok pojmenovaný AND_gate. LIBRARY IEEE; use IEEE.std_logic_1164.ALL; ENTITY AND_gate IS PORT ( A : IN STD_LOGIC; B : IN STD_LOGIC; Y : OUT STD_LOGIC); END AND_gate; ARCHITECTURE Behavioral OF AND_gate IS BEGIN Y <= '1' WHEN (A='1' AND B='1') ELSE '0'; END Behavioral; A B Y Toto hradlo je pak použito jako základní blok složitějšího bloku AND_4in, k jehož popisu je využit právě strukturální popis. LIBRARY IEEE; use IEEE.std_logic_1164.ALL; ENTITY AND_4in IS PORT ( I1,I2,I3,I4 : IN STD_LOGIC; Y : OUT STD_LOGIC); END AND_4in; ARCHITECTURE Structural OF AND_4in COMPONENT AND_gate PORT ( A,B : IN STD_LOGIC; Y : OUT STD_LOGIC); END COMPONENT; SIGNAL S1,S2: STD_LOGIC; BEGIN AND_1: AND_gate PORT MAP ( A => I1, B => I2, Y => S1); AND_2: AND_gate PORT MAP ( A => I3, B => I4, Y => S2); AND_3: AND_gate PORT MAP ( A => S1, B => S2, Y => Y ); END Structural; I1 I2 I3 I4 AND_1 AND_2 AND_4in S1 S2 AND_3 Y

21 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 21 3 Architektura obvodů FPGA Cílem této kapitoly je nejen seznámit čtenáře s architekturou moderních obvodů FPGA, ale také se vznikem a postupným vývojem programovatelných logických obvodů (PLD; Programmable Logic Devices), k čemuž je třeba znát několik technologických a historických faktů. Je zde zachycen vznik a vývoj moderních obvodů PLD, tedy SPLD, CPLD a FPGA. 3.1 Vývoj a výroba integrovaných obvodů První číslicové systémy, které vznikaly v 18. století, byly čistě mechanické a pracovaly s dekadickým vyjádřením čísla. Ještě v polovině 20. století se vyráběly velké elektromechanické počítače, které již měly možnost programování pomocí děrných štítků, ale jejich výpočetní rychlost byla omezená. Před 2. světovou válkou se objevily první reléové počítače, které byly rychlejší, než jejich mechanické protějšky, a pracovaly s binárním vyjádřením čísel. S nástupem elektronek přišlo podstatné zrychlení funkce počítačů a s následným příchodem tranzistorů i snížení spotřeby, byť z hlediska rozměrů šlo stále o sálové stroje. Teprve s příchodem integrovaných obvodů v počátku 60. let došlo k výraznému zmenšení číslicových systémů. Aplikace technologie CMOS umožnila i jejich výrazné zlevnění a tím i hromadnou výrobu. Koncem 60. let již na trhu existovaly ucelené řady standardních integrovaných obvodů, ze kterých bylo možné sestavit teoreticky libovolný číslicový systém. Šlo o základní integrované obvody řady 54x, 74x, CMOS 4000, a dále některé specializovanější integrované obvody (ASSP; Application Specific Standard Part). Číslicové systémy se tehdy skládaly z desítek až tisíců takových integrovaných obvodů vzájemně propojených pomocí vodičů nebo plošných spojů. Modifikace funkce těchto zařízení byla přirozeně obtížná, pokud vůbec možná, a často se neobešla bez větších změn postihujících většinu systému. Takové systémy navíc byly pro některé účely málo výkonné a vykazovaly nadměrnou spotřebu. Pro mnoho aplikací proto bylo nutné navrhnout integrovaný obvod šitý na míru, tzv. zákaznický integrovaný obvod (ASIC; Application Specific Integrated Circuit). Tyto obvody v podstatě představovaly integraci diskrétních součástek na jeden čip. Vývoj takových obvodů je ale velice nákladný, časově náročný a výrazně ovlivňuje cenu součástky. Proto se k výrobě nového obvodu ASIC přistupuje pouze ve dvou případech: Obvod bude uplatněn ve velkém množství aplikací. Nevratné náklady na vývoj (NRE Costs; Non-Recurring Engineering Costs) se projeví na ceně výsledné součástky pouze nepatrně, jelikož jich budou vyrobeny statisíce až miliony kusů Potřebné vlastnosti obvodu jsou ceně nadřazené. Jde o speciální součástky, typicky pro armádní a vesmírné aplikace, kde je i vysoká cena jedné součástky akceptovatelná vzhledem k získaným užitným vlastnostem. Obvody ASIC se od obvodů ASSP prakticky liší pouze z hlediska uplatnění na trhu: obvody ASSP jsou komerčně dostupné, kdežto obvody ASIC jsou určeny pro jediného zákazníka a bývají úzce specializované pro danou aplikaci. Vývoj a výroba těchto obvodů jsou identické. Hlavní dva problémy obvodů ASIC jsou vysoké náklady NRE a dlouhá doba potřebná pro jejich vývoj. Náklady jsou z velké části tvořeny cenou samotného vývoje (návrh a verifikaci), a z nezanedbatelné části také cenou litografických masek použitých při výrobě

22 22 FEKT Vysokého učení technického v Brně čipu. Tyto náklady se výrobci i uživatelé integrovaných obvodů snažili minimalizovat již od počátků jejich výroby a tak nejen zlevnit, ale i zrychlit vývoj nových obvodů. Na trhu tedy v 60. letech existovaly dvě krajní možnosti pro realizaci nového číslicového systému: řešení z diskrétních součástek nebo řešení v podobě obvodu ASIC. Od té doby se objevilo několik cest, které se snažily vyplnit mezeru (gap) na trhu mezi těmito technologickými extrémy, a vytvořit komerčně úspěšný kompromis těmto dvěma variantám. FPGA se v tomto směru ukázaly být jednou z nejúspěšnějších variant i z důvodů, které se ukázaly jako klíčové až později. Tímto způsobem (byť poněkud později, než níže uvedené varianty) vznikly i mikropočítače tak, jak je známe dnes. V roce 1971 firma Intel uvedla na trh obvod Intel 4004, což byl první komerčně dostupný mikropočítač (computer-on-a-chip). Obvod byl koncipován tak, aby dokázal nahradit v mnoha aplikacích specializované řídicí obvody doposud realizované jako ASIC. Jeho konkrétní funkce u něj nebyla definována při výrobě, ale programem uloženým v paměti (na stejném čipu), kterou mohl uživatel libovolně měnit. Stejný procesor tak bylo možné použít v mnoha aplikacích a tím byl zajištěn velký odbyt. Náklady na vývoj a výrobu samotného procesoru (který byl samozřejmě také navržen jako čip ASIC) bylo možné rozprostřít do velkého množství prodaných součástek, jejichž výroba je sama o sobě poměrně levná. Přesto, že procesory jsou číslicové obvody, jejichž funkci lze definovat programem, nezařazujeme je dnes do kategorie programovatelných logických obvodů. Šlo o zcela nový přístup, který se plně osvědčil a rychle rozvinul. Dnešní procesory jsou ve srovnání s obvody ASIC mnohem levnější (v malých sériích), ihned k dispozici a mají mnoho zabudovaných bloků (periferií), které zvyšují jejich užitnou hodnotu. Výpočetní výkon (performance) i těch nejvýkonnějších procesorů je ale ve srovnání s možnostmi technologicky srovnatelných obvodů ASIC malý. Je to dáno kompromisem ve prospěch programovatelnosti (flexibility), která určuje univerzálnost použití procesorů. V době svého vzniku se tak procesory výkonnostně zařadily spíše k obvodům, které byly složeny ze standardních diskrétních integrovaných obvodů (74x, CMOS 4000). Již v polovině 60. let se objevily jiné typy obvodů, které si kladly za cíl vyplnit mezeru mezi diskrétním řešením a obvody ASIC. Jedna z myšlenek spočívala ve vytvoření univerzálního základního čipu, který by byl základem pro více integrovaných obvodů. Výroba základní čipu by probíhala ve velkých sériích, byl by tudíž poměrně levný. Zákazník by poté konkrétní funkci čipu definoval vytvořením několika posledních výrobních vrstev, typicky pouze metalických, jejichž návrh i výroba by nebyly tak nákladné. První obvody tohoto typu byly obvody Micromatrix firmy Fairchild Semiconductor (Obr. 4). Základní čip tvořilo pole nezapojených tranzistorů (přibližně 100). Propojení tranzistorů mohl definovat uživatel pomocí dvojice metalických vrstev. Propojení bylo třeba kreslit ručně na předlohy, zvlášť pro každou vrstvu, přičemž jedna vrstva obsahovala pouze horizontální spoje, druhá pouze vertikální spoje. Propojením několika tranzistorů bylo možné realizovat základní logické funkce (AND, OR) a jejich propojením vytvořit jednoduchý číslicový systém. Jelikož návrh probíhal ručně, byl pracný, náročný na čas a náchylný na chyby. Samotnou realizaci metalického propojení bylo nutné provést ve výrobním závodě a nebylo možné provést přeprogramování. Byť tedy došlo k jisté úspoře času i financí, nakonec se tato technologie neprosadila.

23 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 23 Základní čip Naprogramovaný čip Metalizace definovaná uživatelem Obr. 4 Programovatelná struktura Micromatrix / Micromosaic. V roce 1967 společnost Fairchild představila nové obvody Micromosaic, které byly založené na stejném základním principu, tedy tranzistorovém poli. V tomto případě ale propojení nebylo definováno ručně na předlohu, ale textovým souborem v počítači. Tento soubor nepopisoval přímo propojení tranzistorů, ale používal vyšší stupeň abstrakce: Booleovské rovnice. Na základě tohoto popisu potom program automaticky vygeneroval potřebnou mapu propojek, která se poté na základní čip s tranzistory nanesla (opět ve výrobním závodě). Jde vůbec o první reálné použití nástrojů CAD (Computer Aided Design) a struktura se stala předchůdcem moderních hradlových polí (Gate Array). Na jednom čipu bylo možné takto realizovat přibližně 150 elementárních hradel. Přesto, že struktura Micromosaic byla poněkud úspěšnější, nedošlo k jejímu většímu rozšíření a dalšímu rozvoji. V polovině 70. let se místo toho na trhu objevily nové obvody, tzv. hradlová pole (Gate Arrays). Základní myšlenka těchto obvodů je stejná, jako u předchozí dvojice tranzistorových polí. Rozdíl je v elementární buňce pole na základním čipu, která je v tomto případě tvořena více diskrétními součástkami (Obr. 5). Uživatel tak definuje nejen propojení buněk pole, ale i funkci každé buňky. Jak funkce buňky, tak propojení je realizování metalickými vrstvami. První obvody tohoto typu existovaly již v počátku 60. let, ale byly určeny pouze pro interní potřebu výrobců těchto obvodů. Komerčně dostupný hradlová pole se objevily až o deset let později s nástupem levné technologie CMOS. Uvedené typy integrovaných obvodů (pole tranzistorů i hradlová pole), trpí dvěma základními nedostatky: Většina systémů implementovaných na takové platformě využije pouze část čipu (typicky 40-60%), zbývající buňky zůstávají nevyužité a snižují tak efektivitu využití křemíkového čipu. Vzájemné propojení elementárních buněk není optimální, což vede k větším zpožděním a větší spotřebě (dynamické ztráty). Tento problém je tím větší, čím větší část čipu je využita. Jako reakci na tyto nedostatky lze chápat vznik dalšího typu integrovaných obvodů, které vznikly na počátku 80. let. Byly to zákaznické integrované obvody založené na standardních buňkách (Standard Cell ASIC). Obvody v tomto případě nesdílely společný základní čip, každý integrovaný obvod se musel vyrábět kompletně se všemi maskami. Úspora spočívala v tom, že výrobci obvodů ASIC vytvořili knihovny standardních buněk (Standard Cell Library), které byly tvořeny základními hradly (AND, OR, XOR...), klopnými obvody, zesilovači (buffer), ale také většími bloky (hard macros), jako paměti ROM, RAM,

24 24 FEKT Vysokého učení technického v Brně nebo dokonce celé procesory. Tyto buňky a bloky již byly ověřené (verified, silicon proven), a návrháři je tak mohli jednoduše přímo použít, aniž by každou buňku museli konstruovat a následně verifikovat. Takový přístup sice přímo nezlevnil samotnou výrobu čipu, ale podstatně snížil náklady na vývoj a verifikaci nových čipů ASIC, snížil riziko neúspěšné implementace a je dnes nejrozšířenějším způsobem návrhu číslicových obvodů ASIC. Základní buňka (BiCMOS) Základní buňka (CMOS) Základní čip Obr. 5 Struktura hradlového pole (Gate Array). Návrh obvodu ASIC se standardními buňkami probíhá z velké části automaticky. Návrhář vhodným způsobem popíše funkci obvodu a implementační nástroje zajistí převod popisu do zapojení standardních buněk. Tyto buňky mají nejen standardní funkci, ale i rozměr; na čip jsou umisťovány do řad těsně vedle sebe, přičemž ve vyšších metalických vrstvách se vytváří potřebné vzájemné propojení buněk i propojení buněk na vstupy a výstupy. Tento přístup zajišťuje mnohem efektivnější využití čipu a zároveň umožňuje podstatně zvýšit jeho výpočetní výkon a snížit spotřebu. V první polovině 80. let se v oblasti integrovaných obvodů objevil nový problém, který se brzy reflektoval do způsobu návrhu číslicových obvodů. Vývoj technologie výroby integrovaných obvodů byl (a stále je) podstatně rychlejší, než vývoj nástrojů EDA pro její využití. Zatímco meziroční nárůst produktivity výroby je přibližně 50-60%, je vzrůst možností návrhu jen asi 20-25%. To v praxi způsobuje, že návrháři se stávajícími nástroji nejsou schopni v dostatečně krátkém čase efektivně využít možnosti (plochu čipu), kterou jim technologie dává k dispozici. Tento jev se označuje jako design productivity gap. Jeho důsledkem pak je fakt, že je výhodnější pro návrh číslicových obvodů použít méně efektivní metody, jejichž horší vlastnosti jsou kompenzovány náskokem v technologii výroby. Tento problém byl jednou z příčin vzniku a následného úspěchu obvodů FPGA. První obvody typu FPGA vznikly již na počátku 80. let, ale nebyly komerčně dostupné. Za první obvod FPGA je tedy považován až obvod firmy Xilinx, který byl v roce 1984 uveden na trh. Firma Xilinx jej hned od počátku prezentovala jako (elektrickým) polem programovatelné hradlové pole, tedy Field Programmable Gate Array. Základní struktura obvodu FPGA je na Obr. 6 a do dnešních dnů zůstala zachována. Obvod tvoří programovatelné logické buňky, které slouží k realizaci logických funkcí a sekvenčních prvků číslicového obvodu. Tyto buňky jsou propojeny programovatelnou strukturou, která je propojuje navzájem a zajišťuje jejich vazbu na vstupně/výstupní buňky, které jsou rovněž konfigurovatelné. Tento koncept se podobá hradlovým polím, jak byla popsána výše. Hlavní rozdíl je ale v tom, že hradlová pole lze programovat pouze metalickými vrstvami přímo na čipu, tedy pouze při jejich výrobě. Naproti tomu FPGA jsou programovatelné ryze elektronicky. Programování funkce tak neprobíhá při výrobě čipu, ale na již hotové součástce, s využitím vhodného programátoru.

25 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 25 Programovatelné logické buňky Programovatelná propojovací struktura Vstupně/výstupní buňky Obr. 6 Základní vnitřní struktura obvodu FPGA. Použití elektronické konfigurace vede k několika důležitým důsledkům: FPGA lze programovat kdykoliv, i opakovaně, což umožňuje mnohem snazší vývoj s nižším rizikem neúspěchu a nasazení těchto obvodů i v aplikacích, které se nevyrábí sériově. Značnou plochu čipu zabírají prvky zajišťující programovatelnost, proto je efektivita využití čipu vzhledem k realizované funkci velmi malá. Obvod má výrazně vyšší spotřebu a menší výpočetní výkon, než by měl obvod ASIC vyrobený srovnatelnou technologií. Na čipu vždy zůstává značné množství nevyužitých buněk, využití se typicky pohybuje v rozsahu 40-70%. To dále snižuje efektivitu technologie FPGA z hlediska využití plochy čipu. Přes uvedená negativa se FPGA rychle prosadily, právě především díky rostoucí mezeře v produktivitě návrhu (design productivity gap). Dnes jsou nasazovány do stále většího množství aplikací, které byly dříve předurčeny pouze obvodům ASIC. Proto stále klesá podíl obvodů ASIC na trhu, ale rozhodně nelze očekávat, že by je FPGA zcela vytlačily. LUT D Q CLK Obr. 7 Základní logická buňka obvodu FPGA. Základní logická buňka obvodu FPGA je zobrazena na Obr. 7. Skládá se z generátoru kombinační funkce v podobě LUT (Look-Up Table) a sekvenčního prvku, typicky klopného obvodu typu D. Klopný obvod i LUT lze obvykle využít nezávisle, k čemuž slouží přídavné vstupy, výstupy a další vnitřní prvky buňky. Samotná LUT je v podstatě malá paměť typu

26 26 FEKT Vysokého učení technického v Brně RAM, který má typicky 3 až 6 vstupů a jeden výstup. Může tedy realizovat libovolnou kombinační funkci 3 až 6 vstupních proměnných a jedné výstupní proměnné. Princip realizace logické funkce pomocí čtyřvstupé LUT (paměť 16 x 1 bit) je naznačen na Obr. 8. d Adresa Data d c b a y minterm /a /b /c /d a /b /c /d /a b /c /d a b /c /d /a /b c /d a /b c /d /a b c /d a b c /d /a /b /c d a /b /c d /a b /c d a b /c d /a /b c d a /b c d /a b c d a b c d Obr. 8 d c b a c a b Součet součinů (SOP; Sum Of Products) y = /a /b c d + /a /b /c d + a /b /c d + a /b c d + /a b c /d = = /b d + /a b c /d Term y Mintermy Princip realizace kombinační logické funkce v LUT. Každá paměťová buňka LUT představuje jeden minterm, přičemž celá paměť obsahuje všechny možné mintermy. Sečtením požadovaných mintermů lze realizovat libovolnou kombinační funkci vstupních proměnných. Potřebná velikost paměti pro realizaci LUT závisí na počtu jejích vstupů N exponenciálně, potřebný počet paměťových buněk je 2 N. S počtem vstupů se výrazně zvětšuje vstupní část paměti (LUT) adresní dekodér, což je fixní kombinační obvod. Ten v paměti pro každou kombinaci vstupních signálů aktivuje právě jednu paměťovou pozici (buňku). Pokud má LUT 3 vstupy, je počet potřebných buněk 2 3 = 8, pokud by tabulka měla 16 vstupů, byl by potřebný počet buněk již 2 16 = Použití LUT s velkým počtem vstupů není výhodné ze dvou důvodů: Plocha zabraná na čipu jednou LUT s velkým počtem vstupů by byla příliš velká, přičemž využití takové LUT by bylo ve většině případů malé. Mnoho systémů totiž vyžaduje realizaci kombinačních funkcí s menším počtem vstupů nebo funkcí, které lze snadno minimalizovat. Struktura LUT neumožňuje využít minimalizace logické funkce, která je tak vždy implementována plně. Velký počet vstupů znamená nutnost implementace velkého adresního dekodéru, který by vykazoval poměrně velké zpoždění při průchodu signálu. To by znamenalo, že i sekvenční obvody s velmi jednoduchou kombinační částí budou mít mezní frekvenci limitovanou jednou velkou LUT.

27 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 27 Z těchto důvodů se v obvodech FPGA používají LUT s menším počtem vstupů. První obvody měly LUT se třemi nebo čtyřmi vstupy, existovaly varianty čipů, které měly dokonce oba typy tabulek na jednom čipu s cílem využít efektivněji relativně drahou strukturu FPGA. Od koncepce různých LUT na jednom čipu se ale upustilo, jelikož tehdejší nástroje EDA nedokázaly takovou nehomogenní strukturu efektivně využít, a jako optimální byly na dlouhou dobu zvoleny LUT se čtyřmi vstupy. Dnešní obvody již mají často tabulky se šesti vstupy, které jsou ve skutečnosti složeny ze dvojice LUT s pěti vstupy a hradlem, které slučuje jejich výstup. To v podstatě odpovídá dříve opuštěné koncepci různých LUT na jednom čipu. Dnešní implementační nástroje již takovou strukturu dokáží využít, což vede jak k lepšímu využití čipu, tak zvýšení výpočetního výkonu, neboť pro realizaci jednodušších funkcí lze použít menší (tedy rychlejší) LUT. I šestivstupé LUT jsou dnes díky pokročilé technologii dostatečně rychlé a v budoucnu lze očekávat, že se budou vyskytovat i ještě větší LUT. Krátce po vzniku obvodů FPGA (začátkem 90. let) se na trhu objevil další typ obvodů, který byl založen na společném základním čipu, a byl programovatelný metalickou maskou při výrobě podobně, jako hradlová pole. Základní buňkou těchto obvodů v tomto případě nebyly primitivní elektronické prvky jako tranzistory a rezistory, ale již elementární hradla, multiplexory, klopné obvody a tabulky LUT. Tyto obvody se později začaly označovat jak strukturované obvody ASIC (Structured ASIC) a tvořily logický evoluční stupeň navazující na hradlová pole. V době svého vzniku ale neobstáli v konkurenci dalších typů obvodů a byly na nějaký čas zapomenuty. Znovu se tyto obvody objevily až kolem roku 2001, přičemž každý výrobce měl jiný recept na nejvhodnější složení základních buněk. Jednou z variant strukturovaných obvodů ASIC byly obvody určené k přímé náhradě obvodů FPGA. Takové obvody měly základní strukturu, která odpovídala struktuře příslušného obvodu FPGA. Programovatelné propojky ale byly nahrazeny propojkami metalickými, čímž došlo k výrazné úspoře plochy čipu a spotřeby, vzrůstu výpočetního výkonu a bezpečnosti obvodu (ve smyslu zpětného inženýrství i odolnosti proti nepříznivým vnějším vlivům). K náhradě obvodu FPGA strukturovaným obvodem ASIC se přistupovalo v případě, že na prototypech s FPGA byla odladěna funkce zařízení, konfigurace FPGA byla zafixována a následovala sériová výroba zařízení. Ta nesměla být příliš velká ani malá. Při velké produkci by se vyplatilo pro danou funkci vyrobit obvod ASIC, při malé produkci by naopak bylo cenově výhodnější použít přímo FPGA. Nezávisle na hradlových polích, obvodech ASIC se standardními buňkami, strukturovaných obvodech ASIC a FPGA vznikly další typy programovatelných logických obvodů: SPLD a CPLD. Vznik obvodů SPLD lze vysledovat v období, kdy se objevily první komerčně dostupné paměti PROM (Programmable Read Only Memory) a EPROM (Erasable PROM). V té době se začaly paměti používat pro realizaci složitějších kombinačních funkcí, přičemž se využívalo stejného principu, který je využit pro realizaci kombinačních funkcí pomocí LUT. Paměť, která má 10 adresních vstupů a 8 bitové výstupní datové slovo (tedy 1024 x 8 b = 1 kb), může realizovat až 8 libovolných kombinačních funkcí až deseti vstupním proměnných. Rychlost pamětí ve funkci kombinačních obvodů byla poměrně malá (ve srovnání s diskrétními logickými obvody té doby) a efektivita využití poměrně nízká. Hlavním benefitem takového využití ale byla programovatelnost, v případě technologie EPROM dokonce opakovatelná. Funkce číslicového systému, který byl složen z diskrétních obvodů realizujících základní funkce (kombinační i sekvenční) byla dána jejich vzájemným propojením. Pokud bylo nutné funkci změnit, bylo třeba provést výměnu některých komponent či dokonce změnu

28 28 FEKT Vysokého učení technického v Brně zapojení, tedy provést nový návrh desky plošného spoje, nové osazení a nové testování. To sebou neslo značné finanční a časové náklady. Použití programovatelných prvků (byť primitivních, v podobě pamětí) v klíčových bodech zapojení umožnilo snadnou změnu funkce bez nutnosti nového návrhu a procesu výroby. Tak se začaly paměti používat jako první programovatelné logické obvody (PLD; Programmable Logic Devices). Jelikož jejich vlastnosti nebyly z hlediska použití jako generátorů kombinačních funkcí vhodné, začaly se hledat cesty, kterými by došlo jednak ke zvýšení rychlosti a také efektivity implementace programovatelných obvodů. Na paměť lze nahlížet jako na dvojstupňovou strukturu AND-OR (Obr. 9). První stupeň je součinový (AND) a je v případě paměti reprezentován adresní dekodérem. Jeho výstupem je 2 N linek (součinových termů), kde N je počet vstupů stupně AND (adresního dekodéru). Tyto výstupní linky jsou přivedeny do stupně součtového (OR), které představuje samotné paměťové pole. V případě pamětí je tedy první stupeň (AND) fixní a druhý stupeň (OR) programovatelný a tato struktura se dnes obecně označuje jako struktura PROM, nezávisle na technologii, kterou je paměť vyrobena. Obr. 9 Dvojstupňová struktura AND-OR obvodů PROM/SPLD. Jak již bylo uvedeno, hlavní příčinou nízké efektivity struktury PROM je rozsáhlý adresní dekodér. Jelikož lze většinu reálně implementovaných kombinačních funkcí minimalizovat, je zbytečné použití kompletního dekodéru. Proto byla vyvinuta nová struktura, označovaná jako PAL, která respektuje tento fakt, a má programovatelný stupeň AND a pevný stupeň OR. Obvody založené na tomto principu se dnes označují jako SPLD (Simple PLD). Obecná struktura PAL je zachycena na Obr. 10. Tvoří ji několik makrobuněk (Macrocell), které jsou tvořeny programovatelným součinovým polem AND a jedním pevným hradlem OR s několika vstupy. Každá makrobuňka může realizovat právě jednu kombinační logickou funkci (zde y1 a y2). Na obrázku jsou zachyceny dvě makrobuňky, které mají 5 vstupů (a, b, c, d a e; vstupy do pole AND). Každá makrobuňka může realizovat funkci pěti vstupních proměnných, kterou lze popsat maximálně čtveřicí termů ve tvaru součtu součinů (SOP). Počet realizovatelných termů je roven počtu vstupů součtového členu ( 1, hradlo OR). Kromě struktury PAL vznikla i struktura PLA, která měla programovatelné oba stupně, tedy AND i OR. Umožňovala tak dosáhnout větší flexibility a potenciálně i lepší efektivity implementace. V době svého vzniku ale technologie neumožňovala vyrábět obvody s tak velkým počtem programovatelných propojek dostatečně levně a struktura tak byla na nějakou dobu opuštěna. V 90. letech se ale došlo k jejímu nasazení v obvodech CPLD, kde se dodnes používá. Struktura PAL má obvykle větší počet vstupů, než je počet termů makrobuňky. Tím je dosaženo vyšší efektivity při realizaci jednodušších funkcí, ale zároveň to neumožňuje

29 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 29 realizovat libovolnou kombinační funkci všech vstupních proměnných. Pokud je nutné realizovat funkce složitější, existuje možnost řetězení makrobuněk, kdy je výstup makrobuňky přiveden dedikovaným spojem zpět do pole AND. Tuto funkci měly již první obvody tohoto typu a pro jednoduchost není v obrázku naznačena. Obr. 10 Struktura PAL s pěti vstup a dvěma makrobuňkami o velikosti čtyři termy. Samotné programování struktury PAL bylo původně provedeno pomocí tzv. pojistek (fuse), tedy vodivých cest, které se při programování přerušily velkým proudem. Tento způsob programování je jednorázový (OTP; One-Time Programmable), a je shodný se způsobem programování prvních pamětí PROM. Příklad realizace kombinační logické funkce čtyř vstupních proměnných ve struktuře PLA je na Obr. 11. Funkci lze popsat pomocí dvojice termů a makrobuňka je tak využita pouze částečně. Obr. 11 Realizace kombinační logické funkce se dvěma termy ve struktuře PAL. První obvody SPLD tohoto typu měly až 16 vstupů do programovatelného pole AND a součtové bloky s osmi vstupy schopné realizovat funkce až o osmi termech

30 vstupy vstupy 30 FEKT Vysokého učení technického v Brně v jednoprůchodovém zapojení. První obvody byly ryze kombinační, s možností použití třístavového výstupu. Teprve později výrobci přidali u obvodů některých řad na výstupy součtových členů také klopné obvody. To umožnilo realizovat pomocí těchto obvodů jednoduché synchronní sekvenční systémy (např. čítače). Postupným vývojem těchto obvodů vznikly obvody, které měly na výstupu součtových členů tzv. výstupní makrobuňku (OLMC; Output Logic MacroCell), která umožnila konfigurovat každý výstup nezávisle jako kombinační, sekvenční nebo třístavový. Novější obvody SPLD byly realizovány technologií EPROM (později i EEPROM) a byly tedy reprogramovatelné. To značně zvýšilo jejich užitnou hodnotu a popularitu. S jejich oblibou přirozeně rostl zájem o větší obvody tohoto typ. Původní myšlenkou, která respektovala tuto snahu realizovat více logických funkcí na jednom čipu, bylo rozšíření stávajícího pole AND, zvětšení počtu vstupů i výstupů a zvětšení počtu termů každé makrobuňky. Výsledkem této snahy byly obvody, které se ukázaly jako příliš neefektivní a pomalé, proto byla tato cesta opuštěna. V roce 1984 firma Altera představila obvod, který byl založen na obvodech SPLD a dokázal realizovat podstatně složitější funkce. Jeho základem bylo několik malých obvodů SPLD, které byly navzájem propojeny pomocí programovatelné propojovací struktury (někdy zvané přepínací matice). Tím vzniklo jakési pole obvodů SPLD, a takové obvody se začaly označovat jako komplexní PLD, tedy CPLD (Complex PLD). Z hlediska architektury jde o koncept velmi podobný obvodům FPGA: pole programovatelných buněk, které je doplněno programovatelnou propojovací strukturou. Rozdíl je ale ve velikosti elementární buňky, tedy ve složitosti kombinační logické funkce, kterou buňka dokáže realizovat (Obr. 12). Obvod FPGA je založen na LUT, které mají typicky 4-6 vstupů, mají tudíž poměrně malé zpoždění, ale pro složitější funkce je nutné zřetězit více LUT. Elementární buňka CPLD má výrazně větší počet vstupů a většinu běžných funkcí tak lze realizovat jedním průchodem. Cenou za to je fakt, že jednoduché funkce jsou implementovány neefektivně, jelikož většina makrobuňky zůstává nevyužita. FPGA CPLD Generátor logické funkce FF FF Generátor logické funkce Obr. 12 Základní rozdíl mezi obvody FPGA a CPLD. Z hlediska velikosti elementárních buněk se někdy v souvislosti s konfigurovatelnými číslicovými obvody zavádí pojem granularita, který slouží k vyjádření relativní velikost

31 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 31 buněk různých architektur integrovaných obvodů. FPGA se pak označují jako obvody s jemnozrnnou strukturou (fine grain) a CPLD jako obvody s hrubozrnnou strukturou (coarse grain). V praxi se ale často podobně srovnávají CPLD a FPGA navíc například se strukturovanými obvody ASIC. Při takovém porovnání se FPGA označují jako obvody se střední velikostí základní buňky (medium grained) a strukturované obvody ASIC jako jemnozrnné. Granularita je tedy relativní metrika, která je pouze orientační. Číslicové systémy implementované do CPLD jsou dnes popisovány a implementovány stejnými nástroji, jaké se používají pro implementaci číslicových systémů do FPGA. Rozdíl v použití jednoho či druhého typu obvodu bývá určen především velikostí obvodu, který chceme implementovat. Obvody CPLD jsou schopny pojmout pouze relativně malé číslicové systémy. Dalším aspektem je volatilita, tedy schopnost uchovat konfiguraci v programovatelné struktuře i při odpojení napájecího napětí. Většina obvodů CPLD je na rozdíl od většiny FPGA nevolatilní, CPLD jsou tedy ihned po zapnutí funkční, a pro mnoho aplikací tedy vhodnější. Obvody CPLD již několik let neprocházejí dalším vývojem a začínají ustupovat do pozadí. Jejich místo přebírají malé obvody FPGA vyráběné nevolatilní (FLASH) technologií. Takové obvody někteří výrobci stále označují jako CPLD, ale jde spíše o zjednodušené vyjádření faktu, že jsou to malé nevolatilní obvody PLD. Výhodou použití struktury FPGA je, že pro návrh systémů s takovými obvody lze použít identické nástroje, jako pro návrh systémů s klasickými obvody FPGA (obvody CPLD přeci jen mají svá specifika). Tento trend bude zřejmě sledovat většina výrobců obvodů CPLD, kteří mají ve svém portfoliu i obvody FPGA. Z dnešního pohledu je tak velmi pravděpodobné, že klasické obvody CPLD postupně z trhu zmizí. 3.2 Logické buňky obvodů FPGA a jejich využití Jak bylo výše uvedeno (Obr. 6), tvoří základní strukturu FPGA pole programovatelných logických buněk, programovatelná propojovací struktura a programovatelné vstupně/výstupní buňky. Tyto prvky, původně primitivní, se postupem času vyvíjely a v dnešní době nabízejí řadu funkcí, které výrazně zvyšují efektivitu implementace číslicových systémů v FPGA. Samotná LUT je tvořena pamětí, proto bylo logickým krokem výrobců FPGA přidat k této paměti pomocné vstupy a výstupy, které umožnily použít ji nejen jako logický generátor, ale také jako malou paměť typu RAM nebo ROM. Takto realizovaná paměť se označuje jako distribuovaná paměť RAM (distributed RAM). Ukázka takové paměti je na Obr. 13. Jedna čtyřvstupá LUT realizuje paměť o velikosti 16 x 1 b. Použitím více LUT lze realizovat paměti větší, navíc v různé konfiguraci na obrázku je uveden příklad realizace paměti 16 x 4 b ze čtveřice LUT. Obdobně lze čtveřicí LUT realizovat paměť 64 x 1 b, ale to již vyžaduje použití dalších logických buněk pro realizaci výstupního multiplexoru. Distribuovaná paměť je velmi efektivní nástroj pro realizaci malých pamětí. Paměť o velikosti 1024 bitů lze realizovat pomocí 16 LUT tabulek se šesti vstupy, tedy pomocí 16 základních buněk FPGA (Obr. 7). Pokud bychom stejnou paměť realizovali pomocí klopných obvodů, bylo by nutné použít 1024 těchto buněk. Pro větší paměťové struktury se ale tento způsob implementace nehodí, neboť jde o relativně neefektivní implementaci (z hlediska plochy čipu potřebné na implementaci jednoho bitu). Řešením je použití tzv. blokových pamětí RAM (6.1).

32 32 FEKT Vysokého učení technického v Brně 16 x 1b Data 16 x 1b Adresa LUT4 (16 x 1b) Data Adresa 16 x 1b 16 x 1b paměť 16 x 1b (16b) paměť 16 x 4b (64b) Obr. 13 Použití LUT jako distribuované paměti RAM/ROM. Z hlediska implementace lze použití distribuované paměti provést několika způsoby: Popis pamětí HDL kódem a následné automatické rozpoznání paměťové struktury implementačními nástroji. Použití speciálních předdefinovaných entit ve spojení se strukturálním popisem nebo schematickým návrhem. Použití průvodce (wizard) pro vytvoření vlastní nové entity a následné využití strukturálního nebo schematického popisu. První způsob použití pomocí HDL kódu je naznačen pomocí níže uvedeného zdrojového kódu. Jeho výhodou je především portabilita kódu (nezávislost na vývojovém prostředí a cílové platformě) a možnost implementace pamětí s libovolným uspořádáním. Moderní implementační nástroje dokáží automaticky rozpoznat paměť i její typ (RAM/ROM) a provést její co nejefektivnější implementaci, a dokonce dokáží rozhodnout, zda je vhodnější paměť implementovat jako distribuovanou, nebo blokovou (BRAM; 6.1). Bloková paměť RAM ale na rozdíl od distribuované neumožňuje implementovat operaci asynchronního čtení. Ta je v uvedeném kódu realizována výstupem D_out, který použití BRAM znemožňuje. V případě, že tento výstup odstraníme, může systém zvolit pro implementaci i pomocí blokových pamětí. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; ENTITY RAM_64x8 IS PORT (clk : IN STD_LOGIC; WR : IN STD_LOGIC; ADDR : IN STD_LOGIC_VECTOR (5 DOWNTO 0); D_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); D_out : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); D_out_reg : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END RAM_64x8; ARCHITECTURE Behavioral OF RAM_64x8 IS -- deklarace pameti a jeji inicializace TYPE RamType IS ARRAY (0 TO 63) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL ram_1 : RamType := (X"78", X"76", X"30", OTHERS => X"00");

33 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO BEGIN -- zapis dat RAM_write_proc : PROCESS (clk) BEGIN IF rising_edge(clk) THEN IF WR = '1' THEN ram_1(to_integer(unsigned(addr))) <= D_in; END IF; END IF; END PROCESS RAM_write_proc; -- asynchronni cteni dat D_out <= ram_1(to_integer(unsigned(addr))); -- synchronni cteni dat RAM_read_proc : PROCESS (clk) BEGIN IF rising_edge(clk) THEN D_out_reg <= ram_1(to_integer(unsigned(addr))); END IF; END PROCESS RAM_read_proc; END Behavioral; Druhé dva způsoby popisu jsou vázány vždy na cílovou platformu a často i na konkrétní návrhový systém. Níže je uveden příklad instanciace bloku RAM16X1D_1, který představuje jednu čtyřvstupou LUT tabulku použitou jako paměť RAM. Tento kód lze použít ve strukturálním popisu VHDL. Návrhové systémy obvykle obsahují i ekvivalentní schematické symboly, které lze použít v grafickém popisu číslicového obvodu. Takové komponenty jsou vázány na konkrétní rodinu obvodů FPGA, portabilita kódu je tedy omezená. Vytváření větších pamětí je komplikované, ale dává designérovi plnou kontrolu nad vytvářeným číslicovým systémem. RAM16X1D_1_i : RAM16X1D_1 GENERIC MAP( INIT => X"0000") PORT MAP( DPO => DPO, -- Read-only 1-bit data output for DPRA SPO => SPO, -- R/W 1-bit data output for A0-A3 A0 => A0, -- R/W address[0] input bit A1 => A1, -- R/W address[1] input bit A2 => A2, -- R/W address[2] input bit A3 => A3, -- R/W ddress[3] input bit D => D, -- Write 1-bit data input DPRA0 => DPRA0, -- Read-only address[0] input bit DPRA1 => DPRA1, -- Read-only address[1] input bit DPRA2 => DPRA2, -- Read-only address[2] input bit DPRA3 => DPRA3, -- Read-only address[3] input bit WCLK => WCLK, -- Write clock input WE => WE); -- Write enable input Poslední možností pro vytvoření distribuované paměti je použít průvodce (wizard), který umožňuje realizovat různě velké paměti optimalizované pro cílový obvod FPGA. Takto lze snadno realizovat paměti různé velikosti bez nutnosti spoléhat se na schopnosti návrhového systému extrahovat paměti z obecného popisu pomocí HDL. Použití takto vytvořených komponent je možné pomocí strukturálního popisu nebo schématu. Opět dochází k vazbě na cílovou platformu (v tomto případě dokonce konkrétní typ a velikost FPGA) a navíc vždy na konkrétní návrhový systém.

34 34 FEKT Vysokého učení technického v Brně Další možné využití LUT je založeno na faktu, že paměť tvořící LUT, je v podstatě souborem registrů (čtyřvstupá LUT je složena z 16 registrů). Jejich vhodným propojením tak lze jednoduše získat posuvný registr o maximální délce odpovídající počtu buněk LUT (typicky tedy 16 nebo 64; Obr. 14). D_in clk... MUX Q D_out adr Obr. 14 Využití LUT pro realizaci posuvného registru proměnné délky. Použití takového posuvného registru v designu je podobné, jako použití distribuované paměti RAM: vhodným HDL kódem (viz níže) nebo instanciací předdefinované komponenty, respektive jejím použitím ve schematickém popisu. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; ENTITY ShReg_16x8b IS PORT (clk : IN STD_LOGIC; addr : IN STD_LOGIC_VECTOR (3 DOWNTO 0); D : IN STD_LOGIC_VECTOR (7 DOWNTO 0); CE : IN STD_LOGIC; Q15 : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END ShReg_16x8b; ARCHITECTURE Behavioral OF ShReg_16x8b IS -- deklarace posuvneho registru TYPE t_shreg IS ARRAY (15 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL Shift_reg : t_shreg := (X"22", X"11", OTHERS => X"00"); BEGIN -- posun registru ShRegProcess : PROCESS (CLK) BEGIN IF rising_edge(clk) THEN IF CE = '1' THEN Shift_reg <= Shift_reg(14 DOWNTO 0) & D; END IF; END IF; END PROCESS ShRegProcess; -- vystupni signal celeho posuvneho registru Q15 <= Shift_reg(15); -- vyber vystupniho signalu (volba zpozdeni registru) Q <= Shift_reg(TO_INTEGER(UNSIGNED(addr))); END Behavioral;

35 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 35 Takto realizovaný posuvný registr nedovoluje přímý přístup k jednotlivým buňkám, provádět operaci nulování ani načtení dat (set, reset, load). Pokud je některá z těchto funkcí v kódu použita, nemůže návrhový systém pro realizaci posuvného registru LUT použít. Ne všechny FPGA umožňují realizovat distribuovanou paměť a posuvný registr v LUT. I obvody, které tyto realizace umožňují, se ale většinou skládají ze dvojice typů buněk, které jsou na čipu většinou zastoupeny v poměru 1:1. Část buněk umožňuje realizovat alternativní funkce LUT, část nikoliv. Buňky, které alternativní funkci neumožňují, zabírají menší plochu na čipu a podílejí se na zvýšení efektivity využití čipu. Motivací k tomuto kroku je fakt, že drtivá většina designů nevyužívá většinu buněk alternativním způsobem. Přesto lze v dnešních největších obvodech FPGA realizovat distribuované paměti o velikosti až desítek megabitů. 3.3 Vlastnosti vstupně/výstupních buněk Současné FPGA mají vstupně/výstupní (I/O) buňky, které obsahují řadu pokročilých bloků (subsystémů). Jejich původní hlavní úkol, tedy bezpečně připojit vnitřní programovatelnou logickou strukturu k vnějším signálům, je dnes zastíněn množstvím funkcí, které umožňují realizovat. Pro přenos signálů mezi integrovanými obvody i celými systémy se dnes používá řada standardů. Standardy TTL a CMOS, používané v době vzniku prvních integrovaných obvodů řad 74 a 4000, mají definovánu logickou úroveň 1 napětím 5 V a logickou úroveň 0 pak 0 V. Tyto hodnoty napětí jsou samozřejmě pouze zjednodušeným vyjádřením skutečných parametrů logických obvodů pracujících s těmito standardy. Standard CMOS například stanovuje, že výstupní napětí budiče generujícího logickou úroveň 1 musí být v rozsahu 2,4 až 5 V. Vstup obvodu TTL pak musí být schopen interpretovat jako logickou úroveň 1 signál o napětí v rozsahu 2,0 až 5,0 V. Moderní logické standardy využívají podstatně menší úrovně napětí, což umožňuje zvýšit přenosovou rychlost, snížit spotřebu a zmenšit rušení, které taková rozhraní generují. Použitý standard také souvisí s konkrétní aplikací (např. DDR paměti mají stanovené standardy) a napájecím napětí integrovaného obvodu. Nelze například předpokládat, že obvod napájený napětím 1,8 V bude schopen generovat signál s logickými úrovněmi odpovídajícími standardu TTL. Nejběžněji se dnes u jednovodičových vedení (signálových cest) setkáme se standardy LVTTL, s napájecím napětím 3,3 V, a LVCMOS s napájecím napětím 3,3 V, 2,5 V, 1,8 V, 1,5 V nebo 1,2 V. Pro přenos rychlých signálů (typicky pro komunikaci s pamětmi DDR SDRAM) se používají různé varianty standardu HSTL (High-Speed Transceiver Logic) a SSTL (Stub Series Terminated Logic) pracujících s napájecím napětím v rozmezí 1,2 V až 3,3 V, které již předpokládají použití kontrolovaných impedancí výstupů budičů, vedení i vstupů obvodů. Pro vyšší přenosové rychlosti (nad cca 200 Mb/s na jeden signál) se dnes téměř výhradně používají dvojvodičová vedení, tzv. diferenční páry. Takové vedení je tvořeno dvojicí vodičů s kontrolovanou impedancí, které jsou vedeny v těsné blízkosti (ukázka realizace takového vedení na plošném spoji je Obr. 15). Jednotlivé vodiče páru se obvykle označují jako P a N. Logická úroveň 1 nebo 0 pak není dána velikostí napětí na vodiči vůči společnému potenciálu (zemi), ale rozdílem napětí mezi vodiči. Pokud je napětí na vodiči P větší, než na vodiči N, pak je přenášena logická úroveň 1, a naopak. Základní výhodou tohoto uspořádání ve srovnání s jednovodičovým vedením je podstatně vyšší odolnost vůči souhlasnému rušení. Ta je dána tím, že vnější rušení působí souhlasně na vodiče, které jsou vedeny ve vzájemné těsné blízkosti. Toto rušení se projeví jako současná změna stejné

36 36 FEKT Vysokého učení technického v Brně velikosti potenciálů obou vodičů. Rozdíl jejich potenciálů, který je nositelem informace, ale zůstane zachován. Toto uspořádání zároveň snižuje vyzařování elektromagnetického rušení do okolí. Obr. 15 Ukázka použití diferenčních vedení na desce plošných spojů. Tyto faktory umožňují pro přenos informace použít podstatně menší rozdíl napětí pro vyjádření logické 0 a 1. To dále snižuje úroveň vyzařování elektromagnetického rušení a také spotřebu. Tak lze přenášet velmi rychlé binárně kódované signály v základním pásmu a to až do přenosových rychlostí několika desítek gigabitů za sekundu. Mezi nejběžněji dnes používané standardy pro komunikaci po diferenčním páru patří různé varianty standardu LVDS, dále CML, LVPECL a diferenční verze standardů pro komunikaci s pamětmi (HSTL a SSTL) Jádra obvodů FPGA dnes pracují s velmi malým napájecím napětím (typicky 0,9 V až 1,5 V, podle typu cílového obvodu). Nízké napětí umožňuje jádru pracovat s nižší spotřebou a vyšším pracovním kmitočtem, než by tomu bylo při vyšším napájecím napětí. Většina standardů fyzických rozhraní ale potřebuje pro korektní funkci vyšší napětí. Proto jsou vstupně/výstupní buňky obvodů FPGA vybaveny samostatným napájecím vstupem, jehož konkrétní hodnotu napětí volíme podle standardu zvoleného pro přenos signálů. FPGA v systému často komunikují s řadou dalších zařízení (integrovaných obvodů) pomocí standardů, jejichž napěťové úrovně se navzájem odlišují. Proto je nutné I/O buňky v rámci jednoho FPGA napájet různým napětím. Z tohoto důvodu jsou I/O buňky rozděleny do skupin, typicky po (jedna buňka = jeden I/O pin FPGA), které mají společné napájecí napětí a některé další vlastnosti. Velké FPGA dnes mají běžně i přes 10 I/O bank. Zjednodušená struktura I/O buňky moderního obvodu FPGA je zobrazena na Obr. 16. V levé části jsou vstupy a výstupy buňky, které zajišťují její vazbu na programovatelnou strukturu pole. Výstupní část obsahuje blok ODDR, což je obvod podporující výstup dat technologií DDR (Dual Data Rate). Tento blok lze použít také jako klasický klopný obvod (SDR; Single Data Rate). Blok také může zůstat nevyužitý a signál do programovatelného výstupního zesilovače může vstupovat přímo z programovatelného hradlového pole. Za blokem ODDR následuje programovatelný výstupní zesilovač (output buffer). Ten převádí signál, který má logické úrovně odpovídající jádru FPGA na signál, který má logické úrovně požadované obvody vně FPGA. Logické úrovně výstupního signálu jsou dány vstupním napájecím napětím příslušné banky (VCCO) a konfigurací FPGA (na základě omezujících podmínek). Programovatelný výstupní zesilovač může svůj výstup nastavit i do stavu vysoké impedance, který umožňuje příslušnou buňku použít jako vstupní. Pro ovládání funkce třístavového výstupu je I/O buňka vybavena dalším dedikovaným blokem ODDR. Výstupní

37 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 37 zesilovač má obvykle také programovatelnou rychlost přeběhu (slew rate), která umožňuje snížit strmost hran (a tím elektromagnetické rušení) u méně kritických signálů, jako jsou výstupy pro LED diody a podobně. Často se lze setkat i s funkcí řízení výstupního proudu, kdy lze například nastavit proud v několika diskrétních rozsazích v rozmezí od 2 do 24 ma. Tyto vlastnosti bývají dostupné pouze pro některé logické standardy (typicky LVCMOS a LVTTL). Za výstupním zesilovačem může být zařazen blok ODELAY, který slouží ke zpoždění signálu. Toto zpoždění bývá programovatelné, může se dynamicky měnit a často se využívá ke kompenzaci různé elektrické délky vedení na plošném spoji. VCCO Výstupní část ODELAY Keeper I/O PIN P ODDR DCI pull ESD ODDR Programovatelný výstupní zesilovač IDELAY sousední I/O PIN N IDDR Vstupní část Obr. 16 Zjednodušené schéma vstupně/výstupní buňky obvodu FPGA. Následuje blok označený DCI (Digitally Controlled Impedance), který umožňuje realizovat impedanční zakončení signálních vedení přímo na čipu a to jak na straně vstupu, tak výstupu. Tradičně se zakončovací rezistory umisťují na plošný spoj co nejblíže vstupů, případně i výstupům příslušného obvodu (podle typu vedení). Pokud je třeba přivést velké množství takových signálů do integrovaného obvodu, bylo by potřebné množství rezistorů na desce plošných spojů příliš velké a často by ani nebylo možné je umístit dostatečně blízko příslušným vstupům a výstupům. Proto se dnes tyto rezistory realizují uvnitř integrovaných obvodů. Nevýhodou takového zakončení je, že FPGA umožňují realizovat pouze tzv. rozdělené zakončení (split termination), označované také jako ekvivalentní Theveninovo zakončení, které vykazuje vyšší statickou spotřebu, než tzv. paralelní zakončení. Hodnota zakončovací impedance navíc mívá poměrně velkou toleranci, i když novější FPGA již mají zabudovaný obvod sloužící k přesné kalibraci hodnoty interních rezistorů, který využívá externí přesný referenční rezistor připojený na dedikovaný vstup příslušné banky.

38 38 FEKT Vysokého učení technického v Brně Většina obvodů FPGA dnes umožňuje připojit na pin FPGA rezistory upínající vstup/výstup k napájecímu napětí nebo zemi (pull-up, pull-down). Tyto rezistory mají poměrně velkou hodnotu a tvoří tak poměrně slabé upnutí (weak pull-up/down), ale pro mnoho aplikací jsou vyhovující. Dalším obvodem je blok pro zachování poslední známé hodnoty (keeper), který upíná linku do stavu log. 1 nebo 0 podle toho, v jakém stavu se naposledy nacházela. Tyto obvody dokáží zajistit, že i při ponechání vstupu ve stavu vysoké impedance je vstupní komparátor schopen jednoznačně určit logickou hodnotu 0 nebo 1, a nehrozí tak vznik metastabilit na jeho výstupu. Každý pin je vybaven také základní ESD (Electrostatic Discharge) ochranou v podobě dvojice diod. Pokud se na pinu objeví příliš vysoké nebo příliš nízké napětí, je odvedeno přes diody do napájecí nebo zemní větve a neohrozí tak zbývající část FPGA. Ochranné diody jsou dimenzovány pouze na malé proudy (desítky ma) a krátkodobé zatížení, neměly by být používány jako aktivní obvodové prvky. Lze je ale využít například při kontrole zapájení pouzder FPGA: každý signál plošného spoje připojený k jeho pinu by měl být přes tyto diody spojen se zemním a napájecím signálem, což lze ověřit vhodným měřicím přístrojem (multimetr). Vstupní část I/O buňky obsahuje podobné bloky, jako výstupní část. Samotný vstup je tvořen komparátorem, který může pracovat buď s interní referencí (standardy LVTTL, LVCMOS...), externí referencí nebo jako diferenční komparátor, který využívá také sousední pin pro realizaci vstupu diferenčního páru. Za komparátorem je možné použít blok realizující programovatelné zpoždění, který opět slouží primárně pro kompenzaci elektrické délky signálů sběrnic. Signál pak může vstupovat přímo do programovatelného hradlového pole nebo může být zpracován dedikovaným klopným obvodem (IDDR), který může pracovat jak v režimu SDR, tak DDR. I/O buňky moderních obvodů obsahují řadu dalších prvků, které dále rozšiřují možnosti a zjednodušují použití obvodů FPGA. Jsou to například zabudované synchronní serializéry / deserializéry (SERDES), které umožňují realizovat rozhraní s přenosovou rychlostí dosahující až 2 Gb/s na jeden pin. Taková rozhraní se dnes používají například pro komunikaci s pamětmi typu DDR3. Důležitým parametrem, který je třeba sledovat u obvodů FPGA, je počet zároveň se měnících výstupů (Simultaneous Switching Outputs; SSO). Tento parametr určuje, kolik výstupů dané banky může v jeden okamžik měnit stav, aniž by došlo k překročení / nedodržení parametrů daných katalogovým listem příslušného obvodu. Tento parametr obvykle závisí na zvolených parametrech výstupu, tedy rychlosti přeběhu, výstupním proudu a především konkrétním logickém standardu. 3.4 Konfigurace obvodů FPGA Moderní FPGA jsou natolik složitá, že je nelze konfigurovat jinak, než s využitím pokročilých nástrojů EDA. Proces návrhu a implementace se velmi podobá způsobu, který je použit pro obvody ASIC. Návrh je prováděn pomocí komplexních systémů, které slouží jak pro tvorbu návrhu (design capture), tak pro verifikaci, implementaci, programování a testování fyzické realizace. Přední výrobci obvodů FPGA takový systém nabízí většinou zdarma ke stažení. Ten bývá omezen na menší a méně výkonné obvody a disponuje pouze některými vlastnostmi. Placená verze pak umožňuje pracovat i s velkými FPGA a disponuje různými pokročilými nástroji. Všechny tyto nástroje jsou ale omezeny na FPGA příslušného výrobce.

39 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 39 Existuje řada dalších nástrojů určených pro FPGA, které jsou vyvíjeny firmami, které se samy nezabývají výrobou FPGA (tzv. third party vendors). Nástroje těchto firem jsou prakticky vždy placené a většinou podporují FPGA od více výrobců. Tyto nástroje poskytují především firmy zabývající se vývojem nástrojů pro obvody ASIC, proto lze v takových nástrojích najít řadu pokročilých funkcí a modulů, především v oblasti verifikace designu. Pro popis (návrh, design) číslicových systémů se dnes používají především speciální HDL (Hardware Description Language) jazyky, kterým je věnována kapitola 2., a pro hierarchický návrh se používají schémata, která výrazně zpřehledňují navrhovaný systém a zároveň často slouží jako část dokumentace. Dále existují některé speciální techniky popisu, jako jsou stavové diagramy, tzv. IP jádra (kapitola 6) a další, jako například generování HDL kódu přímo z prostředí Matlab/Simulink. Vytváření popisu číslicového systému uvedenými metodami se obecně považuje za hlavní činnost při jejich návrhu. Vzhledem k rostoucí složitosti systémů je ale stále více času nutné věnovat také verifikaci tohoto návrhu. Především v oblasti obvodů ASIC je tento trend markantní a uvádí se, že čas (vynaložené úsilí) strávený verifikací tvoří typicky 60-80% času návrhu, kdežto návrh samotný pak zbývajících 20-40%. V případě obvodů ASIC je to nezbytné, neboť tímto způsobem lze výrazně omezit tzv. respin, tedy opakovanou výrobu prototypů čipu. Tu je nutné provést, pokud byla v návrhu čipu chyba. Vzhledem k extrémní finanční a časové náročnosti respinu je třeba tyto chyby eliminovat, a proto je prováděna důkladná verifikace. U obvodů FPGA podobné nebezpečí nehrozí. V případě, že jsou v návrhu chyby, lze je jednoduše opravit v kódu a opětovným spuštěním implementace a přeprogramováním FPGA odstranit. Návrh Behaviorální simulace Syntéza Formální verifikace Implementace Statická časová analýza Programování Ověření v systému Produkce Obr. 17 Postup implementace číslicového systému do obvodu FPGA. Moderní FPGA jsou ale velmi rozsáhlé a proces implementace může trvat i desítky hodin. Navíc funkci některých bloků často nelze spolehlivě ověřit za běhu zařízení, ale pouze simulací. Proto roste význam verifikace i v oblasti obvodů FPGA. Obecně se doporučuje pro každý zdrojový kód (HDL, schéma ) v hierarchii návrhu vytvořit i testovací modul (testbench), který ověří funkčnost příslušného zdrojového kódu.

40 40 FEKT Vysokého učení technického v Brně Proces implementace číslicových obvodů do FPGA má posloupnost uvedenou na Obr. 17. Prvním krokem je návrh, což je vytvoření syntetizovatelného popisu systému na základě specifikace. Tento popis je poté verifikován pomocí funkční (behaviorální) simulace. Tato simulace bere v potaz pouze ideální logické funkce, nikoliv reálné časové parametry implementovaného obvodu. Může ale brát v potaz reálné časové parametry externích rozhraní, pokud jsou známé a pokud je to žádoucí. V případě, že behaviorální simulace prokáže chyby v návrhu, je třeba proces návrhu opakovat úpravou zdrojových kódů. Jakmile je funkční simulace v pořádku, lze přistoupit k procesu syntézy (Obr. 18). Syntéza je proces, při kterém program (syntetizér, synthesis tool) převede veškeré zdrojové kódy do zapojení elementárních logických buněk, jako jsou hradla AND, OR, XOR, klopné obvody a makrobloky. Zároveň probíhá optimalizace navrženého číslicového obvodu a to jak na úrovni booleovských rovnic, tak z hlediska vyloučení duplicitních bloků, volby vhodného kódování pro stavové automaty atd. Výsledné schéma zapojení se nazývá RTL netlist (Register Transfer Logic). Syntéza číslicových systémů je dnes považována za dobře zvládnutou problematiku, nicméně z hlediska psaní zdrojových kódů je nutné dodržovat určitá pravidla. Ne každý kód, který je funkční v simulaci, lze také syntetizovat (viz kapitola 2). Syntetizéry nezpracovávají zdrojové kódy v HDL jazycích doslova, ale snaží se v nich najít typické (známé) struktury. Jakmile syntetizér takovou strukturu v kódu rozpozná, dokáže ji implementovat a často navíc velmi efektivně optimalizovat (například čítače). Proto je nutné dodržovat pravidla uvedená v dokumentaci syntetizéru. Ta obvykle obsahuje doporučený způsob popisu běžných číslicových subsystémů, jako jsou čítače, stavové automaty, posuvné registry, paměti a podobně. ENTITY prepinac IS PORT( a,b,c: IN STD_LOGIC; volba: IN STD_LOGIC_VECTOR(1 DOWNTO 0); y: OUT STD_LOGIC); END prepinac; ARCHITECTURE Behavioral OF prepinac IS BEGIN y <= a WHEN volba = "00" ELSE b WHEN volba = "01" OR volba = "10" ELSE c; END Behavioral; Syntetizér RTL Netlist Obr. 18 Princip syntézy číslicových obvodů z abstraktního popisu. V ideálním případě je funkce syntetizovaného RTL schématu identická, jako funkce designu zachyceného pomocí HDL jazyků, hierarchických schémat a dalších nástrojů. V praxi se ale může stát, že nevhodným popisem nebo nedokonalostí syntetizérů dojde k odchylkám ve funkci designu, které mohou ve výsledku znamenat chybnou funkci navrženého zařízení.

41 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 41 Proto se někdy přistupuje k simulaci i v tomto bodě (především při návrhu obvodů ASIC). K simulaci RTL netlistu lze využít stejné testovací soubory, jako pro simulaci HDL kódů. Simulace je ale v tomto případě časově mnohem náročnější, neboť systém je modelován na nižší úrovni (větším počtem elementárních prvků). Proto se pro kontrolu RTL netlistu často používají speciální nástroje, které provádí tzv. formální verifikaci (formal verification; [10]). Formální verifikace je založena na zjišťování ekvivalence dvojice popisů pomocí vhodného algoritmu. Existuje řada algoritmů, které se liší rychlostí a spolehlivostí verifikace. Mezi nejběžnější patří metody založené na kontrole ekvivalence (Equivalence Checking), které jsou realizovány například jako Binary Decision Diagram nebo pomocí Statisfiability solverů. Tyto metody jsou sice spolehlivé, ale neefektivní, proto se hledají nové metody verifikace, jako například Model Checking, Bounded Model Checking a metody hybridní formální verifikace. Pokud RTL schéma nesplní test formální verifikace, je třeba znovu upravit zdrojové kódy, případně i nastavení syntetizéru. Pokud je RTL netlist v pořádku, lze přikročit k procesu implementace. Doposud byl postup do značné míry nezávislý na cílové platformě (FPGA nebo ASIC). Zjednodušeně lze říci, že stejný RTL popis lze přímo použít pro implementaci jak pro FPGA, tak pro obvody ASIC. Další uvedené kroky již budou specifické pro FPGA. Syntetizované schéma obsahuje logické obvody, které z valné části nemají fyzické ekvivalenty ve struktuře cílového obvodu FPGA. Typicky jde o elementární kombinační hradla, která se v FPGA realizují pomocí LUT. Proto je nutné provést proces tzv. mapování, který převede RTL schéma na zapojení prvků, které již v FPGA dostupné jsou. Výsledkem této operace je schéma (někdy označované jako technologické), jehož příklad je na Obr. 19. Na rozdíl od RTL schématu neobsahuje kombinační logické buňky v podobě elementárních hradel, ale v podobě LUT. Obr. 19 Ukázka výsledku procesu mapování výřez technologického schématu. Zároveň s tvorbou technologického schématu jsou zohledněny požadavky na fyzické rozmístění signálů na vývody FPGA a požadavky na časové parametry vnitřních signálů a vstupně/výstupních signálů. Souhrnně se tyto tzv. omezující podmínky nazývají constraints.

42 42 FEKT Vysokého učení technického v Brně Nyní je třeba vybrat vhodné lokace jednotlivých komponent na čipu FPGA (proces Place). Cílem je rozmístit komponenty tak, aby jejich následné propojení bylo co nejefektivnější (obvyklým obecným kritériem je minimální délka spojů. To ale nelze aplikovat globálně, neboť globálně optimální řešení (minimální celkové zpoždění) by s vysokou pravděpodobností vedlo na řešení, v němž bude mít několik spojů zpoždění větší, než dovolené. U kritických bloků designu, kde lze již při jejich návrhu předpokládat, že splnění požadavků na časové parametry bude kritické, lze pomocí omezujících podmínek některým buňkám umístění přiřadit. Toto umístění může být buď fixní (s ohledem na cílový obvod) nebo relativní (vzhledem k dalším buňkám). V jednodušších případech se proces rozmístění ponechává zcela na návrhovém systému. Většina nástrojů umožňuje prostřednictvím grafického editoru rozmisťovat buňky ručně, případně jejich pozici korigovat po automatickém rozmístění. Na Obr. 20 je ukázka grafického rozhraní takového programu, na níž je výřez designu, který již prošel procesem Place. Na obrázku jsou patrné základní bloky čipu FPGA, byť nejsou v reálném měřítku ani vzájemné poloze. Samotné logické buňky jsou v tomto zobrazení velmi malé. Využité buňky mají modrou barvu, nevyužité pak černou. Většinu plochy zobrazení zabírá programovatelná propojovací struktura, která je tvořena lokálními spoji (šedá barva), globálními spoji (purpurová) a přepínacími maticemi, které slouží ke vzájemnému propojení vodivých cest a logických buněk. Logické buňky jsou v tomto kroku propojeny jen virtuálními vzdušnými vodiči (air wires) naznačenými na obrázku zelenou barvou. Jde o ekvivalent vzdušných spojů známých z oblasti návrhu plošných spojů. Tyto vodiče informují návrháře o tom, které buňky mají být vzájemně propojeny a měly by tedy být umístěny co nejblíže u sebe. programovatelná přepínací matice využitá logická buňka globální propojovací struktura lokální propojovací struktura nevyužitá logická buňka Obr. 20 Rozmístění buněk technologického schématu na čipu FPGA. Jakmile je proveden proces rozmístění (place), může být spuštěn proces automatického propojení buněk (route), tedy převedení vzdušných spojů do fyzické podoby s využitím programovatelné propojovací struktury. Ukázka výsledku procesu propojení je na Obr. 21 a představuje v podstatě hotový návrh FPGA.

43 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 43 Obr. 21 Výsledek procesu Place and Route rozmístěné a propojené buňky technologického schématu. Proces rozmístění a proces propojení buněk se často považuje za jediný proces, označovaný jako Place and Route, pro nějž se pak běžně používá zkratka PAR (případně P&R). Moderní FPGA jsou natolik rozsáhlá, že problém rozmístění a propojení prvků na čip má obrovský počet stupňů volnosti, tj. obrovský počte možností. Proto se do těchto procesů vkládají náhodné prvky, které při každém jejich novém spuštění nastaví jiné výchozí podmínky. Tím může být výsledek každé iterace jiný, čehož se využívá při hledání optimálního rozmístění a propojení při implementaci systémů, u kterých jsou požadované časové parametry na mezi cílového obvodu FPGA (obtížně splnitelné omezující podmínky, typicky mezní pracovní frekvence). Uvádí se, že z hlediska splnění časových parametrů, má přibližně 80% podíl na výsledku proces rozmístění buněk (place) a pouze 20% jejich propojení (route). Pokud tedy implementovaný design nesplňuje požadované časové parametry, je efektivnější provést znovu proces rozmístění buněk. Implementační nástroje navíc obvykle umožňují zvolit, s jakým úsilím (effort) mají tyto dva procesy probíhat. Pokud je nastavená nízká úroveň, proběhne proces poměrně rychle, výsledek je ale nebývá optimální. Naopak vysoká úroveň vede nástroj k hledání co nejoptimálnějších variant rozložení a propojení buněk, ovšem za cenu značného (i několikanásobného) nárůstu doby potřebné pro implementaci. Po skončení procesu PAR je provedena tzv. statická časová analýza (Static Timing Analysis; STA), která slouží k ověření časových parametrů výsledné implementace číslicového obvodu v FPGA, tedy zda implementovaný design splňuje omezující podmínky (constraints). Po provedení procesu PAR jsou již známé délky a trasy všech použitých spojů na čipu a lze tedy stanovit dobu šíření všech signálů mezi klopnými obvody, vstupy a výstupy. Výpočet doby šíření je založen na změřených parametrech reálných čipů a je uvažován pro nejhorší možný případ, tedy nejméně výhodné pracovní podmínky (teplota, napájecí napětí) a nejhorší variantu výrobního procesu. Tato analýza se označuje jako worstcase TVP analysis (TVP = temperature, voltage, process). Pokud je na základě časové analýzy zjištěno, že design nesplňuje omezující podmínky, je nutné provést implementaci znovu. V případě, že je rozdíl mezi požadovanými hodnotami a dosaženými hodnotami velmi malý, je možné provést pouze proces implementace

44 Potenciální dosažitelné tržby 44 FEKT Vysokého učení technického v Brně s modifikovaným nastavením, například s nastavením vyššího úsilí (effort) procesu rozmístění buněk. Je-li ale rozdíl požadavků a výsledku STA příliš velký, je většinou nutné provést úpravy zdrojových kódů některou z technik uvedených v kapitole 5.5. Pokud jsou omezující podmínky splněny, lze přistoupit k samotné konfiguraci (naprogramování) FPGA. K tomu je zapotřebí vygenerovat programovací soubor určený buď přímo pro FPGA (označovaný jako BitStream) nebo pro vhodnou paměť (typicky FLASH), ze které je bitstream při každém zapnutí systému do FPGA načten. Testování na hardwarové platformě často odhalí další chyby v návrhu, které je pak nutné korigovat ve zdrojových kódech. Korekce kódu ovšem znamená provést znovu celý proces implementace, včetně příslušných kroků verifikace. To je u větších designů velmi náročné na čas a výpočetní prostředky, proto je snahou návrhářů se takovým změnám v maximální míře vyhnout důkladnou funkční verifikací. Obecně platí, že odhalení chyby v počátku vývoje (např. právě pomocí funkční verifikace) je mnohem levnější, než odhalení chyby v pozdější fázi vývoje, nebo v extrémním případě až ve výrobě. V současné době se na vývoji elektronických systémů nepříznivě projevuje trend velmi rychlého uvádění produktů na trh. Tlak je způsoben faktem, že potenciální zisk z produktu je tím větší, čím dříve se jej podaří uvést na trh před konkurenčním produktem (Obr. 22), a je příčinou řady chyb, které se v nových produktech objevují (nedostatečný čas na testování). To platí především v oblasti spotřební elektroniky, kam sice FPGA teprve začínají pronikat, nebo jsou prozatím relativně drahá a mají velkou vlastní spotřebu. V blízké budoucnosti lze ale předpokládat značný rozmach použití FPGA i v této oblasti spolu s tím, jak se bude dařit snižovat jejich cenu a spotřebu. FPGA totiž nabízí ve srovnání s obvody ASIC mnohem rychlejší proces návrhu a možnost jednoduše provádět změny konfigurace i během produkce a dokonce u zákazníka (formou nového firmware). 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% Zpoždění v uvedení produktu na trh (měsíců) Obr. 22 Potenciální dosažitelné tržby z prodeje produktu v závislosti na zpoždění v uvedení produktu na trh. 3.5 Výrobní technologie obvodů FPGA FPGA pro svoji funkci potřebují programovatelné konfigurační buňky, které slouží k ovládání prvků na čipu (LUT, multiplexory, propojovací struktura ). Tyto

45 DRAIN SOURCE Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 45 programovatelné buňky jsou ve své podstatě paměťové buňky, které lze realizovat téměř libovolnou technologií používanou pro výrobu pamětí. Typ použitých paměťových buněk velmi výrazně ovlivňuje vlastnosti celého obvodu FPGA a to ze dvou důvodů. FPGA obsahují obrovské množství programovacích paměťových buněk (až stovky milionů), které tak zabírají značnou část celého čipu. Jejich velikost má tedy zásadní vliv na celkovou velikost čipu. Provedení navíc může výrazně ovlivnit vlastní spotřebu obvodu, odolnost vůči vnějším vlivům (radiace ) a podobně. Z hlediska výroby vyžadují některé typy paměťových buněk speciální technologické kroky, které nejsou dostupné v nejnovějších výrobních technologiích (technology node). Jsou tak limitujícím faktorem z hlediska velikosti hradlového pole (počtu programovatelných buněk) a rychlosti (mezní pracovní frekvence) takto realizovaných čipů. Výrobní technologie (proces, technology node) bývá označována fyzickým rozměrem (µm, nm), který odpovídá polovině nejmenší realizovatelné vzdálenosti mezi dvěma vodivými cestami ve struktuře paměti DRAM (half pitch between two adjacent DRAM metal lines; Obr. 23). Někdy je tento rozměr poněkud nesprávně interpretován jako nejmenší šířka motivu, který lze danou technologií na čipu realizovat. Half-pitch Pitch kontakt kontakt GATE CHANNEL Obr. 23 Význam označení technologie výroby integrovaných obvodů (technology node). Z hlediska zabrané plochy na čipu lze konfigurační buňky nejefektivněji realizovat přímo při výrobě základního čipu FPGA využitím metalických vrstev, tedy vhodnými fotolitografickými maskami (mask programmable). Tato technologie neumožňuje po výrobě čip programovat (odpovídá pamětem ROM), přesto se s ní dnes lze v souvislosti s obvody FPGA setkat. Používá se pro realizaci strukturovaných obvodů ASIC, které jsou založeny na obvodech FPGA, pouze jsou v nich programovatelné konfigurační buňky nahrazen buňkami ROM. Použití těchto obvodů vychází z klasických obvodů FPGA založených typicky na technologii SRAM (viz dále). Na nich je vyvíjený číslicový obvod odladěn a poté je provedena migrace designu do technologie maskou programovatelných obvodů. Obvody tohoto typu jsou dostupné například pod komerčním označením HardCopy nebo EastPath. Použití pevně nakonfigurovaných buněk umožňuje výrazné snížení spotřeby, zmenšení zabrané plochy čipu, zmenšení délek spojů a tím i zvýšením výkonu čipu při stejné

46 46 FEKT Vysokého učení technického v Brně konfiguraci. Pokud je obvod vyroben v dostatečném množství, je takový čip levnější, než odpovídající obvod FPGA, a představuje kompromis mezi obvody FPGA a ASIC. Takto realizované konfigurační buňky jsou přirozeně velmi odolné vůči ionizujícímu záření. Výhodný je i fakt, že po zapnutí jsou obvody ihned funkční. Naopak základní nevýhodou této technologie je fixní konfigurace daná při výrobě, která zcela vylučuje použití těchto obvodů pro vývoj. Ke každému typu takového obvodu ale existuje odpovídající obvod FPGA, který tuto funkci přebírá. Proces zpětného inženýrství je u těchto obvodů relativně snadný a spočívá v analýze rentgenových snímků čipu. Technologie výroby takových obvodů nevyžaduje zvláštní technologické kroky a pro výrobu takového čipu je tedy možné využít nejnovější CMOS technologii. První opravdu programovatelné obvody PLD byly vyráběny technologií tavných propojek, pojistek (fuse). Programování čipu spočívalo v přepálení vybraných pojistek dostatečným proudem. Tento způsob programování je jednorázový, jde tedy o obvody OTP. V oblasti pamětí těmto obvodům odpovídá technologie PROM. Technologie pojistek se v dnešní době již prakticky nepoužívá, ale jako velmi perspektivní se ukázala být obdobná technologie antipojistek (antifuse) založená na technologii amorfního křemíku. Tento druh paměťové buňky je v nenaprogramovaném stavu nevodivý. Přivedením dostatečně velkého napětí a proudu na paměťovou buňku se buňka stává trvale vodivou naprogramovanou. Programování je trvalé, nevratné (OTP), obvody jsou tedy nevhodné pro vývoj (prototyping). Mezi výhody těchto obvodů patří vysoká odolnost vůči radiaci, velmi obtížné zpětné inženýrství a okamžitá funkčnost po zapnutí. Z těchto důvodů jsou tyto obvody používány v armádních zařízeních (military, defense), v leteckém průmyslu a vesmírných aplikacích (aerospace). Výrobci obvodů FPGA založených na technologii antipojistek často vyzdvihují plošnou efektivitu těchto konfiguračních buněk ve srovnání s dalšími typy buněk (především SRAM). Díky ní lze realizovat obvod FPGA mnohem efektivněji, tedy s větším mezním kmitočtem a větší efektivitou využití čipu, než srovnatelný obvod s buňkami SRAM. Takové srovnání je korektní, pokud provedeme porovnání obvodů vyrobených stejnou technologií. Problém obvodů založených na technologii antipojistek ale je, že k jejich výrobě jsou nutné speciální výrobní technologické kroky, a ty nejsou dostupné v nejnovějších technologiích. Současné obvody s technologii antipojistek jsou vyráběny technologií 150 nm, zatímco obvody s technologií SRAM jsou běžně dostupné s technologií 28 nm (obvody FPGA vyrobené technologii 150 nm založené na buňkách SRAM byly dostupné již v roce 2000). To způsobuje značnou zaostalost obvodů s antipojistkami za obvody s buňkami SRAM, která zcela eliminuje zisk daný plošnou efektivitou. Plošnou efektivitu dále poněkud zhoršuje fakt, že k programování antipojistek jsou nutné poměrně velké programovací tranzistory, o kterých se výrobci příliš nezmiňují. Použitím technologie EPROM (Erasable Programmable Read Only Memory), v obvodech PLD vznikly první opakovaně programovatelné logické obvody. Programovatelná buňka je založena na tranzistoru MOS-FET s plovoucí (nezapojenou) elektrodou hradla (floating gate). Elektroda je izolována vrstvou oxidu křemičitého a dokáže si tak po velmi dlouhou dobu uchovat elektrický náboj, který je na ni přiveden. Elektrodu lze nabít (tj. buňku naprogramovat) přivedením dostatečně vysokého napětí na její příslušnou elektrodu, přičemž se využívá jevu injektování horkých nosičů elektronů (hot carrier injection). Vyšší napětí bylo dříve nutné zajistit externě, novější integrované obvody jsou schopny toto napětí generovat interně pomocí nábojové pumpy. Vybití náboje z elektrody, tedy smazání obsahu buňky, probíhá pomocí ionizujícího UV záření. Ozářením vznikají v oxidu křemičitém ionty, které zhorší jeho izolační vlastnosti a umožní náboji z hradla uniknout. Tento proces mazání paměti trvá typicky minut.

47 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 47 Obr. 24 Pouzdro DIL integrovaného obvodu vybaveného pamětí typu EPROM; rozteč vývodů je 2,54 mm. Obvody technologie EPROM se vyznačovaly pouzdry s okénkem z křemičitého skla, které umožnilo proniknout UV záření až na čip (Obr. 24). Taková pouzdra byla velmi drahá, a i proto se od použití technologie EPROM brzy upustilo. V oblasti obvodů PLD se tato technologie nedočkala rozšíření (až na několik starších řad obvodů SPLD a CPLD), používala se spíše pro paměti a mikroprocesory s integrovanou pamětí. Dalším vývojovým krokem v oblasti programovatelných buněk je technologie EEPROM (někdy E 2 PROM), tedy elektricky mazatelná paměť. Na rozdíl od pamětí EPROM lze obsah takové paměti nejen naprogramovat, ale i vymazat elektricky, a to nejen všechny buňky najednou, ale každou buňku zvlášť. Možnost mazat každou buňku zvlášť ale vyžaduje implementovat ke každé buňce další tranzistor pro funkci mazání, čímž se poněkud zhoršuje plošná efektivita této struktury. Základní výhoda technologie EEPROM ale tkví v možnosti relativně rychlého mazání buněk (ve srovnání s EPROM), které nevyžaduje aplikaci UV záření, tedy použití pouzdra s okénkem. Rychlost mazání buněk EEPROM je ale omezená a pro potřeby moderních integrovaných obvodů nevhodná. Proto byla vyvinuta technologie FLASH, která je přímo založena na technologii EEPROM, a liší se od ní pouze strukturou pro mazání obsahu buněk. U technologie FLASH dochází k mazání buněk ne individuálně, ale po blocích. To má dva důsledky: zvýšení rychlosti procesu mazání a zvýšení plošné efektivity využití čipu (tranzistor pro mazání je sdílen několika buňkami). Technologie EEPROM byla dříve používána u obvodů SPLD a CPLD. Vzhledem k tomu, že konfigurační soubor je při programování nahrán celý znovu (nejde o změnu individuálních buněk), byla technologie EEPROM brzy nahrazena technologií FLASH. V současné době se FLASH používá pro realizaci konfiguračních buněk CPLD a nevolatilních FPGA. Volatilní obvody FPGA využívají pro uchování konfigurace externí paměti typu FLASH. Technologie EEPROM/FLASH vyžaduje při výrobě použití speciálních technologických procesů nad rámec základního výrobního procesu. Podobně, jako u technologie antipojistek, tyto procesy nejsou dostupné pro nejnovější výrobní technologie. Ačkoliv jsou tedy buňky těchto typů plošně efektivnější, než srovnatelné buňky SRAM, zpoždění o několik generací technologií je řadí z hlediska výpočetních možností (počet a rychlost logických buněk) až za obvody založené na technologii SRAM. Nejnovější dostupné FPGA a CPLD založené na technologii FLASH jsou dnes vyráběny technologií 65 nm (běžně dostupné FPGA založené na SRAM jsou vyráběny technologií 28 nm).

48 48 FEKT Vysokého učení technického v Brně Obvody založené na EEPROM/FLASH jsou vhodné pro vývoj aplikací (prototyping), neboť proces programování je opakovatelný a dosažitelná rychlost přeprogramování je již přijatelná (podstatně menší, než typická doba syntézy a implementace designu). Každý cyklus zápisu a mazání má negativní vliv na životnost buňky, neboť dochází k degradaci vrstvy oxidu křemíku. Životnost se podle konkrétního provedení uvádí v rozmezí 100 až cyklů, což pro konfigurační buňky FPGA plně dostačuje. Obvody založené na technologii FLASH vykazují nízkou statickou spotřebu a jsou dobře odolné vůči zpětnému inženýrství. Odolnost vůči ionizujícímu záření je nižší, neboť to má stejný efekt, jako UV záření u EPROM technologie, tedy ztrátu náboje v plovoucím hradle. Rychlost této ztráty je úměrná intenzitě ionizujícího záření. Poslední, a zdaleka nejpoužívanější technologií konstrukce konfiguračních buněk moderních FPGA, je statická buňka SRAM (Static Random Access Memory cell). Ta je typicky složena ze šesti tranzistorů vyrobených standardní technologií MOS-FET (Obr. 25), ale existují i varianty s více či méně tranzistory. Základní výhodou této buňky je právě fakt, že ji lze vyrobit standardní technologií, nejsou vyžadovány další technologické kroky, jako antipojistek nebo EEPROM/FLASH. To je činí jednak poměrně levnými a zároveň to umožňuje takové obvody vyrábět nejmodernější dostupnou technologií, což je hlavní důvod použití technologie SRAM v drtivé většině dnešních FPGA. Obr. 25 Základní paměťová buňka technologie SRAM. Buňky typu SRAM přináší i několik nevýhod. Fakt, že každá buňka je složena ze šesti tranzistorů (oproti jednomu v technologii FLASH) je činí značně neefektivní z hlediska využití plochy křemíkového čipu. Technologický náskok oproti technologii FLASH ale tuto nevýhodu více než kompenzuje. Buňky SRAM jsou volatilní, tedy pro uchování stavu naprogramování vyžadují trvalou přítomnost napájecího napětí. To v praxi vyžaduje přítomnost externí FLASH paměti, ze které je po každém zapnutí systému načtena konfigurace do SRAM buněk FPGA. Tento proces je jednak časově náročný (u větších obvodů může trvat stovky milisekund) a zároveň umožňuje poměrně snadno provést proces zpětného inženýrství vyčtením konfiguračního souboru z externí paměti. Tuto nevýhodu lze kompenzovat zabezpečovacím kódováním (typicky AES; Advanced Encryption Standard) použitým pro přenos dat z paměti do FPGA. SRAM buňky jsou také náchylné na ionizující záření, které může poměrně snadno změnit jejich stav z log. 0 do log. 1 nebo naopak. Odolnost buněk lze zvýšit použitím přídavného stínění nebo použitím starší výrobní

49 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 49 technologie, které jsou z principu odolnější. Tím se ale ztrácí výhoda technologického náskoku vzhledem ke srovnatelným obvodům založeným na technologii antipojistek a FLASH. Porovnání všech uvedených technologií výroby konfiguračních buněk je v Tab. 1. Dnes běžně komerčně dostupné technologie jsou v naprosté většině založeny na technologii SRAM, výjimečně na technologii FLASH. Obvody s antipojistkami lze použít jen pro speciální aplikace. Maskou programovatelné obvody jsou vhodné pro náhradu SRAM FPGA pro hromadnou výrobu, jejich význam ale klesá s rostoucími možnostmi a klesající cenou SRAM FPGA. Tab. 1 Vzájemné porovnání vlastností technologií konfiguračních buněk obvodů PLD. funkční ihned po zapnutí relativní plocha na čipu zpětné inženýrství (reverse engineering) dostupná výrobní technologie (2014) vhodné pro vývoj (prototyping) odolnost konfiguračních buněk vůči radiaci ASIC / Mask Programmable Antifsue EPROM EEPROM / FLASH SRAM ano ano ano ano ne nejmenší velmi malá malá střední / malá velká snadné (RTG snímání) velmi obtížné obtížné obtížné snadné, (externí paměť) 28/22/14 nm 150nm - - / 65 nm 28/22 nm NE NE ANO ANO ANO dokonalá velmi dobrá střední střední nízká (nutné použít přídavné stínění) statická spotřeba malá malá malá malá velká výpočetní výkon (performance) velmi velký malý sřední střední velký použití Structured ASIC FPGA starší paměti CPLD, FPGA FPGA 3.6 Pouzdra obvodů FPGA Starší obvody PLD se vyráběly v pouzdrech DIL (Dual In-Line; Obr. 24) s roztečí vývodů 2,54 mm, PLCC (Plastic Leaded Chip Carrier; Obr. 26) s roztečí 1,27 mm, v různých variantách SO (Small Outline package) s roztečí 0,5 až 1,27 mm a QFP (Quad Flat Package; Obr. 28) s roztečí 0,5 až 0,8 mm. Tato pouzdra měla vývody pouze po svém obvodu (DIL a SO dokonce pouze ze dvou stran), což umožňovalo realizovat pouze obvody s relativně malým počtem vstupů a výstupů (cca do 250 u největších QFP pouzder). Vývody byly navíc tvořeny poměrně dlouhými vodiči (především u pouzdra DIL) a vykazovaly tak poměrně velkou indukčnost, která znemožňovala jejich použití pro rozhraní s vysokou přenosovou rychlostí. Jistou výjimkou jsou pouzdra typu PGA (Pin Grid Array), která mají vývody

50 50 FEKT Vysokého učení technického v Brně rozmístěny po většině plochy čipu a umožňují tak realizovat i součástky s více vývody (i přes 600). Tato pouzdra se ale příliš nepoužívala, brzy je nahradily modernější varianty. Obr. 26 Ukázka obvody CPLD v pouzdře PLCC44 (17 x 18 mm, rozteč vývodů 1,27 mm). Obr. 27 FPGA ve vývodovém pouzdře typu QFP-208 s roztečí vývodů 0,5 mm. Moderní obvody FPGA mají velký počet vstupů a výstupů, které jsou navíc uzpůsobeny pro vysoké přenosové rychlosti (stovky megabitů až desítky gigabitů). To nutně vyžaduje použití moderních pouzder s velkým počtem pinů a malými parazitními vlastnostmi. Dnes se lze běžně setkat s pouzdry typu QFP, QFN (Quad Flat No-leads; Obr. 28) a především BGA (Ball Grid Array; Obr. 29), u nichž se počet pinů může blížit i třem tisícům. Obr. 28 Bezvývodové pouzdro typu QFN s roztečí vývodů 0,5 mm s termální ploškou.

51 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 51 Obr. 29 Ukázka provedení pouzdra typu BGA s roztečí vývodů 1 mm. Pouzdra typu BGA a QFN jsou poměrně náročná z hlediska osazování, neboť mají vývody v oblasti pod pouzdrem, kterou nelze přímo kontrolovat a případné chyby v zapájení opravit. Vždy jsou osazována technologií přetavení (reflow) s přesně kontrolovaným průběhem teploty během procesu. To zajistí, že dojde k dostatečnému rozlití pájky po plošném spoji a kontaktech a zároveň nedojde k přepálení cínu. I při chladnutí desky je nutné dodržet předepsaný teplotní profil, který zamezí vzniku mechanického pnutí mez plošným spojem a pouzdrem. Především v případě bezolovnatých pájek (drtivá většina dnes používaných) jsou požadavky na teplotní profil kritické. Základem pouzder typu BGA (Obr. 30, Obr. 31) je mnohavrstvý plošný spoj (základní substrát), který slouží jako nosná konstrukce pouzdra a propojovací struktura. Na spodní straně tohoto substrátu jsou rozmístěny kuličky pájky, které slouží jako piny. Na horní straně desky je pak umístěn samotný křemíkový čip (v našem případě FPGA), který může být připojen k základnímu substrátu dvěma způsoby. Levnější způsob je použití bondovacích drátků (technika wire bonding), které jsou postupně strojově nataženy mezi čip a substrát (Obr. 30). Čip je v tomto případě na základním substrátu přilepen teplovodným epoxidovým lepidlem. Celá sestava je zalita epoxidovou pryskyřicí, která chrání přípojné (bondovací) drátky i samotný čip před poškozením. epoxidová pryskyřice přípojné drátky blokovací kondenzátory plošné spoje kuličky pájky základní substrát teplovodné lepidlo křemíkový čip Obr. 30 Schéma pouzdra typu BGA s čipem připojeným bondováním (wire bonding). Bondovací drátky mají poměrně velkou vlastní indukčnost, což omezuje použití takových pouzder pro obvody s relativně nízkými rychlostmi na jeden pin (přesto jde o jednotky Gb/s). Samotný čip je zalit v pryskyřici a nemůže mít tedy přímý kontakt

52 52 FEKT Vysokého učení technického v Brně s chladičem. Takto způsobený větší tepelný odpor pouzdra znemožňuje použít pouzdro pro obvody s velkým ztrátovým výkonem, tedy pro obvody optimalizované na rychlost (výpočetní výkon). Pro takové obvody se používá dražší, ale kvalitnější způsob montáže čipu na substrát tzv. Flip Chip. V tomto případě je křemíkový čip opatřen ze strany kontaktů mikrokuličkami pájky, které slouží k připájení čipu na základní substrát (Obr. 31). Čip je tak sám vlastně jakousi miniaturní součástkou s pouzdrem typu BGA. Výhodou takové montáže je především výrazné snížení parazitních vlastností propojení čipu se základním substrátem. Další výhodou je, že čip lze efektivněji chladit z horní strany pouzdra, neboť čip není blokován bondovacími drátky. Provedení pouzdra může být bez teplovodného ochranného krytu (Bare Die nebo Lidless FCBGA; foto na Obr. 31) nebo s ochranným krytem (Lidded FCBGA; Obr. 29). teplovodné lepidlo teplovodný kovový kryt křemíkový čip blokovací kondenzátory plošné spoje kuličky pájky základní substrát mikrokuličky pájky epoxidová pryskyřice Obr. 31 Schéma pouzdra typu FCBGA a jeho reálná ukázka. V okolí čipu jsou na substrátu většinou (pokud to umožňuje kombinace velikosti pouzdra a čipu) rozmístěny blokovací kondenzátory, které podstatně zvyšují kvalitu napájecího napětí a částečně snižují nároky na množství blokovacích kondenzátorů na hlavním plošném spoji. Jsou vždy keramické, s malou vlastní indukčností a ekvivalentním sériovým odporem (ESR; Equivalent Series Resistance). Dobře patrné jsou na fotografii pouzdra FCBGA bez ochranného teplovodného krytu (Obr. 31).

53 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 53 4 Základy logických obvodů Číslicové systémy se obecně dělí na kombinační a sekvenční. Kombinační obvody jsou takové, u nichž stav výstupů závisí pouze na okamžitém stavu vstupů (pokud nebereme v úvahu zpoždění dané šířením signálů reálným systémem). Sekvenční systémy jsou takové, u nichž aktuální stav výstupů závisí nejen na současném stavu vstupů, ale i na předchozím stavu, ve kterém se systém nacházel. Systém tedy obsahuje vnitřní paměť, která je typicky realizována klopnými obvody. Kromě paměťových prvků ale může obsahovat i kombinační obvody, které realizují potřebné aritmetické a logické funkce. Synchronní systémy jsou pak takové sekvenční systémy, jejichž stav se může měnit pouze v okamžicích určených vyhrazeným řídicím signálem. Klopné obvody těchto systémů proto mají společný řídicí signál, označovaný jako signál hodinový (clock). Pokud klopné obvody v systému nemají společný hodinový signál, označují se takové systémy jako asynchronní. Toto tvrzení je ale třeba s ohledem na současné číslicové systémy upřesnit. Dnešní systémy jsou totiž většinou složeny z několika (i desítek) relativně složitých subsystému, z nichž každý je sám o sobě synchronním systémem. Vzájemným propojení se ale formálně stávají asynchronním systémem, jelikož každý z nich pracuje s jiným hodinovým signálem. Takové systémy jako celek se pak označují jako lokálně synchronní, globálně asynchronní (locally synchronous, globally asynchronous). Jednotlivé synchronní subsystémy takového celku se navrhují jako synchronní systémy a jejich vzájemné propojení je realizováno speciálními technikami, které zaručí korektní přenos signálů mezi nimi (viz kapitola 5.4). Drtivá většina moderních číslicových systémů je navrhována jako synchronní sekvenční systémy především proto, že je dobře zvládnutý návrh těchto systémů s podporou EDA nástrojů. Takový návrh zároveň bývá nezávislý na cílové platformě, je spolehlivý, odolný vůči změnám ve výrobních procesech a pracovních podmínkách (teplota, napájecí napětí). V obvodech ASIC/ASSP se lze někdy setkat se sub-bloky, které jsou asynchronní (např. čítače) a jako celek se zapojují do synchronního systému. Motivací k použití takových asynchronních obvodů je vyšší efektivita implementace z hlediska menší potřebné plochy zabrané na čipu, menší spotřeby a vyšší pracovní frekvence. Specifické požadavky na časové parametry signálů asynchronních obvodů lze v obvodech ASIC/ASSP vhodným způsobem zajistit. V obvodech FPGA ale tento způsob návrhu není možný, neboť časové parametry vnitřních prvků a především propojovací struktury nelze libovolně nastavit. Jsou totiž závislé na výstupech automatických procesů mapování a PAR, takže výsledek každé kompilace může být odlišný. 4.1 Kombinační logické obvody Kombinační logické obvody jsou číslicové obvody bez vnitřní paměti, které se skládají pouze z navzájem propojených kombinačních hradel (NOT, AND, OR, XOR a jejich variant). Příklad čistě kombinačního číslicového obvodu je na Obr. 32 v podobě schématu. Takový obvod lze popsat například pravdivostní tabulkou, Karnaughovou mapou nebo Booleovskou rovnicí, zapsanou ve tvaru součtu součinů (SoP; Sum of Products), jak je uvedeno na Obr. 33, nebo součinu součtů (PoS; Product of Sums). Naproti tomu sekvenční systémy nelze popsat pouze pomocí těchto metod a k jejich popisu se využívají stavové diagramy, tabulky stavů nebo vyšší programovací jazyky.

54 54 FEKT Vysokého učení technického v Brně Obr. 32 Ukázka jednoduchého kombinačního logického obvodu. O = ( ( I0 * I1 *!I2 *!I3) + (!I0 *!I1 * I2 * I3) + ( I0 * I1 * I2 * I3) + (!I0 *!I1 *!I2 *!I3) ); Obr. 33 Ukázka několika typů popisu kombinačního logického obvodu: pravdivostní tabulka (vlevo), Karnaughova mapa (vpravo nahoře) a Booleovská rovnice. 4.2 Klopné obvody Základním stavebním prvkem synchronních sekvenčních systémů je klopný obvod. Těch existuje mnoho různých typů, z nichž se dnes nejčastěji používají klopné obvody typu D řízené staticky (úrovní; latch) a řízené dynamicky (hranou; flip-flop). Jak bylo uvedeno v předchozí kapitole, v dnešních obvodech FPGA jsou k dispozici klopné obvody typu D, které lze nakonfigurovat jako staticky nebo dynamicky řízené (Obr. 34). Výrobci obvodů FPGA ale důrazně nedoporučují používat staticky řízené klopné obvody, protože jejich použití může snadno vést na nesplnitelné požadavky časových parametrů systému. Některé firmy svými interními předpisy přímo zakazují použití staticky řízených klopných obvodů v navrhovaných číslicových systémech s obvody FPGA.

55 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 55 Obr. 34 Ukázka možnosti konfigurace klopného obvodu v FPGA jako obvodu řízeného hranou (FF) nebo řízeného úrovní (LATCH) a programu FPGA Editor (Xilinx ISE). Faktem je, že klopný obvod typu D řízený staticky lze v číslicovém systému prakticky vždy bez problémů nahradit dynamicky řízeným, který je obecně považován za kvalitativně lepší. V obvodech FPGA tedy nemá smysl latch používat, protože jeho použitím nedojde k úspoře strukturálních prvků. Z hlediska obvodů ASIC je ale použití staticky řízených klopných obvodů atraktivní, neboť pro jejich realizaci je zapotřebí přibližně poloviční množství tranzistorů. Klopný obvod tak zabere poloviční plochu na čipu. Problém plynoucí ze specifických požadavků na časové parametry číslicového obvodu v obvodech ASIC ztrácí význam, neboť návrhář má všechny časové parametry obvodu plně pod kontrolou (na rozdíl od obvodů FPGA). Staticky řízený klopný obvod má v nejjednodušším případě dva vstupy CLK a D a jeden výstup Q. Pokud je na vstupu CLK aktivní úroveň (typicky logická '1'), je signál ze vstupu D přímo propojen na výstup Q. Jakmile přejde signál CLK do neaktivní úrovně, zůstane na výstupu Q úroveň platná v době sestupné hrany hodinového signálu. Na Obr. 35 je naznačena schematická značka staticky řízeného klopného obvodu a časové průběhy ilustrující jeho funkci. D CLK Q CLK D Q Obr. 35 Schematická značka a časové průběhy signálů staticky řízeného klopného obvody typu D (Latch). Dynamicky (hranou) řízený klopný obvod typu D má v nejjednodušším případě opět dva vstupy CLK a D a jeden výstup Q. Signál je ze vstupu D na výstup Q přenesen pouze v okamžiku aktivní hrany hodinového signálu CLK (většinou v době náběžné hrany). Od té doby až do příchodu další aktivní hrany na vstup CLK je na výstupu Q ponechán stav beze změny. Na Obr. 36 je naznačena schematická značka dynamicky řízeného klopného obvodu a časové průběhy ilustrující jeho funkci.

56 56 FEKT Vysokého učení technického v Brně D CLK Q CLK D Q Obr. 36 Schematická značka a časové průběhy signálů dynamicky řízeného klopného obvody typu D (Flip-Flop). Odpovídající popis staticky i dynamicky řízeného klopného obvodu pomocí procesu v jazyce VHDL je uveden zde: -- Staticky rizeny klopny obvod typu D PROCESS (CLK) BEGIN IF (CLK = '1') THEN Q <= D; END IF; END PROCESS; -- Dynamicky rizeny klopny obvod typu D PROCESS (CLK) BEGIN IF rising_edge(clk) THEN Q <= D; END IF; END PROCESS; U dynamicky řízeného klopného obvodu zajišťuje funkce rising_edge detekci náběžné hrany. Ve starších zdrojových kódech se vyskytuje poněkud odlišný, ale zcela ekvivalentní výraz pro detekci vzestupné hrany signálu: IF (CLK'EVENT = '1' AND CLK = '1') THEN Funkce rising_edge je přímo takto definována ve sloze STD_LOGIC_1164 a jediným účelem této definice je zjednodušení zápisu této podmínky v kódu. Komplementární funkcí, detekující sestupnou hranu, je pak funkce faling_edge. Při vytváření syntetizovatelného popisu číslicových systémů by se neměly kombinovat ve zdrojových kódech obě tyto funkce. Jinými slovy: všechny klopné obvody v celém navrhovaném systému by měly reagovat (být sensitivní) pouze na jeden typ hrany, zpravidla na náběžnou. Výjimkou jsou speciální bloky, jako rozhraní typu DDR (Double Data Rate). Pozor, funkce pro detekci hrany se smí v kódech určených pro implementaci používat pouze za účelem detekce hran hodinových signálů, tedy s úmyslem implementovat klopný obvod řízený hranou!!! Touto funkcí nelze detekovat například stisk tlačítka, jak se mnoho začínajících návrhářů domnívá. Použití funkce takovým způsobem vede buď na zcela nesyntetizovatelný kód, nebo na kód, který je po implementaci nefunkční. Číslicové systémy v FPGA by se měly vyvarovat použití staticky řízených klopných obvodů. Ty mohou vzniknout i neúmyslně nevhodným způsobem kódování. Návrhové systémy určené pro obvody FPGA během implementace vždy sledují výskyt takto vzniklých latchů a upozorňují návrháře formou upozornění (warning). Návrhový systém ISE firmy Xilinx by například na základě výše uvedeného kódu vygeneroval následující chybové hlášení, které přímo varuje před použitím latchů: WARNING: Xst:737 - Found 1-bit latch for signal <Q>. Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.

57 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 57 Při použití staticky řízeného klopného obvodu v FPGA totiž systém nedokáže automaticky zajistit požadované časové parametry pro spolehlivou funkci latchů, a při jeho nevhodném použití navíc hrozí riziko vzniku kombinační zpětné vazby (kombinační smyčky; combinatorial loop). Vznik kombinační zpětné vazby při použití staticky řízeného klopného obvodu je ilustrován na Obr. 37. Tuto situaci řeší použití hranou řízeného klopného obvodu dle Obr. 38. A = Q B A B Y D CLK Q CLK Y = D Y=!(A B) Obr. 37 Vznik kombinační zpětné vazby při použití úrovní řízeného klopného obvodu typu D (D-type latch). A = Q B CLK Y = D A B Y D CLK Q Obr. 38 Odstranění kombinační zpětné vazby při použití hranou řízeného klopného obvodu typu D (D-type Flip-Flop). 4.3 Binární čítače Čítače tak, jak jsou používány v obvodech FPGA, jsou vždy synchronní sekvenční systémy. Lze je charakterizovat jako stavové automaty, u nichž převládá režim čítání, tedy přechodů mezi sousedními stavy. Existuje několik typů čítačů, které se běžně používají, z nichž každý nabízí některé specifické vlastnosti a podle nich je používán v určitých aplikacích. Nejčastěji používaným čítačem je čítač binární. Časový průběh výstupních signálů čtyřbitového binárního čítače je naznačen na Obr. 39.

58 58 FEKT Vysokého učení technického v Brně clk b[0] b[1] b[2] b[3] Obr Časový průběh výstupních signálů čtyřbitového binárního čítače čítajícího vpřed. Chování čítače lze efektivně zachytit pomocí tabulky stavů nebo stavových diagramů. Příklad stavového diagramu čtyřbitového binárního čítače je na Obr Obr. 40 Stavový diagram čtyřbitového nevratného binárního čítače. Čítač je v cílovém obvodu (FPGA/ASIC) realizován pomocí registru, který uchovává současný stav čítače, a obvodu zpětné vazby, který na svém výstupu má stav příští (Obr. 41). V případě binárního čítače je zpětná vazba kombinačním obvodem inkrementujícím současný stav o 1. Přechod ze stavu 15 do stavu 0 je přirozeně ošetřen přetečením hodnoty v registru. Obr. 41 Typický způsob realizace binárního čítače. Odpovídající kompletní zdrojový kód entity (bloku) realizující binární čítač je níže. Kód respektuje schéma systému podle Obr. 41, tedy obsahuje samostatnou část (proces) popisující registr a samostatnou část popisující zpětnovazební kombinační logický obvod.

59 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 59 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; ENTITY citac_4b IS PORT ( clk : IN STD_LOGIC; data : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END citac_4b; ARCHITECTURE rtl OF citac_4b IS SIGNAL cit : UNSIGNED(3 DOWNTO 0):= "0000"; SIGNAL cit_next : UNSIGNED(3 DOWNTO 0); BEGIN PROCESS (clk) BEGIN IF rising_edge(clk) THEN cit <= cit_next; END IF; END PROCESS; PROCESS (cit) BEGIN cit_next <= cit + 1; END PROCESS; data <= STD_LOGIC_VECTOR(cit); END rtl; Na uvedeném kódu lze demonstrovat několik klíčových vlastností jazyka VHDL a pravidel, která je vhodné při psaní kódu dodržovat. Kód začíná deklarací použitých knihoven a sloh. Ve všech zdrojových kódech určených pro implementaci najdeme deklaraci knihovny IEEE a v ní obsažené slohy STD_LOGIC_1164 (důvody jsou uvedeny v kapitole 2.1). Dále je použita sloha NUMERIC_STD, která v kódu umožňuje použít datový typ UNSIGNED a provádět se signály tohoto typu operace sčítání. Následuje popis entity bloku, který je zde nazván citac_4b. Název entity by se měl shodovat s názvem zdrojového souboru, ve kterém je obsažen (zde tedy citac_4b.vhd). Entita (blok) čítače má jeden jednobitový vstupní signál clk a jeden výstupní čtyřbitový signál data. Tím je jednoznačně určeno rozhraní entity, kterou tak lze například použít instanciací v dalších zdrojových kódech (strukturální popis). V praxi je dodržováno nepsané pravidlo, že všechny porty by měly být typu STD_LOGIC nebo STD_LOGIC_VECTOR. Důvodem je jednoznačná vzájemná kompatibilita komponent bez ohledu na to, jaké byly pro popis bloku použity slohy (standardní NUMERIC_STD nebo STD_LOGIC_ARITH) a kompatibilita s jednoduššími schématickými editory. Každá entita musí mít přiřazenu alespoň jednu architekturu (popis funkce). V tomto případě se architektura jmenuje rtl, vztah k entitě je vyjádřen názvem entity za klíčovým slovem OF. První částí architektury je tzv. deklarativní část, kde je možné deklarovat použité komponenty (již zkompilované entity), funkce, signály, konstanty a podobně. V našem případě obsahuje deklaraci dvojice čtyřbitových signálů cit a cit_next typu UNSIGNED. Signálu cit je přímo při jeho deklaraci přiřazena výchozí hodnota, která je využita při simulaci. Přiřazení výchozí hodnoty registrům je z hlediska simulace klíčové především u zpětnovazebních obvodů, kterými čítače a obecně stavové automaty jsou. Pokud by nebyla

60 60 FEKT Vysokého učení technického v Brně provedena tato inicializace a kód by byl simulován bez dalších změn, byl by obsah signálu cit nedefinovaný (vektor hodnot 'U'). Inkrementace takové hodnoty pak nedává smysl a výsledkem je opět nedefinovaný signál. Inicializace signálu cit do stavu "0000" po startu simulace způsobí, že zpětnovazební obvod provede inkrementaci tohoto čísla, jejímž výsledkem bude hodnota "0001". V simulaci lze tento problém obejít zavedením nulovacího signálu, který je po spuštění simulace aktivován a provede nastavení všech registrů do výchozí hodnoty. To ale znamená vybavit všechny registry takovým vstupem a může to vést k nezanedbatelnému nárůstu složitosti systému. V případě vývojového systému ISE firmy Xilinx je definice hodnoty v deklaraci registrových signálů zohledněn také implementačními nástroji. Tímto způsobem je možné definován výchozí stav těchto signálů (registrů) po zapnutí systému. Všimněte si, že u signálu cit_next není tato výchozí hodnota definována. Je to proto, že jde o signál, který je výstupem kombinační části (tzv. kombinační signál). Jeho stav (hodnota) po startu simulace, respektive zapnutí systému, je jednoznačně dán stavem vnitřních registrů případně vstupních signálů. Výchozí přiřazení tedy z hlediska implementace nemá význam a z hlediska simulace pouze ve výjimečných případech, kdy transportní zpoždění způsobují postupnou změnu vnitřních signálů (tedy ne při typické čistě funkční simulaci). Přiřazení výchozí hodnoty ale není chybou a pro nezkušeného návrháře je jednodušší přiřadit výchozí hodnotu všem vnitřním signálům. Stejným způsobem lze výchozí hodnotu přiřadit i výstupním portům entity. V případě, že jde o registrové výstupy, platí pro ně stejná pravidla a vlastnosti, jako pro vnitřní signály. Toto použití je ale méně časté a v případě potřeby by mělo být realizováno spíše prostřednictvím dalšího pomocného vnitřního signálu, jemuž lze hodnotu přiřadit při jeho deklaraci. Za klíčovým slovem BEGIN následuje tzv. tělo architektury, které obsahuje samotný popis funkce číslicového obvodu. Zde je popis tvořen třemi souběžnými příkazy: dvěma procesy a jedním prostým přiřazením. První proces reprezentuje stavový registr, tedy čtveřici klopných obvodů typu D, jejichž vstupy jsou připojeny na signál cit_next a výstupy na signál cit. Vzhledem k použití podmínky rising_edge(clk) jde o tzv. sekvenční proces, v němž všechny signály na levé straně příkazů odloženého přiřazení (<=) budou implementovány jako registry. Druhý proces nemá tuto podmínku a jde tedy o tzv. kombinační proces. Realizuje kombinační zpětnou vazbu, která na základě současného stavu čítače (vstup procesu v podobě signálu cit) na svém výstupu generuje signál odpovídající stavu příštímu (cit_next). Kombinační obvod realizuje operaci sčítání. Ta ale není definována pro datový typ STD_LOGIC_VECTOR, který je použit jako výstupní port entity (viz výše zmíněná konvence). Proto je nutné sčítání provádět se signály typu UNSIGNED, pro něž jsou aritmetické operace definovány přímo v použité sloze NUMERIC_STD. Poslední příkaz prostého přiřazení slouží pouze k propojení vnitřního signálu čítače s výstupním portem entity. Obsahuje konverzní funkci, která vnitřně používaný signál typu UNSIGNED převede na signál typu STD_LOGIC_VECTOR. Tato konverze je nezbytná kvůli striktní typovosti jazyka VHDL. Byť jsou jednotlivé prvky obou vektorů (data i cit) stejného typu a mají stejný rozměr, VHDL považuje oba vektory za neslučitelné. Tento poněkud nepříjemný fakt by měl být vyřešen v nových revizích jazyka implicitním přetypováním (u těchto často používaných typů).

61 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 61 Dvojice procesů použitá pro popis čítače respektuje jeho strukturu, která odpovídá jednoduchému stavovému automatu. Stejný výsledek implementace obdržíme i v případě, že sloučíme oba procesy do jediného. Takový způsob zápisu je obvyklý především pro jednodušší synchronní sekvenční systémy, jako jsou právě čítače. PROCESS (clk) BEGIN IF rising_edge(clk) THEN cit <= cit + 1; END IF; END PROCESS; Čítač lze dále doplnit o několik běžně používaných funkcí. Z hlediska popisu jde o zavedení přídavných řídicích signálů do kombinační části a patřičné doplnění podmínek v této části. Funkce, kterou je třeba bezpodmínečně implementovat na úrovni klopného obvodu, je funkce asynchronního nulování či nastavení. Ostatní funkcionality lze definovat v kombinačním procesu tak, jak požadují priority jednotlivých funkcí.... ENTITY citac_4b IS PORT ( clk : IN STD_LOGIC; arst_n : IN STD_LOGIC; srst : IN STD_LOGIC; load : IN STD_LOGIC; en : IN STD_LOGIC; up : IN STD_LOGIC; data_in : IN STD_LOGIC_VECTOR(3 DOWNTO 0); data : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END citac_4b;... PROCESS (clk, arst_n) BEGIN IF arst_n = '0' THEN -- asynchronni reset, aktivni v 0 cit <= "0000"; ELSIF rising_edge(clk) THEN IF srst = '1' THEN -- synchronni reset, aktivni v 1 cit <= "0000"; ELSE IF load = '1' THEN -- synchronni nacteni, aktivni v 1 cit <= UNSIGNED(data_in); ELSE IF en = '1' THEN -- povoleni behu citace, aktivni v 1 IF up = '1' THEN -- citani vpred cit <= cit + 1; ELSE -- citani vzad cit <= cit - 1; END IF; END IF; END IF; END IF; END IF; END PROCESS;...

62 62 FEKT Vysokého učení technického v Brně Výše je upravený zdrojový kód s jedním společným procesem pro popis kombinační i sekvenční části, který rozšiřuje základní čítač o nejběžnější funkce. Obecně lze každé z těchto funkcí přiřadit libovolnou prioritu, ale prakticky se setkáváme s tímto pořadím priorit, které je respektováno i prezentovaným zdrojovým kódem: 1) Asynchronní nulování (asynchronous reset); vstup arst_n, aktivní v log. '0' 2) Synchronní nulování (synchronous reset); vstup srst, aktivní v log, '1' 3) Synchronní načtení (synchronous load); vstup load, aktivní v log, '1' 4) Povolení běhu čítače (clock enable); vstup en, aktivní v log. '1' 5) Směr čítání vpřed/vzad (up/down); vstup up, aktivní v log. '1' Takový zápis podmínek je sice korektním ale poměrně rozsáhlý a ne zcela přehledný. VHDL umožňuje provést zápis i zjednodušeným způsobem, přičemž priorita jednotlivých řídicích signálů je dodržena:... PROCESS (clk, arst_n) BEGIN IF arst_n = '0' THEN -- asynchronni reset, aktivni v 0 cit <= "0000"; ELSIF rising_edge(clk) THEN IF srst = '1' THEN -- synchronni reset, aktivni v 1 cit <= "0000"; ELSIF load = '1' THEN -- synchronni nacteni, aktivni v 1 cit <= UNSIGNED(data_in); ELSIF en = '1' THEN -- povoleni behu citace, aktivni v 1 IF up = '1' THEN -- citani vpred cit <= cit + 1; ELSE -- citani vzad cit <= cit - 1; END IF; END IF; END IF; END PROCESS;... Poslední uvedenou variantou je kód, který využívá speciální vlastnost procesů ve VHDL. Jednotlivé podmíněné příkazy jsou nezávislé a v případě kombinace více aktivních řídicích signálů tak může platit více přiřazení pro signál cit současně. Konflikt je řešen na úrovni jazyka VHDL tak, že jako platné přiřazení se vybere to, které je nalezeno v procesu jako poslední platné. Pokud tedy bude současně aktivní signál en, up, load i srst, budou pro signál cit nalezeny při vyhodnocení procesu tři příkazy. Jako platný bude ale vybrán pouze poslední z nich, v tomto případě cit <= "0000";.

63 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO PROCESS (clk, arst_n) BEGIN IF arst_n = '0' THEN -- asynchronni reset, aktivni v 0 cit <= "0000"; ELSIF rising_edge(clk) THEN IF en = '1' THEN -- povoleni behu citace, aktivni v 1 IF up = '1' THEN -- citani vpred cit <= cit + 1; ELSE -- citani vzad cit <= cit - 1; END IF; END IF; ELSIF load = '1' THEN -- synchronni nacteni, aktivni v 1 cit <= UNSIGNED(data_in); END IF; IF srst = '1' THEN -- synchronni reset, aktivni v 1 cit <= "0000"; END IF; END IF; END PROCESS;... Této vlastnosti procesů (odložené přiřazení) se ve VHDL hojně využívá pro zjednodušení zápisu požadované funkce číslicového obvodu. Lze ji ale doporučit spíše zkušenějším návrhářům, neboť vyžaduje větší pozornost při tvorbě a editaci kódu (podmínky nejsou explicitně uvedeny). Z hlediska implementace je podstatný fakt, že výsledek syntézy všech tří uvedených zdrojových kódů bude identický. Nároky na strukturní prvky FPGA, ani mezní pracovní frekvence přímo nesouvisí s počtem řádků kódu, který popisuje navrhovaný systém (což je pro mnohé začínající návrháře poněkud zarážející fakt). Proto je vždy vhodnější psát kód srozumitelně a přehledně, byť to často znamená rozsáhlejší zdrojový kód. Přehlednější kód totiž vede ke spolehlivějšímu návrhu a zjednodušuje následný proces ladění (hledání a odstraňování funkčních chyb pomocí simulace). 4.4 Další typy čítačů Kromě binárních čítačů se v číslicových obvodech používá řada dalších typů čítačů. Jedním z nich je binární čítač se zkráceným cyklem, který je základním prvkem čítačů pracujících v BCD kódu. Zkrácení cyklu čítače je dosaženo přidáním podmínky, která při překročení stanovené hodnoty nastaví registr do výchozího stavu. Příklad kódu popisujícího dekadický čítač (cyklus čítání 0 až 9) je níže: PROCESS (clk) BEGIN IF rising_edge(clk) THEN IF cit = X"9" THEN cit <= X"0"; ELSE cit <= cit + 1; END IF; END IF; END PROCESS; -- zkraceni cyklu

64 64 FEKT Vysokého učení technického v Brně Pro reprezentaci čísel v rozsahu od 0 do 9 je třeba použít alespoň čtyřbitový signál. Ten ale může nabývat hodnot v rozsahu od 0 do 15. Pokud aplikujeme na čítač terminologii stavových automatů, můžeme stavy 0 až 9 označit jako stavy pracovní a stavy 10 až 15 jako nepracovní. Chování čítače v pracovních i nepracovních stavech je v tomto případě jednoznačně dáno zdrojovým kódem. Čítač by ze stavu X"A" pokračoval v inkrementaci až do stavu X"F", ze kterého by přešel do stavu X"0", tedy do pracovního cyklu. Chování čítače lze zachytit stavovým diagramem na Obr. 42. Pracovní stavy Nepracovní stavy Obr. 42 Stavový diagram dekadického čítače. Chování čítače v nepracovních stavech lze snadno ovlivnit změnou podmínky přetečení. Pokud místo detekce čísla 9 (cit = X"9") bude podmínka detekovat čísla 9 a větší (cit > X"8"), přejde čítač ze kteréhokoliv nepracovního stavu hned do stavu 0, tedy do pracovního cyklu (Obr. 43). Pracovní stavy Nepracovní stavy Obr. 43 Stavový diagram dekadického čítače s ošetřením návratu ze všech nepracovních stavů ve zdrojovém kódu. Tento urychlený návrat do pracovního cyklu bývá žádoucí především v kritických aplikacích, kde by stav čítače mimo jeho standardní rozsah mohl způsobit problémy v navazujících systémech. Podobné ošetření nepracovních stavů samozřejmě v některých případech může vést k méně efektivní implementaci. V případě binárních čítačů jde ale o velmi malý nárůst složitosti, neboť počet nepracovních stavů je obvykle mnohem menší, než

65 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 65 počet stavů pracovních. Možné příčiny přechodu čítače do nepracovního stavu jsou uvedeny v kapitole 4.5, která se zabývá se stavovými automaty. Zcela jiným typem čítače je Grayův čítač. Jde o speciální čítač, jehož výstupní signály splňují podmínku Grayova kódování, tedy že sousední stavy se na výstupu liší vždy právě jedním stavovým bitem. Tuto podmínku lze také definovat tak, že Hammingova vzdálenost dvojice sousedních slov je vždy rovna 1. Nejběžněji je takto chápan tzv. reflektovaný binární Grayův kód (binary-reflected Gray code; BRGC), který respektuje jeden možný způsob implementace čítače pracujícího v Grayově kódu. Tento kód bude chápan pod pojmem Grayův kód v dalším textu, pokud nebude výslovně uvedeno jinak. Existuje ale více druhů kódu, které splňují podmínku Grayova kódu. Příkladem je tzv. vyrovnaný Grayův kód (balanced Gray code), který oproti kódu BRGC zajišťuje, že četnost změn všech bitů čítače je vyrovnaná. Pro ilustraci je v Tab. 2 provedeno srovnání těchto dvou kódů. Dále existuje například Single-track Gray code, Beckett-Gray code a další. Ne všechny Grayovy kódy ale umožňují při použití n-bitového registru realizovat čítač procházející 2 n stavy, jako je tomu u kódu BRGC. Tab. 2 Porovnání Grayových kódů s vyznačením změn v jednotlivých bitech: reflektovaného binárního (vlevo) a kódu s vyrovnaným počtem změn (balanced; vpravo). g(3) g(2) g(1) g(0) HEX g(3) g(2) g(1) g(0) HEX C D F E A C D F E A B B Grayův kód má řadu aplikací. Jednou z nich je snímání polohy (rotační senzory absolutní polohy), kde je nutné, aby optické snímače jednoznačně určily přechod mezi každými dvěma sousedními hodnotami. Při použití binárního kódu hrozí, že na rozhraní dvojice poloh dojde vlivem mechanických nepřesností k detekci několika jiných stavů. Situaci ilustruje Obr. 44. Na obrázku je zobrazen detail signálů výstupu kódu, který může reprezentovat výstup senzoru polohy. V případě použití binárního kódu dochází k přechodu ze stavu 15 do stavu 0 ne přímo, ale přes několik dalších stavů. Pokud bychom výstup senzoru snímali právě v době

66 66 FEKT Vysokého učení technického v Brně přechodu, byl by zjištěný údaj o poloze chybný. Při použití Grayova kódu tento efekt nehrozí, vždy je přečtena buď ještě hodnota původní, nebo hodnota nová. Zcela identicky se čítač používá v číslicových obvodech. Typickou aplikací jsou DA převodníky a především paměti typu FIFO zajišťující přenos signálů mezi různými hodinovými doménami (viz kapitola 5.4). V tomto případě nejde o snímání polohy, ale o vzorkování výstupu čítače, který pracuje v jedné hodinové doméně jiným obvodem, který pracuje v jiné hodinové doméně. Nezávislost hodinových domén nutně vede k riziku, že výstup čítače bude s nenulovou pravděpodobností přečten v době, kdy dochází k jeho změně. V případě binárního kódování opět hrozí riziko přečtení zcela odlišné hodnoty, než odpovídá aktuálnímu stavu b(0) b(1) b(2) b(3) g(0) g(1) g(2) g(3) b(0) b(1) b(2) b(3) g(0) g(1) g(2) g(3) Obr. 44 Přechod mezi dvěma sousedními stavy u binárního a Grayova kódu. Pokud budeme interpretovat binární hodnotu Grayova kódu jako číslo, nelze jednoznačně určit posloupnost stavů (viz sloupec HEX v Tab. 2). Reflektovaný Grayův kód lze ale snadno převést na kód binární (a naopak) pomocí jednoduchého kombinačního obvodu (Obr. 45). Oba převody vyžadují stejný počet logických členů XOR, ale převodník Grayova kódu na binární je zapojen tak, že hradla XOR tvoří sérií za sebou zapojených hradel. Toto sériové zapojení tedy potenciálně může omezovat mezní pracovní kmitočet systému.

67 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 67 g(0) XOR b(0) b(0) XOR g(0) g(1) XOR b(1) b(1) XOR g(1) g(2) XOR b(2) b(2) XOR g(2) g(3) b(3) b(3) g(3) Obr. 45 Převodník Grayova kódu na binární (vlevo) a binárního kódu na Grayův (vpravo). Na principu převodu binárního kódu na Grayův je založena realizace Grayova čítače, která je doporučena pro implementaci v návrhovém prostředí Xilinx ISE: PROCESS (clk) BEGIN IF rising_edge(clk) THEN bin_cnt <= next_bin_cnt; gray_cnt <= next_gray_cnt; END IF; END PROCESS; next_bin_cnt <= bin_cnt + 1; next_gray_cnt <= (('0' & next_bin_cnt(next_bin_cnt'high DOWNTO 1)) XOR next_bin_cnt); next_bin_cnt +1 REG bin_cnt gray_cnt B»G next_gray_cnt REG Obr. 46 Příklad realizace čítače pracujícího v reflektovaném binárním Grayově kódu. Odpovídající blokové schéma vnitřního uspořádání takového čítače je na Obr. 46. Jeho základem je binární čítač s odpovídajícím počtem bitů. Výstup binárního čítače je převeden pomocí kombinačního obvodu (B»G) na Grayův kód a přiveden na vstup registru. Tento registr je vhodné použít, pokud chceme dodržet konvenci, že výstup každého uceleného bloku (zde Grayova čítače) má být registrový. Tento registr ale zavádí do cesty signálu latenci, která může být v některých aplikacích nepřijatelná. Na tuto realizaci čítače lze pohlížet jako na Moorův stavový automat s registrovým výstupem, jak je popsán v kapitole 4.5.

68 68 FEKT Vysokého učení technického v Brně Dalším používaným čítačem je Johnsonův čítač. Formálně čítač generuje Grayův kód (jednotlivá slova na výstupu se liší vždy pouze v jednom bitu), ale nebývá do této kategorie běžně zařazován. Jeho realizace je velmi jednoduchá (Obr. 47), zabírá malý počet strukturních prvků na čipu a umožňuje čítači pracovat na vysokých pracovních kmitočtech. Základem čítače je n-bitový posuvný registr, jehož výstup je přes invertor přiveden zpět na jeho vstup. Nutnou podmínkou funkce je inicializace čítače při startu systému do některého z pracovních stavů. REG N-bit Obr. 47 Realizace N-bitového Johnsonova čítače. Johnsonův čítač založený na n-bitovém posuvném registru prochází celkem pouze 2 n stavy, což jej ve srovnání s binárním čítačem činí značně neefektivním (2 n stavů). S tím souvisí velký počet nepracovních stavů čítače, jejichž ošetření v tomto případě znamená implementaci poměrně složitého kombinačního obvodu, který (pokud je implementován) degraduje výhodu jednoduchosti čítače. Dalším typem čítače založeným na posuvném registru je tzv. LFSR čítač (Linear Feedback Shift Register). Obvod LFSR není vždy chápán jako čítač, spíše jde o jednu z jeho aplikací. Jeho implementace je podobně jednoduchá, jako v případě Johnsonova čítače (Obr. 48). a umožňuje velmi efektivní realizaci z hlediska počtu zabraných strukturních prvků i mezního pracovního kmitočtu. REG N-bit Obr. 48 Realizace LFSR ve Fibonachiho (vlevo) a Gauloisově verzi. Hlavní využití LFSR je pro generování pseudonáhodných sekvencí, konkrétně tzv. M-sekvencí (Maximum length sequences). Ty se používají například jako testovací sekvence při měření chybovosti, pro rozprostírání spektra v systémech kódového multiplexu, v kryptografických aplikacích a také tvoří základ pro generátory složitějších sekvencí (Goldovy sekvence). Výstup pseudonáhodné sekvence je sériový, jako výstup může být použit kterýkoliv registr (libovolná odbočka). Jak je naznačeno na Obr. 48, existují dvě varianty implementace LFSR, Fibonachiho a Gauloisova, které jsou rovnocenné z hlediska generované pseudonáhodné sekvence. Z hlediska popisu je poněkud jednodušší Fibonachiho verze, proto budeme dále v textu pracovat s touto variantou. Vlastnosti generované M-sekvence, tedy její délka a statistické vlastnosti (především autokorelační a kroskorelační), jsou určeny konfigurací zpětné vazby. Tím se rozumí připojení vstupů hradla XOR/XNOR ve zpětné vazbě na konkrétní odbočky (Taps) posuvného registru. Základním požadavkem pro generování M-sekvencí je, aby byla generovaná sekvence na výstupu LFSR maximální možné délky (co nejdelší perioda opakování sekvence). Ta může být u LFSR nanejvýš 2 n -1 a to je i počet pracovních stavů LFSR jako čítače. Ne každá kombinace odboček zpětné vazby ale vede na posloupnost

69 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 69 maximální délky. A i v případě, že se nám podaří nalézt kombinaci, která splňuje požadavek maximální délky, mohou být statistické vlastnosti generované sekvence nevyhovující. Proto existuje tabulka doporučených konfigurací zpětné vazby pro různé délky registrů tak, aby generovaná pseudonáhodná sekvence splňovala i požadované statistické vlastnosti. Tab. 3 Doporučená konfigurace zpětné vazby LFSR (TAPS) pro vybrané délky posuvného registru (BITS). BITS TAPS BITS TAPS BITS TAPS BITS TAPS 3 3, ,15,13, , ,41,20,19 4 4, , ,6,4, ,42,38,37 5 5, , , ,43,18,17 6 6, ,6,2, ,22,2, ,44,42,41 7 7, , , ,45,26,25 8 8,6,5, , ,27,2, ,42 9 9, , , ,47,21, , , , , , ,23,22, ,5,4,3,2, ,49,24, ,6,4, , ,6,5, ,50,36, ,4,3, ,6,2, , , ,5,3, ,5,2, ,38,21, ,52,38, , , , ,53,18,17 Některé délky LFSR vyžadují, aby bylo ve zpětné vazbě zařazeno hradlo XOR se čtyřmi vstupy. Vzhledem k tomu, že dnešní obvody FPGA mají LUT tabulky se 4 a více vstupy, lze i takové hradlo implementovat jedinou tabulkou LUT. Proto tento fakt nemá zásadní vliv na hardwarové nároky ani na mezní pracovní kmitočet LFSR. Jak bylo uvedeno, počet pracovních stavů LFSR čítače se správně zvolenou konfigurací zpětné vazby je 2 n -1, má tedy právě jeden nepracovní stav, kterému se v tomto případě někdy říká zakázaný. Pokud se čítač do tohoto stavu dostane, zůstává v něm trvale. Z toho vyplývá požadavek na korektní inicializaci čítače při startu systému, podobně, jako v případě Johnsonova čítače. U LFSR stačí zajistit, aby při startu systému nebyly v zakázaném stavu, tedy je-li ve zpětné vazbě hradlo XOR, aby v registru nebyly pouze hodnoty '0', respektive samé '1', pokud je ve zpětné vazbě hradlo XNOR. LFSR čítač lze ve VHDL popsat jednoduchým kódem, který bývá často parametrizován s ohledem na možnou změnu konfigurace zpětné vazby: CONSTANT Tap_1 : INTEGER := 23; CONSTANT Tap_2 : INTEGER := 18; SIGNAL ShReg : STD_LOGIC_VECTOR(Tap_1 DOWNTO 1):= (OTHERS => '1'); SIGNAL Feedback : STD_LOGIC;... PROCESS (clk) BEGIN IF rising_edge(clk) THEN ShReg <= ShReg(ShReg'HIGH-1 DOWNTO 1) & Feedback; END IF; END PROCESS; Feedback <= ShReg(Tap_1) XOR ShReg(Tap_2);

70 70 FEKT Vysokého učení technického v Brně Délku čítače i konfiguraci zpětné vazby je možné jednoduše ovlivnit dvojicí konstant TAP_1 a TAP_2. Inicializace posuvného registru je provedena v deklaraci signálu s využitím klíčového slova OTHERS, které zajistí nastavení všech prvků pole (vektoru) do požadované hodnoty, v tomto případě '1'. Pokud by ve zpětné vazbě byl logický člen XNOR, musela by být inicializace provedena například do stavu samých '0'. 4.5 Stavové automaty Jako stavový automat, správněji konečný stavový automat (Finite State Machine; FSM) je v oblasti číslicových systémů chápán synchronní sekvenční číslicový systém, který se může nacházet v jednom ze svých definovaných stavů (konečný počet stavů). Mezi stavy přechází na základně vstupů (vstupních signálů) a na základě stavů (případně i vstupů) pak generuje výstupy (výstupní signály). Stavové automaty (SA) bývají často srovnávány s mikrokontroléry a čítači. Čítač lze považovat za specifický stavový automat, u nějž je dominantní režim čítání, tedy přechod mezi sousedními stavy. Naopak stavové automaty lze považovat za zobecněné čítače. Na mikroprocesory můžeme nahlížet jako na velmi složité stavové automaty, u nichž je počet stavů sice konečný, ale z praktického hlediska tak velký, že nemá význam pracovat se stavovými diagramy a pro jejich popis se používají jiné metody. Stavové automaty se v číslicové technice používají jako obvody pro rychlé řízení a rozhodování. Typickou aplikací jsou dekodéry, arbitry sběrnic, řadiče standardních rozhraní (UART, SPI, I 2 C ), obvody realizující nižší vrstvy komunikačních protokolů a podobně (Ethernet MAC, PCS/PMA) atd. Obecně jde o aplikace, které vyžadují relativně komplexní, rychlé a časově přesné řízení. Mikroprocesory jsou navrženy tak, aby dokázaly vykonávat co možná největší množství nejrůznějších funkcí. Jejich univerzálnost ale znamená, že jsou relativně pomalé a tak přesto, že je samozřejmě lze pro výkon výše uvedených funkcí naprogramovat, není jejich výpočetní výkon dostatečný pro zajištění potřebné propustnosti, časové přesnosti nebo by jejich použití bylo jednoduše neefektivní. Typickým příkladem je realizace rozhraní UART (Universal Asynchronous Receiver Transmitter) v mikroprocesorech. Většina moderních mikroprocesorů má jednu nebo více periferií tohoto typu. Každá z těchto periferií je stavovým automatem implementovaným pomocí klopných obvodů a kombinačních logických buněk na čipu. Pokud procesor takovou periferii nemá, nebo jich nemá dostatečný počet, je možné takové rozhraní realizovat programově (softwarově) s využitím obecných vstupně výstupních pinů (GPIO; General Purpose Input / Output). V tom případě je část programu (část instrukcí) procesoru určena pro emulaci tohoto rozhraní. Fakticky jde o softwarovou implementaci stavového automatu. Softwarová realizace stavového automatu je sice velmi efektivní z hlediska hardwarových nároků, ale vyžaduje část výpočetních prostředků (času) procesoru. U automatů, u kterých je kritické časování jednotlivých kroků, bývá obtížné (pokud vůbec možné) realizovat automat softwarově. Typickým příkladem jsou vysokorychlostní rozhraní, jako vyšší verze rozhraní USB, Ethernet, PCI-Express a podobně. Drtivá většina procesorů ani není schopna pracovat na rychlostech, na kterých probíhá přenos dat, proto je nutné pro obsluhu těchto rozhraní na nižší úrovni použít právě stavové automaty. V praxi jsou návrháři číslicových systémů (systémoví architekti) postaveni před problém, jakým způsobem realizovat jednotlivé funkce zařízení. Funkce lze rozlišit podle kritičnosti a potřebné rychlosti reakce. Obecně platí, že funkce kritické (např. bezpečnostní) a

71 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 71 především funkce vyžadující rychlou a přesnou odezvu musí být realizovány pomocí stavových automatů. Z hlediska rychlosti hovoříme o tzv. nanosekundové logice (nanosecond logic), což zahrnuje rozsah doby reakce (přesnosti řízení) od zlomků nanosekund po stovky nanosekund. Funkce, které jsou naopak méně náročné na obsluhy (např. obsluha uživatelských rozhraní v podobě klávesnice, LED zobrazovačů a podobně), vyžadují dobu reakce v řádu jednotek až stovek milisekund, bez požadavku na přesnost reakce (v časové oblasti). Blokům, které realizují takové funkce, se říká milisekundová logika (millisecond logic). Aplikace, které vyžadují přesnost a rychlost odezvy mezi těmito extrémy, tedy v rozsahu přibližně od jedné mikrosekundy po stovky mikrosekund, jsou realizovány bloky, které se označují jako mikrosekundová logika (microsecond logic). Z hlediska realizace bývá ve většině jednoznačné rozhodnutí realizace dvojice krajních případů. Nanosekundová logika je téměř vždy realizována pomocí stavových automatů, protože procesory jsou příliš pomalé. Použití výkonného procesoru pro realizaci rychlé, ale v principu jednoduché funkce, by bylo značně neefektivní. Naopak milisekundová logika je pak ve většině případů realizována pomocí procesorů, neboť ten má pro takové operace dostatečný výpočetní výkon, navíc jej lze využít pro více pomalých úloh a jeho konfigurace (programování) je snazší, než tvorba stavového automatu. Pro realizaci mikrosekundové logiky je nutné dobře zvážit obě možnosti realizace. Výběr realizace bývá klíčový pro celý systém a může zásadně rozhodnout o výsledné kvalitě a spolehlivosti produktu (tedy o jeho konečném komerčním úspěchu či neúspěchu). Dále se budeme zabývat pouze stavovými automaty (FSM). Formálně lze stavové automaty rozdělit na Moorovy a Mealyho. Moorův stavový automat (Obr. 49) je takový automat, u něhož stav výstupů závisí pouze na jeho aktuálním stavu. U Mealyho automatu (Obr. 50) stav výstupů závisí nejen na současném stavu, ale také na stavu vstupů. Automaty mohou mít buď kombinační výstupy, nebo registrové výstupy. Na obrázcích jsou zachyceny pouze varianty s registrovým výstupem. Odpovídající verze s kombinačním výstupem jsou identické, pouze postrádají výstupní registr. soucasny_stav pristi_stav vystupy vstupy KČ1 clk rst STATE REG KČ2 clk OUT REG Obr. 49 Moorův stavový automat s registrovým výstupem.

72 72 FEKT Vysokého učení technického v Brně soucasny_stav pristi_stav vystupy vstupy KČ1 clk rst STATE REG KČ2 clk OUT REG Obr. 50 Mealyho stavový automat s registrovým výstupem. Oba automaty se skládají ze tří základních částí: stavového registru (STATE REG; state register), z kombinační části pro stanovení příštího stavu (KČ1, někdy také logika příštího stavu; next state logic) a z výstupní kombinační části (KČ2 zvaná výstupní dekodér; output decoder), která na základě současného stavu (případně i stavu vstupů) určuje stav výstupů. Pokud jde o automat s registrovým výstupem, pak je výstup kombinační části přiveden do dalšího registru (OUT REG; output register), který je řízen stejným hodinovým signálem, jako stavový registr. Stavový automat s registrem na výstupu se označuje jako Pipelined Moor/Mealy FSM. Pokud aplikujeme tuto terminologii na binární čítač na Obr. 41, pak blok realizující inkrementaci stavu (+1) tvoří KČ1. Naproti tomu KČ2 je v případě binárního čítače zcela redukována na pouhé propojení. Takový automat se označuje jako SA se stavovým výstupem (speciální případ SA). Jelikož stav výstupních signálů tohoto SA (čítače) závisí pouze na jeho současném stavu, jde o Moorův stavový automat. Naproti tomu čítač pracující v reflektovaném Grayově kódu (Obr. 46) je typickým příkladem Moorova stavového automatu s registrovým výstupem. KČ2 je v tomto případě tvořena převodníkem binárního kódu na Grayův kód a ten je následován výstupním registrem (OUT REG). Stavový registr musí být v FPGA vždy realizován klopným obvodem typu D řízeným hranou (Flip-Flop). Pokud by pro realizaci byl použit klopný obvod řízený úrovní (Latch), došlo by po dobu trvání aktivní úrovně hodinového signálu k uzavření kombinační zpětné vazby (combinatorial feedback loop) a nepredikovatelnému chování automatu. Tato situace je demonstrována na příkladu binárního čítače na Obr. 51, včetně příslušného zdrojového kódu (VHDL). PROCESS (clk) BEGIN IF clk = '1' THEN citac <= citac + 1; END IF; END PROCESS; citac + 1 citac citac clk +1 clk Latch citac Obr. 51 Nevhodné použití staticky řízeného klopného obvodu (Latch) jako stavového registru stavového automatu (binárního čítače).

73 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 73 Návrhové systémy takový obvod dovolí implementovat (klopné obvody v FPGA lze nakonfigurovat do funkce LATCH). Během syntézy jsou ale veškeré takto vzniklé klopné obvody typu Latch v navrženém systému detekovány a návrhář je o každém z nich informován formou upozornění (warning; viz kapitola 4.2). Potom je na návrháři, aby tyto chyby odstranil, případně jiným způsoben zajistil dodržení časových parametrů (což je u stavových automatů realizovaných v FPGA prakticky nemožné). Korektní ošetření je v tomto případě jednoduché a spočívá v nahrazení staticky řízeného klopného obvodu dynamicky řízeným (Obr. 52). PROCESS (clk) BEGIN IF rising_edge(clk) THEN citac <= citac + 1; END IF; END PROCESS; citac + 1 citac citac clk clk Flip- Flop citac Obr. 52 Korektní použití dynamicky řízeného klopného obvodu (Flip-Flop) jako stavového registru stavového automatu (binárního čítače). Popis stavového automatu (čítače) dle Obr. 52 je možné v jazyce VHDL provést několika způsoby, přičemž výsledné číslicové systémy budou z hlediska chování identické. Jejich vnitřní struktura (implementace) ale může být různá, neboť syntetizéry zohledňují způsob psaní kód při vytváření a následné optimalizaci těchto systémů. Tuto vlastnost syntetizérů lze demonstrovat na implementaci jednoduchého obvodu, jakým je binární čítač (Obr. 53). soucasny_stav pristi_stav vystup +1 clk REG Obr. 53 Binární čítač jako stavový automat. Zdrojový kód VHDL, který obvod popisuje, jako čítač, v podstatě odpovídá kódu uvedenému v kapitole 4.3. Pro ilustraci možností jazyka VHDL je zde uvedena mírně odlišná varianta popisu využívající stavový signál typu INTEGER s vymezením rozsahu (RANGE):

74 74 FEKT Vysokého učení technického v Brně ENTITY citac IS PORT ( clk : IN STD_LOGIC; vystup : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END citac; ARCHITECTURE Behavioral OF citac IS SIGNAL soucasny_stav: INTEGER RANGE 0 TO 15 := 0; BEGIN PROCESS (clk) BEGIN IF rising_edge(clk) THEN soucasny_stav <= soucasny_stav + 1; END IF; END PROCESS; vystup <= STD_LOGIC_VECTOR(soucasny_stav,4); END Behavioral; Syntetizér takový kód interpretuje (rozpozná) jako čítač a použije pro jeho realizaci takovou strukturu, která je optimální právě pro realizaci čítače. Stejnou funkci lze zachytit i VHDL kódem, který popisuje chování čítače jako stavového automatu. Stavové automaty lze popsat pomocí samostatných procesů, z nichž každý popisuje právě jeden blok automatu (KČ1, stavový registr, případně i KČ2 a výstupní registr). Odpovídající popis binárního čítače je pak zde:... SIGNAL pres_st: INTEGER RANGE 0 TO 15 := 0; SIGNAL next_st: INTEGER RANGE 0 TO 15; BEGIN PROCESS (pres_st) BEGIN CASE pres_st IS WHEN 0 => next_st <= 1; WHEN 1 => next_st <= 2;... WHEN OTHERS => next_st <= 0; END CASE; END PROCESS; PROCESS (clk) BEGIN IF rising_edge(clk) THEN pres_st <= next_st; END IF; END PROCESS; PROCESS (pres_st) BEGIN CASE pres_st IS WHEN 0 => vystup <= X"0"; WHEN 1 => vystup <= X"1";... WHEN OTHERS => vystup <= X"F"; END CASE; END PROCESS;...

75 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 75 První proces popisuje KČ1, druhý proces stavový registr a třetí proces výstupní kombinační část KČ2. Druhým způsobem popisu stavových automatů je popis pomocí jediného procesu, kdy jsou všechny části SA sloučeny do jednoho procesu. Tento způsob zápisu bývá u jednoduchých stavových automatů přehlednější, ale je náchylnější na chybu při návrhu a vyžaduje tak větší pozornost návrháře vytvářejícího popis.... PROCESS (clk) BEGIN IF rising_edge(clk) THEN CASE pres_st IS WHEN 0 => pres_st <= 1; vystup <= "0"; WHEN 1 => pres_st <= 2; vystup <= "1";... WHEN OTHERS => pres_st <= 0; vystup <= "F"; END CASE; END IF; END PROCESS;... Výsledek implementace je v obou posledně uvedených případech stejný, neboť oba způsoby zápisu syntetizér korektně interpretuje jako popis stavového automatu. Proto syntetizér volí způsob implementace a optimalizační postupy odpovídající obecně stavovým automatům. Výsledek implementace se tak může lišit (a obvykle také liší) od implementace kódu, v němž syntetizér čítač přímo rozpoznal. Výsledek se pak liší nikoliv funkcí, ale množstvím a způsobem propojení strukturních prvků, které jsou potřebné pro jejich realizaci. To ovlivňuje jednak efektivitu implementace a také mezní pracovní frekvenci takového systému. Pokud je čítač implementován jako stavový automat, závisí vlastnosti jeho implementace na zvoleném způsobu kódování stavů (to platí obecně pro stavové automaty). Kódováním stavů se rozumí přiřazení jednoznačné binární kombinace každému z pracovních stavů automatu. Pokud syntetizér rozpozná ve zdrojovém kódu stavový automat, dokáže jednotlivým stavům přiřadit vhodná kódová slova nezávisle na samotném jejich zápisu ve zdrojovém kódu. Jinými slovy, v uvedeném příkladu binárního čítače nelze automaticky předpokládat, že stav čítače 0 bude zakódován jako čtyřbitové binární slovo "0000". Syntetizéry mají několik předdefinovaných způsobů kódování stavů, jejichž použití se řídí nastavením optimalizačních kritérií syntetizéru. Ukázka některých typů kódování stavů je v Tab. 4. Některé kódy odpovídají kódům, ve kterých pracují běžné čítače, v jiných případech může jít o kódy, které jsou určeny speciálně pro stavové automaty a na první pohled nemají zvláštní smysl (např. Speed1 implementovaný v syntetizéru XST Xilinx).

76 76 FEKT Vysokého učení technického v Brně Tab. 4 Různé způsoby kódování stavů stavových automatů. Kódování Stav Sequential Compact Gray Johnson One-hot Speed Některé kódy vedou na realizaci, která je optimální z hlediska délky slova popisujícího stavy. Jde například o sekvenční, kompaktní a Grayovo kódování, které pro N-stavový automat vyžadují použití minimálního počtu M registrů, přičemž M = log 2 (N) (výsledek logaritmu zaokrouhlen na celá čísla nahoru). Efektivita z hlediska počtu registrů ale může vést na složitější kombinační části automatu. Naproti tomu kódování 1 z N (One-hot) vyžaduje pro stejný stavový automat použití M = N registrů. Pro automaty s velmi velkým počtem stavů je takové kódování evidentně nevýhodné, neboť je velmi náročné na potřebný počet strukturních prvků. Na druhou stranu toto kódování obvykle umožňuje významně zjednodušit kombinační části stavového automatu a často jsou takové automaty schopny pracovat na vyšším mezním kmitočtu, než varianty s úsporným kódováním. Porovnání výsledku implementace stavového automatu (čítače) pro vybrané typy kódování je uvedeno v Tab. 5. V tomto konkrétním případě, kdy jde o stavový automat bez větvení a bez řídicích vstupů, dosahuje nejlepších výsledků implementace se sekvenčním kódováním, která přesně odpovídá implementaci automatu jako čítače. Kódování 1 z N je v tomto případě nevýhodné, neboť výstupní signály nelze jednoduše odvodit ze stavového signálu, jako je tomu u sekvenčního kódování. Obecně se doporučuje používat binární (kompaktní) kódování pro SA s malým počtem stavů (max. 8). Pro větší SA je toto kódování nevýhodné kvůli složité KČ1, proto se pro středně velké SA (s počtem stavů přibližně do 32) doporučuje používat kódování 1 z N. Pro velké stavové automaty je pak preferováno Grayovo kódování, které při správném návrhu (podobně jako kódování 1 z N) umožňuje realizovat systémy, v nichž se zároveň mění jen malý počet bitů. Volba kódování může být samozřejmě plně v rukou návrháře. V nastavení syntetizéru lze obvykle zvolit možnost extrakce kódování stavů přímo ze zdrojového kódu (bývá označováno jako User encoding ). V tom případě syntetizér převezme kódy stavů uvedené ve zdrojovém kódu. Alternativně bývá možné automatické rozpoznávání stavových automatů

77 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 77 ve zdrojovém kódu zcela zakázat, čímž se ale připravíme o možnosti optimalizačních algoritmů pro stavové automaty zabudovaných v syntetizérech. Tab. 5 Porovnání mezní frekvence a hardwarových nároků na implementaci čtyřbitového binárního čítače pro různé způsoby jeho realizace (cílový obvod Xilinx Spartan-6 xc6slx45t-2ffg484) Typy popisu Stavový automat Čítač Kódování stavů One-hot Speed1 Compact Gray Sequential - Mezní frekvence [MHz] Klopné obvody (FF) LUT S problematikou kódování stavu úzce souvisí problematika nepracovních stavů automatů. Jde o stavy, kterých může nabývat stavový registr, ale nepatří do pracovního cyklu automatu, a jde o identický problém, jako například v případě čítačů s neúplným cyklem (kapitola 4.4, Obr. 42, Obr. 43). Nejmenšího počtu nepracovních stavů lze dosáhnout při použití úsporných způsobů kódování, jako je binární (sekvenční, kompaktní) nebo Grayovo kódování. V případě binárního čítače (Tab. 4) stavový automat dokonce nepracovní stavy nemá. Naopak stejný automat, který využívá kódování 1 z N, se může nacházet v 2 N = 2 16 = stavech, z nichž je pouze 16 pracovních a zbývajících je nepracovních. Za běžného provozu by se stavový automat do nepracovních stavů neměl dostat. Existují ale vlivy, které mohou takový stav navodit: Nekorektní zapnutí, nekorektní napájecí napětí za provozu Nekvalitní vstupní signály vedoucí k metastabilitě Problémy s časováním, nedodržení mezní pracovní frekvence Nadměrné zahřívání Radioaktivita Nesprávný návrh (přetečení ) Nepracovní stavy jsou potenciálně nebezpečné, neboť v nich zpravidla není explicitně definováno chování stavového automatu. Problematiku lze rozdělit do dvojice kategorií: Přechod mezi stavy: pokud se automat dostane do nepracovního stavu, není definováno, jak (nebo zda vůbec) se z něj dostane zpět do pracovního cyklu. Hrozí tedy, že automat zůstane v nepracovních stavech. Výstupní signály: v nepracovních stavech není požadovaný stav výstupních signálů definován a může tak dojít ke generování konfliktních signálů (např. současný požadavek zápisu a čtení z paměti, indikace příjmu platného i neplatného rámce zároveň a podobně). Z těchto důvodů je především u kritických aplikací nutné zajistit korektní chování stavových automatů v nepracovních stavech. Mezi kritické aplikace patří například zařízení pro průmysl (industrial), letectví (aerospace), vesmír (space), automobily (automotive) a armádu (military).

78 78 FEKT Vysokého učení technického v Brně Způsobů ošetření nepracovních stavů je několik, přičemž každý má některé výhodné a nevýhodné vlastnosti, a lze je navzájem kombinovat. Explicitní ošetření nepracovních stavů; vyžaduje specifikovat ve zdrojovém kódu jak použité kódování stavů (neponechat rozhodnutí na syntetizéru), tak pro každý stav uvést chování automatu (přechody mezi stavy) a hodnoty výstupních signálů. Z hlediska implementace jde o hardwarově nejnáročnější variantu, která je ale nejspolehlivější a pro kritické aplikace preferovaná. Automatické ošetření nepracovních stavů; některé syntetizéry umožňují automaticky ošetřit nepracovní stavy tak, že je garantován návrat automatu do pracovního cyklu. Návrat je ale proveden do jednoho vybraného stavu, který může (ale nemusí) být výchozím stavem pracovního cyklu automatu. Tento způsob ošetření neumožňuje kontrolovat výstupní signály v okamžiku, kdy je automat v nepracovním stavu. Hlídací časovač (Watchdog); způsob, který je běžně používán u mikroprocesorů, se spoléhá na externí časovač. Ten je inkrementován nezávisle na běhu kontrolovaného stavového automatu. Automat jej musí vždy během stanovené doby nulovat (vhodným pracovním nebo dedikovaným výstupem), jinak dojde k přetečení časovače. Při přetečení typicky vyvolá časovač reset automatu, nebo přechod do speciálního definovaného stavu určeného pro ošetření návratu z nepracovního cyklu. Tento způsob implementace je vhodný pro méně kritické aplikace. Redundantní systém; z hlediska nároků na implementaci jde o nejnáročnější způsob implementace, který je použit tam, kde nelze akceptovat jakýkoliv výpadek funkce stavového automatu (vesmír, armáda). Obvykle se používá technika trojité implementace systému a následně proces majoritní volby. Systém musí být navržen tak, aby bylo vysoce nepravděpodobné, že dva z trojice implementovaných identických subsystémů budou postiženy náhodnou chybou (typicky radiace). Chyba jednoho ze systémů je pak snadno detekovatelná a systém, který je v nekorektním stavu je snadné pomocí dvojice korektně fungujících systémů uvést do pracovního stavu. Nutno podotknout, že tento způsob ošetření řeší nejen problém nepracovních stavů, ale také nekorektní přechody mezi pracovními stavy, což ostatní metody neumožňují. Umožnit obsluze uvést automat do výchozího stavu; nejjednodušší způsob ošetření, který se používá spíše na vyšší úrovni. Obsluha má možnost uvést celý systém (skládající se z mnoha stavových automatů) do výchozího stavu. Typickým příkladem jsou osobní počítače vybavené tlačítkem reset. Jde o nejjednodušší způsob vhodný prakticky jen pro spotřební elektroniku. 4.6 Praktický návrh Mealyho a Moorova automatu ve VHDL Stavové automaty lze navrhovat různými způsoby a to jak z hlediska jejich struktury, tak z hlediska použitého stylu popisu. V této kapitole jsou názorně předvedeny nejběžnější styly popisu SA pomocí VHDL, a naznačeny možné cesty ke zjednodušení samotných SA rozdělením navrhovaného číslicového bloku na více menších částí (použitím jednoduchých externích bloků, jako jsou multiplexory, posuvné registry, paměti a podobně). Obvykle totiž není efektivní považovat celý navrhovaný číslicový systém za jeden velký stavový automat,

79 Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO 79 byť jej tak lze chápat. Návrh systému složeného z několika menších kooperujících SA je podstatně snazší, přehlednější, spolehlivější a proto v praxi preferovaný. Tx_start Tx_ Data 8b Data CLK 8b Start bit Stop bit Start bit Tx_ Data IDLE IDLE data(0) = LSB data(7) = MSB Obr. 54 Příklad aplikace stavového automatu jako vysílače dat rozhraní UART. Vzorové návrhy Moorova i Mealyho stavového automatu s kombinačním i registrovým výstupem budou demonstrovány na jednoduchém vysílači sériových dat typu UART (Obr. 54). Jde o typickou aplikaci stavového automatu, jehož použití umožní přenášet data po sériové lince rychlostmi desítek Mb/s, aniž by byl řídicí obvod (obvykle procesor) zatěžován obsluhou fyzického rozhraní. Pro jednoduchost budeme předpokládat, že frekvence vstupního hodinového signálu CLK [Hz] odpovídá požadované přenosové rychlosti [Bd]. Vstupem automatu je signál Data o šířce 8 bitů, který tvoří datové slovo, které má být v sériové podobě vysláno na linku (výstupní signál Tx_Data) v okamžiku, kdy je aktivován vstupní signál Tx_start. Protokol UART je definován takto: pokud je vysílač dat v nečinnosti, je na výstupu klidová úroveň log. 1 (IDLE). Vysílání datového slova při aktivaci signálu Tx_start začíná tzv. start bitem, který je definován jako úroveň log. 0 na lince trvající po dobu jednoho symbolu (T S = 1/f, kde f je přenosová rychlost [Bd], v našem příkladu zároveň i frekvence hodinového signálu CLK [Hz]). Následuje odvysílání osmi datových bitů ze vstupu Data v pořadí od LSB po MSB, každý z bitů je na výstup vystaven po dobu T S. Po odvysílání posledního datového bitu je odvysílán tzv. stop bit, což je symbol log. 1 opět trvající po dobu T S. Pokud je po skončení stop bitu aktivní požadavek Tx_start, může být zahájeno vysílání dalšího datového slova a to start bitem. V opačném případě přechází linka do klidové úrovně log. 1 (IDLE). Popsanou funkci lze realizovat stavovým automatem, který má dva vstupy (Data a Tx_start) a jeden výstup (Tx_Data) tak, jak je zobrazen na Obr. 54. Takový bezmyšlenkový přístup ale vede na poměrně složitou implementaci a nepřehledný kód, proto je zde uveden pouze jako odstrašující případ. Popis provedeme nejdříve pro Moorovu verzi automatu (Obr. 55), která je obvykle jednodušší z hlediska popisu grafického i pomocí HDL kódu. Základem pro tvorbu popisu stavového automatu je stavový diagram (Obr. 56), což je orientovaný graf, jehož uzly tvoří

Souhrn Apendixu A doporučení VHDL

Souhrn Apendixu A doporučení VHDL Fakulta elektrotechniky a informatiky Univerzita Pardubice Souhrn Apendixu A doporučení VHDL Práce ke zkoušce z předmětu Programovatelné logické obvody Jméno: Jiří Paar Datum: 17. 2. 2010 Poznámka k jazyku

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Realizace kombinačních logických funkcí Realizace kombinační logické funkce = sestavení zapojení obvodu, který ze vstupních proměnných vytvoří výstupní proměnné

Více

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Ing. Radek Sedláček, Ph.D., katedra měření K13138 Jazyk VHDL zápis čísel, znaků a řetězců Jazyk VHDL základní datové typy a operátory Kurz

Více

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2 Koncept pokročilého návrhu ve VHDL INP - cvičení 2 architecture behv of Cnt is process (CLK,RST,CE) variable value: std_logic_vector(3 downto 0 if (RST = '1') then value := (others => '0' elsif (CLK'event

Více

Úvod do jazyka VHDL. Jan Kořenek korenek@fit.vutbr.cz. Návrh číslicových systémů 2007-2008

Úvod do jazyka VHDL. Jan Kořenek korenek@fit.vutbr.cz. Návrh číslicových systémů 2007-2008 Úvod do jazyka VHDL Návrh číslicových systémů 2007-2008 Jan Kořenek korenek@fit.vutbr.cz Jak popsat číslicový obvod Slovně Navrhněte (číslicový) obvod, který spočte sumu všech členů dané posloupnosti slovní

Více

Návrh. číslicových obvodů

Návrh. číslicových obvodů Návrh číslicových obvodů SW Aritmetika HW Periférie CPU function AddSub(a,b,s); var c; a b k k a+b mpx c if (s==1) c=a+b; else c=a-b; a-b return c; End; PAMĚŤ s Princip: univerzální stroj Výhoda: univerzalita

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Stavové automaty enkódování Proces, který rozhoduje kolik paměťových prvků bude využito v paměťové části. Binární enkódování je nejpoužívanější. j počet stavů

Více

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL Doc. Ing. Jaromír Kolouch, CSc. Ústav radioelektroniky FEKT VUT v Brně, Purkyňova 118, kolouch@feec.vutbr.cz Přednáška má přinést informaci o současném stavu v

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Klopné obvody jsou nejjednodušší sekvenční součástky Záleží na předcházejícím stavu Asynchronní klopné obvody reagují na změny vstupu okamžitě Synchronní

Více

Příklady popisu základních obvodů ve VHDL

Příklady popisu základních obvodů ve VHDL Příklady popisu základních obvodů ve VHDL INP - cvičení 2 Michal Bidlo, 2008 bidlom@fit.vutbr.cz entity Circuit is port ( -- rozhraní obvodu ); end Circuit; Proces architecture Behavioral of Circuit is

Více

Návrh ovládání zdroje ATX

Návrh ovládání zdroje ATX Návrh ovládání zdroje ATX Zapínání a vypínání PC zdroj ATX se zapíná spojením řídicího signálu \PS_ON se zemí zapnutí PC stiskem tlačítka POWER vypnutí PC (hardwarové) stiskem tlačítka POWER a jeho podržením

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Základní invertor v technologii CMOS dva tranzistory: T1 vodivostní kanál typ N T2 vodivostní kanál typ P při u VST = H nebo L je klidový proud velmi malý

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Vývoj VHDL. Verilog HDL

Vývoj VHDL. Verilog HDL Popis systémů pomocí VHDL Vývoj VHDL HDL - Hardware Description Language VHDL - Very High Speed Integrated Circuits HDL Vývoj od roku 1983 v rámci projektu VHSIC 1987 - standard IEEE 1076-1987 1993 - revize

Více

Jazyk VHDL konstanty, signály a proměnné. Jazyk VHDL paralelní a sekvenční doména. Kurz A0B38FPGA Aplikace hradlových polí

Jazyk VHDL konstanty, signály a proměnné. Jazyk VHDL paralelní a sekvenční doména. Kurz A0B38FPGA Aplikace hradlových polí ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Ing. Radek Sedláček, Ph.D., katedra měření K13138 Jazyk VHDL konstanty, signály a proměnné Jazyk VHDL paralelní a sekvenční doména Kurz A0B38FPGA

Více

Číslicové obvody a jazyk VHDL

Číslicové obvody a jazyk VHDL Číslicové obvody a jazyk VHDL Návrh počítačových systémů 2007-2008 Jan Kořenek korenek@fit.vutbr.cz Proč HW realizace algoritmu Vyšší rychlost paralelní nebo zřetězené zpracování, přizpůsobení výpočetních

Více

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

Číselné vyjádření hodnoty. Kolik váží hrouda zlata? Čísla a logika Číselné vyjádření hodnoty Au Kolik váží hrouda zlata? Dekadické vážení Když přidám osmé závaží g, váha se převáží => závaží zase odeberu a začnu přidávat závaží x menší 7 závaží g 2 závaží

Více

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické

Více

1 Stručný popis jazyku VHDL

1 Stručný popis jazyku VHDL 1 Stručný popis jazyku VHDL Jazyk VHDL (Very High Speed Integrated Circuits Hardware Description Language) je spolu s jazykem Verilog HDL jedním z nejpoužívanějším jazykům pro popis hardwarových struktur

Více

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y Rovnicí y = x 1. Přiřazení signálů:

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y Rovnicí y = x 1. Přiřazení signálů: Vzorový příklad. Zadání: Na přípravku realizujte kombinační obvod představující funkci logického součinu dvou vstupů. Mající následující pravdivostní tabulku. x 1 x 0 y 0 0 0 0 1 0 1 0 0 1 1 1 Rovnicí

Více

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické

Více

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody Architektura počítačů Logické obvody http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics Digitální

Více

12. VHDL pro verifikaci - Testbench I

12. VHDL pro verifikaci - Testbench I Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti 12. VHDL pro verifikaci - Testbench I Praktika návrhu číslicových obvodů Dr.-Ing. Martin Novotný Katedra číslicového návrhu Fakulta informačních

Více

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y. Rovnicí y = x 1. x 0. Přiřazení signálů: ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y. Rovnicí y = x 1. x 0. Přiřazení signálů: ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Vzorový příklad. Zadání: Na přípravku realizujte kombinační obvod představující funkci logického součinu dvou vstupů. Mající následující pravdivostní tabulku. x 1 x 0 y 0 0 0 0 1 0 1 0 0 1 1 1 Rovnicí

Více

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody Architektura počítačů Logické obvody http://d3s.mff.cuni.cz/teaching/computer_architecture/ Lubomír Bulej bulej@d3s.mff.cuni.cz CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics 2/36 Digitální

Více

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické

Více

Pohled do nitra mikroprocesoru Josef Horálek

Pohled do nitra mikroprocesoru Josef Horálek Pohled do nitra mikroprocesoru Josef Horálek Z čeho vycházíme = Vycházíme z Von Neumannovy architektury = Celý počítač se tak skládá z pěti koncepčních bloků: = Operační paměť = Programový řadič = Aritmeticko-logická

Více

SEKVENČNÍ LOGICKÉ OBVODY

SEKVENČNÍ LOGICKÉ OBVODY Sekvenční logický obvod je elektronický obvod složený z logických členů. Sekvenční obvod se skládá ze dvou částí kombinační a paměťové. Abychom mohli určit hodnotu výstupní proměnné, je potřeba u sekvenčních

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické

Více

PROGRAMOVATELNÉ LOGICKÉ OBVODY

PROGRAMOVATELNÉ LOGICKÉ OBVODY PROGRAMOVATELNÉ LOGICKÉ OBVODY (PROGRAMMABLE LOGIC DEVICE PLD) Programovatelné logické obvody jsou číslicové obvody, jejichž logická funkce může být programována uživatelem. Výhody: snížení počtu integrovaných

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Obvody s třístavovým výstupem dva tranzistory: vodivostní kanál typ N vodivostní kanál typ P X CS 3 stavový sa výstup Y P logika X 3 stavový výstup W N CS

Více

Cíle. Teoretický úvod

Cíle. Teoretický úvod Předmět Ú Úloha č. 7 BIO - igitální obvody Ú mikroelektroniky Sekvenční logika návrh asynchronních a synchronních binárních čítačů, výhody a nevýhody, využití Student Cíle Funkce čítačů a použití v digitálních

Více

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Sekvenční logika - debouncer, čítače, měření doby stisknutí tlačítka Student

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Sekvenční logika - debouncer, čítače, měření doby stisknutí tlačítka Student Předmět Ústav Úloha č. 9 BIO - igitální obvody Ústav mikroelektroniky Sekvenční logika - debouncer, čítače, měření doby stisknutí tlačítka Student Cíle Pochopení funkce obvodu pro odstranění zákmitů na

Více

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické

Více

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

1. Seznamte se s výukovou platformou FITkit (http://merlin.fit.vutbr.cz/fitkit/).

1. Seznamte se s výukovou platformou FITkit (http://merlin.fit.vutbr.cz/fitkit/). Zadání: Fakulta informačních technologií VUT v Brně Ústav počítačových systémů Technika personálních počítačů, cvičení ITP FITkit Řízení 7mi-segmentového displeje Úloha č. 3. 1. Seznamte se s výukovou

Více

SYSTÉMY NAČIPU MI-SOC

SYSTÉMY NAČIPU MI-SOC Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti SYSTÉMY NAČIPU MI-SOC doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii ČVUT v Praze Hana Kubátová

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech

Více

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více

Číslicové obvody základní pojmy

Číslicové obvody základní pojmy Číslicové obvody základní pojmy V číslicové technice se pracuje s fyzikálními veličinami, které lze popsat při určité míře zjednodušení dvěma stavy. Logické stavy binární proměnné nabývají dvou stavů:

Více

Násobičky, Boothovo překódování. Demonstrační cvičení 7

Násobičky, Boothovo překódování. Demonstrační cvičení 7 Násobičky, Boothovo překódování INP Demonstrační cvičení 7 Obsah Princip násobení Sekvenční a kombinační násobička Kombinační násobičky ve VHDL Násobení se znaménkem (FX) Boothovo překódování, VHDL Násobení

Více

Integrované obvody. Obvody malé, střední a velké integrace Programovatelné obvody

Integrované obvody. Obvody malé, střední a velké integrace Programovatelné obvody Integrované obvody Obvody malé, střední a velké integrace Programovatelné obvody Integrovaný obvod zkratka: IO anglický termín: integrated circuit = IC Co to je? elekrotechnická součástka na malé ploše

Více

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean

Více

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, Booleova algebra, De Morganovy zákony Student

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, Booleova algebra, De Morganovy zákony Student Předmět Ústav Úloha č. DIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, ooleova algebra, De Morganovy zákony Student Cíle Porozumění základním logickým hradlům NND, NOR a dalším,

Více

FPGA + mikroprocesorové jádro:

FPGA + mikroprocesorové jádro: Úvod: V tomto dokumentu je stručný popis programovatelných obvodů od firmy ALTERA www.altera.com, které umožňují realizovat číslicové systémy s procesorem v jenom programovatelném integrovaném obvodu (SOPC

Více

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí. Základní pojmy IT, číselné soustavy, logické funkce Základní pojmy Počítač: Stroj na zpracování informací Informace: 1. data, která se strojově zpracovávají 2. vše co nám nebo něčemu podává (popř. předává)

Více

5 Přehled operátorů, příkazy, přetypování

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Paměť počítače. alg2 1

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D. Digitální obvody Doc. Ing. Lukáš Fujcik, Ph.D. Základní pojmy digitální techniky Abstrakce v digitální technice: signály se pokládají za skokově proměnné, v nejjednodušším případě dvě možné hodnoty logická

Více

7. Popis konečného automatu

7. Popis konečného automatu Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Praktika návrhu číslicových obvodů Dr.-Ing. Martin Novotný Katedra číslicového návrhu Fakulta informačních technologií ČVUT v Praze Miloš

Více

Architektura počítačů

Architektura počítačů Architektura počítačů Studijní materiál pro předmět Architektury počítačů Ing. Petr Olivka katedra informatiky FEI VŠB-TU Ostrava email: petr.olivka@vsb.cz Ostrava, 2010 1 1 Architektura počítačů Pojem

Více

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické

Více

Programování. řídících systémů v reálném čase. Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí

Programování. řídících systémů v reálném čase. Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí Střední odborná škola a Střední odborné učiliště - - Centrum Odborné přípravy Sezimovo Ústí Studijní text pro 3. a 4. ročníky technických oborů Programování řídících systémů v reálném čase Verze: 1.11

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

OVLÁDACÍ OBVODY ELEKTRICKÝCH ZAŘÍZENÍ

OVLÁDACÍ OBVODY ELEKTRICKÝCH ZAŘÍZENÍ OVLÁDACÍ OBVODY ELEKTRICKÝCH ZAŘÍZENÍ Odlišnosti silových a ovládacích obvodů Logické funkce ovládacích obvodů Přístrojová realizace logických funkcí Programátory pro řízení procesů Akční členy ovládacích

Více

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu

2.8 Procesory. Střední průmyslová škola strojnická Vsetín. Ing. Martin Baričák. Název šablony Název DUMu. Předmět Druh učebního materiálu Název školy Číslo projektu Autor Název šablony Název DUMu Tematická oblast Předmět Druh učebního materiálu Anotace Vybavení, pomůcky Ověřeno ve výuce dne, třída Střední průmyslová škola strojnická Vsetín

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

14. Složitější konstrukce

14. Složitější konstrukce Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Praktika návrhu číslicových obvodů Dr.-Ing. Martin Novotný Katedra číslicového návrhu Fakulta informačních technologií ČVUT v Praze Miloš

Více

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09 Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Operátory Autor:

Více

Sekvenční logické obvody

Sekvenční logické obvody Název a adresa školy: Střední škola průmyslová a umělecká, Opava, příspěvková organizace, Praskova 399/8, Opava, 746 01 Název operačního programu: OP Vzdělávání pro konkurenceschopnost, oblast podpory

Více

Logické funkce a obvody, zobrazení výstupů

Logické funkce a obvody, zobrazení výstupů Logické funkce a obvody, zobrazení výstupů Digitální obvody (na rozdíl od analogových) využívají jen dvě napěťové úrovně, vyjádřené stavy logické nuly a logické jedničky. Je na nich založeno hodně elektronických

Více

Y36SAP Y36SAP-2. Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka Kubátová Y36SAP-Logické obvody 1.

Y36SAP Y36SAP-2. Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka Kubátová Y36SAP-Logické obvody 1. Y36SAP 26.2.27 Y36SAP-2 Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka 27-Kubátová Y36SAP-Logické obvody Logický obvod Vstupy a výstupy nabývají pouze hodnot nebo Kombinační obvod popsán

Více

Struktura a architektura počítačů (BI-SAP) 3

Struktura a architektura počítačů (BI-SAP) 3 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 3 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii

Více

BDIO - Digitální obvody

BDIO - Digitální obvody BIO - igitální obvody Ústav Úloha č. 6 Ústav mikroelektroniky ekvenční logika klopné obvody,, JK, T, posuvný registr tudent Cíle ozdíl mezi kombinačními a sekvenčními logickými obvody. Objasnit principy

Více

Digitální technika. Jazyk VHDL, základy návrhu. Ing. Jakub Št astný, Ph.D. 1

Digitální technika. Jazyk VHDL, základy návrhu. Ing. Jakub Št astný, Ph.D. 1 Digitální technika Jazyk VHDL, základy návrhu Ing. Jakub Št astný, Ph.D. 1 1 stastnj1@seznam.cz FPGA laboratory Department of Circuit Theory, FEE CTU Prague Technická 2, Praha 6, 166 27 http://amber.feld.cvut.cz/fpga

Více

Struktura a architektura počítačů (BI-SAP) 4

Struktura a architektura počítačů (BI-SAP) 4 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 4 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii

Více

... sekvenční výstupy. Obr. 1: Obecné schéma stavového automatu

... sekvenční výstupy. Obr. 1: Obecné schéma stavového automatu Předmět Ústav Úloha č. 10 BDIO - Digitální obvody Ústav mikroelektroniky Komplexní příklad - návrh řídicí logiky pro jednoduchý nápojový automat, kombinační + sekvenční logika (stavové automaty) Student

Více

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů. Základní symboly - písmena A B C Y Z a b c y z - číslice 0 1 2 9 - speciální symboly + - * / =., < > = a další - klíčová slova and array begin case const a další Klíčová slova jsou chráněnými útvary,

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 04. Datové typy, operace, logické operátory Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284

Více

Binární logika Osnova kurzu

Binární logika Osnova kurzu Osnova kurzu 1) Základní pojmy; algoritmizace úlohy 2) Teorie logického řízení 3) Fuzzy logika 4) Algebra blokových schémat 5) Vlastnosti členů regulačních obvodů 6) Vlastnosti regulátorů 7) Stabilita

Více

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina 5a. Makra Visual Basic pro Microsoft Escel Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina Cyklické odkazy a iterativní výpočty Zde bude stránka o cyklických odkazech a iteracích.

Více

C2115 Praktický úvod do superpočítání

C2115 Praktický úvod do superpočítání C2115 Praktický úvod do superpočítání IX. lekce Petr Kulhánek, Tomáš Bouchal kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Přírodovědecká fakulta, Masarykova univerzita, Kotlářská 2, CZ-61137

Více

Obsah DÍL 1. Předmluva 11

Obsah DÍL 1. Předmluva 11 DÍL 1 Předmluva 11 KAPITOLA 1 1 Minulost a současnost automatizace 13 1.1 Vybrané základní pojmy 14 1.2 Účel a důvody automatizace 21 1.3 Automatizace a kybernetika 23 Kontrolní otázky 25 Literatura 26

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

Sčítačky Válcový posouvač. Demonstrační cvičení 6

Sčítačky Válcový posouvač. Demonstrační cvičení 6 Sčítačky Válcový posouvač INP Demonstrační cvičení 6 Poloviční sčítačka (Half Adder) A B S C 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 A B HA S C S: A C: A 0 1 0 0 1 0 B 0 1 B S

Více

Logické řízení. Náplň výuky

Logické řízení. Náplň výuky Logické řízení Logické řízení Náplň výuky Historie Logické funkce Booleova algebra Vyjádření Booleových funkcí Minimalizace logických funkcí Logické řídicí obvody Blokové schéma Historie Číslicová technika

Více

3.7.5 Znaménkové operátory Násobící operátory Rùzné operátory Základní objekty Konstanty Sig

3.7.5 Znaménkové operátory Násobící operátory Rùzné operátory Základní objekty Konstanty Sig OBSAH Úvod 11 Signály v èíslicových systémech 13 2.1 Dvojstavové signály... 14 2.2 Tøístavové signály... 16 2.3 Dynamické parametry èíslicových signálù... 16 Jazyk VHDL 19 3.1 Historie, souèasnost, budoucnost

Více

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy Ústav radioelektroniky Vysoké učení technické v Brně Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy Přednáška 8 doc. Ing. Tomáš Frýza, Ph.D. listopad 2012 Obsah

Více

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: 1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

Systém řízení sběrnice

Systém řízení sběrnice Systém řízení sběrnice Sběrnice je komunikační cesta, která spojuje dvě či více zařízení. V určitý okamžik je možné aby pouze jedno z připojených zařízení vložilo na sběrnici data. Vložená data pak mohou

Více

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti MI-SOC: 11 METODY VERIFIKACE SYSTÉMŮ NA ČIPU Hana Kubátov vá doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta 1 informačních

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Pokročilé využití jazyka VHDL. Pavel Lafata

Pokročilé využití jazyka VHDL. Pavel Lafata Pokročilé využití jazyka VHDL Pavel Lafata Autor: Pavel Lafata Název díla: Pokročilé využití jazyka VHDL Zpracoval(a): České vysoké učení technické v Praze Fakulta elektrotechnická Kontaktní adresa: Technická

Více

LOGICKÉ ŘÍZENÍ. Matematický základ logického řízení

LOGICKÉ ŘÍZENÍ. Matematický základ logického řízení Měřicí a řídicí technika bakalářské studium - přednášky LS 28/9 LOGICKÉ ŘÍZENÍ matematický základ logického řízení kombinační logické řízení sekvenční logické řízení programovatelné logické automaty Matematický

Více

1 z 16 11.5.2009 11:33 Test: "CIT_04_SLO_30z50" Otázka č. 1 U Mooreova automatu závisí okamžitý výstup Odpověď A: na okamžitém stavu pamětí Odpověď B: na minulém stavu pamětí Odpověď C: na okamžitém stavu

Více

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

Strojový kód. Instrukce počítače

Strojový kód. Instrukce počítače Strojový kód Strojový kód (Machine code) je program vyjádřený v počítači jako posloupnost instrukcí procesoru (posloupnost bajtů, resp. bitů). Z hlediska uživatele je strojový kód nesrozumitelný, z hlediska

Více

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA

NSWI /2011 ZS. Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA Principy cpypočítačůčů aoperačních systémů ARCHITEKTURA Literatura W.Stallings: Computer Organization & Architecture J.L.Hennessy, P.A.Patterson: Patterson: Computer Architecture: a Quantitative Approach

Více

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010 Přednášky o výpočetní technice Hardware teoreticky Adam Dominec 2010 Rozvržení Historie Procesor Paměť Základní deska přednášky o výpočetní technice Počítací stroje Mechanické počítačky se rozvíjely už

Více

Stanovit nezbytná pravidla pro tvorbu dokumentace vytvářenou ve SITRONICS centru využitelnou firmou SITRONICS TS.

Stanovit nezbytná pravidla pro tvorbu dokumentace vytvářenou ve SITRONICS centru využitelnou firmou SITRONICS TS. Tvorba dokumentace SITRONICS centrum 1. Cíl Usnadnit tvorbu jednotné dokumentace SITRONICS centra. 2. Účel Stanovit nezbytná pravidla pro tvorbu dokumentace vytvářenou ve SITRONICS centru využitelnou firmou

Více

Sylabus kurzu Elektronika

Sylabus kurzu Elektronika Sylabus kurzu Elektronika 5. ledna 2004 1 Analogová část Tato část je zaměřena zejména na elektronické prvky a zapojení v analogových obvodech. 1.1 Pasivní elektronické prvky Rezistor, kondenzátor, cívka-

Více

6 Příkazy řízení toku

6 Příkazy řízení toku 6 Příkazy řízení toku Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům pro řízení toku programu. Pro všechny tyto základní

Více

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Software602 Form Designer

Software602 Form Designer Software602 Form Designer Javascriptový vyhodnocovací mechanismus výrazů Aktualizováno: 17. 3. 2017 Software602 a.s. Hornokrčská 15 140 00 Praha 4 tel: 222 011 602 web: www.602.cz e-mail: info@602.cz ID

Více

Základní znaky. - Ve srovnání se Spice jsou velmi složité a vyžadují dlouhou dobu na plné osvojení. - Velmi nákladné simulační programy.

Základní znaky. - Ve srovnání se Spice jsou velmi složité a vyžadují dlouhou dobu na plné osvojení. - Velmi nákladné simulační programy. VHDL-AMS Počátek jazyků HDL sahá do šedesátých let. V průběhu doby vznikla celá řada jazyků FAS (Anacad 1988), SpetreHDL (Cadence 94), MAST (Analogy 1986) a jiné. V současné době hrají největší roli jazyky

Více