Si progetti, utilizzando il linguaggio VHDL, una rete

Documenti analoghi
Quarta esercitazione

Terza esercitazione. Progetto di una rete di controllo. Obiettivi Progetto e analisi di macchine a stati finiti. a.a

architecture tipo_architettura of nome_del_modulo is begin architecture tipo_architettura of nome_del_modulo is

Seconda esercitazione

---- registro con reset e enable library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. VHDL - Esempi. Martedì 13 Gennaio 2009

La descrizione ai terminali dell unità di controllo è la seguente:

MPHS AA FSM in VHDL

Reti Logiche A. FSM in VHDL

Ciclocomputer. Soluzione Dettagliata.

Prima esercitazione. a.a

library ieee; use ieee.std_logic_1164.all; library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; library STD; use STD.textio.

Introduzione al VHDL Lezione 3

Introduzione al VHDL. Alcuni concetti introduttivi

esercitazioni Corso di Laurea in Ing. elettronica Esercitazioni

Introduzione al VHDL. Alcuni concetti introduttivi

Riassunto tecnica digitale

Descrizione di macchine a stati tramite VHDL

Sequential Processing

Reti Logiche A II Prova - 11 febbraio 2008

Riepilogo su FSM. Descrizione di macchine a stati tramite VHDL. Esempio di FSM (Moore) Esempio di FSM (Moore)

Reti Logiche A Esame del 13 settembre 2007

RELAZIONE DEL PROGETTO DI UN CONTATORE BINARIO UP/DOWN MODULO 4 PER IL CORSO DI APPARATI ELETTRONICI 1. INTRODUZIONE

Esercizi VHDL nelle prove d esame di Architettura degli elaboratori (a.a. 2002/03)

VHDL - Introduzione. //

BREVE GUIDA ALL' UTILIZZO DI QUARTUS II PER LO SVILUPPO DI PROGETTI VHDL

Reti Logiche A II Prova - 2 marzo 2009

Ottava esercitazione. Soluzione prova d esame 14 Settembre a.a

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 18/1/2016

Un linguaggio per la descrizione dello hardware: il VHDL

$ % 16 dicembre Giovanni Beltrame 2

Architetture e Reti logiche. Esercitazioni VHDL. a.a. 2003/04 VHDL. Stefano Ferrari

Addizione tra numeri binari

Un linguaggio per la descrizione dello hardware: il VHDL

Introduzione al VHDL VHDL. La storia. Corso introduttivo al VHDL. l acronimo di VHSIC Hardware Description Language

Reti Logiche A Appello del 24 febbraio 2010

Introduzione al linguaggio VHDL e al programma di simulazione e sintesi logica su FPGA utilizzato nelle esercitazioni. a.a.

Sesta esercitazione. Soluzione prova d esame 11 Dicembre a.a

VHDL: Simulazione & Sintesi

Modello sequenziale. Modello sequenziale: i Process 13/11/2014. ENTITY ffsr IS Port ( s,r: IN std_logic; q, qn: OUT std_logic); END ffsr;

Compito di linguaggi di descrizione dell hardware

Corso di Circuiti Logici Appunti e Approfondimenti A. Di Stefano

Reti Logiche Appello del 1 marzo 2011

Reti Logiche A II Prova - 1 febbraio 2010

Nonostante l avvento delle più moderne

Reti Logiche A Esame del 24 febbraio 2006

interfacciamento statico e dinamico analisi di interconnessioni, driver e receiver

Calcolatori Elettronici M Modulo Linguaggio VHDL Parte 2/2

Sintassi. Le varie espressioni sintattiche scritte in VHDL si possono ricondurre ai seguenti oggetti: Scalari e Vettori Nomi Oggetti: Espressioni

Calcolatori Elettronici M Modulo Introduzione all ambiente Xilinx ISE 12.3 e ISIM

ELETTRONICA DELLE TELECOMUNICAZIONI II ESERCITAZIONE DI LABORATORIO N.2 CODICE VHDL. Torino, 16/05/2005

Reti Logiche A Prova di giovedì 3 febbraio 2005

Progetto finale di reti logiche

Registro a 4 bit P 1 D P 1 D C 0

Reti Logiche A Esame del 19 febbraio 2007

Regole per la scrittura di VHDL Sintetizzabile. Fabio Campi. Corso di Elettronica dei Sistemi Digitali LS AA

Complementi ed Esercizi di Reti Logiche in VHDL

Reti Logiche A - Prova di mercoledì 16 febbraio 2005

Elettronica per le telecomunicazioni 21/05/2004

Semicustom Design Flow VHDL HDL. VHDL: Applicazioni. Stili di Descrizione Hardware. Elettronica dei Sistemi Digitali L-A

Flusso di progetto circuiti digitali. Circuiti Integrati Digitali. Il Design Productivity Gap. Tecnologia Standard Cells

VHDL come strumento di progetto di circuiti digitali

VHDL. Il linguaggio FOCUS

Sistemi per la Progettazione Automatica. problema punti massimi i tuoi punti problema 1 14 problema 2 4 problema 3 6 problema 4 6 totale 30

14/11/2012. Il VHDL 3 parte. Tipi. Tipi scalari INTEGER; REAL; Tipo Fisici; BOOLEAN; CHARCTER; BIT ENUMERATO; Tipo composto ARRAY RECORD FILE ACCESS

LSS Reti Logiche: circuiti sequenziali

Introduzione alla sintesi comportamentale

Architetture e reti logiche. Esercitazioni VHDL. a.a. 2005/06. Uso del VHDL. Stefano Ferrari

Architetture e reti logiche Esercitazioni VHDL a.a. 2006/07. UsodelVHDL. Stefano Ferrari

Descrizioni VHDL Behavioral

BREVE GUIDA ALL' UTILIZZO DI QUARTUS II PER LO SVILUPPO DI PROGETTI VHDL a.a

UART TX... VERSIONE CORRETTA!

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 14/7/2015

Flusso di progetto circuiti digitali

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 5/9/2016

Sommario. Modellizzazione Sintassi Classi di Oggetti Tipi di Dati e Operatori Package e Librerie Processi Esempi di codice VHDL VHDL Testbenches

Fondamenti di Informatica B

Laboratorio di Sistemi Digitali M A.A. 2010/11

Reti Logiche A Esame del 14 febbraio 2006

Le reti sequenziali sincrone memorizzano il proprio stato in dei FF-D

Note su VHDL. 22 gennaio 2004

DESCRIZIONE DEL FUNZIONAMENTO

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 11/7/2016

Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica. Metodologie e strumenti per il reengineering del workflow management

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 8/9/2015

Circuiti sincroni circuiti sequenziali:bistabili e latch

Corso di Reti Logiche A

X 1, X 2,..., X n e trasferisci il risultato nel registro Z. Lez. 9 Arch. RTL Fondamenti di Informatica B 6

Un contatore è un registro che evolve secondo una sequenza predefinita di stati ordinati all applicazione di un impulso di ingresso

Macchine a Stati finiti

ELETTRONICA GENERALE, FONDAMENTI DI ELETTRONICA DIGITALE Appello d esame del 17/6/2016

Elettronica delle Telecomunicazioni II - Esercitazione 1. Interfaccia di convertitori A/D e A/D con logica programmabile

I Componenti di un Sistema Digitale e Progetto Controllore data path

CAPITOLO 6: STILI DI CODIFICA VHDL PER LOGICHE PROGRAMMABILI

Macchine a Stati finiti

Macchine a Stati finiti. Sommario

Circuiti sequenziali e latch

Macchine a Stati finiti

Linguaggi di descrizione dell hardware Progetti a.a. 2016/17

Transcript:

Si progetti, utilizzando il linguaggio VHDL, una rete logica in grado di realizzare il controllore di un distributore automatico di bevande. L interfaccia di I/O della rete è la seguente: ESERCIZIO entity vending5 is port( reset : in bit; -- al posto del tipo bit si clock : in bit; -- può mettere std_logic dime : in bit; nichel : in bit; output : out bit); end vending5; non da resto e non è specificato cosa fa una volta raggiunti i 5 centesimi non è possibile inserire due monete contemporaneamente non è specificato quale evento permette ; di usicire dallo stato che rivela I 5c a parte il reset Il distributore accetta solo ed esclusivamente monete da 5 (nichel) e (dime) centesimi. Al raggiungimento dell importo di 5 centesimi deve attivare un segnale di abilitazione (output) per l erogazione della bibita. a.a. 29-2 2 a.a. 29-2

library IEEE; use IEEE.std_logic_64.all; use IEEE.std_logic_arith.all; 3 entity vending5 is port( reset : in bit; clock : in bit; dime : in bit; nichel : in bit; output : out bit); end vending5; architecture algoritmica of vending5 is --- parte dichiarativa dell'architettura: è dichiarato un nuovo tipo --- denominato "state" e definito attraverso l'elenco dei valori che può assumere type state is (zero_c, five_c, ten_c, fifteen_c); --- segnale interni che rappresentano rispettivamente lo stato presente --- (uscita dei registri di stato) e quello futuro (ingresso dei registri di stato) signal present_state, next_state: state; a.a. 29-2 ---- parte combinatoria della FSM: rete combinatoria che definisce ---- il valore dello stato futuro e dell'uscita per ogni configurazione ---- di stato presente e per ogni valore degli ingressi 4 process(present_state, nichel, dime) -- nella sensitivity list -- il segnale che rappresenta lo stato corrente -- (present_state) e i segnali di ingresso case present_state is when zero_c => output <= ''; --- macchina di Moore l'uscita dipende --- solo dallo stato corrente if(nichel = '') then next_state <= five_c; elsif(dime = '') then next_state <= ten_c; next_state <= present_state; a.a. 29-2

when five_c => output <= ''; if(nichel = '') then next_state <= ten_c; elsif(dime = '') then next_state <= fifteen_c; next_state <= present_state; 5 when ten_c => output <= ''; if(nichel = '') then next_state <= fifteen_c; elsif(dime = '') then next_state <= fifteen_c; next_state <= present_state; when fifteen_c => output <= ''; next_state <= present_state; when others => ---- permette di definire lo stato futuro se inderteminato output <= ''; next_state <= zero_c; end case; a.a. 29-2 --- parte sequenziale della FSM: registri di stato process(reset,clock) --- reset asincrono, compare nella sensitivity list if reset = '' then present_state <= zero_c; elsif(clock'event and clock = '') then present_state <= next_state; 6 end algoritmica; a.a. 29-2

RTL Viewer 7 reset zero_c five_c ten_c fifteen_c a.a. 29-2 Simulazione funzionale 8 cent 5 cent 5 cent 5 cent 5 cent reset Out = reset Out = a.a. 29-2

ESERCIZIO a.a. 29-2 Schema a blocchi semplicato a.a. 29-2

Digramma degli stati 2 a.a. 29-2 library IEEE; use IEEE.std_logic_64.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_arith.all; 3 entity COUNTER is port ( CLK : in std_logic; RESET : in std_logic; VALUE : out unsigned(5 downto ) ); end COUNTER; -- per contare 35 cicli, corrispondenti a 35 secondi a khz di --- freq. servono 6 bit 2^6 - = 65535 architecture A of COUNTER is signal next_value, value_temp : unsigned(5 downto ); -- A process(clk) if CLK'event and CLK='' then if RESET='' then value_temp <= (others => ''); value_temp <= next_value; VALUE <= value_temp; next_value <= value_temp + conv_unsigned(,6); end A; a.a. 29-2

library IEEE; use IEEE.std_logic_64.all; use IEEE.std_logic_arith.all; 4 entity TRAFFICLIGHT is port ( BUTTON : in std_logic; CLOCK : in std_logic; RESET : in std_logic; RED : out std_logic; YELLOW : out std_logic; GREEN : out std_logic); end TRAFFICLIGHT; architecture ESERCIZIO of TRAFFICLIGHT is -- definisco il tipo stato e i segnali che mi serviranno per la FSM type stato is (G,Y,R); signal current_state, next_state : stato; -- segnali necessari a memorizzare i dati generati internamente all'architecture signal current_count : unsigned(5 downto ); signal five_seconds : std_logic; signal thirtyfive_seconds : std_logic; signal stop_counter : std_logic; -- dichiaro l'intenzione di usare un componente esterno e ne specifico l'interfaccia di IO component COUNTER port ( CLK : in std_logic; RESET : in std_logic; VALUE : out unsigned(5 downto ) ); end component; a.a. 29-2 -- ESERCIZIO cont : COUNTER port map ( CLK => CLOCK, RESET => stop_counter or RESET, VALUE => current_count); -- istanziazione de componente contatore 5 -- statement che rappresenta il blocco combinatorio DEC5 mostrato sullo schematico five_seconds <= '' when current_count = conv_unsigned(2,6) ''; --CASO REALE: five_seconds <= '' when current_count = conv_unsigned(5,6) ''; -- questo processo realizza in maniera equivalente alla precedente -- la rete di decodifica combinatoria corrispondente ai 35 secondi -- Tuttavia viene utilizzato un PROCESS; process(current_count) -- CASO REALE: if current_count = conv_unsigned(35,6) then if current_count = conv_unsigned(5,6) then thirtyfive_seconds <= ''; thirtyfive_seconds <= ''; -- e' un processo combinatorio, l'uscita va calcolata in ogni ramo di esecuzione del processo!!!! ---- il processo appena descritto è equivalente allo statement --- thirtyfive_seconds <= '' when current_count = conv_unsigned(35,6) ''; a.a. 29-2

6 -- parte sequenziale della macchina a stati process(clock) if CLOCK'event and CLOCK='' then if RESET='' then current_state <= G; current_state <= next_state; a.a. 29-2 -- parte combinatoria della macchina a stati. 7 process(current_state, BUTTON, five_seconds, thirtyfive_seconds) case current_state is when G => RED <= ''; YELLOW <= ''; GREEN <= ''; stop_counter <= ''; if BUTTON = '' then next_state <= Y; next_state <= G; -- macchina di Moore when R => RED <= ''; YELLOW <= ''; GREEN <= ''; stop_counter <= ''; if thirtyfive_seconds = '' then next_state <= G; next_state <= R; when Y => RED <= ''; YELLOW <= ''; GREEN <= ''; stop_counter <= ''; if five_seconds = '' then next_state <= R; next_state <= Y; when others => RED <= ''; YELLOW <= ''; GREEN <= ''; stop_counter <= ''; next_state <= G; end case; end ESERCIZIO; a.a. 29-2

a.a. 29-2 8 CLK RESET VALUE[5..] BUTTON COUNTER:cont:VALUE[] COUNTER:cont:VALUE[] COUNTER:cont:VALUE[2] COUNTER:cont:VALUE[3] COUNTER:cont:VALUE[4] COUNTER:cont:VALUE[5] COUNTER:cont:VALUE[6] COUNTER:cont:VALUE[7] COUNTER:cont:VALUE[8] COUNTER:cont:VALUE[9] COUNTER:cont:VALUE[] COUNTER:cont:VALUE[] COUNTER:cont:VALUE[2] COUNTER:cont:VALUE[3] COUNTER:cont:VALUE[4] COUNTER:cont:VALUE[5] RESET clk y r g COUNTER:cont current_state comb~ BUTTON CLOCK RESET RED YELLOW GREEN a.a. 29-2 9 Contatore Contatore 6' h -- value_temp~ value_temp~ value_temp~2 value_temp~3 value_temp~4 value_temp~5 value_temp~6 value_temp~7 value_temp~8 value_temp~9 value_temp~ value_temp~ value_temp~2 value_temp~3 value_temp~4 value_temp~5 add~ A[5..] B[5..] OUT[5..] ADDER value_temp[5..] D Q PRE ENA CLR CLK RESET VALUE[5..] Reset sincrono

Diagramma degli stati generato da RTL viewer 2 reset g y r Reset sincrono a.a. 29-2 Simulazione funzionale 2 L uscita del contatore varia da a 2 n - Al primo ciclo l uscita vale da node finder: Insert register pre-synthesis La condizione per il cambio di stato era stata posta al valore 2, dopo quindi 3 cicli In generale se voglio che il contatore riparta da dopo N cicli, la condizione deve essere posta a N- a.a. 29-2

Risultato compilazione Start compilation 22 a.a. 29-2 Simulazione timing 23 a.a. 29-2

24 Timing analyzer Start timing analyzer fmax = 239.98 MHz Tck = 4.67 ns from register Counter:cont value_temp to register current_state.r a.a. 29-2 Esercizio 2: Esame del 5 luglio 24 In rete è disponibile una soluzione dettagliata 3 a.a. 29-2

library IEEE; use IEEE.std_logic_64.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; 32 entity CICLOCOMPUTER is port ( GIROCOMPIUTO : in std_logic; CLOCK : in std_logic; RESET : in std_logic; MODE : in std_logic; VALORE : out unsigned(5 downto ) ); end CICLOCOMPUTER; architecture A of CICLOCOMPUTER is signal cont_distanza, next_distanza, giri_sec, next_giri_sec, giri_sec_frozen : unsigned(4 downto ); signal cicli, next_cicli : unsigned(4 downto ); signal wavehz : std_logic; signal select_output : std_logic; type modo_funzionamento is (velocita, distanza); signal current_state, next_state : modo_funzionamento; a.a. 29-2 process(clock) -- contatore della distanza 33 if clock'event and clock = '' then if reset = '' then cont_distanza <= conv_unsigned(,5); elsif girocompiuto = '' then cont_distanza <= next_distanza; next_distanza <= cont_distanza + conv_unsigned(,5); -- contatore della velocita, ogni secondo azzero il conteggio process(clock) -- contatore della velocita, ogni secondo azzero il conteggio if clock'event and clock = '' then if reset = '' or wavehz = '' then giri_sec <= conv_unsigned(,5); elsif girocompiuto = '' then giri_sec <= next_giri_sec; next_giri_sec <= giri_sec + conv_unsigned(,5); Contatori con ingresso di abilitazione i contatori sono descritti e non instaziati a.a. 29-2

34 -- ogni secondo vado a campionare i giri calcolati -- registro process(clock) if clock'event and clock = '' then if reset = '' then giri_sec_frozen <= conv_unsigned(,5); elsif wavehz = '' then giri_sec_frozen <= giri_sec; a.a. 29-2 -- macchina a stati per commutare tra distanza e velocita process(clock) if clock'event and clock = '' then if reset = '' then current_state <= distanza; current_state <= next_state; 35 process(current_state, mode) case current_state is when velocita => if mode = '' then next_state <= distanza; next_state <= velocita; select_output <= ''; when distanza => if mode = '' then next_state <= velocita; next_state <= distanza; select_output <= ''; when others => next_state <= distanza; select_output <= ''; end case; a.a. 29-2

36 process(clock) if clock'event and clock = '' then if reset = '' then cicli <= conv_unsigned(,5); cicli <= next_cicli; next_cicli <= conv_unsigned(,5) when cicli = conv_unsigned(9,5) cicli + conv_unsigned(,5); --- nel caso reale avrei dovuto sostiture 9999 a 9 wavehz <= '' when cicli = conv_unsigned(,5) ''; -- seleziono il valore da portare in uscita. Devo convertire da giri a metri, -- ma essendo giro = 2 metri, basta shiftare a sinistra di ; valore() <= ''; valore(5 downto ) <= cont_distanza when select_output = '' giri_sec_frozen; end A; a.a. 29-2 Es: 3 Moltiplicatore/Accululatore (MAC) 43 Si realizzi un moltiplicatore-accumulatore (MAC) a pipeline in cui: il primo stadio campiona i dati in ingresso il secondo stadio campiona il prodotto il terzo stadio campiona e porta sull'uscita la somma di accumulo Per gli ingressi si adotti una rappresentazione a 4 bit a.a. 29-2

library IEEE; use IEEE.std_logic_64.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; 44 -- Nota: il segnale di reset e' INDISPENSABILE per resettare ad un valore noto -- i FF del registro. entity mac is port (clk,reset : in std_logic; in_chan,in_chan2 : in unsigned(3 downto ); out_chan : out unsigned(7 downto ) ); end mac; architecture s of mac is component reg port ( clk,reset: in std_logic; reg_in : in unsigned(7 downto ); reg_out : out unsigned(7 downto ) ); end component; signal ck_in,ck_in2 : unsigned(3 downto ); signal prod,ck_prod,sum,newsum : unsigned(7 downto ); a.a. 29-2 -- Sincronizzazione degli ingressi, potrebbe essere descritto -- attraverso una subentity gerarchica (non fa' differenza) process(clk,reset) if reset='' then ck_in<=""; ck_in2<=""; elsif clk'event and clk='' then ck_in<=in_chan; ck_in2<=in_chan2; -- Blocco di moltiplicazione, potrebbe essere ugualmente descritto -- attraverso una subentity gerarchica prod <= ck_in * ck_in2; 45 a.a. 29-2

46 -- Registro di pipeline, potrebbe essere descritto ugualmente attraverso -- un processo (non fa' differenza) Pipe_reg : reg port map (clk,reset,prod,ck_prod); -- Result Accumulator newsum <= sum+ck_prod; -- Registro accumulatore, potrbbe essere descritto ugualmente attraverso -- un processo (non fa' differenza) acc_reg : reg port map (clk,reset,newsum,sum); -- Il risultato viene portato sui pins di uscita out_chan <= sum; end s; a.a. 29-2 ----------------------------------------------------------------------- -- DATA_REG : General purpose Register entity ----------------------------------------------------------------------- library IEEE; use IEEE.std_logic_64.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; 47 entity reg is port ( clk,reset : in std_logic; reg_in : in unsigned(7 downto ); reg_out : out unsigned(7 downto ) ); end reg; architecture b of reg is process(clk,reset) if reset='' then reg_out <= ( others => ''); elsif clk'event and clk='' then reg_out <= reg_in; end b; a.a. 29-2