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

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

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

14. Složitější konstrukce

12. VHDL pro verifikaci - Testbench I

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

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

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

Chapter Základní principy simulace :).

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

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

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

Programovací jazyk Pascal

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

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

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

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

Návrh ovládání zdroje ATX

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

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.

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

Vývoj VHDL. Verilog HDL

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

Číslicové obvody a jazyk VHDL

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

1 Stručný popis jazyku VHDL

Úvod do programovacích jazyků (Java)

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

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

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

Sdílení dat mezi podprogramy

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

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

1. Seznamte se s výukovou platformou FITkit (

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

2. Entity, Architecture, Process

Jazyk PL/SQL Úvod, blok

PŘETĚŽOVÁNÍ OPERÁTORŮ

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

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

Algoritmizace a programování

Architektura počítačů Logické obvody

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

Architektura počítačů Logické obvody

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

Knihovna WebGraphLib

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

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

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

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

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

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

dovolují dělení velkých úloh na menší = dekompozice

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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

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

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

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

SEKVENČNÍ LOGICKÉ OBVODY

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

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

Návrh. číslicových obvodů

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

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

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

NPRG030 Programování I, 2015/16 1 / :25:32

Programování v jazyce JavaScript

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.

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

1. D Y N A M I C K É DAT O V É STRUKTUR Y

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

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

7. Popis konečného automatu

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

Struktura programu v době běhu

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

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

Algoritmizace a programování

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

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Cíle. Teoretický úvod

PODPROGRAMY PROCEDURY A FUNKCE

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

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

PCKEYB JEDNOTKA PRO OBSLUHU KLÁVESNICE TYPU PC AT. Příručka uživatele a programátora

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

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

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.

Zápis programu v jazyce C#

Empty, Null, Nothing, Missing, prázdný řetězec a buňka

8 Třídy, objekty, metody, předávání argumentů metod

Jazyk C++, některá rozšíření oproti C

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

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 5: VHDL- atributy signálů, funkce a procedury Stručný obsah: budiče signálů, atributy signálů, příkaz assert, pasivní procesy, odpojování budičů v sekvenčním prostředí, sdílené proměnné, procedury a funkce, formální a aktuální parametry, přetěžování funkcí a operátorů, resoluční funkce.

Budiče signálů sdruženy se signálovými přiřazovacími příkazy ( nikoliv s deklaracemi signálů), vytvoření: v průběhu zpracování modelu a to pro každý element (v případě pole), každý process vytvoří budič pro každý uvnitř buzený signál, komponenta vytvoří budič pro každý aktuální výstupní port při své instalaci, příkaz paralelní procedury vytvoří budič pro každý aktuální výstupní parametr třídy signal, paralelní přiřazovací signálový příkaz vytvoří budič pro signál na levé straně, počáteční hodnota budiče = počáteční hodnotě přidruženého signálu ( implicitně nebo explicitně definované), syntetizátory ignorují počáteční nastavení portů a signálů, budič existuje po celou dobu simulace bez ohledu zda k přiřazení dojde či ne, 10.1.2012 MI-SIM Jiří Douša 2

Atributy signálů transakce (transaction) - přiřazení nové hodnoty signálu (bez ohledu zda dochází k její změně) přesněji dvojice: hodnota model. času + hodnota signálu budič signálu plánuje transakce; pro hodnoty modelového času rovné časům těchto transakcí nastává aktivita daného budiče událost (event) - transakce doprovázená změnou hodnoty signálu atributy: funkce: poskytují některé informace o transakcích nebo událostech na zvoleném signálu signály: druhotně odvozené od událostí či transakcí zvolených signálů; jsou použitelné opět jako signály funkce: s active...vrací hodnotu true (typ boolean), pokud je v daném simulačním cyklu signál s aktivní (nastala transakce) s last_active.vrací časový interval (hodnota typu time), který uplynul od poslední transakce na signálu s; pokud transakce nikdy nenastala, má funkce hodnotu 0 10.1.2012 MI-SIM Jiří Douša 3

Atributy signálů s event...vrací hodnotu true pokud v daném simulačním cyklu nastala změna hodnoty signálu s s last_event. vrací časový interval (hodnoty typu time), který uplynul od poslední události na signálu; pokud událost nikdy nenastala je hodnota funkce 0, s last_value..vrací hodnotu signálu s před poslední událostí; pokud událost nikdy nenastala, je hodnota funkce rovna současné hodnotě signálu, signály: s delayed..vytvoří nový signál stejného typu, ale zpožděný o delta zpoždění, s delayed (T).vytvoří nový signál stejného typu, ale zpožděný o hodnotu T, s stable.nový signál typu boolean, který má hodnotu true, pokud v daném simulačním cyklu nenastala na signálu s žádná událost, 10.1.2012 MI-SIM Jiří Douša 4

Atributy signálů s stable (T).nový signál typu boolean, který má hodnotu true pokud na signálu s nenastala během intervalu T žádná událost; v opačném případě má hodnotu false, s quiet..nový signál typu boolean, který má hodnotu true, pokud na signálu s v daném simulačním cyklu nenastala žádná transakce; v opačné případě má hodnotu false, s quiet (T)..nový signál typu boolean, který má hodnotu true pokud na signálu s nenastala během intervalu T žádná transakce, s transaction nový signál typu bit, který mění svou hodnotu při každém výskytu transakce na signálu s; nová hodnota je negací hodnoty předchozí, 10.1.2012 MI-SIM Jiří Douša 5

Atributy signálů Příklad použití: test předstihu a přesahu clk DATA předstih přesah a) individuální test předstihu idea: if náběžná hrana clk then if D je stabilní (v intervalu předstih) then OK else porušení př. způsob realizace : if clk = 1 and clk event then if not D stable (predstih) then porušení př. end if; end if; b) společný test: if clk delayed (presah) = 1 and clk delayed (presah) event then end if; if not D stable (predstih + presah) then porušení předstihu end if; 10.1.2012 MI-SIM Jiří Douša 6

Příkaz assert účel: test splnění nějaké podmínky (v okamžiku provedení příkazu) syntax: assert <podmínka> report <zpráva> severity < error level>; 4 úrovně chyb rozlišují vážnost situace- lze nastavit na kteroukoliv : note warning error failure effekt: pokud není splněná podmínka pak dojde k výstupu zprávy, případně zastavení simulace Příklady použití: 1) assert now <= 100 ms report vyčerpání času -konec simulace severity failure; -- ukončení simulace 2) if clk = 1 and clk event then assert D stable (predstih) report porušení předstihu severity warning; -- varování end if; Poznámka: nutné zajistit správný okamžik provedení!!!!!!!! 10.1.2012 MI-SIM Jiří Douša 7

Pasivní procesy ve VHDL nemají žádný výstup (kontrolní účely) lze je použít i v operační části entity Příklad: entity E is port (signal clk : bit;..); -- následuje operační část entity process (clk delayed (presah)) -- synchronizace --následuje sekvenční příkaz assert vložený do příkazu if if (clk delayed (presah) = 1 then assert (D stable (predstih + presah)) report nedodrzen predstih nebo presah severity error; end if; end process; end E; 10.1.2012 MI-SIM Jiří Douša 8

Synchronizace procesů příklad: producent - konsument : verse 1: producent konsument příprava dat BUF plnění bufferu producent konsument čtení bufferu zpracování dat Poznámka: zde je synchronizace pouze v jednom směru, proto musí být splněna podmínka: konsument je rychlejší než producent 10.1.2012 MI-SIM Jiří Douša 9

Producent - konsument: verse 1 prod: process -- tento proces je nezávislý na vnějších -- signálech wait for.; -- doba pro přípravu dat a plnění -- bufferu BUF <=..; --fyzické plnění bufferu end process; kons: process variable I: integer; wait on BUF transaction; --čeká na buffer wait for ; --doba pro výběr bufferu a pro --zpracování dat I:= BUF; -- fyzický výběr z bufferu end process; 10.1.2012 MI-SIM Jiří Douša 10

Producent - konsument: synchronizace producent konsument OFFER příprava dat ACK vyprazdňování bufferu plnění bufferu zpracování dat 10.1.2012 MI-SIM Jiří Douša 11

Producent - konsument: návrh verse 2 OFFER signály: producent ACK BUF konsument problém dvojího buzení signálů OFFER a ACK oba signály lze koncipovat jako pulsy, ale musí být očekávány přijímacím procesem producent příprava plnění. příprava plnění OFFER ACK OFFER konsument vyprázdnění zpracování podmínka: doba přípravy dat < doba vyprazdňování doba zpracování dat < doba plnění bufferu 10.1.2012 MI-SIM Jiří Douša 12

Producent - konsument: verse 2 prod: process variable start: boolean:= true; wait for.ns; -- příprava dat if not start then wait until ACK; else start := false; end if; wait for...ns; --čeká během plnění bufferu BUF <=...; OFFER <= true, false after 1 ns; -- puls OFFER end process prod; kons: process variable i:integer; wait until OFFER; wait for.ns; -- vyprazdňování bufferu I <= BUF; ACK <= true, false after 1 ns; -- puls ACK wait for.ns; -- zpracování dat end process kons; 10.1.2012 MI-SIM Jiří Douša 13

Producent - konsument: návrh verse 3 použití klopného obvodu natavovaného, resp. nulovaného z procesu producent, resp. konsument BUFFER producent konsument OFFER RS FF ACK NDATA producent přípr. pl. přípr. pl. konsument OFFER ACK NDATA vypr. zpr. 10.1.2012 MI-SIM Jiří Douša 14

Producent - konsument: verse 3 prod: process wait for.ns; -- příprava dat if NDATA then wait until not NDATA; end if wait for..ns; -- plnění bufferu BUF<= ; OFFER<= true, false after 1 ns; end process prod; kons: process variable I: integer; if not NDATA then wait until NDATA; end if; wait for.ns; --čtení dat z bufferu I:= BUF; ACK<= true, false after 1 ns; wait for..ns; --zpracování dat end process kons; RS_FF: process (OFFER, ACK) if OFFER event and OFFER=true then NDATA <= true; end if; if ACK event and ACK =true then NDATA <= false; end if; end process; 10.1.2012 MI-SIM Jiří Douša 15

Producent - konsument: návrh verse 4 BUF producent konsument ano ne NDATA pouze indikace připravených dat problémy: 2 budiče signálu NDATA (v procesu producent i konsument) => nezbytná resoluční funkce lze využít: a) odpojování signálů po zápisu hodnoty (je potřeba pamatovat poslední uloženou hodnotu ) b) koncipovat objekt NDATA jako sdílenou proměnnou (pouze ve VHDL-93) 10.1.2012 MI-SIM Jiří Douša 16

Odpojování budičů v procesu budiče lze odpojovat pouze od strážených signálů zasláním hodnoty null strážený (quarded) signál: jde o rozhodovaný (resolved) signál doplněný klíčovým slovem register nebo bus - další viz později signal c : std_logic register := '0'; -- strážený signál P1: process c <= null; -- odpojení budiče wait for 1 ns; c <= '1'; -- zápis hodnoty do signálu wait for 0 ns; c <= null; -- odpojení budiče end process P1; P2: process c <= null; wait for 2 ns; c <= '0'; wait for 0 ns; c<= null; end proces P1; P1: P2: 1 X 0 0 1 2 3 4 ns 10.1.2012 MI-SIM Jiří Douša 17

Producent konsument: verse 4 signal NDATA: std_logic register := '0 -- strážený signál prod: process NDATA <= null; -- odpojení budiče wait for...ns; -- příprava dat if NDATA = '1' then wait until NDATA = '0'; end if; wait for... ns; -- doba plnění bufferu BUF <=.; -- skutečné plnění bufferu NDATA <= '1'; wait for 0 ns; --indikace dat end process; kons: process variable i : bit; NDATA <= null; --odpojení budiče if NDATA = '0' then wait until NDATA = '1'; end if; wait for... ns; -- doba vyprazdňování bufferu i :=.; -- čtení bufferu NDATA <= '0'; wait for 0 ns; -- zrušení indikace dat NDATA <= null; -- odpojení budiče wait for... ns; -- zpracování dat end process; 10.1.2012 MI-SIM Jiří Douša 18

Sdílené proměnné VHDL - 93: zavádí sdílené proměnné: mohou zajistit přenos hodnot mezi procesy nejsou dostupné v paralelním prostředí a nemohou být začleněny do citlivostních seznamů procesů Producent - konsument: návrh verse 5 producent BUF konsument NDATA tik sdílená proměnná producent konsument NDATA tik BUF příprava dat plnění BUF 10.1.2012 MI-SIM Jiří Douša 19

Producent - konsument: verse 5 shared variable NDATA: bolean:= false; --do této proměnná mohou zapisovat oba procesy; zde je použita k pozastavení rychlejšího procesu signal BUF: integer; signal tik: bit; --signál BUF, resp. tik slouží k aktivaci procesu kons, resp. prod prod: process wait for..ns; if NDATA then wait on tik; end if; wait for.ns; BUF <= ; NDATA := true; end process; -- příprava dat --čeká na tik --plnění kons: process variable I: integer; if not NDATA then wait on BUF transaction; end if; wait for ; --doba výběru z bufferu I:=BUF; NDATA:= false; tik <= not tik; -- aktivace případně čekajícího producenta wait for.; -- doba zpracování end process; 10.1.2012 MI-SIM Jiří Douša 20

Podprogramy uvnitř představují sekvenční prostředí inicializace proměnných: implicitní nebo explicitní, (na rozdíl od procesu při každém volání) je možné přetěžování podprogramů (overloading) podprogramy lze volat rekursivně je možné přetěžování operátorů (jako deklarace funkcí se jménem operátoru) je-li formálním parametrem pole (např. bit_vector) není třeba specifikovat rozměr nedovolují vedlejší efekty možné deklarace: v knihovně (package) : po zpřístupnění možno použít v různých architekturách, v entitě: dostupná ve všech architekturách dané entity, v architektuře: lokální v dané architektuře, v procesu: lokální v procesu procedura : parametry: signály, proměnné, konstanty volání: sekvenční: v procesu nebo jiné proceduře (parametry: signály, proměnné i konstanty) paralelní: v paralelním prostředí (parametry: pouze signály a konstanty) 10.1.2012 MI-SIM Jiří Douša 21

Procedury Přiklad: násobička nezáporných čísel pro typ std_logic architecture Arch of..; signal a,b: std_logic_vector ( 3 downto 0 ); signal soucin: std_logic_vector ( 7 downto 0 ) :="00000000"; procedure NAS (signal a, b : in std_logic_vector (3 downto 0); signal soucin : out std_logic_vector (7 downto 0) ) is variable res, pom: std_logic_vector ( 7 downto 0 ); lok. prom. res := "00000000"; -- pro kumulaci částečných součtů for i in 0 to 3 loop pom := "00000000"; --pro vytváření jednotlivých částeč. součtů if b(i) = '1' then pom (( i+3 ) downto i) := a; end if; res := res + pom; -- tento operátor vyžaduje dat. typ std_logic end loop; soucin <= res; [ return ]; end procedure ; -- následuje paralelní prostředí..; NAS (a,b, soucin); --paralelní volání procedury..; end Arch; 10.1.2012 MI-SIM Jiří Douša 22

Procedury Příklad: násobička pro datový typ bit_vector procedure NAS ( signal a, b : in bit_vector (3 downto 0); signal soucin : out bit_vector (7 downto 0) ) variable res, pom : bit_vector ( 7 downto 0 ); variable c, s: bit; -- přenos a jednobitový součet is res := "00000000"; -- pro kumulaci částečných součtů L1: for i in 0 to 3 loop pom := "00000000"; --pro vytváření časteč. součinů if b(i) = '1 then pom (( i+3 ) downto i) := a; end if; c : = 0 ; -- přenos mezi binárními řády L2: for j in 0 to 7 loop --realizace seriové sčítačky s := res(j) xor pom (j) xor c ; -- součet j-tého řádu c := ( res(j) and pom (j) ) -- přenos pro j+1 řád or ( pom (j) and c) or ( res(j) and c ); res (j) := s; -- jeden bit částečného součtu end loop L2; -- konec přičtení částečného součtu end loop L1; soucin <= res; end procedure NAS; 10.1.2012 MI-SIM Jiří Douša 23

Inicializace formálních parametrů procedury nelze inicializovat: formální parametry třídy signal, formální parametry třidy variable módu out nebo inout, Příklad: procedure P ( constant C1: in bit := 0 ; -- OK constant C2: out bit := 1 ; -- error : chybný mód constant C3: inout bit := 0 ; -- error : chybný mód variable V1: in bit := 0 ; -- OK variable V2: out bit := 0 ; -- error : nelze inicializovat variable V3: inout bit := 0 ; -- error signal S1: in bit := 0 ; -- error signal S2: out bit := 0 ; -- error signal S3: inout bit := 0 ; ) error v případě inicializovaného parametru třídy variable a módu in lze aktuální parametr při volání podprogramu vynechat, hodnota aktuálního parametru má větší prioritu než hodnota příslušného inicializovaného parametru třídy variable a módu in, 10.1.2012 MI-SIM Jiří Douša 24

Atributy aktuálních signálů pokud je aktuálním parametrem podprogramu signál pak v operačních částech těchto podprogramů nejsou dostupné ty atributy aktuálních parametrů, které jsou třídy signal, jako aktuální parametr procedury je možné použít některý z atributů signálu: Příklad: process ( clk ) -- flip-flop -- test předstihu koncipujeme voláním procedury test: if (clk event and clk = 1 ) then endif ; end process; test ( D = > D ); Q < = D after 4 ns; 1) nepřípustná varianta procedury test: procedure test ( signal D : in bit ) is assert D stable ( 8 ns ) error: atribut signál report severity..; end test; 10.1.2012 MI-SIM Jiří Douša 25

Atributy aktuálních signálů 2) přípustná varianta procedury test: procedure test ( signal D : in bit ) is assert not D last_event < 8 ns -- OK: jde o atribut funkci report severity..; end test; Příklad: process (clk) -- flip-flop if (clk event and clk = 1 ) then -- atribut signálu D je použit jako aktuální parametr test ( D = > D stable ( 8 ns) ); Q < = D after 4 ns; endif ; end process; procedure test ( signal D : boolean ) is assert D report severity..; end test; 10.1.2012 MI-SIM Jiří Douša 26

Formální a aktuální parametry podprogramů třída FP mód FP třída AP omezení AP signal in signal statický signal inout viz. 1), 2) out variable in variable, out file (pouze VHDL 87) inot constant in signal, variable, literal, konstantní výraz file (VHDL 93) in file out 1) statický signal je-li formálním parametrem signal typu pole, pak dimenze AP musí být určena v průběhu zpracování modelu 2) při vzájemném mapování aktuálních a formálních parametrů třídy signal nelze použít žádnou funkci aplikovanou na formální část nebo na aktuální část, 3) je-li FP omezené pole, pak rozměr AP musí souhlasit s rozměrem FP 4) AP musí být typu jako FP nebo musí být ve vztahu typu a podtypu, 5) je-li FP typu pole, pak při mapování na AP lze toto provést tak, že pro dílčí řezy FP lze použít více aktuálních parametrů př.: Proc ( s(7) =>, s(6 downto 0 ) => ); 10.1.2012 MI-SIM Jiří Douša 27

Formální a aktuální parametry podprogramů Příklad: entity E is ( generic g1: integer := 3 ) end E; architecture A of E is procedure P1 ( signal S: inout bit_vector ) is.end P1; function F1 ( signal R: in bit_vector ) return bit_vector is..end P1; signal S1: integer := 4; -- přiřazení provedeno na začátku simulace! signal S2: bit_vector ( 0 to 7); P1 ( S => S2 ( 0 to 7 ) ); ; -- OK P1 ( S => S2 ( 0 to S1) ); -- error: řez signálu S2 není static -- S1 není vyhodnocen při analýze nebo při zpracování entity ; P1 ( S => S2 ( 0 to g1) ); ; P1 ( S => F1 ( R =>S2 ) ); ; end A; -- OK, g1 je static -- error: funkce aplikovaná na AP -- třídy signal 10.1.2012 MI-SIM Jiří Douša 28

Přiřazování budičů pro každý formální parametr třídy signál, který je módu out nebo inout se v podprogramu vytvoří budič, při každém volání podprogramu se budič takového formálního signálu sloučí s budičem aktuálního parametru třídy signal => přiřazení hodnoty formálnímu signálu = přiřazení hodnoty příslušnému aktuálnímu signálu, Důsledek pro buzení nelokálních signálů uvnitř procedur: 2 případy: procedura je deklarována v deklarační části architektury: procedura nevlastní budiče signálů, které nefigurují jako formální parametry módu out nebo inout => vedlejší efekty na signálech nejsou přípustné procedura je deklarována uvnitř procesu všechny porty entity a signály architektury jsou viditelné uvnitř procesu, proces vlastní budiče všech signálů vyskytujících se na levé straně přiřazovacích signálů => buzení signálů či portů, které nejsou v seznamu formálních parametrů procedury je možné 10.1.2012 MI-SIM Jiří Douša 29

Viditelnosti a volání podprogramů Viditelné objekty: případ deklarace podprogramu v deklarační části architektury: porty entity, signály, případně sdílené proměnné příslušné entity, signály, případně sdílené proměnné architektury, signály, případně sdílené proměnné viditelných knihoven, případ deklarace podprogramu v procesu: vše předešlé plus navíc: lokální proměnné procesu. Volání procedury: paralelní: jako paralelní příkaz na konci operační části se implicitně inzeruje příkaz wait on s citlivostním seznamem obsahujícím všechny formální signály módu in nebo inout, procedura může obsahovat další příkazy wait, provedení: při události na některém aktuálním signálu, který je sdružen s formálním signálem módu in nebo inout, sekvenční: uvnitř procesu či jiné procedury na konci operační části není implicitně inzerován příkaz wait, Poznámka: funkce nesmí obsahovat příkaz wait, 10.1.2012 MI-SIM Jiří Douša 30

Podprogramy ve VHDL 93 VHDL 93 zavádí odložený příkaz paralelní procedury v paralelním prostředí je provedena až v posledním simulačním cyklu pro danou hodnotu simulačního času (podobně jako odložený proces) syntax odloženého příkazu: [ label ]: [ postponed ] < ident. procedury> [ (<akt. parametry>) ] ; VHDL 93 odlišuje 2 typy funkcí: pure functions: nedovolují žádné vedlejší efekty = > hodnoty formálních parametrů jednoznačně určují funkční hodnotu, impure functions: dovolují vedlejší efekty = > mohou vracet různé funkční hodnoty pro různá volání se stejnými hodnotami formálních parametrů, syntax: [ pure impure ] function < identifikátor funkce > ( < seznam formálních parametrů > ) return < typ výsledku> is end ; Poznámka: function je implicitně chápána jako pure function 10.1.2012 MI-SIM Jiří Douša 31

Přetěžování podprogramů možná rozlišení přetížených podprogramů: počet parametrů, typy a pořadí parametrů, jména formálních parametrů ( v případě jmenného mapování), typ výsledku (u funkcí). Příklad: signal Data: bit_vector (7 down to 0); signal clk : bit; procedure test -- test předstihu ( constant predstih : in time; signal D : in bit_vector, signal clk : in bit ) is.end test; procedure test -- test přesahu ( constant presah : in time; signal D : in bit_vector, signal clk : in bit ).end test; is -- následují ukázky volání obou procedur test: test ( predstih => 8ns, D => Data, clk => clk ); -- OK test ( presah => 3ns, D => Data, clk => clk ); -- OK test ( 8 ns, Data, clk ); -- error test ( 3 ns, D => Data, clk => clk ); -- error 10.1.2012 MI-SIM Jiří Douša 32

Přetěžování operátorů specifikace ve formě funkcí operujících na formálních parametrech Příklad: architecture A of E is function + ( constant L: integer ; constant R: real ) return real is return real ( L ) + R; end + ` ; function + ( constant L: real ; constant R: integer ) return real is return L + real ( R ); end + ` ; signal X, W1, W2: real; signal Y integer; process variable result: real; result := 3 + 4.0; -- volání 1. funkce v procesu result := 3.11 + 111; -- volání 2. funkce end process; W1 < = X + Y; -- volání 2. funkce v operační části architektury W2 < = Y + X; -- volání 1. funkce end; 10.1.2012 MI-SIM Jiří Douša 33

Funkce parametry: konstanty nebo signály módu in volání: v sekvenčním i paralelním prostředí operační část nesmí obsahovat příkaz wait Příklad: architecture Arch of E is function max (signal a, b: in bit_vector) return bit_vector if a >= b then return a; else return b; end if; end max; is --následuje příkazová část architektury process (.)..; y <= max (..,..) ; -- sekvenční volání funkce...; end process; z <= max (..;..) ; end Arch; -- paralelní volání funkce 10.1.2012 MI-SIM Jiří Douša 34

Resoluční funkce řeší konflikty vznikající při buzení signálu více budiči, volání: automaticky při aktivitě některého z budičů architecture Arch is..deklarace D; -- následují paralelní příkazy architektury process (a, e1) -- budič signálu c if e1= 0 then c <= a; else c <= Z ; end if; end process; process (b, e2) --budič signálu c if e2= 0 then c <= b; else c <= Z ; end if; end process;..; --další paralelní příkazy end A; a b situace: e1 e2 c 10.1.2012 MI-SIM Jiří Douša 35

Resoluční funkce deklarace D pro minulý příklad: signal a,b : std_logic; signal c: std_logic; --c je buzen více budiči; proto --musí být deklarován jako typ std_logic, který je definován v knihovně std_logic_1164 a který je svázán s resoluční funkcí subtype std_logic is resolved std_ulogic; nový podtyp signálu typ definovaný dříve vázaný na funkci resolved identifikátor resoluční funkce budiče efektivní hodnota (typ std_logic) budící hodnoty 10.1.2012 MI-SIM Jiří Douša 36

Resoluční funkce resolved type std_logic_table is array (std_ulogic, std_ulogic) of std_ulogic; constant res_tab: stdlogic_table: = ( -- 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 )) ; -- - 10.1.2012 MI-SIM Jiří Douša 37

Resoluční funkce takto je definována resoluční funkce v knihovně std_logic_1164: function resolved (s: std_ulogic_vector) return std_ulogic is variable res: std_ulogic := Z ; --počáteční nastavení if s length = 1 then return s (s low); --případ jednoho budiče else for i in s range loop -cykl přes všechny budiče signálu s res:= res_tab (res, s(i)); -- výpočet -- resoluční funkce argumentů res a s(i) end loop; end if; return res; --hodnota funkce (efektivní hodnota) = --superposice výstupů všech budičů end resolved; 10.1.2012 MI-SIM Jiří Douša 38

Resoluční funkce Příklad: signal a: std_logic := '0'; -- počáteční hodnota -- každého budiče signálu a. P1: process wait for 1 ns; a <= not a; end process; P1 a P2: process wait for 2 ns; a <= not a; end process; P2 1 a X 0 1 ns time 10.1.2012 MI-SIM Jiří Douša 39

Resoluční funkce Příklad: signal a, b, c: std_logic := '0';..; P1: process wait for 1 ns; a <= not a; wait for 0 ns; c <= a; end process; P1 P2 a b c P2: process wait for 2 ns; b <= not b; wait for 0 ns; c <= b; end process; a b c 1 2 3 4 ns 10.1.2012 MI-SIM Jiří Douša 40