Introduzione al VHDL Lezione 2 Cristina Silvano Università degli Studi di Milano Dipartimento di Scienze dell Informazione Via Comelico 39/41, I-20135 Milano (Italy) Tel.: +39-2-5835-6306 e-mail: silvano@elet.polimi.it Assegnamento di Segnali Assegnamento di una forma d onda ad un segnale. Formato: TARGET_OBJECT <= WAVEFORM; Esempio: SIGNAL_A <= 0 ; 3/7/01 Cristina Silvano Università degli Studi di Milano 2
Assegnamento Condizionato di Segnali Assegnamento di una forma d onda ad un segnale basato sulla validità di una condizione. La condizione deve produrre un valore booleano. Formato: TARGET_OBJECT <= WAVEFORM_1 when CONDITION else WAVEFORM_2; Esempio: SIGNAL_A <= 0 when b = 1 else 1 when b = 0 else X ; 3/7/01 Cristina Silvano Università degli Studi di Milano 3 Oggetti Possibili tre classi per gli oggetti: Costanti Oggetti assegnati ad un valore iniziale che non può essere cambiato. Variabili Oggetti che ricevono un valore che può essere cambiato attraverso n istruzione i assegnamento tra variabili: OLD_VALUE := NEW_VALUE; Segnali Oggetti che ricevono dei valori associati ad un fattore temporale e che possono essere cambiati attraverso un istruzione di assegnamento tra segnali: OLD_VALUE <= NEW_VALUE @ 0; OLD_VALUE <= NEW_VALUE @ 10; 3/7/01 Cristina Silvano Università degli Studi di Milano 4
Istruzioni di assegnamento tra segnali I segnali sono caratteristici della descrizione hardware per modellare l informazione che transita nel tempo o su una singola net oppure su un bus. Segnali sono associati al concetto di FORMA D ONDA o WAVEFORM L istruzione di assegnamento tra segnali stabilisce un collegamento definitivo tra di essi. Esempio: signal A, Z : bit; Z <= A; A Z 3/7/01 Cristina Silvano Università degli Studi di Milano 5 Istruzioni di assegnamento tra segnali In presenza di istruzioni di assegnamento multiple è necessaria una funzione di risoluzione : NO signal A, B, Z: bit; Z <= A; Z <= B; A B? Z Il segnale Z deve essere un RESOLVED TYPE come std_logic: signal Z : std_logic; I tipi bit e std_ulogic sono UNRESOLVED TYPE e necessitano di un solo driver pilotante. 3/7/01 Cristina Silvano Università degli Studi di Milano 6
Istruzioni di assegnamento tra segnali Esempi: architecture CONCURRENT of MUL is A signal A, B, C, D: std_ulogic; signal Z: std_logic; begin Z <= A and B; Z <= C and D; end CONCURRENT; B C D? Z architecture SEQUENTIAL of MUL is signal A, B, C, D, Z: std_ulogic; begin process (A, B, C, D) begin Z <= A and B; Z <= C and D; end process; end CONCURRENT; C D Z 3/7/01 Cristina Silvano Università degli Studi di Milano 7 Dichiarazione di Oggetti Formato: object_class IDENTIFIER : type [:= INITIAL_VALUE]; Costanti: constant DELAY : time := 10 ns; constant MULTIPLIER : real := 5.25; Variabili: variable SUM : real; variable GROUND_VOLTAGE : integer := 0; Segnali: signal CLOCK : bit; signal RESET : std_ulogic := 0 ; Gli oggetti presenti nell istruzione port sono classificati di default come segnali. Se il valore iniziale non viene assegnato, si assume un valore corrispondente al valore minimo o left-most per quel tipo. 3/7/01 Cristina Silvano Università degli Studi di Milano 8
Tipi di Dati Ogni oggetto deve appartenere ad un tipo. Il tipo di dato identifica: un insieme di valori che un oggetto (costante, variabile o segnale) può assumere; un insieme di operazioni che possono essere eseguite sull oggetto stesso. Tipi di dati predefiniti - Esempi: bit, bit_vector, boolean, integer,.. Tipi di dati definiti dall utente - Esempio: type MY_STATE is (RESET, IDLE, READ, WRITE); signal STATE: MY_STATE; STATE <= RESET; STATE <= READ; 3/7/01 Cristina Silvano Università degli Studi di Milano 9 Tipi Predefiniti Certi tipi di dati scalari sono predefiniti e non richiedono un istruzione di dichiarazione di tipo. Esempi: boolean bit integer real character time severity_level 3/7/01 Cristina Silvano Università degli Studi di Milano 10
Tipi di Dati Scalar Numeric, Enumeration, Physical Composite Array, Record Access Insiemi di valori che puntano a variabili dinamiche. File Collezione di oggetti di dati esterni al modello. 3/7/01 Cristina Silvano Università degli Studi di Milano 11 Scalar Numeric type integer is range -214748348 to 214748347; type real is range -1.79769E308 to 1.79769E308; Enumeration type bit is ( 0, 1 ); type boolean is (false, true); Physical type time is range -9223372036854775808 to 9223372036854775807 UNITS fs; ps = 1000 fs ; ns = 1000 ps ; us = 1000 ns ; ms = 1000 us ; sec = 1000 ms ; min = 60 sec ; hr = 60 min ; end UNITS ; -- femtoseconds -- picoseconds -- nanoseconds -- microseconds -- milliseconds -- seconds -- minutes -- hours 3/7/01 Cristina Silvano Università degli Studi di Milano 12
Accesso a tipi comunemente usati La condivisione da parte di diverse entity di dichiarazioni di tipi e di operazioni tra tipi viene fatta attraverso dei costrutti noti come package. Tipi, procedure e funzioni comunemente usate sono poste in package standard come Std_Logic_1164 (IEEE standard). La dichiarazione library rende visibile ad un modello VHDL una libreria selezionata che contiene i package desiderati. La dichiarazione use rende un package visibile ad un modello. Esempio: library IEEE; use IEEE.Std_Logic_1164.all; 3/7/01 Cristina Silvano Università degli Studi di Milano 13 Std_Logic_1164 Il package Std_Logic_1164 è un package standard di IEEE che rappresenta un sistema basato su nove stati logici (MULTI VALUE LOGIC) e definisce i tipi std_logic (Resolved Type Uno o più driver pilotanti) e std_ulogic (Unresolved Type Solo un driver pilotante): type std_ulogic is ( U, X, 0, 1, Z, W, L, H, - ); -- Part of std_ulogic_1164 ---------------------- TYPE std_ulogic IS ( 'U', -- Uninitialized state - Used as default value 'X', -- Forcing Unknown - Bus Contention, error cond., etc. '0', -- Forcing 0 - Transistor driven to GND '1', -- Forcing 1 - Transistor driven to VCC 'Z', -- High Impedance - 3-state buffer outputs 'W', -- Weak Unknown - Bus terminators 'L', -- Weak 0 - Pull down resistors 'H', -- Weak 1 - Pull up resistors '-' -- Don't care ); 3/7/01 Cristina Silvano Università degli Studi di Milano 14
Std_Logic_1164 Il tipo std_logic è un tipo MULTI VALUE LOGIC che possiede RESOLUTION FUNCTION e può avere uno o più driver pilotanti. Possibile fare assegnamenti tra segnali di tipo std_logic e std_ulogic e viceversa. Esempi: signal A, B, Z : std_ulogic; signal RES_Z: std_logic; Z <= A; --OK RES_Z <= A; --OK A <= RES_Z; --OK RES_Z <= A; --OK RES_Z <=B; Z <= A; --NO Z <=B; 3/7/01 Cristina Silvano Università degli Studi di Milano 15 Std_Logic_1164 Esempio di utilizzo della libreria: library IEEE; use IEEE.Std_Logic_1164.all; entity MUX is port (A; B: in std_ulogic; Z: out std_ulogic); end MUX; 3/7/01 Cristina Silvano Università degli Studi di Milano 16
Concetto di vettore Bus Tipo bit e tipo bit_vector Esempio: signal Z_BUS: bit_vector(3 downto 0); signal A_BUS: bit_vector(1 to 4);... Z_BUS <= A_BUS; Equivale ad assegnamento bit per bit per posizione: Z_BUS(3) <= A_BUS(1); Z_BUS(2) <= A_BUS(2); Z_BUS(1) <= A_BUS(3); Z_BUS(0) <= A_BUS(4); Tipo std_logic e tipo std_logic_vector Tipo std_ulogic e tipo std_ulogic_vector 3/7/01 Cristina Silvano Università degli Studi di Milano 17 Concetto di vettore Bus Tipo bit e tipo bit_vector Esempio: signal Z_BUS: bit_vector(3 downto 0); signal A, B, C, D: bit;... CONCATENATION OPERATOR Z_BUS <= A & B & C & D; AGGREGATE OPERATOR Z_BUS <= (A, B, C, D); 3/7/01 Cristina Silvano Università degli Studi di Milano 18
Character e String Character: Singolo carattere Esempi: a 1 A Z 0 String: Stringa di caratteri Esempi: Hello 0011 3/7/01 Cristina Silvano Università degli Studi di Milano 19 Operatori Un tipo di oggetto identifica anche un insieme di operazioni che possono essere eseguite sull oggetto. Operatori predefiniti: Operatori aritmetici: +, -, *, /, **, abs, mod, rem Segno: +, - Operatori di scorrimento: rol, ror, sla, sll, sra, srl Operatori misti: & Operatori relazionali: =, /=, <, <=, >, >= Operatori logici: and, or, nand, nor, not, xor, xnor 3/7/01 Cristina Silvano Università degli Studi di Milano 20
Operatori Logici Operatori logici predefiniti per i tipi bit e boolean: and or nand nor xor xnor not - Operatore a maggiore priorità Esempio: Z < = A and not (B or C) -- necessaria la parentesi per -- alterare la precedenza degli -- operatori 3/7/01 Cristina Silvano Università degli Studi di Milano 21 Operatori Relazionali Operatori relazionali predefiniti per i tipi bit e boolean: < -- less than <= -- less than or equal to > -- greater than >= -- greater than or equal to = -- equal to /= -- not equal to Esempio: if (A = B) then statement; La condizione (A = B) ritorna un valore boolean 3/7/01 Cristina Silvano Università degli Studi di Milano 22
Operatori Aritmetici Operatori aritmetici predefiniti: + -- addition - -- subtraction * -- multiplication / -- division ** -- exponential abs -- absolute mod -- modulus rem -- remainder 3/7/01 Cristina Silvano Università degli Studi di Milano 23 Operatori Gli operatori standard non sono definiti per i tipi di dati definiti dall utente come i tipi enumerativi. La definizione di come gli operatori standard sono applicati ai tipi di dati definiti dall utente fa parte del package nel quale il tipo di dato viene dichiarato. Esempio: La modalità con la quale gli operatori logici sono applicati agli oggetti di tipo std_ulogic è definita nel package std_logic_1164 3/7/01 Cristina Silvano Università degli Studi di Milano 24
Codice Sorgente xor_gate_logic.vhd Un architettura che realizza una semplice funzione logica può essere descritta utilizzando operatori logici. ------------------------------------------------------------------------ -- xor gate ------------------------------------------------------------------------ library IEEE; use IEEE.Std_Logic_1164.all; entity XOR_GATE is port (A, B : in std_ulogic; C : out std_ulogic); end XOR_GATE; architecture LOGIC of XOR_GATE is begin C <= A xor B; end LOGIC; 3/7/01 Cristina Silvano Università degli Studi di Milano 25 Simulazione xor_gate_logic.vhd 3/7/01 Cristina Silvano Università degli Studi di Milano 26
Delay Il concetto di ritardo in un modello VHDL viene definito come il periodo di tempo che intercorre tra causa ed effetto. Delay: Inertial Transport Internal delay: Delta 3/7/01 Cristina Silvano Università degli Studi di Milano 27 Inertial Delay Modello senza ritardi: C <= A and B; Modelli con ritardo inerziale utilizzano l istruzione AFTER: Formato: NEW_SIGNAL <= SIGNAL_EXPR after TIME_PERIOD; Esempi: C <= A and B after 10 ns; D_OUT <= 1 after 10 ns, 0 after 20 ns, 1 after 30 ns, 0 after 40 ns; Q <= 1 after 10 ns when b = 1 else 0 after 5 ns; 3/7/01 Cristina Silvano Università degli Studi di Milano 28
Codice Sorgente xor_gate_logic_delayed.vhd --------------------------------------------------------------- -- xor gate -------------------------------------------------------------- library IEEE; use IEEE.Std_Logic_1164.all; entity XOR_GATE is port (A, B : in std_ulogic; C : out std_ulogic); end XOR_GATE; architecture LOGIC of XOR_GATE is begin C <= A xor B after 10 ns; end LOGIC; 3/7/01 Cristina Silvano Università degli Studi di Milano 29 Simulazione xor_gate_logic_delayed.vhd 3/7/01 Cristina Silvano Università degli Studi di Milano 30
Durata dei Segnali I segnali la cui durata è inferiore del ritardo specificato nell istruzione after sono ignorati Esempio: A <= B after 50 ns; Stimoli: force B 0 0 force B 1 50 force B 0 100 force B 1 150 force B 0 175 run 250 Risultato: L impulso di durata 25 ns imposto al segnale b a 150 ns non viene trasmesso al segnale a. 3/7/01 Cristina Silvano Università degli Studi di Milano 31 Codice Sorgente ab_gate.vhd -------------------------------------------------------------- -- ab gate -------------------------------------------------------------- library IEEE; use IEEE.std_logic_1164.all; entity AB is port (B : in std_ulogic; A: out std_ulogic); end AB; architecture LOGIC of AB is begin A <= B after 50 ns; end LOGIC; 3/7/01 Cristina Silvano Università degli Studi di Milano 32
3/7/01 Cristina Silvano Università degli Studi di Milano 33 Opzione Transport L opzione transport permette di trasmettere la forma d onda presente su un segnale ad un altro segnale senza filtri. Esempio: A <= transport B after 50 ns; Stimoli: force B 0 0 force B 1 50 force B 0 100 force B 1 150 force B 0 175 run 250 Risultato: L impulso di durata 25 ns imposto al segnale b a 150 ns viene trasmesso al segnale a. 3/7/01 Cristina Silvano Università degli Studi di Milano 34
Codice Sorgente ab_gate_transport.vhd ------------------------------------------------------- -- ab gate_transport ------------------------------------------------------- library IEEE; use IEEE.Std_Logic_1164.all; entity AB is port (B : in std_ulogic; A: out std_ulogic); end AB; architecture LOGIC of AB is begin A <= transport B after 50 ns; end LOGIC; 3/7/01 Cristina Silvano Università degli Studi di Milano 35 3/7/01 Cristina Silvano Università degli Studi di Milano 36