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 2: VHDL- entity a architektury Stručný obsah: charakteristika programů, elementy rozhraní, objekty ve VHDL, deklarace entity, deklarace architektury, porty, použití procesů, zpracování zdrojových programů.
Doporučená literatura: Roger Lipsett, Carl Shaefer, Carry Ussery: VHDL: Hardware Description and Design, Kluwer Academic Publishers 1989 Douglas L. Perry: VHDL, Mc Grow- Hill 1991 Douglas E. Ott, Thomas J. Widerotter: VHDL Synthesis, Kluwer Academic Publishers 1994 Stanley Mazor, Patricia Langstraat: A Guide to VHDL Kluwer Academic Publishers, Boston 1995 Stefan Sjoholm, Lennart Lindh: VHDL for Designers Prentice Hall 1997 Allen M. Dewey: Analysis and Design of Digital Systems with VHDL, PWS Publishing Company, Boston 1997 Ben Cohen: VHDL Coding Styles and Methodologies, 2nd Edition, Kluwer Academic Publishers 1999 Jiří Douša: Jazyk VHDL, skriptum ČVUT 2003 21.10.2011 MI-SIM Jiří Douša 2
Úvod do VHDL Historie VHDL: 1980 - MO USA: projekt VHSIC (very high speed integrated circuits) cíl: zvýšit výkon a hustotu IO 1983 - podnět k návrhu pro nový jazyk pracovní tým: Intermetrics, IBM, Texas Instruments Přednosti VHDL: pracovní prostředek návrháře VHDL - vstupní jazyk pro simulaci i pro automatickou syntézu IO (zde dosud neexistuje standard jako pro simulaci) VHDL popis chování technologická knihovna syntéza požadovaná omezení schéma mapování na technologii 21.10.2011 MI-SIM Jiří Douša 3
Úvod do VHDL standardizován od r. 1987 (VHDL-87, revize r. 93: VHDL-93) snadné přechody mezi simulátory různých výrobců podporuje budování hierarchických struktur lze zakoupit VHDL modely existujících obvodů - snadný vývoj větších celků nabízí širokou škálu pro volbu úrovně abstrakce metoda top-down, použití průběžné simulace Gajski - Khunův diagram: representace struktury struktury vel. celků RTL úroveň úroveň hradel representace chování algoritmický popis data - flow popis technologicky závislá data: čas. zpoždění, reszoluční funkce, vícehodnotová logika, atd representace fyzikálních vlastností nezávislé ověřování návrhů při při týmové spolupráci technologická nezávislost 21.10.2011 MI-SIM Jiří Douša 4
Charakteristika programu ve VHDL Struktura programu ve VHDL: entita + architektura porty architecture funkce: definuje hodnoty výstupů jako reakce na vstupy entity - 2 funkce: interface komponenty + případná kontrola správnosti vstupů Poznámka: porty nejsou povinné; umožňují hierarchicky strukturovat dílčí modely a zajišťovat jejich vzájemnou komunikaci, Prostředí architektury: paralelní : data flow popis - chování komponenty formou paralelních příkazů (neprocedurální popis) strukturní popis - hierarchie dílčích komponent výsledný efekt některých z paralelních příkazů (příkaz procesu, příkaz procedury) či částí výrazů (zápis funkce) lze definovat pomocí sekvenčního algoritmu sekvenční: pro algoritmický (procedurální popis) chování komponenty nebo její části pomocí procesu, procedury či funkce 21.10.2011 MI-SIM Jiří Douša 5
Objekty ve VHDL nejde o objektově orientovaný jazyk ve smyslu objektového programování účel objektů: representovat atributy simulovaného systému ( system image ) 3 třídy objektů ve VHDL: signal constant variable výskyt deklarace: pouze paralelní prostředí hodnoty lze měnit v paralelním i seriovém prostředí (pomocí dvojznaku pro přiřazení <= ) použitelnost v rozhraní: pro módy: in, out, inout, buffer výskyt deklarace: sekvenční i paralelní prostředí nemění hodnoty v průběhu simulace ( jednorázové přiřazení hodnoty v deklaraci pomocí dvojznaku := ) použitelnost v rozhraní: pro mód in výskyt deklarace: pouze sekvenční prostředí (výjimka: shared variables v VHDL 93) hodnoty lze modifikovat pouze v sekvenčním prostředí (pro přiřazení := ) použitelnost v rozhraní procedur: pro módy: in, out, inout 21.10.2011 MI-SIM Jiří Douša 6
Elementy rozhraní ve VHDL každý element rozhraní (parametry, porty, generics ) nutno specifikovat z hlediska třídy, módu (směr toku informace) a datového typu (integer, bit, viz později) Výskyt rozhraní Název elementu Přípustné třídy objektů Dovolený mód objektu rozhraní funkce parametr [ constant ] signal procedura parametr signal [ constant ] [ variable ] [in] [in] [in], out, inout [in] [in], out, inout entita, blok, lokální komponenta port generic [signal] [constant] [in], out, inout buffer [in] závorky [ ] označují implicitní hodnotu (může chybět) případ procedury: je-li explicitně definován mód in, resp. out nebo inout, je implicitní hodnota constant, resp. variable 21.10.2011 MI-SIM Jiří Douša 7
Odlišnosti signálů a proměnných Použití: nosiče hodnot simulačního oboru, representace výstupů kombinačních i sekvenčních obvodů, proměnná: pouze nosič okamžité hodnoty, signál: nosič více hodnot: minulá, současná, budoucí + příslušné hodnoty času, větší spotřeba paměti (př.: representace paměti 64 k 32 bit. slov (proměnná 2 MB, signál 207 MB) Deklarace proměnných: sdílené proměnné (pouze VHDL 93): deklarativní části architektury, bloku a knihoven, proměnné: deklarativní části procesu, procedury a funkce, formální parametry procedur. Deklarace signálů: porty entity, bloku a komponent, formální parametry procedur a funkcí, deklarativní části entity, architektury, package a bloku, Poznámka: signály nelze použít jako nosiče datových typů access nebo file 21.10.2011 MI-SIM Jiří Douša 8
Porty ve VHDL porty - kromě své funkce v rozhraní entity mohou být použity jako lokální signály (v entitě a všech příslušných architekturách) pokud signál nebo port není vázán na resoluční funkci pak může být v paralelním prostředí architektury buzen pouze jedním vodičem signál spojený s resoluční funkcí může být buzen libovolným počtem budičů resoluční funkce (prostředek pro řešení konfliktů mezi společnými budiči jednoho signálu ) vytváří tzv. efektivní hodnotu ( jako výslednici hodnot dílčích budičů) generic in out inout a b c pouze čtení nedovolené operace: pouze čtení pouze zápis zápis i čtení buffer d zápis + zpětné čtení 21.10.2011 MI-SIM Jiří Douša 9
Porty typu inout a buffer p port typu typ inout efektivní hodnota = výslednice budících hodnot x <=p; p <=..; p x.lokální signál RF budící hodnoty p y <=p; p <=...; y..lokální signál p.port typu buffer: nesmí mít více než jeden budič (bez ohledu na existenci RF), efektivní hodnota je vždy rovna budící hodnotě x<=p ; p p <=; aplikace portů typu buffer: omezení konektivity obvodů se standardním výstupem potřeba čtení portů: př.: if vstup = 1 then o <= o + 1; 21.10.2011 MI-SIM Jiří Douša 10
Deklarace entity entity <IdentE> is [ generic.;] -- parametry entity [ port..; ] -- vstupy a výstupy [ -- přípustné deklarace: datové typy a podtypy, konstanty, paralelní podprogramy, signály, soubory, alias ]. [ begin -- přípustné paralelní příkazy: příkaz assert, příkaz pasivního procesu, příkaz pasivní procedury ]. end [ <IdentE> ]; Poznámky: --..označuje komentář, <IdentE>.identifikátor entity deklarace & příkazy dědí každá sdružená architektura jde o samostatně překládanou jednotku deklarační i operační část může být prázdná příklad.: entity E is end E; -- jde o uzavřený systém jehož buzení je generováno uvnitř architektury (viz později) 21.10.2011 MI-SIM Jiří Douša 11
Deklarace architektury architecture <IdentA> of < IdentE> is [...-- přípustné deklarace: datové typy a podtypy konstanty, paralelní podprogramy, signály, komponenty, konfigurace komponent, soubory, alias ]. -- veškeré deklarace jsou v dané architektuře lokální begin -- operační část architektury - paralelní prostředí -- přípustné příkazy architektury: signálový paralelní příkaz, příkaz procesu, příkaz assert, příkaz paralelní procedury, příkaz generate, příkaz bloku, příkaz instalace komponenty. end [ <IdentA>]; 21.10.2011 MI-SIM Jiří Douša 12
Ukázka popisu entity a architektury Příklad: úplná sčítačka dvoubitových čísel a b cin library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; -- zpřístupnění dat. typů entity Scit is port (signal cin: in std_logic; signal a,b: in std_logic_vector (1 downto 0); signal s: out std_logic_vector (2 downto 0)); end Scit; -- verse 1: (architektura Arch 1) architecture Arch1 of Scit is begin -- zde jde o model chování bez nutnosti použít logické funkce s <= 0 & a + 0 & b + 0 & 0 & cin; -- operátor + je definován pro datový typ std_logic end Arch1; S 21.10.2011 MI-SIM Jiří Douša 13
Ukázka popisu architektury Příklad: úplná sčítačka dvoubitových čísel (verse 2) strukturní popis na úrovni logických členů a(1) b(1) a(0) b(0) c1 cin s(2) s(1) s(0) -- popis entity: stejné rozhraní (viz předešlý slajd) architecture Arch2 of Scit is signal c1: std_logic; -- lokální vodič v architektuře begin -- následuje výpočet logických výrazů v paralelním prostředí -- lze považovat za strukturní model logického obvodu s (2) <= (a(1) and b(1)) or ((a(1) xor b(1)) and c1); s (0) <= (a(0) xor b(0)) xor cin ; s (1) <= (a(1) xor b(1)) xor c1; c1 <= (a(0) and b(0)) or ((a(0) xor b(0)) and cin) ; end Arch2; 21.10.2011 MI-SIM Jiří Douša 14
Vztah paralelního a sekvenčního prostředí signály: přenos informací v paralelním prostředí pořadí výpočtu: sekvenční prostředí: dáno pořadím příkazů paralelní prostředí: určeno aktivitou signálů pravé strany entity E is port (signal a: in bit; signal b: out bit); end E; architecture A of E is signal x,y,z: bit; begin ; --paralelní prostředí P1: process (a,x,y).z < = ;b <=...;end process; ; --paralelní prostředí P2: process (z)...x<=.; y <=...;..end process;.; --paralelní prostředí end; sekvenční prostředí 21.10.2011 MI-SIM Jiří Douša 15
Ukázka použití procesů Příklad: paměť jako stavební blok library ieee; -- zpřístupnění knihoven use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; entity memory is --interface paměti 4x 8 port (data: inout std_logic_vector (7 downto 0); addr: in bit_vector (0 to 3); rd, wr: in bit ); end memory; architecture amemory of memory is -- popis funkce paměti subtype byte is bit_vector (7 downto 0); type mem_16x8 is array (0 to 15) of byte; signal RAM : mem_16x8; begin CTENI: process (rd) -- pro aktivaci procesu signálem rd begin if rd = '1' then data <= to_stdlogicvector ( RAM (conv_integer ( to_stdlogicvector (addr ))) ); end if; end process; 21.10.2011 MI-SIM Jiří Douša 16
Ukázka použití procesů -- následuje proces pro zápis ZAPIS: process (wr) -- pro aktivaci procesu signálem wr begin if wr ='1 then RAM (conv_integer (to_stdlogicvector (addr))) <= to_bitvector (data); end if; end process; --následuje čistě kontrolní proces KONTROLA: process ( rd, wr ) -- pro aktivaci procesu begin assert not (rd = '1' and wr = '1') report " současně aktivní signály rd a wr" severity error; end process; end amemory; Poznámka: paralelní prostředí architektury amemory obsahuje celkem tři paralelní příkazy procesů; funkce paměti by mohla být rovněž popsána pomocí jediného procesu či s využitím příkazu procedury či více procedur nebo dokonce bez použití sekvenčního prostředí 21.10.2011 MI-SIM Jiří Douša 17
Zpracování zdrojových programů: 1) Analýza programové jednotky: samostatný překlad (použití knihoven) uložení produktu do zvolené knihovny 2) Zpracování modelu (elaboration) hierarchická expanze modelu a propojení komponent, zpracování parametrů entit (generics), alokace paměti objektům a inicializace objektů, 3) Inicializace modelu: inicializace signálů, provedení všech procesů ( do jejich suspendace), inicializace simulačního času. Klasifikace výrazů: 1) Lokálně statické: vyhodnocovány v průběhu analýzy (př.: konstanty v architektuře), 2) Globálně statické: vyhodnocovány v průběhu zpracování modelu (př.: generics v entitě), 3) Dynamické: vyhodnocovány v průběhu inicializace modelu nebo v průběhu simulace 21.10.2011 MI-SIM Jiří Douša 18