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

Documenti analoghi
Metodologie di Progettazione Hardware-Software

Addizione tra numeri binari

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

Introduzione al VHDL. Alcuni concetti introduttivi

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.

Tipi di segnali (logici) predefiniti. Rappresentazione dei segnali in VHDL. Tipo bit (definito nel package standard)

La libreria STD La libreria MODELSIM_LIB Il package TEXTIO Struttura dei testbench. La libreria standard IEEE è composta 6 package

Christian Pilato

Descrizioni VHDL Behavioral

Un linguaggio per la descrizione dello hardware: il VHDL

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

Un linguaggio per la descrizione dello hardware: il VHDL

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

Reti Logiche A Appello del 24 febbraio 2010

Reti Logiche A. Introduzione al VHDL

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

interfacciamento statico e dinamico analisi di interconnessioni, driver e receiver

Laboratorio di Calcolatori Elettronici

Introduzione al VHDL Lezione 3

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

Calcolatori Elettronici M Modulo Linguaggio VHDL Parte 1/2

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

ELETTRONICA dei SISTEMI DIGITALI Universita di Bologna, sede di Cesena

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

Nonostante l avvento delle più moderne

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Reti Logiche Appello del 1 marzo 2011

28/02/2014 Copyright V. Moriggia

ARCHITETTURA DEI SISTEMI DI ELABORAZIONE

Reti Logiche A Esame del 19 febbraio 2007

Progettazione in VHDL del Vertex Shader

Introduzione al VHDL Lezione 1

Calcolatori Elettronici M Modulo Mapping di un progetto VHDL su FPGA

IL VHDL. Perché si usa un linguaggio di descrizione dell'hardware? Permette di formalizzare il progetto di sistemi digitali complessi

Università Federico II - Napoli - A.A. 2011/2012 Corso di Laurea in Ingegneria Elettronica

Laboratorio di Elettronica Introduzione al VHDL

1. Introduzione. Il VHDL è un linguaggio per la descrizione dell hardware (un Hardware Description Language), che può essere utilizzato per la

Reti Logiche A Esame del 24 febbraio 2006

Elaborato di Architettura dei Sistemi Integrati

Il processore: unità di elaborazione

Progetto di una Slot Machine da sala scommesse implementata in VHDL e C# Andrea Manganaro Elio Romanelli

TUTORIAL 3. Realizzazione di un contatore su scheda XSA50. A cura di De Pin Alessandro

Introduzione al linguaggio VHDL

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Lezione E15. Sistemi embedded e real-time

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Complementi ed Esercizi di Reti Logiche in VHDL

Simulazione. Simulazione verilog. Testbench. Testbench

orologio e display cont 16

Breve guida al linguaggio FORTRAN 77

Introduzione al MATLAB c Parte 3 Script e function

PASCAL - Record. Il linguaggio PASCAL consente l utilizzo dei RECORD

Dispense per le esercitazioni del corso Sistemi Elettronici Programmabili 1

Elementi base per la realizzazione dell unità di calcolo

Microprocessore a 16 bit in tecnologia CMOS 45nm

Problema: calcolare il massimo tra K numeri

Modularizzazione del software

Tecnologie e Progettazione dei sistemi Informatici e di Telecomunicazioni Scheda Recupero Estivo Obiettivo

Shell: variabili di sistema. Per visualizzare il valore di tutte le variabili d ambiente si usa il comando set

VBA Principali Comandi

Corso di Calcolatori Elettronici 2 Università di Napoli, Federico II. Il VHDL come linguaggio (v1.0) Roadmap

Gestione di files Motivazioni

Calcolatori Elettronici M Modulo Progetto VHDL e Sintesi su FPGA di un processore RISC pipelined a 32 bit

ESERCITAZIONE 5!! 7 dicembre 2016!! Programmazione concorrente in ADA!!

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Sintesi Logica dal livello RTL. FPGA Xilinx Virtex II

DESCRIZIONE DEL FUNZIONAMENTO

Esercizio di Sincronizzazione tra Processi: Ponte a Senso Unico Alternato con Capacità Limitata

Calcolatori Elettronici

Laboratorio di programmazione Corso A - A.A. 2000/2001 Docente: A. Lanza Il tipo boolean Il tipo real Tipi definiti dall utente: il tipo enumerato

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Fortran per Ingegneri

Il software e la programmazione

3. La sintassi di Java

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Il linguaggio C. Notate che...

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Elementi di Informatica

Úimparare & approfondiredi FRANCESCO PENTELLA

BASI LINGUAGGIO. Programmazione Web 1

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Istruzioni condizionali di diramazione in Fortran 90

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Variabili strutturate

Capitolo 7 I puntatori in C

14 - Metodi e Costruttori

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Assembler di Spim. Assembler di SPIM. Struttura di un programma assembler. Direttive

ESERCITAZIONE 6 12 dicembre Soluzione

UNIVERSITA DEGLI STUDI DI FIRENZE. Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica !" #$ & +

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Sottosistemi ed Architetture Memorie

Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Richiami sull architettura del processore MIPS a 32 bit

Il C nel C++: Funzioni

Transcript:

Il VHDL 3 parte Tipi Tipi scalari INTEGER; REAL; Tipo Fisici; BOOLEAN; CHARCTER; BIT ENUMERATO; Tipo composto ARRAY RECORD FILE ACCESS 1

Definizione di un nuovo tipo TYPE Nome_tipo IS Definizione_tipo; Tipo enumerato TYPE quattrovalori IS ('0', '1', 'X','Z'); TYPE std_ulogic IS ('U','X','0','1','Z','W','L','H','-'); TYPE istruzioni IS (add, sub, lw, sw, mov, beq); TYPE Stato IS (Fetch, Decode, Execute, MemAccess, WriteBack); 2

Array ( character Tipi predefiniti : bit_vector(array di bit) e string (array di Definizione di un array monodimensionale TYPE Nome_array IS ARRAY ( range_indici) OF Tipo_base; Es. TYPE data_bus IS array( 0 to 31) OF BIT; TYPE byte IS ARRAY(7 downto 0) OF std_logic; TYPE word IS ARRAY(31 downto 0) OF std_logic; Riferimento agli elementi di un array monodimensionale ARCHITECTURE Behavioral OF test IS SIGNAL w,x,y: word; SIGNAL b,c,f: byte; SIGNAL d,e: std_logic; BEGIN d<= w(i); b<=y(7 downto 0); c<=b; x(15 downto 0) <=b&c; -- concatenazione y(31 downto 16) <=b&b; y(15 downto 0) <= "1010101010101010"; e <= '1'; f<=('1','0','0','1','1','1','0','1'); --aggregazione END Behavioral; 3

Array multidimensionale TYPE Nome_array IS ARRAY(Range_1,.., Range_N) OF Tipo_base; Es. TYPE Memoria IS ARRAY (0 to memsize-1, 0 to dim-1) OF std_logic; VARIABLE DataMem : Memoria; DataMem(i,j) := A; Nel caso in cui definiamo un array di array il riferimento agli elementi è differente. TYPE MemDati IS ARRAY (0 to memsize-1) OF word; VARIABLE Mem: MemDati; Mem(i)(j):=A; Array con dimensione non specificata Sono array la cui dimensione non è specificata al momento della sua dichiarazione. TYPE Nome_tipo IS ARRAY (NATURAL RANGE <>) OF Tipo_base Es. TYPE std_logic_vector IS ARRAY (NATURAL RANGE <>) OF std_logic; Questo tipo di array vengono utilizzati per definire gli argomenti di sottoprogrammi o entity port. 4

RECORD TYPE Nome_record IS RECORD campo1: tipo1; campo2: tipo2;... campon: tipon; END RECORD; Record: esempio TYPE opcode_type IS (add, sub, lw, sw, mov, beq); TYPE istruzione IS RECORD opcode: opcode_type; src1: integer range 0 to 31; src2: integer range 0 to 31; dst: integer range 0 to 31; END RECORD; VARIABLE ist: istruzione; VARIABLE op : opcode_type; op:= ist.opcode; ist := (add, 1,2,3); 5

SUBTYPE La dichiarazione dei SUBTYPE è utilizzata per definire sottoinsiemi di un tipo. Permette di evitare la definizione di un nuovo tipo. type MY_WORD is array (15 downto 0) of std_logic; subtype SUB_WORD is std_logic_vector (15 downto 0); subtype MS_BYTE is integer range 15 downto 8; subtype LS_BYTE is integer range 7 downto 0; Subprograms Consiste di funzioni e procedure Function il nome di una funzione può essere un operatore; può avere un numero arbitrario di parametri di ingresso; restituisce un solo valore; Procedure può avere numero arbitrario di parametri di ogni possibile direzione ( IN,OUT,INOUT ) (! istruzione RETURN opzionale (non restituisce alcun valore E' possibile realizzare l'overloading dei subprogram I parametri possono essere constants, signals, variables o files. Esiste una versione sequenziale e concorrente delle function e delle procedure. 6

Functions FUNCTION Nome_Function( par1: tipo1,..., parn: tipon) IS RETURN TipoValore_restituito --sezione_dichiarativa_function BEGIN -- sezione_esecutiva RETURN valore_restituito; END Nome_Function Functions: esempi FUNCTION AndVect ( op1: std_logic_vector; op2 : std_logic_vector ) RETURN std_logic_vector IS VARIABLE temp: std_logic_vector(op1'length-1 downto 0); BEGIN FOR i IN 0 to op1'length-1 LOOP temp(i) := op1(i) AND op2(i); END LOOP; RETURN temp; END AndVect; FUNCTION rising_edge ( SIGNAL clk: std_logic) RETURN BOOLEAN IS BEGIN IF (clk'event) AND (clk='1') THEN RETURN true; ELSE RETURN false; END IF; END rising_edge; 7

Procedure PROCEDURE Nome_procedure ( par1: dir1 tipo1;...; parn: dirn tipon) IS --sezione_dichiarativa_procedure BEGIN --sezione_esecutiva_procedure END Nome_procedure; dove diri {IN, OUT,INOUT} Procedure: esempio 1 PROCEDURE And32 ( op1: IN word; op2 : IN word; ris: OUT word) IS VARIABLE temp: word; BEGIN FOR i IN 0 to 31 LOOP temp(i) := op1(i) AND op2(i); END LOOP; ris := temp; END And32; 8

Procedure: esempio 2 TYPE bus_parita IS RECORD valori: word; pari: std_logic; END RECORD; ( bus_parita PROCEDURE calcoloparita (x : INOUT IS VARIABLE p: INTEGER; BEGIN p:=0; FOR i IN 0 to 31 LOOP IF (x.valori(i)='1' THEN p:=p+1; END IF; END LOOP; IF (p MOD 2 = 1) x.pari := '1'; ELSE x.pari := '0'; END IF; END calcoloparita; PACKAGE Contiene elementi che possono essere condivisi tra diverse entità. Consiste di due parti: una sezione dichiarativa, che definisce l'interfaccia del package; il corpo del package, che definisce il comportamento del package. Package declaration Può contenere le seguenti dichiarazioni: dichiarazioni di subprogram, dichiarazioni di tipi e sottotipi constant o deferred constant, signal dichiarazione di file, dichiarazione di componenti Package body Può contenere le seguenti dichiarazioni: dichiarazioni di subprogram, definizione dei subprogram dichiarazione di di tpi e sottotipi, costanti dichiarazione di file 9

Package: esempio (1) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; package dati is subtype w16 is std_logic_vector(15 downto 0); subtype w32 is std_logic_vector(31 downto 0); constant z32 : w32 :="ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; constant zero32 :w32 := "00000000000000000000000000000000"; type vect is array ( natural range <>) of std_logic; type vect16 is array (natural range <>) of w16; type vect32 is array (natural range <>) of w32; function vect2int(vettore : std_logic_vector) return integer; end dati; Package: esempio (2) package body dati is function vect2int(vettore : std_logic_vector) return integer is variable risultato: integer:=0; variable dim: integer; begin dim:= vettore'length; for ind in dim-1 downto 0 loop risultato:=risultato*2; if vettore(ind)='1' then risultato:=risultato+1; end if; end loop; return risultato; end vect2int; end dati; 10

File TYPE nome_tipo_file IS FILE OF Tipo_base Esempio: TYPE integer_file IS FILE OF INTEGER; Dichiarazione di un oggetto di tipo file FILE nomefile : nometipo Esempio: FILE myfile: integer_file File Apertura di un file FILE_OPEN ( nome_file, pathname, modalità apertura); dove modalità è {WRITE_MODE, READ_MODE, APPEND_MODE} Chiusura di un file FILE_CLOSE( nome_file); 11

Accesso ai file ( READ(file,data Legge da file e restituisce in data il valore letto ( WRITE(file,data Scrive su file il valore presente in data ( ENDFILE(file Restituisce true se si è alla fine del file File di testo Il tipo TEXT è definito nel package std.textio FILE nome_file: TEXT; Un file di testo viene visto come un insieme di LINE readline(nome_file,nome_line); Legge una line da file writeline(nome_file,nome_line); Scrive una line su file Per leggere da tastiera si usa input come nome del file, per visualizzare sullo schermo si usa output 12

Read e Write su line di std_logic Per leggere o scrivere su valori di tipo std_logic da o verso una line bisogna usare le funzioni READ (nome_line, valore_std_logic) WRITE(nome_line, valore_std_logic) Il loro uso richiede il package ieee.std_logic_textio Esempio di lettura da file di testo e copia in std_logic_vector (1/2) library ieee; use ieee.std_logic_1164.all; use std.textio.all; use ieee.std_logic_textio.all; entity prova_file is port ( clk: in std_logic; a: out std_logic_vector(3 downto 0) ); end prova_file; architecture beh of prova_file is begin process FILE filedati: TEXT; variable tline: LINE; variable ta: std_logic_vector(3 downto 0); begin 13

Esempio di lettura da file di testo e copia in std_logic_vector (2/2) FILE_OPEN(filedati,"dati.txt",READ_MODE); while not endfile(filedati) loop readline(filedati,tline); read(tline,ta); write(tline,ta); writeline(output,tline); a<= ta; wait until clk event and clk= 0 ; end loop; file_close(filedati); end process; end tbb; Simulazioni: TestBench Un TestBench è una entità che -fornisce gli stimoli (testvectors) per il Device Under Test (DUT) ; -non deve essere sintetizzabile; -non ha bisogno di porte per l esterno; -contiene al suo interno come component il DUT; 14

TestBench: esempio (1) library ieee; use ieee.std_logic_1164.all; entity TESTBNCH is end TESTBNCH; architecture stimulus of TESTBNCH is --. Sezione dichiarativa component ADDER4 is port ( a,b: in std_logic_vector(3 downto 0); ci: in std_logic; s: out std_logic_vector(3 downto 0); co: out std_logic); end component; signal a,b: std_logic_vector(3 downto 0); signal ci: std_logic; signal s: std_logic_vector(3 downto 0); signal co: std_logic; TestBench: esempio (2) begin DUT: ADDER4 port map ( a, b, ci, s, co ); StimuliA: process begin a <= "0010"; wait for 20 ns; a <= "0110"; wait for 20 ns; a <= "0110"; wait for 20 ns; end process StimuliA; b <= "1001" AFTER 0ns, "0001" AFTER 30 ns, "1101" AFTER 50 ns ; ci<= '0' AFTER 0ns, 1 AFTER 60 ns; end stimulus; 15