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



Podobné dokumenty
Číslicové obvody a jazyk VHDL

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

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

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

Souhrn Apendixu A doporučení VHDL

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

Návrh. číslicových obvodů

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

1. Seznamte se s výukovou platformou FITkit (

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

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

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

Návrh ovládání zdroje ATX

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

Vývoj VHDL. Verilog HDL

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

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

2. Entity, Architecture, Process

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

12. VHDL pro verifikaci - Testbench I

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

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

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

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

1 Stručný popis jazyku VHDL

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.

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

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

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

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

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

Programovací jazyk Pascal

Cíle. Teoretický úvod

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

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

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

14. Složitější konstrukce

Kódy pro odstranění redundance, pro zabezpečení proti chybám. Demonstrační cvičení 5 INP

Implementace čítačů v číslicových systémech 2 Jakub Šťastný ASICentrum, s.r.o. FPGA Laboratoř, Katedra teorie obvodů FEL ČVUT Praha

Chapter Základní principy simulace :).

Příklad č. 1 Přepis informace ze vstupů (SW0 až SW3) na ledky (LEDG0 až LEDG3)

7. Popis konečného automatu

SEKVENČNÍ LOGICKÉ OBVODY

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

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody

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

Praktické úlohy- 2.oblast zaměření

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

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

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

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

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

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

Úvod do programovacích jazyků (Java)

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

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

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

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

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

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

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

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

Procesor. Základní prvky procesoru Instrukční sada Metody zvýšení výkonu procesoru

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

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

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

Implementace čítačů v číslicových systémech Jakub Šťastný

Návrh FPGA systémů. Jazyk VHDL, principy simulace. Ing. Jakub Št astný, Ph.D. 1

KOMBINAČNÍ LOGICKÉ OBVODY

Návrh základních kombinačních obvodů: dekodér, enkodér, multiplexor, demultiplexor

OPERAČNÍ PROGRAM PRAHA ADAPTABILITA & EU:

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

Y36SAP 2007 Y36SAP-4. Logické obvody kombinační a sekvenční používané v číslicovém počítači Sčítačka, půlsčítačka, registr, čítač

Princip funkce počítače

Struktura a architektura počítačů

Logické obvody - sekvenční Formy popisu, konečný automat Příklady návrhu

Maturitní otázky z předmětu PROGRAMOVÁNÍ

LOGICKÉ OBVODY X36LOB

Poslední nenulová číslice faktoriálu

1 Nejkratší cesta grafem

Principy komunikace s adaptéry periferních zařízení (PZ)

Knihovna XmlLib TXV první vydání prosinec 2010 změny vyhrazeny

PROGRAMOVATELNÉ LOGICKÉ OBVODY

Počítačová simulace logistických procesů I. 11. přednáška Programování v SimTalk. ŠAVŠ, Fábry

Algoritmizace a programování

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

VISUAL BASIC. Přehled témat

ALGORITMIZACE A PROGRAMOVÁNÍ

Knihovna EpsnetLib TXV první vydání září 2012 změny vyhrazeny

Sekvenční logické obvody

Simulace číslicových obvodů na hradlové úrovni: model návrhu Jakub Šťastný ASICentrum, s.r.o. Katedra teorie obvodů FEL ČVUT Praha

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Algoritmizace prostorových úloh

Operace ALU. INP 2008 FIT VUT v Brně

Příkladný úvod do VHDL

Transkript:

Ú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í vyjádření toho co má obvod dělat je pro člověka přirozené, avšak vyrobit podle něj obvod není možné Matematicky v současné době neexistují nástroje, které by umožnily automatizovaně bez úzké asistence člověka návrháře fyzickou implementaci Graficky pomocí schématu funkčních bloky a jejich propojení pro velké obvody pracné a nepřehledné Programovacím jazykem S i 1 lze vytvořit popis chování obvodu v programovacím jazyku N S = i=1 FF V i S V i V S i 1 i i + sčítačka nuluj regist r INC Jazyk VHDL FIT VUT Brno 2

HDL jazyky Na rozdíl od schematu návrhář popisuje funkci obvodu pomocí jazyka Zařízení je možné modelovat a simulovat Proces syntézy umožňuje transformovat HDL popis do prvků cílové technologie syntéza je proces analogický kompilaci používané u programovacích jazyků V praxi se používají zejména jazyky VHDL a Verilog Oba jazyky jsou mohou být vstupem procesu syntézy VHDL dominuje v Evropě, Verilog v USA INC Jazyk VHDL FIT VUT Brno 3

Jazyk VHDL Zkratka VHDL z akronymu: VHDL = VHSIC Hardware Description Language VHSIC je zkratka pro Very High Speed Integrated Circuit Původně bylo VHDL vyvinuto pro vojenské účely ke specifikaci číslicových systémů, později se stalo IEEE standardem Jazyk VHDL není svázán s žádnou cílovou technologií Umožňuje tři základní úrovně popisu behaviorální, strukturní a data flow popis Existuje spousta nástrojů umožňující syntézu nebo simulaci obvodů popsaných v jazyku VHDL INC Jazyk VHDL FIT VUT Brno 4

Číslicové zařízení ve VHDL VHDL popisuje číslicová zařízení a jednotlivé části zařízení pomocí komponent, které se popisují pomocí: Entita definuje rozhraní komponenty Architektura popisuje chování nebo strukturu komponenty Definice rozhraní Popis funkce A(7:0) B(7:0) Y(7:0) součet Jedna entita může mít více architektur Entita Architektura INC Jazyk VHDL FIT VUT Brno 5

Entita Popisuje rozhraní mezi komponentou a okolím Rozhraní komponenty se skládá ze signálů rozhraní a generických parametrů A(7:0) Y(7:0) Signály rozhraní mohou být podle směru v módu IN, OUT nebo INOUT Příklad: B(7:0) Entita entity NAND is generic (DATA_WIDTH : integer :=8 ); parametry port (A : in std_logic_vector(data_width-1 downto 0); B : in std_logic_vector(data_width-1 downto 0); Y : out std_logic_vector(data_width-1 downto 0); ); signály rozhraní end entity register; INC Jazyk VHDL FIT VUT Brno 6

Architektura Definuje chování nebo strukturu komponenty Architektura je vždy svázána s entitou, která definuje rozhraní s okolím Každá komponenta může být popsána na úrovni struktury, chování nebo dataflow Různé způsoby popisu je možné kombinovat STRUKTURA Z čeho je komponenta složena? Strukturní popis Popis architektury komponenty CHOVÁNÍ Co komponenta dělá? Behaviorální popis DATOVÉ ZÁVISLOTI Jaký je datový tok signálů? Dataflow popis INC Jazyk VHDL FIT VUT Brno 7

Architektura Syntax: Architecture name of entity_name is Deklarační část Jméno entity popisující rozhraní architektury. Architekturu není možné použít s jinou entitou, než je uvedená zde. Sekce paralelních příkazů end architecture name; Sekce paralelních příkazů Deklarační část architektury je vyhrazena pro pro deklaraci signálů, konstant nebo typů použitých uvnitř architektury. Součástí sekce paralelních příkazů mohou být instance komponent nebo procesy vzájemně propojené signály Behaviorální popis architektura je složena z jednoho nebo více procesů Strukturní popis architektura obsahuje pouze instance komponent V praxi se často používají oba přístupy i v rámci jedné architektury INC Jazyk VHDL FIT VUT Brno 8

Behaviorální popis (jeden proces) Architektura složena z jednoho nebo více procesů Proces je popsán na úrovni algoritmu (příkazy, podmínky, cykly, atd.) Cílem je pouze popsat, jak se mění výstupy v závislosti na změnách vstupních signálů, nemusí být zřejmá hardwarová realizace Příklad: architecture behv of NAND is nand_proc : process (A, B) Y <= not (A AND B); end process nand_proc; end behv; A(7:0) B(7:0) NAND AND Y(7:0) Proces and_proc přepočítá výstup Y vždy při změně signálu A nebo B INC Jazyk VHDL FIT VUT Brno 9

Dataflow popis Modeluje datové závislosti Zkrácený zápis chování pomocí paralelních příkazů uvnitř architektury: Přiřazovací příkaz Y <= NOT (A AND B); Podmíněný přiřazovací příkaz Y <= B when (A='1') else '0'; Výběrový přiřazovací příkaz Příklad: with S select Y <= A when 0, B when 1, architecture dataflow of NAND is Y <= not (A AND B); end behv; A(7:0) B(7:0) NAND AND Y(7:0) INC Jazyk VHDL FIT VUT Brno 10

Behaviorální popis (více procesů) Architektura se může skládat z více procesů: Procesy mohou číst/nastavovat vstupními/výstupními signály Komunikace mezi procesy je realizována prostřednictvím signálů Příklad: architecture behv of NAND is signal ab_and : stdl_logic_vector(7 downto 0); and_proc : process (A, B) ab_and <= A AND B; end process and_proc; not_proc : process (ab_and) Y <= not ab_and; end process not_proc; end behv; A(7:0) B(7:0) AND NAND NOT Y(7:0) Procesy komunikují prostřednictvím signálu ab_and INC Jazyk VHDL FIT VUT Brno 11

Proces ve VHDL Syntax: name: process (sensitivity list) declarations sequential statements end process name; Proces může popisovat chování celé komponenty nebo pouze její části Architektury může obsahovat více procesů komunikujících vzájemně pomocí signálů Seznam citlivých proměnných Kdykoliv se změní signál ze sensitivity listu, je spuštěn proces a vypočítají se nové hodnoty signálů Deklarační část procesu je vyhrazena pro deklaraci proměnných, konstant nebo typů použitých uvnitř procesu Sekvenční příkazy Program, který popisuje chování dané komponenty nebo její části. Na základě vstupních signálů a vnitřních proměnných program vypočítá hodnoty signálů INC Jazyk VHDL FIT VUT Brno 12

Senzitivity list procesu Senzitivity list procesu proces je spuštěn pokud dojde ke změně signálu uvedeného na senzitivity listu procesu Po provedení sekvence příkazů je proces pozastaven a čeká se opět na změnu signálu ze senzitivity listu proc_1: process DATA <= 1010 ; wait for 10 ns; DATA <= 0101 ; wait for 10 ns; end process proc_1; proc_2: process (DATA) statement1; statement2; statement3; end process proc_2; Proces obsahující senzitivity list nemůže obsahovat příkaz WAIT Příkaz WAIT se používá zejména při tvorbě testbenche INC Jazyk VHDL FIT VUT Brno 13

Řídicí struktury v procesu Podmíněné vykonání příkazů (if... then... ) IF <condition> THEN <statements> END IF; Podmíněné vykonání příkazů s alternativou (if... then... else... nebo if... then... elsif... ) IF <condition> THEN <statements> [ELSIF <statements>] [ELSIF <statements>] END IF; Výběr více příkazů (case... ) CASE <condition> IS WHEN <value> => <statements> [WHEN <value> => <statements>] END CASE; INC Jazyk VHDL FIT VUT Brno 14

Řídicí struktury v procesu cykly Cykly umožňující opakované vykonání sekvence příkazů while... do... WHILE <condition> LOOP <statements> END LOOP; for... loop... FOR <range> LOOP <statements> END LOOP; Příkazy pro přerušení běhu smyčky NEXT skok do další iterace next when <condition>; EXIT ukončení celé smyčky exit when <condition>; INC Jazyk VHDL FIT VUT Brno 15

Příklad procesu pro součet jedniček Součet jedniček v bitovém vektoru bus_in: process(bus_in) variable count : std_logic_vector(3 downto 0); count := 0000 ; for i in 0 to 15 loop if bus_in(i) = '1' then count := count + '1'; end if; end loop; N_ONE <= count; end process; Při každé změně signálu bus_in se vyvolá proces, spočítá se počet jedniček ve vektoru bus_in a výsledek se uloží do N_ONES. Pro akumulaci počtu jedniček je využita proměnná. INC Jazyk VHDL FIT VUT Brno 16

Strukturní popis Popisuje z čeho se daný systém (zařízení nebo komponenta) skládá jakou má obvod strukturu Strukturní popis může mít více úrovní hierarchie Každá dílčí komponenta může být popsána opět na úrovni struktury nebo na úrovni chování Komponenty na nejnižší úrovni jsou vždy popsány behaviorálně Příklad: architecture struct of NAND is signal ab_and : stdl_logic_vector(7 downto 0); and_i: entity work.and port map ( In0=>A, In1=>B, Output=>ab_and); not_i: entity work.not port map ( In0=>ab_and, Output=>Y); end behv; NAND A(7:0) Y(7:0) AND NOT B(7:0) Použité komponenty Komponenty komunikují prostřednictvím signálu ab_and In0 In1 AND AND NOT Output In0 Output NOT INC Jazyk VHDL FIT VUT Brno 17

Signály ve VHDL Signály slouží pro komunikaci mezi komponenty nebo procesy Mohou být implementovány pomocí vodiče nebo sběrnice (více vodičů) A komponenta C B Signálu je možné přiřadit libovolný datový typ, který definuje charakter přenášených hodnot Pro reprezentace vodiče se používá typ std_logic Pro sběrnice se používá typ std_logic_vector(). Šířka sběrnice je definována šířkou pole. Význam bitů sběrnice je dán rozsahem pole std_logic_vector(7 downto 0) std_logic_vecotr(0 to 7) 7 is MSB bit 0 is MSB bit INC Jazyk VHDL FIT VUT Brno 18

Deklarace signálů Vnitřní signály komponenty jsou deklarovány v deklarační části architektury lze použití pouze v rámci architektury Architecture name of processor is Deklarační část Sekce paralelních příkazů end architecture name; Zde je možné deklarovat vnitřní signály architektury Syntax deklarace: signal <jmeno> : <typ> [:= imp_hodnota]; Signál nelze deklarovat uvnitř procesu!!! Jméno jednoznačně identifikuje signál, typ definuje charakter přenášených hodnot. Signálu je možné nastavit počáteční (implicitní) hodnotu INC Jazyk VHDL FIT VUT Brno 19

Koncept nastavení signálu Nastavení signálu se provádí až v okamžiku pozastavení procesu V procesu je přiřazena hodnota do signálu vícekrát => provedeno je až poslední nastavení example : process (A, B) C <= A; C <= B+1; end process example; První přiřazení signálu je ignorováno U každého signálu je v procesu možné nastavit sekvenci jedné nebo více transakcí Každá transakce se skládá z nové hodnoty signálu a času přiřazení some_signal <= '0' after 10 ns, '1' after 30 ns, '0' after 40 ns, '1' after 80 ns; Naplánování čtyř transakcí INC Jazyk VHDL FIT VUT Brno 20

Atributy signálů Simulátor ukládá historii signálu transakce spojené se signálem Historie signálů je ve VHDL přístupná pomocí atributů informací připojených k signálu Syntaxe použití atributu: <signal_name>'<attribute name> Příklady používaných atributů: transaction boolean atribut je hodnoty true v případě, že je právě aktivována na signálu transakce event boolean atribut je hodnoty true v případě změny hodnoty signálu last_value hodnota signálu před poslední změnou hodnoty Příklad detekce náběžné hrany hodin clk'event AND clk='1' INC Jazyk VHDL FIT VUT Brno 21

Signály v procesu Signály slouží pro komunikaci mezi procesy připojení vstupů a výstupů procesů Vlastnosti signálů Signály nemůžou být deklarovány uvnitř procesů Přiřazení signálů je fyzicky provedeno až v okamžiku pozastavení procesu. Dokud není proces pozastaven, má signál původní hodnotu V procesu je provedeno pouze poslední přiřazení signálů. Ostatní přiřazení jsou ignorovány Je možné definovat hodnotu zpoždění pro přiřazení signálu V procesu je možné přechodně uchovat hodnotu pomocí proměnných variable INC Jazyk VHDL FIT VUT Brno 22

Proměnné Proměnné mohou být deklarovány a použity pouze v procesu Příklad deklarace a použití proměnné Process (b) variable a : integer := 3; a := a + 2; output <= a * b; end process; Signál output je nastaven již podle aktualizované proměnné a (output <= 5 * 4) Deklarace může obsahovat jméno, typ a implicitní hodnotu Přiřazení do proměnné se provede okamžitě (a = 3 + 2 = 5) Hodnota proměnné zůstává zachována i v případě pozastavení a opětovném spuštění procesu INC Jazyk VHDL FIT VUT Brno 23

Signál vs. Proměnné v procesu entity sig_var is port(d1, d2, d3: in std_logic; res1, res2: out std_logic); end sig_var; architecture behv of sig_var is signal sig_s1: std_logic; proc1: process(d1, d2, d3) variable var_s1: std_logic; var_s1 := d1 and d2; res1 <= var_s1 xor d3; end process; d1 d2 d3 res1 res2 proc2: process(d1,d2,d3) sig_s1 <= d1 and d2; res2 <= sig_s1 xor d3; end process; end behv; Sledujte rozdíl mezi res1 a res2. INC Jazyk VHDL FIT VUT Brno 24

Komentáře, znaky, řetězce,... Komentář uvozen dvojicí znaků -- -- Toto je komentář Znak nebo bit vkládá se do apostrofů '1' sig_bit <= '1'; Řetězec nebo bitový vektor vkládá se do uvozovek sig_bit_vector <= 0001 ; Identifikátory podobná pravidla jako u jiných jazyků INC Jazyk VHDL FIT VUT Brno 25

Příklady rozšiřujících datových typů Výčtový typ TYPE muj_stav IS (reset, idle, rw, io); signal stav: muj_stav; stav <= reset; -- nelze stav <= 00 ; Pole TYPE data_bus IS ARRAY (0 TO 1) OF BIT; variable x: data_bus; variable y: bit; y := x(12); INC Jazyk VHDL FIT VUT Brno 26

Práce na úrovni bitů Uvažujme deklarace signálů: signal a, b: bit_vector (3 downto 0); signal c : bit_vector (7 downto 0); signal clk : bit; Konkatenace signálů: c <= a & b; Posun doleva a doprava: b <= b(2 downto 0) & '0'; -- posun doleva b <= '0' & b(3 downto 1); -- posun doprava Agregace: a <= (others => '0'); -- vše do nuly a <= ( 0, 1, others=> 0 ); -- MSB = 01 a b 1 0 1 0 & 1 1 1 1 c 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 doleva doprava 0 0 0 0 0 1 0 0 INC Jazyk VHDL FIT VUT Brno 27

Testbench Testování VHDL komponent v prostředí VHDL d1 d2 d3 UUT res1 res2 UUT Generování testovacích vektorů testbench Testbench obvykle obsahuje: Instanci vyvíjené komponenty označenou jako UUT (Unit Under Test) Generátor testovacích vektorů Monitorování a ověřování reakcí UUT INC Jazyk VHDL FIT VUT Brno 28

Základní prvky testbench entity testbench is end entity testbench; architecture testbench_arch of testbench is signal a, b : std_logic; signal... UUT : entity work.and_gate port map(...... ); test : process a <=...; b <=...;... wait for...;... wait for...;... wait; end process test; Testbench Entity Testovací vektory připojené k UUT Instance UUT (napojení testovacích vektorů) Přikládání testovacích vektorů end architecture testbench_arch; INC Jazyk VHDL FIT VUT Brno 29

Příklad Testbench entity and_gate is port ( A : in std_logic; B : in std_logic; Y : out std_logic ); end entity and_gate; architecture behavioral of and_gate is p_and : process (A, B) Y <= A and B; end process p_and; end architecture behavioral; Test všech kombinací na vstupu hradla AND entity testbench is end entity testbench; architecture tb_arch of testbench is signal a, b, y : std_logic; UUT : entity work.and_gate port map( A => a, B => b, Y => y ); test : process a <= 0; b <= 0; wait for 10 ns; a <= 0; b <= 1; wait for 10 ns; a <= 1; b <= 0; wait for 10 ns; a <= 1; b <= 1; wait; end process test; end architecture tb_arch; INC Jazyk VHDL FIT VUT Brno 30

Příklad Sčítačka A ADDER Sum A B Cout B entity ADDER is port( A, B : in std_logic; Sum, Cout: out std_logic); end entity ADDER; Pravdivostní tabulka: Cout Přetečení do vyššího řádu S Součet A B S Cout 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 A B S Cout 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Cout= A B INC Jazyk VHDL FIT VUT Brno 31

Příklad sčítačka a b Sum Cout Summation : process (A, B) Sum <= A XOR B; end process Summation; Carry : process (A, B) Cout <= (A AND B); end process Carry; Popis s využitím procesů Dataflow popis ARCHITECTURE behav of ADDER IS BEGIN Summation : process (A, B) Sum <= A XOR B; end process Summation; Carry : process (A, B) Cout <= (A AND B); end process Carry; END behav; ARCHITECTURE dataflow of ADDER IS BEGIN Sum <= A XOR B XOR Cin Cout <= (A AND B) OR (A AND Cin) OR (B AND Cin); END dataflow; INC Jazyk VHDL FIT VUT Brno 32

Dekodér library IEEE; use IEEE.std_logic_1164.all; entity dec3to8 is port ( addr: in std_logic_vector(2 downto 0); y : out std_logic_vector(7 downto 0) ); end dec3to8; ADDR dec3to8 Y architecture dec3to8arch of dec3to8 is with addr select y <= "10000000" when "111", "01000000" when "110", "00100000" when "101", "00010000" when "100", "00001000" when "011", "00000100" when "010", "00000010" when "001", "00000001" when others; end dec3to8arch; ADDR (address) binární adresa Y výstupní hodnoty dekodéru. V tomto případě čísla v kódu 1 z n INC Jazyk VHDL FIT VUT Brno 33

Multiplexor library ieee; use ieee.std_logic_1164.all; entity Mux is port( I3: in std_logic_vector(2 downto 0); I2: in std_logic_vector(2 downto 0); I1: in std_logic_vector(2 downto 0); I0: in std_logic_vector(2 downto 0); S : in std_logic_vector(1 downto 0); O : out std_logic_vector(2 downto 0)); end Mux; architecture behv1 of Mux is process(i3,i2,i1,i0,s) case S is when "00" => O <= I0; when "01" => O <= I1; when "10" => O <= I2; when "11" => O <= I3; when others => O <= "ZZZ"; end case; end process; end behv1; IN0 IN1 IN2 IN3 S IN0, IN1, MUX IN2, IN3 přepínané vstupy S řídící hradlo Y výstup multiplexoru Y INC Jazyk VHDL FIT VUT Brno 34

Čítač library IEEE; use IEEE.std_logic_1164.all; entity counter is port ( CLK : in std_logic; RST : in std_logic; CE : in std_logic; DOUT : out std_logic_vector(7 downto 0) end counter; architecture behav of counter is process (CLK,RST,CE) if (RST = '1') then DOUT <= (others => '0'); elsif (CLK'event and CLK = '1') then if CE='1' then DOUT <= DOUT + '1'; end if; end if; end process; end behav; CE CNT CLK DOUT RST CLK (clock) hodinový vstup RST(reset) reset CE (count enable) povolení čítání DOUT (data output) hodnoty čítače INC Jazyk VHDL FIT VUT Brno 35