GRUNDER I VHDL Innehåll Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse
KOMPONENTMODELL Modell för att beskriva komponenter Externt interface Intern funktion Portar: externa kopplingar till komponenten VHDL-komponent A B C Komponentens - Beteende eller - Struktur X Y Funktion: ett antal parallella processer 2
KODMODELL VHDL-komponent Deklaration av entity Interface - Entity med portar Deklaration av architecture Funktion - architecture 3
DEKLARERA VHDL- KOMPONENTENS INTERFACE MUX 2-1 a b y entity mux2 is port ( a: in STD_LOGIC; b: in STD_LOGIC; sel: in STD_LOGIC; y: out STD_LOGIC; ); end mux2; sel 4
PORTAR I VHDL Deklarationen av Portar är den viktigaste delen i deklarationen av entity Varje port representerar Komponentens externa kopplingar (pins) Varje port har ett Port-namn Mode Datatyp En identifierare som du skapar Avgör datats riktning Vilken slags värden en port kan tilldelas 5
EN VHDL-KOMPONENTS PORTAR port definierar inputs och outputs entity mux2 is port ( a: in STD_LOGIC; b: in STD_LOGIC; sel: in STD_LOGIC; y: out STD_LOGIC; ); end mux2; in/out definierar portens mode, vilket avgör i vilken riktning data kan skickas. std_logic är datatypen som används för inputs och output 6
DE MODES EN PORT KAN HA IN OUT BUFFER INOUT Signalen går bara in till komponenten, och värdet drivs av en annan komponent. Inputsignalen används på tilldelningens högra sida: z <= a OR inport Signalen går ut från komponenten. Komponenten kan inte läsa av värdet på utgången. Används på vänster sida i tilldelningen: outport <= a OR b Signalen går ut från komponenten. Komponenten kan läsa av värdet på utgången. Kan användas på båda sidor i tilldelningen: buffer_port <= a OR b; z <= buffer_port OR c; Signalen kan gå i båda riktningar, antingen in eller ut. Komponenten kan läsa av signalens värde. -Signalen kan drivas av andra komponenter -Kan användas på båda sidor av en tilldelning 7
DEKLARATION AV ARCHITECTURE Namn på architecture Namn på entity begin end för architecture architecture mux2_arch of mux2 is begin mux2_1: process(a, b, sel) begin if sel = '0' then y <= a; else y <= b; end if; end process mux2_1; end mux2_arch; Process med sensitivity-list Sekventiella uttryck (if-then-else) i processen begin end för processen 8
ATT BESKRIVA FUNKTIONEN I ARCHITECTURE MUX 2-1 architecture mux2_arch of mux2 is begin mux2_1: process(a, b, sel) begin if sel = '0' then y <= a; else y <= b; end if; end process mux2_1; end mux2_arch; a b sel I architecture beskrivs komponentens funktion: Om sel är 0 så sätts värdet på a på utgången y. Annars (sel=1) sätts b s värde på utgången y. y 9
STRUKTUR PÅ ARCHITECTURE architecture name_arch of name is Deklaration av signaler begin Parallella uttryck Process 1 Signaler används för kommunikation mellan komponenter och parallella uttryck. Signaler kan endast deklareras på architecture-nivå (ej i processer) Parallella uttryck Process 2 Inuti en process sker exekveringen sekventiellt. Parallella uttryck end name_arch; Processer och parallella uttryck exekveras parallellt. 10
EXEMPEL PÅ PARALLELLA OCH SEKVENTIELLA UTTRYCK ENTITY ename IS Ports( a, b, c: IN bit; y, z, w: OUT bit; ); Deklarationer -- inga variabler tillåtna END ename ARCHITECTURE first OF ename IS Deklarationer -- inga variabler, men signaler är OK BEGIN y <= a AND b; PROCESS (a,b,c) Deklarationer -- inga signaler, men variabler är OK VARIABLE v: bit; BEGIN v := (a OR b); v := v AND c; w <= a XOR v; END PROCESS; z <= c XOR b; Parallella processer och uttryck Uttryck i processer är sekventiella END first; 11
IDENTIFIERARE I VHDL Identifierare (Identifiers) Är namn på saker som du skapar T.ex. namn på architectures, entities, processer, variabler, signaler Regler för namngivning Får inte vara ett reserverat ord i VHDL (t.ex. for, if) VHDL är case-insensitive Första tecknet måste vara en bokstav Sista tecknet får inte vara ett underscore (_) Man får inte ha två underscores i rad 12
OBJEKT I VHDL Objekt kan hålla ett värde Objekt har class och type Class avgör vilken slags operationer som kan utföras på objektet Type avgör vilken slags värden objektet kan hålla Objekt kan initieras (endast för simulering) De deklareras i entity, architecture, process, eller package 13
CLASSES I VHDL Signal Deras värden ändras som en funktion av tiden De har en signal-driver, och kan ses som en ledning ( wire ) Variable Deras värden ändras direkt efter tilldelning Ej tidsbundna Constant Deras värden kan ej ändras File Värden till och från en extern fil 14
DATATYPER I VHDL VHDL har strikt typkontroll Objekt med olika typer kan ej blandas Funktioner för typomvandling måste användas Två huvudsakliga kategorier av datatyper Skalär ( Scalar ) Kan tilldelas ett enstaka värde Exempel: enumeration, integer, float, physical Sammansatt ( Composite ) Kan tilldelas flera värden Exempel: array, record 15
SKALÄR Enumeration En lista med diskreta värden som en variabel kan tilldelas Ex: type weekday = (mon, tue, wed, thu, fri, sat, sun); Integer En grupp heltal positiva eller negativa En fördefinierad datatyp Integer är 32 bitar med tecken: 2 31 to +(2 31-1) När man beskriver hårdvara kan man använda ett begränsat område Ex: variable num: integer range 64 to 64 16
SKALÄR Floating-point Den fördefinierade datatypen är real 32-bits single precision Används inte för att beskriva hårdvara Resulterar i för komplex hårdvara Physical Datatyp för fysikaliska storheter Ex. time, ma, Volt Har ingen mening när man beskriver hårdvara 17
EXEMPEL PÅ ENUMERERADE DATATYPER Fördefinierade typer (1076) type boolean is (FALSE, TRUE); type bit is ( 0, 1 ); Fördefinierade typer (1164) Std_logic Std_ulogic Arrayer av dessa typer och under-typer Man kommer åt dessa typer genom att inkludera: LIBRARY ieee; USE ieee.std_logic_1164.all; 18
STD_LOGIC Definition av std_logic type std_ulogic is ( U, -- Uninitialized X -- Forcing unknown 0 -- Forcing zero 1 -- Forcing one Z -- High impedance W -- Weak unknown L -- Weak zero H -- Weak one - );-- Don t care subtype std_logic is resolved std_ulogic; library IEEE; use IEEE.std_logic_1164.all; Lägg detta först i VHDL-koden för att inkludera libraries (packages) 19
SAMMANSATTA DATATYPER Arrayer Exempel på deklarationer av 8-bitars vektorer signal s1: bit_vector(7 downto 0); variable v1: bit_vector(7 downto 0); Tilldelning av bitvektorn 11010010 s1 <= 11010010 ; v1 := 11010010 ; Least significant bit Most significant bit 20
SAMMANSATTA DATATYPER Ex: tvådimensionell array type table6x2 is array (0 to 5, 1 downto 0) of bit; constant mytable: table6x2 := ( 00, 01, 10, 11, 01, 01 ); 0 1 2 3 4 5 1 0 0 1 1 0 0 0 0 1 0 1 1 1 Ex: Bit-vektorer för binära, oktala and hexadecimala tal X A3 -- = B 1010_0011 för en 8-bits vektor O 27 -- = B 010_111 för en 6-bits vektor 21
ATTRIBUT Attribut Håller information om en signal, variabel, datatyp, funktion. Exempel #1 type bitcount is integer range 3 to +5; -3-2 -1 0 +1 +2 +3 +4 +5 bitcount left bitcount right bitcount low bitcount high 22
ATTRIBUT Exempel #2 type byte is array (7 downto 0) of std_logic; 7 6 5 4 3 2 1 0 byte left byte low byte high byte right i går från 7 ner till 0 Exempel #3 for i in byte high downto byte low loop v_byte(i) := 1 ; end loop; 23
OPERATORER I VHDL Operatorer för jämförelse Aritmetiska operationer Symbol Operation = equal /= Un-equal < Less than > Greater than <= Less-equal >= Greater-equal Symbol Operation + addition - subtraktion * multiplikation / division abs Absolute value rem remainder mod modulus ** exponent Stöds av syntetiseringsverktyg 24
SLUT PÅ FÖRELÄSNING 4 Innehåll Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse 25