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

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

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

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

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

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

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

Souhrn Apendixu A doporučení VHDL

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

Úvod do jazyka VHDL. Jan Kořenek Návrh číslicových systémů

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

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

Návrh ovládání zdroje ATX

14. Složitější konstrukce

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

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

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

Číslicové obvody a jazyk VHDL

3. Sekvenční logické obvody

12. VHDL pro verifikaci - Testbench I

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

SEKVENČNÍ LOGICKÉ OBVODY

Chapter Základní principy simulace :).

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

5. Sekvenční logické obvody

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

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

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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

Architektura počítačů Logické obvody

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.

1. Seznamte se s výukovou platformou FITkit (

Programovací jazyk Pascal

1 Stručný popis jazyku VHDL

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

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

Architektura počítačů Logické obvody

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

7. Popis konečného automatu

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

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

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

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

Návrh. číslicových obvodů

Sekvenční logické obvody

2. Entity, Architecture, Process

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

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

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

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

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

Logické obvody 10. Neúplné čítače Asynchronní čítače Hazardy v kombinačních obvodech Metastabilita Logické obvody - 10 hazardy 1

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

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

Organizace předmětu, podmínky pro získání klasifikovaného zápočtu

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

Vývoj VHDL. Verilog HDL

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č

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

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

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

Cíle. Teoretický úvod

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

4. Elektronické logické členy. Elektronické obvody pro logické členy

Princip funkce počítače

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Algoritmizace a programování

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

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

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

Poslední nenulová číslice faktoriálu

Tel-30 Nabíjení kapacitoru konstantním proudem [V(C1), I(C1)] Start: Transient Tranzientní analýza ukazuje, jaké napětí vytvoří proud 5mA za 4ms na ka

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

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

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

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

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Projekt Pospolu. Sekvenční logické obvody Klopné obvody. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jiří Ulrych.

3. Aritmetika nad F p a F 2


VISUAL BASIC. Přehled témat

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

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

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

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

PROGRAMOVATELNÉ LOGICKÉ OBVODY

Návrh čítače jako automatu

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Struktura a architektura počítačů

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

Řídicí struktury. alg3 1

5. STRUKTURA PLC PROGRAMU

Operace ALU. INP 2008 FIT VUT v Brně

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

Transkript:

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 Praze, fakulta informačních technologií Přednáška 4: VHDL- procesy Stručný obsah: deklarace a aktivace procesu, delta zpoždění, setrvačné a transportní zpoždění, simulační cyklus, sekvenční příkazy, příklady.

Procesy část programu, kterou lze dynamicky aktivovat v závislosti na vnější události ( ve VHDL pouze změna hodnoty signálu), provádění procesu lze přerušit a později (v závislosti na vnější události či čase) lze pokračovat od místa posledního přerušení, všechny procesy ve VHDL jsou implicitně periodické, princip aktivace: kooperativní multitasking ( každý proces dobrovolně odevzdá řízení synchronizačnímu jádru), dokončení procesu nebo explicitně vyžadovaný přechod (wait) Aktivní. automatický přechod Suspendovaný na začátku simulace (v čase 0) je automaticky zajištěná aktivace všech procesů. 21.10.2011 MI-SIM Jiří Douša 2

Příkaz procesu Syntax: [<label>] process [ ( citlivostní seznam) + -- deklarativní část (lokální deklarace): *datové typy a podtypy+, *proměnné a konstanty+, [procedury a funkce], [ soubory]. -- příkazová část (následují přípustné příkazy): příkaz assert (sekvenční), signálový přiřazovací příkaz (sekvenční), přiřazovací příkaz pro proměnné, volání podprogramů (sekvenční), if..then.. elsif.. else.., příkazy wait, case, loop, exit, return, null. end process [ <label> ]; Poznámky: z procesu nelze nic exportovat, proces jako celek je jedním z paralelních příkazů. 21.10.2011 MI-SIM Jiří Douša 3

Aktivace procesů citlivostní seznam: seznam signálů, jejichž změna způsobí provedení procesu od začátku, procesy s citlivostním seznamem nejsou přerušitelné příkazem wait, po ukončení procesu - odevzdání řízení jádru. příkaz wait: vytvoří reaktivační bod, přeruší proces a odevzdá řízení jádru, nutné stanovit podmínky pro příští pokračování procesu, příklady forem příkazu wait: wait for 10 ns; -- čeká po dobu 10 ns wait on a; -- čeká na změnu signálu a wait until a = 1 ; --čeká na změnu signálu a která končí hodnotou 1 (náběžná hrana) wait until a = 0 ; -- čeká na závěrnou hranu wait [on a] [ until b = 1 ] [ for 10ns]; -- proces pokračuje -- tehdy nastane-li událost na signálu a současně je --splněna podmínka b = 1 (max. doba čekání 10 ns), wait; -- čeká navždy 21.10.2011 MI-SIM Jiří Douša 4

Příklady aktivace procesů 1) 2) 3) 4) 5) 6) process (a) process process b<=not a; b<=not a; P4 P5 end; wait on a; b<=not a; end; P6 end; a 0 10 20 30 40 50 60 1),2) časy aktivace procesu b 4) inic. P4: wait on a; 5) inic. P5: wait until a = 1 ; 6) 3)...zacyklení procesu P6: wait until a = 1 for 10 ns; 21.10.2011 MI-SIM Jiří Douša 5

Přiřazování hodnot v procesu proměnným: okamžitě při provedení příkazu, signálům: po provedení všech fází všech naplánovaných procesů (po uplynutí delta zpoždění) důvod: vytvořit ilusi paralelního výpočtu, případně vyloučit vliv pořadí vyhodnocování procesů Příklad 1: vzájemně komunikující procesy P1, P2, P3 a P1 P2 P3 out a) pořadí bez delta: P1, P2, P3.bez zákmitů nebo P1,P3, P2, P3..zákmit na out nebo P2, P1,P3...bez zákmitů nebo P2, P3,P1,P3.zákmit na out nebo P3, P1,P2,P3.zákmit nebo P3,P2,P1,P3..zákmit b) pořadí s delta: P1, P2, P3, ulož. hodnot, P3 nebo P1, P3, P2, ulož. hodnot, P3 nebo P3, P1, P2, ulož. hodnot, P3 nebo P3,P2,P1, ulož. hodnot, P3 nebo P2,P1,P3, ulož. hodnot, P3 nebo P2,P3,P1, ulož. hodnot, P3 21.10.2011 MI-SIM Jiří Douša 6

Přiřazování hodnot v procesu Příklad 2: a P1 P2 P3 P4 P5 b 1) změna a...postupný výpočet P1, P2, P3, P4, P5 2) změna b současný výpočet všech procesů vliv pořadí bez delta: i) předpoklad: b je hranově citlivý hodinový vstup posuvného registru: pořadí např.: P1, P2, P3, P4, P5.špatně, pořadí např.: P5, P4, P3, P2, P1.správně, j) předpoklad: b není hranově citlivý vstup (např. kombinační obvod ): pořadí např. P1, P2, P3, P4, P5..správně např.: P5, P4, P3, P2, P1, P2, P3, P4, P5...po ustálení správně, ale různá pořadí produkují různé zákmity vliv pořadí s delta: i) b je hranově citlivý vstup posuvného registru: libovolné pořadí výpočtů všech procesů následované uložením výsledných hodnot za jediné delta.správně j) b není hranově citlivý vstup ( jde např o kombinační obvod): lib. pořadí všech (např.: P1, P2, P3, P4, P5), delta, uložení hodnot, lib. pořadí (např.: P2, P3, P4, P5), delta, uložení hodnot, lib. pořadí (např. P3, P4, P5), delta, uložení hodnot, lib. pořadí (např. P4, P5), delta, uložení hodnot, P5, uložení hodnot,..stejné výstupní zákmity pro všechna možná pořadí 21.10.2011 MI-SIM Jiří Douša 7

Přiřazování hodnot v procesu Příklad: rozdíly v chování procesů P0, P1 P0: process P1: process--necht a, b jsou variable a,b:integer:=0; -- signály typu integer a: = a+1; a <= a + 1; b: = a+1; b <= a + 1; wait for 10 ns; wait for 10 ns; end process ; end process ; b P0 P1 3 2 1 0 b a b a a 10 20 30 a,b a,b ns pozor: toto není nejvhodnější znázornění delta zpoždění reálný čas delta zpoždění uložení hodnot aktivace procesů 21.10.2011 MI-SIM Jiří Douša 8

Přiřazování hodnot Příklad 1: jiné znázornění delta zpoždění v procesu P1 delta (viz minulý slide) delta proces P1 proces P0 1 1...uložení a,b 0 0 ns 10 20 30 10 20 30 modelový čas [ns] Příklad 2: P1, P2, P3 procesy a b c d P1 e P2 f P3 g delta 3 2 1 změna g změna f, g: aktivace P3 změna e,f, g: aktivace P2,P3 změna a, b, c, d: aktivace P1, P2, P3 změna g změna f: aktiv. P3 změna c: aktivace P2 model. čas 21.10.2011 MI-SIM Jiří Douša 9

Simulační cyklus ve VHDL Start inicializace proměnných a signálů, time:=0 provedení všech procesů simulačního programu (bez uložení hodnot) existuje delta zpoždění? + - posun modelového času uložení vypočtených hodnot signálů a naplánování příslušných citlivých procesů Konec simulace? + Stop - provedení procesů citlivých na právě provedené změny signálů (bez uložení vypočtených hodnot) 21.10.2011 MI-SIM Jiří Douša 10

Odložený proces novinka ve VHDL-93 účel: definovat poslední události pro určitou hodnotu model.času => operační část je spuštěna až po ustálení hodnot všech signálů v daném časovém okamžiku (např. výstup hodnot do souboru) deklarace: postponed process ( ) end process; microtime -delta intervaly time provedení odloženého procesu macrotime omezení: může být pouze jeden odložený proces v operační části nelze použít příkaz wait s nulovým zpožděním v signálových přiřazovacích příkazech musí figurovat nenulové zpoždění 21.10.2011 MI-SIM Jiří Douša 11

Zápis do souboru Příklad: zápis ustálených hodnot signálů a, b ( v okamžiku změny některého z nich) do textového souboru; předpoklad: signal a,b: bit_vector (7 downto 0); zápis okamžité hodnoty modelového času pro který nastala změna některého z uvedených signálů postponed process (a, b, c, d) file vystup: text open write_mode is s1.dat ; -- VHDL-93 variable BUF : line; variable va, vb : bit_vector (7 downto 0); va := to_bitvector ( a); vb := to_bitvector ( b); write ( BUF, now); -- uložení hodnoty modelového času write (BUF, va); write (BUF, vb); writeline (vystup, BUF); -- fyzický výstup hodnoty času a -- dvojice osmic bitů end process; 21.10.2011 MI-SIM Jiří Douša 12

Modely zpoždění 2 typy zpoždění: transportní: Y <= transport X after <zpoždění>; propouští všechny pulsy, vhodné pro simulaci spojů setrvačné: Y <= X after <zpoždění;>; implicitní, vhodné pro zpoždění součástek nepropouští užší pulsy než je vlastní zpoždění pokud příkaz obsahuje zápis více hodnot, pak se chápe jako transportní zpoždění y <= 0 after 1 ns, 1 after 2 ns, 0 after 3 ns,.; při opakovaném provedení příkazu jeho funkce závisí na intervalech mezi jednotlivými provedeními a na hodnotách zpoždění při každém provedení příkazu se plánují všechny zmíněné hodnoty od začátku a rozdíly jsou následující: dopravní zpoždění - nově plánovaná hodnota pro čas t N zruší všechny původně naplánované hodnoty, které byly naplánovány pro hodnoty modelového času větší než t N setrvačné zpoždění- při plánování nové hodnoty se vždy ruší původní naplánovaná hodnota VHDL-93: Y <= reject 2 ns X after 5 ns; -- se zpožděním 5 ns propouští pulsy delší než 2 ns 21.10.2011 MI-SIM Jiří Douša 13

Modely zpoždění: Příklad: transportní zpoždění demonstrace vlivu několika navzájem zpožděných příkazů na výslednou hodnotu signálu X <= transport 1 after 10 ns; --předpoklad: now =0 wait for 12 ns; X <= transport 0 after 10 ns; --now = 12 wait for 6 ns; X <= transport 1 after 10 ns; --now = 18 wait for 2 ns; X <= transport 0 after 20 ns; --now = 20 wait for 2 ns; X <= transport 1 after 10 ns; --now = 22 0 10 20 30 40 time ruší se hodnota 0 naplánovaná pro čas 40 21.10.2011 MI-SIM Jiří Douša 14

Modely zpoždění: setrvačné zpoždění - demonstrace vlivu několika navzájem zpožděných příkazů na výslednou hodnotu signálu X <= 1 after 10 ns; --předpoklad: now = 0 wait for 12 ns; X <= 0 after 10 ns; --now = 12 wait for 6 ns; X <= 1 after 10 ns; --now = 18; zruší 0 (naplánovaná. na 22) wait for 2 ns; X <= 0 after 20 ns; --now = 20; zruší 1 (naplánovaná na 28) wait for 2 ns; X <= 1 after 10 ns; --now = 22; zruší 0 (naplánovaná na 40) 0 10 20 30 40 time x x x ruší se 21.10.2011 MI-SIM Jiří Douša 15

Příkaz if výběr jedné nebo žádné skupiny příkazů if <podmínka> then <příkazy> [elsif <podmínka> then <príkazy>+. [else <příkazy>+ --žádná podmínka end if; příklad: úplná jednobitová sčítačka - návrh dle pravdivostní tabulky : vstupy.. bin_input výstupy.s (soucet), c (přenos) if bin_input = 000 then s <= 0 ; c <= 0 ; elsif bin_input = 001 then s <= 1 ; c <= 0 ; elsif bin_input = 010 then s <= 1 ; c <= 0 ; elsif bin_input = 011 then s <= 0 ; c <= 1 ;.. elsif bin_input = 110 then s <= 0 ; c <= 1 ; else s <= 1 ; c <= 1 ; end if; 21.10.2011 MI-SIM Jiří Douša 16

Příkaz cyklu Existují 2 typy: 1) [<label>]: for <proměn. cyklu> in <rozsah> loop <příkazy> end loop [<label>]; řídící proměnná cyklu je deklarována implicitně v cyklu nelze měnit hodnotu řídící proměnné zjednodušená verse cyklu ve spojení s příkazem exit: [<label>]: loop <příkazy> exit [<label>] <příkazy> end loop; příkaz exit: ukončí provádění cyklu exit [< label>]; -- pokud chybí< label>, ukončí -- se nejbližší uzavírající cyklus exit [<label>] when <podmínka>;--podmíněné --ukončení cyklu, jinak efekt jako nepodmíněný exit příkaz next: předá řízení příští iteraci cyklu next [<label>] [when <podmínka>+; --ohledně výskytu <label> a ohledně <podmínka> platí totéž co v případě exit 21.10.2011 MI-SIM Jiří Douša 17

Příkaz cyklu 2) [<label>]: while <podmínka> loop --příkazy cyklu end loop [< label>]; Příklady ekvivalentních cyklů L1, L2, L3, L4 process ( ) variable p: integer := 7; L1: for i in 7 downto 0 loop..; end loop; -- i není třeba explicitně deklarovat L2: loop..;p := p-1; exit when p < 0 ; end loop; -- počáteční hodnota p - viz deklarace L3: loop. ;p:= p-1; if p<0 then exit; end if; end loop; -- exit uvnitř příkazu if L4: while p >= 0 loop.;p:= p-1; end loop; end process; 21.10.2011 MI-SIM Jiří Douša 18

Testování hodnot signálů Hodnoty signálů nelze testovat bezprostředně po provedení signálových přiřazovacích příkazů př.: process (..); x <= b ; -- příkaz, který neobsahuje nenulové zpoždění if x = 010 then...end if; -- tento test -- nemá smysl: v důsledku delta zpoždění zde nelze očekávat -- hodnotu přiřazenou výše end process; možná řešení: pozdržet process do provedení skutečné změny signálu: x <= b ; wait for 0 sec; --pozdržení procesu na dobu delta if x = 010 then end if; --smysluplný test nahradit signál lokální proměnnou téhož typu: pom:= b ; --hodnota signálu b do proměnné pom if pom = 010 then.end if ;--smysluplný test 21.10.2011 MI-SIM Jiří Douša 19

Příkaz case v příkazu musí být testovány všechny přípustné hodnoty výrazu, tutéž hodnotu nelze citovat vícekrát case <výraz> is when <výběr> => <příkazy> when <výběr> => <příkazy>... [when others => <příkazy>+ -- výběr všech dosud -- necitovaných hodnot ( musí být poslední ) end case; poznámky: when others => null ; -- prázdný příkaz when others => ; -- prázdný příkaz ukázky možností pro výběr: 7 downto 0 pouze pro integer, 1 2 3 1 nebo 2 nebo 3, 0101 pro bit_vector příklad: úplná jednobitová sčítačka: case bin_input is when 001 010 100 => s <= 1 ; c <= 0 ; when 011 101 110 => s <= 0 ; c <= 1 ; when 000 => s <= 0 ; c <= 0 ; when 111 => s <= 1 ; c <= 1 ; end case; 21.10.2011 MI-SIM Jiří Douša 20

Simulace kombinačních obvodů Příklad: a & process (a, b,c ) b c 1 y y <= ( a and b ) or c after 10 ns; end process; všechny vstupy kombinačního obvodu musí být uvedeny v citlivostním seznamu nebo příkazu wait (jde o lokální signály příslušné architektury nebo vstupní porty příslušné entity) Příklad: multiplexor 4 x 1 model: viz následující slide a b c d y sel(0) sel(1) 21.10.2011 MI-SIM Jiří Douša 21

Model multiplexoru P1: process (a,b,c,d, sel) --použití příkazu if if sel = 00 then y <= a after 5 ns; elsif sel = 01 then y <= b after 5 ns; elsif sel = 10 then y <= c after 5 ns; else y <= d after 5 ns; end if; end process P1; P2: process (a,b,c,d, sel) --použití příkazu case case sel is when 00 => y <=a after 5 ns; when 01 => y <=b after 5 ns; when 10 => y <=c after 5 ns; when 11 => y <=d after 5 ns; end case; end process P2; 21.10.2011 MI-SIM Jiří Douša 22

Model násobičky předpokládané deklarace: signal a, b: std_logic_vector (3 downto 0); --operandy signal soucin: std_logic_vector (7 downto 0); --pro výsledek.. process (a, b) --a,b...vstupy násobičky variable P0, P1, P2, P3:std_logic_vector (7 downto 0); constant Nula: std_logic_vector:= 00000000 ; --analogie paralelní násobičky if b(0) = 1 then P0:= ( 0000 & a); --1.částečný.součin else P0:= Nula; end if; if b(1) = 1 then P1:= ( 000 & a & 0 ); --2. částečný součin else P1:= Nula; end if; if b(2) = 1 then P2:= ( 00 & a & 00 ); --3. částečný součin else P2:= Nula; end if; if b(3) = 1 then P3:= ( 0 & a & 000 ); --4. částečný součin else P3:= Nula; end if; soucin <= P0 +P1 + P2 + P3; --součet částečných součinů -- operátor + je definován v knihovně ieee.std_logic_unsigned -- pro datové typy std_logic a std_logic_vector end process; 21.10.2011 MI-SIM Jiří Douša 23

Model násobičky -- jiná realizace násobičky nezáporných čísel -- předpokládané deklarace: viz předchozí příklad -- následující proces využívá příkaz cyklu process (a, b) variable res, pom: std_logic_vector ( 7 downto 0 ); --analogie sekvenční násobičky res := 00000000 ; --proměnná pro kumulaci částeč. součinů for i in 0 to 3 loop pom:= 00000000 ; --pro vytvoření částečných součinů if b(i) = 1 then pom ((i+3) downto i):= a; end if; res := res + pom; --postupná kumulace část. součinů end loop; soucin <= res; end process Násobička; další možnosti a) přímé vynásobení vektorů s využitím operátoru z matematické knihovny b) konverse binárních vstupních vektorů na čísla typu integer, použití operátoru násobení čísel typu integer, zpětná konverse výsledku do binárního vektoru 21.10.2011 MI-SIM Jiří Douša 24

Simulace sekvenčních obvodů Příklad zapojení sekvenčního obvodu: P1 P3 x a w(2) P2 y(1) b w(1) y(2) w(0) clk entity E is port (a, b, clk: in bit; architecture A of E is x: out bit; y: out bit_vector (2 downto 1) ) ; end E; signal w:bit_vector ( 2 downto 0 ); --lokální signály P1: process..end process P1; P2: process.end process P2; P3: process..end process P3; end A; Poznámka.: rozdělení obvodu do procesů lze provést různě; je možné navrhnout i jediný proces 21.10.2011 MI-SIM Jiří Douša 25

Synchronizace procesů viz předchozí příklad - pokračování: P1: process -- clocked process wait until clk = 1 ; -- synchronizace hod. pulsy w(2) <=...a b.. ; -- výstup klopného obvodu w(1) <=..; w(0) <=...;-- výstupy klopných obvodů end process P1; P2: process P2 -- clocked process wait until clk = 1 ; -- synchronizace hodin. pulsy y(1) <=.; y(2) <= ; end process P1; P3: process (w(1), w(2)) -- vstupy kombinační části -- kombinační obvod x <= ; --výstup komb. členu připojený na port x end process P3; 21.10.2011 MI-SIM Jiří Douša 26

Modely klopných obvodů Příklad: din clk dout res_n -- následují různé varianty klopného obvodu entity D is port ( din, res_n, clk: in bit; dout: out bit ); end D; D typ, hranový bez možnosti nulování architecture Arch of D is D1: process wait until clk = 1 ; -- synchronizace dout <= din after.; end process D1; end Arch; process (clk) -- proces s ekvivalentním chováním jako D1 if clk = 1 [ and clk event ] then dout <= din after.; end if; end process; 21.10.2011 MI-SIM Jiří Douša 27

Modely klopných obvodů D typ, hranový, synchronní nulování: process wait until clk = 1 ; if res_n = 0 then dout <= 0 after...; else dout <= din after...; end process; end if; proces (clk) -- jiný zápis téhož chování: if clk = 1 and clk event then if res_n = 0 then dout <= 0 after.; -- nulování else dout <= din after...; -- zápis vstupu end if; end if; end process; D typ, hranový, asynchronní nulování: process (clk, res_n) if res_n = 0 then dout <= 0 ; elsif clk event and clk = 1 then dout <= din; end process; --nulování --zápis vstupu end if; 21.10.2011 MI-SIM Jiří Douša 28

Modely klopných obvodů D typ, hladinový, asynchronní nulování: process (din, clk, res_n) if res_n = 0 then dout <= 0 ; elsif clk = 1 then dout <= din ; end if ; end process; D typ, hranový, asynchronní nulování, uvolňovací vstup: din en clk res_n D dout process (clk, res_n) if res_n = 0 then dout <= 0 ; --nulování elsif clk event and clk = 1 then if en = 1 then dout <= din; -- uvolňovací vstup [ else null ; ] end if; end if; end process; 21.10.2011 MI-SIM Jiří Douša 29

Modely klopných obvodů Příklad: kompletní model osmibitového hranového paralelního registru s asynchronním nulováním: entity Reg is port ( din: in bit_vector ( 7 downto 0 ) ; end Reg; dout: out bit_vector ( 7 downto 0 ) ; clk, res_n: in bit ); architecture Arch of Reg is -- nejsou potřeba žádné lokální signály process (clk, res_n) if res_n = 0 then dout <= (others => 0 ); --nulování elsif clk event and clk = 1 then dout <= din; --zápis všech vstupů end if; end process; end Arch; 21.10.2011 MI-SIM Jiří Douša 30

Modely automatů Příklad: automatový model sériové sčítačky 00/0 01/1 10/1 Q0 11/0 00/1 Q1 01/0 10/0 11/1 entity Scit is port (x, y, clk: in bit; s: out bit); architecture Ascit of Scit is type stav is (Q0, Q1); signal sstav, pstav: stav; K1: process (sstav, x, y) --přechodová funkce case sstav is end Scit; when Q0 => if x = 1 and y = 1 then pstav <= Q1; else pstav <= Q0; end if; when Q1 => if x = 0 and y = 0 then pstav <= Q0; else pstav <= Q1; end if; end case; end process K1; K2: process (sstav, x, y) --výstupní funkce case sstav is when Q0 => if (( x xor y) = 1 ) then s <= 1 ; else s <= 0 ; end if; when Q1 => if (( x xor y ) = 1 ) then s <= 0 ; else s <= 1 ; end if; end case; end process K2; FF:process wait until (clk= 1 ); sstav <=pstav; end process; end AScit; 21.10.2011 MI-SIM Jiří Douša 31

Modely automatů použití jednoho procesu pro modelování sériové sčítačky: process (clk, x, y) type stav is (Q0, Q1); variable sstav, pstav: stav; -- nositel vnitřního stavu case sstav is when Q0 => if x = 0 and y = 0 then s <= 0 ; pstav := Q0; elsif x = 0 and y = 1 then s <= 1 ; pstav := Q0; elsif x = 1 and y = 0 then s <= 1 ; pstav := Q0; elsif x = 1 and y = 1 then s <= 0 ; pstav:= Q1; end if; when Q1 => if x = 0 and y = 0 then s <= 1 ; pstav:= Q0; elsif x = 0 and y = 1 then s <= 0 ; pstav:= Q1; elsif x = 1 and y = 0 then s <= 0 ; pstav:= Q1; elsif x = 1 and y = 1 then s <= 1 ; pstav:= Q1; end if; end case; if (clk event and clk = 1 ) then sstav := pstav; end if; end process; -- tento model není správný!!!!! 21.10.2011 MI-SIM Jiří Douša 32

Modely automatů Příklad: použití jediného procesu pro simulaci jednobitové sčítačky, který využívá předchozích tabulek process (clk, x, y, sstav) type stav is (Q0,Q1); variable pstav : stav; type tab_stavu is array (stav, bit, bit) of stav; type tab_bitu is array (stav, bit, bit) of bit; constant prechody: tab_stavu:= (Q0 => ( 0 => (Q0, Q0), 1 => (Q0, Q1)), (Q1 => ( 0 => (Q0, Q1), 1 => (Q1, Q1)); -- prvé dva indexy : jmenné mapování -- třeti index: posični mapování constant vystup: tab_bitu := tab_bitu' ( Q0 => ( '0'=> ("01"), '1' => ("10") ) Q1 => ( '0'=> ("10"), '1' => ("01") ) ); pstav := prechody (sstav, x, y); --výpočet budící funkce s <= vystup (sstav, x, y); --výpočet hodnoty součtu if ( clk event and clk = 1 ) then sstav <= pstav; end if; end process; 21.10.2011 MI-SIM Jiří Douša 33