Il Linguaggio VERILOG



Documenti analoghi
VERILOG HDL Training

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

Arduino: Programmazione

FONDAMENTI di INFORMATICA L. Mezzalira

Un circuito integrato è una piastrina di silicio (o chip), quadrata o rettangolare, sulla cui superficie vengono realizzati e collegati

Reti sequenziali sincrone

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Ciclo di Istruzione. Ciclo di Istruzione. Controllo. Ciclo di Istruzione (diagramma di flusso) Lezione 5 e 6

Descrizione di un algoritmo

Circuiti sequenziali e elementi di memoria

Xilinx ISE Tutorial File -> New Project...

Richiesta pagina PHP (es: index.php)

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Codifica: dal diagramma a blocchi al linguaggio C++

Introduzione alla programmazione in C

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

CPU. Maurizio Palesi

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Lezione 2 OPERAZIONI ARITMETICHE E LOGICHE ARCHITETTURA DI UN ELABORATORE. Lez2 Informatica Sc. Giuridiche Op. aritmetiche/logiche arch.

Testi di Esercizi e Quesiti 1

Introduzione al VHDL. Alcuni concetti introduttivi

Linguaggio del calcolatore. Algebra di Boole AND, OR, NOT. Notazione. And e or. Circuiti e reti combinatorie. Appendice A + dispense

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Calcolatori Elettronici B a.a. 2006/2007

Aritmetica dei Calcolatori 2

INFORMATICA 1 L. Mezzalira

GESTIONE INFORMATICA DEI DATI AZIENDALI

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Architettura hardware

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Esercizi per il recupero del debito formativo:

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Ing. Paolo Domenici PREFAZIONE

Dispensa di Informatica I.1

NOZIONI ELEMENTARI DI HARDWARE E SOFTWARE

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Aritmetica binaria sui numeri relativi (somme e sottrazioni) e Unità aritmetiche

Variabili e tipi di dato

LABORATORIO DI SISTEMI

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

STRUTTURE DEI SISTEMI DI CALCOLO

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Informazione analogica e digitale

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

Macchine combinatorie

Linguaggi di programmazione

Struttura del calcolatore

Gestione Filtri. InfoBusiness 2.8 Gestione Filtri Pag. 1/ 11

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Informatica. Rappresentazione dei numeri Numerazione binaria

GERARCHIE RICORSIVE - SQL SERVER 2008

C. P. U. MEMORIA CENTRALE

Corso di Laurea in Informatica Architetture degli Elaboratori

Flip-flop, registri, la macchina a stati finiti

Logica e codifica binaria dell informazione

Linguaggio C. Fondamenti. Struttura di un programma.

Laurea Specialistica in Informatica

Architettura del computer (C.Busso)

SISTEMI DI NUMERAZIONE E CODICI

4 3 4 = 4 x x x 10 0 aaa

Introduzione. Informatica B. Daniele Loiacono

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

Programmare in Java. Olga Scotti

Architettura del calcolatore

Architettura di un calcolatore

Sistema operativo: Gestione della memoria

Flip-flop Macchine sequenziali

Elementi di Informatica

Macchine a stati finiti. Sommario. Sommario. M. Favalli. 5th June 2007

Elementi di Architettura e Sistemi Operativi

Manuale Terminal Manager 2.0

Gestione del workflow

I file di dati. Unità didattica D1 1

Macchine a stati finiti. Sommario. Sommario. M. Favalli. Le macchine a stati si utilizzano per modellare di sistemi fisici caratterizzabili mediante:

Artifact Centric Business Processes (I)

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE

Organizzazione degli archivi

Esame di INFORMATICA

Linguaggi e Paradigmi di Programmazione

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

DMA Accesso Diretto alla Memoria

ISTITUTO TECNICO ECONOMICO MOSSOTTI

Laboratorio di Architettura degli Elaboratori A.A. 2015/16 Circuiti Logici

Matlab: Strutture di Controllo. Informatica B

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Esempi di algoritmi. Lezione III

Fasi di creazione di un programma

Alessandro Pellegrini

Calcolatori: Algebra Booleana e Reti Logiche

Transcript:

Il Linguaggio VERILOG Introduzione Concetti di base Sintassi del linguaggio Modellazione di librerie Modelli comportamentali (behavioral) orientati alla sintesi logica Verifica (simulazione) Sintesi logica di FPGA Implementazione di una semplice interfaccia VME Paolo Musico INFN Genova 1

INTRODUZIONE (1) Verilog e un linguaggio di programmazione orientato alla descrizione di strutture hardware (HDL) digitali. Viene usato per descrivere sistemi digitali a differenti livelli: switch level: transistor level gate level: porte logiche elementari Register Transfer Level (RTL): scambio dati tra registri Verilog e stato introdotto nel 1985 da Gateway Design System Corporation e poi commercializzato da Cadence come Verilog-XL. Dal 1990 esiste la Open Verilog International che ha permesso la standardizzazione IEEE del linguaggio nel 1995 e la realizzazione di altri simulatori (VeriWell, VCS, VeriBest, ). Questo corso e orientato all introduzione della modellazione RTL. Paolo Musico INFN Genova 2

INTRODUZIONE (2) Esistono altri HDL: il piu importante e VHDL che e standard IEEE dal 1987. Il mercato e suddiviso abbastanza equamente tra Verilog e VHDL. Verilog ha la sintassi C-like ed e meno formale di VHDL che ha una sintassi ADA-like ed e molto formale. Perche si usa un HDL? La complessita odierna dei circuiti non permette piu la semplice rappresentazione schematica. E piu efficace descrivere il comportamento del circuito tramite un HDL, verificarne la correttezza tramite un simulatore e geneare la netlist gate level con strumenti automatici (sintetizzatori logici). In tal modo e possibile anche verificare la funzionalita di possibili implementazioni alternative dello stesso circuito e scegliere la piu performante. Paolo Musico INFN Genova 3

CONCETTI BASE (1) Metodologia Bottom-Up: usando componenti esistenti si sviluppa il progetto e si sale nella gerarchia (realizzo un registro con DFF, poi un banco di registri, poi la decodifica, ecc.) Metodologia Top-Down: il problema viene decomposto in blocchi e ogni blocco viene decomposto a sua volta fino ad limite (un banco di registri ha bisogno oltre che dei registri stessi di una decodifica, il singolo registro sara poi implementato con dei DFF, ecc.) Metodologia mista: si decompone il problema top-down fino ad un certo limite; i livelli piu bassi della gerarchia si implementano bottom-up (descrivo i sottoblocchi con HDL e uso la sintesi per implementarli, utilizzando librerie di gates). Paolo Musico INFN Genova 4

CONCETTI BASE (2) Un intero progetto viene contenuto in piu files HDL: ogni file puo contenere uno o piu moduli. Per poter simulare il progetto c e bisogno di un modulo di test che permetta di applicare gli stimoli al circuito e che ne verifichi il comportamento (con stampe, salvando segnali grafici, ). Dopo la sintesi e possibile utilizzare la netlist gate level, applicare gli stimoli e verificare che il risultato della sintesi soddisfi i requisiti del problema (limiti di velocita, ). Strumenti necessari e disponibili su piattaforma Sun-Solaris: editor di testo (VI, GVIM, EMACS, TEXTEDIT, ), simulatore (Verilog-XL, VCS), visualizzatore di seganli (Signalscan, Virsim), sintetizzatore (Synopsys design_compiler o fpga_compiler, XILINX XST). Paolo Musico INFN Genova 5

SINTASSI (1) Esempio completo di modulo: mux 2 1. Definizione del modulo con i segnali di I/O. Definizione del tipo reg Blocco procedurale always Uso di begin- Statement decisionale if-else Assegnazione: <= Commenti: // e /* */ Statement di chiusura del modulo module MUX2_1(out, a, b, sel); output out; input a, b, sel; reg out; // Commento always @(sel or a or b) begin if( sel == 0 ) out <= a; else out <= b; /* Altro commento */ module Paolo Musico INFN Genova 6

SINTASSI (2) Spazi bianchi: utilizzare blanks, tab e linee vuote per migliorare la leggibilita del codice. Vengono ignorati dal parser. Commenti: usarli per descrivere cio che il codice deve fare. Vengono ignorati dal parser del simulatore. E possibile usare commenti particolari come direttive per il sintetizzatore (esempio: // synthesis attribute ). Numeri: interi e reali (non usati per la sintesi). Formato generico di un intero: <size> <base><value> Esempi: 12 // decimale (base 10) 8 h5f // esadecimale a 8 bit 6 b11_0010 // binario a 6 bit o576 // ottale senza dimensione 32 bz // binario a 32 bit Hi-Z Il carattere _ viene ignorato e puo essere usato come separatore Paolo Musico INFN Genova 7

SINTASSI (3) Identificatori: iniziano con un carattere alfabetico (a-z, A-Z), possono contenere numeri (0-9), _ e $. Devono essere diversi dalle parole riservate. Possono essere lunghi fino a 1023 caratteri. Sono identificatori i nomi dei moduli, le porte di I/O, le istanze, le variabili. Usare identificatori che abbiano significato per la funzione in cui sono usati. Crearsi una convenzione sugli identificatori; per esempio: i moduli iniziano con una maiuscola le porte sono sempre tutte maiuscole i segnali interni al modulo sono sempre tutti minuscoli i segnali attivi bassi terminano con b oppure con _ Verilog e case sensitive (per default) quindi pippo e diverso da Pippo. Paolo Musico INFN Genova 8

SINTASSI (4) Variabili di tipo fisico. Tipo reg : memorizza il valore dell ultimo assegnamento in un blocco procedurale Tipo wire: rappresenta la connessione tra porte di varie entita. Puo venire assegnato tramite continuous assignment. Esistono altri tipi di wires: wand (wired and), wor (wired or), tri (tristate). Le variabili possono essere scalari e vettoriali. Esempi: reg out; reg [7:0] data_bus; wire [1:0] select; wire enabled; // scalare // 8 bit bus // 2 bit bus // scalare E possibile avere variabili vettoriali con segno: reg signed [7:0] s1data_bus; // range -128 <-> +127 wire signed [3:0] s2data_bus; // range -8 <-> +7 Le variabili con segno vengono rappresentate in complemento a 2. Paolo Musico INFN Genova 9

SINTASSI (5) E possibile dichiarare una memoria come: reg [7:0] data_mem[1023:0] Notare che la dimensione dei vettori e [<start bit>:< bit>]. Il fatto che si metta prima MSB e poi LSB e solo una convenzione. Possibili valori: Verilog ammette 4 valori possibili: 0 (logic zero, false), 1 (logic one, true), x (unknown), z (Hi-Z). Altri tipi di variabili (usate di solito nei moduli di test). Tipo integer: intero a 32 bit con segno. Solitamente usato come contatore nei loop. Tipo time: intero a 64 bit senza segno. Paolo Musico INFN Genova 10

SINTASSI (6) Operatori aritmetici. + addizione - sottrazione e negazione unaria * moltiplicazione / divisione % modulo Operatori logici.! negazione logica && AND logico OR logico Paolo Musico INFN Genova 11

SINTASSI (7) Operatori logici relazionari. > maggiore >= maggiore o uguale < minore <= minore o uguale == uguaglianza logica (NON assegnazione)!= diseguaglianza logica Operatori bitwise (operano sui singoli bit di un vettore). ~ negazione & AND OR ^ XOR ~& NAND ~ NOR ~^ XNOR Paolo Musico INFN Genova 12

SINTASSI (8) Altri operatori. >> Shift a destra. A = A >> 2; // Shifta A di 2 bit a destra << Shift a sinistra.? : Condizionale. A = (B == 0)? 1 : 0; // Se B=0 A=1 else A=0 {,} Concatenazione. A = {4 b0011, 2 b01}; // A = 6 b001101 Continuous assignment: usato per modellare semplice logica combinatoria e per cambiare nome ai segnali. Spesso usato per modellare i 3-state. assign A = in1 & in2; assign B = enable? out : 1 bz; // A e di tipo wire // B e di tipo wire Paolo Musico INFN Genova 13

SINTASSI (9) Assegnamento blocking A = 3; L espressione viene valutata nel flusso di esecuzione e la variablile viene assegnata immediatamente. A = 3; #1 A = A+1; B = A+1; Assegnamento NON blocking A <= A + 1; L espressione viene valutata nel flusso di esecuzione, viene assegnato il risultato ad una variabile temporanea e la variablile viene assegnata prima di passare all istante di simulazione successivo. // A = 4, B = 5 #1 A <= A+1; B <= A+1; // A = 5, B = 5 Paolo Musico INFN Genova 14

SINTASSI (10) Strutture di controllo (1). if-else e case (casex e casez): esecuzione condizionata semplice e multipla if( A == B ) begin C = 0; else begin C = 1; case (sel) 2 b00: out = 0; 2 b01: out = 1; default: out = x; case Paolo Musico INFN Genova 15

SINTASSI (11) Strutture di controllo (2). for, while, repeat e forever: ripetizione multipla for(i=0; i<10; i=i+1) begin $display( i = %0d, i); repeat( 5 ) begin i = i + 1; $display( i = %0d, i); while(i < 10) begin i = i + 1; forever #10 CK = ~CK; Paolo Musico INFN Genova 16

SINTASSI (12) Controllo temporale. Ritardo # : l esecuzione e ritardata delle unita temporali indicate. L unita temporale e identificata dalla direttiva `timescale <unit>/<precision>. Evento @ : l esecuzione e sospesa fino a che non si verifica l evento indicato. `timescale 1ns/10ps // unita di 1 nsec, con precisione di 10 psec initial begin #10 A = 0; // dopo 10 nsec A = 0 @(posedge CK); // aspetta il fornte di salita di CK A = 1; @( B ); // aspetta una variazione di B A = 0; Paolo Musico INFN Genova 17

SINTASSI (13) Altre parole chiave. parameter x = 2; // definisce il parametro x con valore 2 Direttive. `include <nomefile> // include il file indicato `define <macro> <valore> // definisce una macro: richiamata con `<macro> parameter e locale al modulo, define e locale al file (preprocessore) System tasks. $finish // termina la simulazione $time // ritorna l istante corrente di simulazione (per stampe) $display $monitor $shm_open $shm_probe $shm_close // interfaccia verso signalscan $vcdpluson // interfaccia verso virsim Paolo Musico INFN Genova 18

SINTASSI (14) Task. Equivalente (circa) ad una procedura in un comune linguaggio di programmazione. Puo avere argomenti, non ritorna valori. Puo impiegare statement di controllo temporale. Funzioni. Puo avere argomenti e deve ritornare un valore. Non puo impiegare statement di controllo temporale. function [3:0] add1; input [3:0] a; begin add1 = a + 1; function task sleep; input [31:0] period; begin repeat( period ) #10; task sleep(10); // aspetta 10 * 10 unita temporali c = add1(b); // c = b + 1 Paolo Musico INFN Genova 19

MODELLAZIONE DI MEMORIE Abbiamo visto la dichiarazione di una memoria: reg [7:0] data_mem[1023:0] // 1024 word x 8 bit memory array L accesso alla locazione i-esima si fara con: data_mem[i] E possibile caricare una memoria da file esterno: $readmemb( mem_file.txt, data_mem); $readmemh( mem_file.txt, data_mem); Il file testo avra il formato riportato nel riquadro. Uso di _ per migliorare la leggibilita Uso di @ per accedere ad un indirizzo specifico Verilog non riporta errori di indirizzamento // binary file format // hexadecimal file format 0000_0000 0101_0001 0001_0101 // one line comment @100 // at address 100 (hex) 1111_1100 /* multi line comment */ 1100_0011 @3FF 0000_0000 Paolo Musico INFN Genova 20

Primitive di Verilog Verilog ha definite delle funzioni logiche primitive: and, or, not, buf, xor, nand, nor, xnor. Esse implementano la funzione logica indicata. Eccetto not e buf possono avere un numero variabile di ingressi. and a1 (out, in1, in2); or o1 (out2, in3, in4, in5); Il primo parametro e sempre l uscita. I not e i buf possono avere multple uscite, ma sempre 1 solo ingresso. Primitive condizionali: bufif1, bufif0, notif1, notif0. Servono per modellare segnali 3-state: bufif1 b1 (out3, in, enable); // out3 = in se enable = 1 bufif0 b2 (out4, in, enable); // out4 = in se enable = 0 Il nome dell istanza e opzionale. Si puo indicare un ritardo: and #2 (o, i1, i2); Paolo Musico INFN Genova 21

User Defined Primitives (UDP) E possibile definire delle funzioni logiche primitive aggiuntive, combinatorie e sequenziali. Vengono definite tramite tabelle di verita : hanno una sola uscita e da 1 a 10 ingressi. Tutti i segnali sono scalari e la z non e supportata (viene mappata come x ). Ogni combinazione non indicata produce una x in uscita. Il? rappresenta qualunque valore. E possibile definire UDP sequenziali sia level sensitive (latch) che edge sensitive (flip-flop). primitive mux_21(o, a, b, s); output o; input a, b, s; table // a b s : o 0? 1 : 0; 1? 1 : 1;? 0 0 : 0;? 1 0 : 1; 0 0 x : 0; 1 1 x : 1; table primitive Paolo Musico INFN Genova 22

MODELLAZIONE DI LIBRERIE (1) Un elemento (cella) di libreria e un modulo, composto di 2 parti: descrizione funzionale e temporizzazioni relative. Le celle cosi descritte vengono usate per il calcolo dei ritardi in funzione del carico. La descrizione funzionale puo essere implementata con primitive e/o UDP oppure con statement behavioral: evitare la descrizione mista. `celldefine `timescale 1ns/10ps module mux_21(o, a, b, s); output o; input a, b, s; // Functional description // Timing module `celldefine Paolo Musico INFN Genova 23

MODELLAZIONE DI LIBRERIE (2) Le temporizzazioni identificano il ritardo di propagazione dei segnali all interno della cella e permettono di effettuare controlli (tipo setup/hold). Di solito si definiscono i ritardi pin to pin (path delay) che possono dipere dallo stato logico dei segnali. Se uno stato non e definito il ritardo e nullo. $setup $hold $width sono usati per controllare le temporizzazioni. Esempio: $setup(data, posedge ck, 10, flag); flag cambia stato se il controllo fallisce, e verra usato per notificare il fallimento a qualche modo. `celldefine `timescale 1ns/10ps module XOR2(y, a, b); output y; input a, b; // Functional description xor i1 (y, a, b); // Timing specify if( b ) (a => y)= (20, 20); if(~b ) (a => y)= (10, 20); if( a ) (b => y)= (20, 10); if(~a ) (b => y)= (15, 10); specify module `celldefine Paolo Musico INFN Genova 24

MODELLI BEHAVIORAL (1) Seguire il metodo top-down. Separare il problema in blocchi elementari, implementarli e collegarli gerarchicamente, istanziandoli. Collegamento dei moduli: per posizione per nome module MUX2_1(out, a, b, sel); module module top_level; MUX2_1 first_mux(out1, a1, b1, sel1); MUX2_1 second_mux(.out(out2),.sel(sel2),.b(b1),.a(a1)); module Paolo Musico INFN Genova 25

MODELLI BEHAVIORAL (2) Blocchi procedurali initial e always. I blocchi initial vengono eseguiti una volta sola. I blocchi always vengono eseguiti per sempre (finche dura la simulazione). Ogni modulo puo contenere piu blocchi initial e piu blocchi always. I blocchi initial vengono usati di solito nei moduli di test. I blocchi always modellano il comportamento di reti logiche e sequenziali. L esecuzione di tutti i blocchi procedurali inizia in parallelo al tempo zero. initial begin a = 0; b = 0; #10 b = 1; a = 1; #50 b = 0; #10 a = 0; always @(posedge CK) begin A_reg <= A_reg; if( RSTb == 0 ) A_reg <= 7 b0; else if( LD == 1 ) A_reg <= data_in; Paolo Musico INFN Genova 26

MODELLI BEHAVIORAL (3) Le variabili assegnate in un blocco procedurale devono essere di tipo reg altrimenti si ha il messaggio illegal left-hand-side assignment. Ogni variabile puo essere assegnata in un solo blocco procedurale (sintesi). Fare attenzione all uso corretto degli operatori logici e/o bit wised. Le operazioni comprese tre begin e vengono eseguite sequenzialmente. L esecuzione concorrente e gestita da fork e join (non la trattiamo). Gli statements casex e casez vengono usati per gestire le condizioni don t care casex sia per x che per z e casez solo per z. Si usa il? per specificarlo. casex( data_in ) 4 b???1: prienc <= 1; 4 b??10: prienc <= 2; 4 b?100: prienc <= 3; 4 b1000: prienc <= 4; case Paolo Musico INFN Genova 27

MODELLI BEHAVIORAL (4) Modellazione del reset sincrono e asincrono. Tutte le logiche sequenziali devono avere uno stato iniziale, di solito imposto con un segnale di reset esterno, che puo essere sincrono (reset sul prossimo fronte del clock) o asincrono (immediato). module SyncRstReg(OUT,D,CK,RSb); output [3:0] OUT; input [3:0] D; input CK, RSb; begin always @(posedge CK) if( RSb == 0 ) OUT <= 0; else OUT <= D; module module ASyncRstReg(OUT,D,CK,RSb); output [3:0] OUT; input [3:0] D; input CK, RSb; begin always @(posedge CK or negedge RSb) if( RSb == 0 ) OUT <= 0; else OUT <= D; module Paolo Musico INFN Genova 28

MODELLI BEHAVIORAL (5) Continuous assignments: usati per modellare logica combinatoria. Occorre aver dichiarato la variabile di tipo wire. Vengono usati al di fuori dei blocchi procedurali. Ogni cambiamento nel valore dell espressione assegnata corrisponde ad un cambiamento della variabile. wire out; wire eq; wire [7:0] data_out; assign out = a & b; assign eq = (a == b); assign data_out = (enable == 1)? data_in : 8 bz; Paolo Musico INFN Genova 29

MODELLI BEHAVIORAL (6) La logica combinatoria puo anche essere modellata con blocchi procedurali (vedi l esempio del MUX2_1). always @(enable or addr or reg0 or reg1 or reg2 or reg3) begin if( enable == 1 ) case( addr ) 2 b00: data_out <= reg0; 2 b01: data_out <= reg1; 2 b10: data_out <= reg2; 2 b11: data_out <= reg3; case else data_out <= 0; Paolo Musico INFN Genova 30

MODELLI BEHAVIORAL (7) NON CONDIZIONARE MAI IL SEGNALE DI CLOCK!!! Condizionare il dato d ingresso invece Contatori. Usare operatori + e - per implementare contatori in avanti o indietro. La generazione dei segnali d uscita puo essere fatta con logica combinatoria tipo continuous assignments oppure registrata (1 periodo di clock prima). module cnt4(data_out, RSTb, CK); output [3:0] DATA_OUT; input RSTb, CK; reg [3:0] DATA_OUT; always@(posedge CK) if( RSTb == 0 ) DATA_OUT <= 4 b0; else DATA_OUT <= DATA_OUT + 1; module Paolo Musico INFN Genova 31

MODELLI BEHAVIORAL (8) Macchine a stati implicite. La variabile di stato non e dichiarata. Il sintetizzatore se ne accorge e ne mette quante ne servono. module implicit; Codifica elegante. always @(posedge CK) Sintesi poco controllabile. begin Usare sempre lo stesso out_pulse <= 0; if( inp_signal == 1 ) fronte di clock per controllare begin l avanzamento dello stato. out_pulse <= 1; Attenzione al RESET della @(posedge CK); variabile di stato. while( inp_signal == 1 ) @(posedge CK); Occorre imporre valori di reset e di default per le variabili di uscita. module Tutte le variabili di ingresso devono essere sincrone: eventualmente sincronizzarle. Paolo Musico INFN Genova 32

MODELLI BEHAVIORAL (9) Macchine a stati esplicite. La variabile di stato dischiarata esplicitamente. Maggior controllo sulla sintesi, sullo stato iniziale e di RESET. Separazione della parte registrata dalla logica di generazione dello stato successivo e delle variabili d uscita. module explicit; reg [1:0] state_var, new_state; parameter S0 = 0, S1 = 1, S2 = 2, S3 = 3; always @(posedge CK) state_var <= new_state; always @(input_var or state_var) begin out_var <= out_var; case( state_var ) S0: begin out_var <= 0; if( input_var == 1 ) new_state <= S1; else new_state <= S0; S1: begin out_var <= 1; new_state <= S2; S2: begin out_var <= 1; if( input_var == 1 ) new_state <= S2; else new_state <= S0; S3: new_state <= S0; case module Paolo Musico INFN Genova 33

MODELLI BEHAVIORAL (10) Macchine a stati esplicite con un solo blocco always. Come la sintassi precedente con il vantaggio di avere tutte le variabili di uscita registrate. I sintetizzatori riconoscono bene le macchine esplicite con le 2 implementazioni descritte, mentre fanno fatica a riconoscere quelle implicite. always @(posedge CK) begin case( state_var ) S0: begin out_var <= 0; if( input_var == 1 ) new_state <= S1; else new_state <= S0; S1: begin out_var <= 1; new_state <= S2; S2: begin out_var <= 1; if( input_var == 1 ) new_state <= S2; else new_state <= S0; S3: new_state <= S0; case Paolo Musico INFN Genova 34

SIMULAZIONE (1) Una volta creato il modello comportamentale del circuito occorre simularlo. Creare un modulo di test in un file separato dal modello in cui istanziarlo e generare gli stimoli che ne permettano una verifica esaustiva. Nel modulo di test di solito vengono chiamate le system task per salvare il database di simulazione che puo essere visualizzato in forma grafica. Di solito si mette un blocco initial per inizializzare tutte le variabili al tempo 0 e per abilitare il salvataggio del database. Si mette poi un blocco always per la generazione dei segnali di clock (periodici). Possono venire utilizzate delle user task per la generazione degli stimoli che semplificano la scrittura dei vettori di test e rono piu leggibile il codice. I vettori di test vengono posti in un blocco initial e alla fine di questo si chiude il database di simulazione e utilizza la system task $finish per terminare il processo. Paolo Musico INFN Genova 35

SIMULAZIONE (2) `timescale 1ns/10ps module test; reg A, B, selector; wire sig_out; MUX2_1 mux_instance(sig_out, A, B, selector); initial // inizializzazione al tempo 0 begin A = 0; B = 0; selector = 0; $shm_open( waves.shm ); $shm_probe( AS ); initial // vettori di test begin #50 A = 1; #50 selector = 1; #50 B = 1; #50 $shm_close; $finish; // termina module Paolo Musico INFN Genova 36

SIMULAZIONE (3) Far girare la simulazione e aprire il database con il visualizzatore di forme d onda. Se si utilizza Verilog-XL (Cadence) verilog test_mux.v mux.v signalscan Se si utilizza VCS (Synopsys) vcs Mupdate I -line test_mux.v mux.v./simv virsim Manuali utente principali: /cds_2002/psd142/doc/vlogref/vlogref.pdf /cds_2002/psd142/doc/vloguser/vloguser.pdf Paolo Musico INFN Genova 37

CALCOLO E ANALISI DEI RITARDI Occorre poter calcolare il ritardo di propagazione dei segnali in funzione del carico, della forza di pilotaggio di ogni nodo e di altri parametri (V, T, ). Il calcolo viene fatto pro informazioni di connettivita dalla netlist e di parassiti dai tools di place and route: viene generato una informazione di ritardi in formato SDF, che puo essere utilizzata nella simulazione. Occorre mettere una chiamata $sdf_annotate nel codice Verilog in modo che le informazioni dei ritardi possano essere usate. Paolo Musico INFN Genova 38

SINTESI DI FPGA (1) Struttura interna di una XILINX della famiglia XC3000: IOB, CLB, matrice di interconnessione. Paolo Musico INFN Genova 39

SINTESI DI FPGA (2) Struttura interna di una XILINX della famiglia Spartan IIE Paolo Musico INFN Genova 40

SINTESI DI FPGA (3) Il modello verilog viene sintetizzato usando il pogramma fpga_compiler di Synopsys. Si presenta con 2 interfacce: una grafica (fpga_analyzer) e una testuale (fpga_shell). Di solito si usa la prima in una fase di debug del processo e poi si prepara un file di script che viene interpretato dalla seconda con piu efficenza nelle fasi successive. Il sintetizzatore deve venire inizializzato identificando sia la famiglia di FPGA da utilizzare che il modello specifico. Questo si fa di solito utilizzando un file di startup (.synopsys_dc.setup) nella directory corrente che viene letto ogni volta che lo si invoca. Noi abbiamo tools per sviluppare FPGA della famiglia XILINX. Paolo Musico INFN Genova 41

SINTESI DI FPGA (4) Le operazioni elementari che occorre far eseguire al sintetizzatore possono essere riassunte: lettura del file sorgente definizione del (o dei) segnale di clock applicazione di vincoli temporali sugli ingressi e sulle uscite applicazione di vincoli sull ottimizzazione (area o velocita ) inserimento dei pads e vincoli relativi (slew rate, pullup, ) compilazione e ottimizzazione opzionalmente si puo inserire la posizione dei pads e il tipo di componente generazione della netlist in formato opportuno (XNF) generazione di report post sintesi generazione di vincoli per il processo di place & route Paolo Musico INFN Genova 42

SINTESI DI FPGA (5) Successivamente occorre utilizzare i progammi proprietari di XILINX per effettuare il place & route della netlist XNF generata ed ottenere il risultato finale. La sequenza (script) puo essere cosi riassunta: Generazione del database iniziale parto dal file XNF (anche piu di 1) Mappatura dei gate della netlist nei blocchi elementari del dispositivo Place & Route vero e proprio Generazione del bitstream necessario alla programmazione del componente Generazione del file esadecimale con cui programmare la PROM seriale Estrazione delle informazioni temporali (ritardi) reali del componente Generazione del modello verilog gate level con ritardi reali Vengono generati reports ad ogni passo con i quali si puo verificare l andamento del processo. E poi possibile simulare il risultato finale con gli stimoli di progetto Paolo Musico INFN Genova 43

INTERFACCIA VME (1) Il bus VME e un tipico bus asincrono da microprocessore (tipo MC68000), con 32 linee dati, 32 linee indirizzi, interrupts, possibilita di gestione multimaster, trasferimento a blocchi, Non verra trattato estesamente il bus VME in se stesso. Implementazione di una piccola struttura (registro) accessibile da bus VME. Operazioni da compiere: Riconoscimento ciclo di indirizzamento. Riconoscimento ciclo dati. Operazione di lettura oppure scrittura nel registro. Chiusura del ciclo. Per semplicita di gestione SW da parte della CPU master cerchiamo di implementare una struttura il piu generale possibile. Gestiamo semplici cicli dati, senza interrupts. Paolo Musico INFN Genova 44

INTERFACCIA VME (2) Diagrammi temporali dei cicli di bus che ci interessano Ciclo di lettura Ciclo di scrittura Paolo Musico INFN Genova 45

INTERFACCIA VME (3) Ciclo di indirizzamento. Dobbiamo decidere a quale indirizzo (o range di indirizzi) risponde la nostra unita. Il VME permette indirizzamenti a 16 (short), 24 (standard) e a 32 bit (exted), e separa lo spazio utente dallo spazio supervisore, sia programma che dati. Questo viene indicato tramite le linee AM[5:0] (Address Modifiers). Gli AM identificano anche se il trasferimento dati e singolo oppure a blocchi. Sia le linee di indirizzo A[31:1] che gli AM[5:0] vengono convalidati dal segnale di Address Strobe AS, attivo basso. Decidiamo di rispondere a cicli di indirizzamento a 32 bit, sia in spazio utente che supervisore (programma e dati), senza trasferimento a blocchi. Implementando un solo registro decidiamo di rispondere ad un singolo indirizzo di longword (allineato a 4 byte) per generalita. Usando l estensione V430 (CERN) e possibile avere un informazione geografica sulla posizione dell unita all interno del crate: non la usiamo per generalita. Paolo Musico INFN Genova 46

INTERFACCIA VME (4) Ciclo dati. Il VME permette trasferimenti dati a 8, 16 e 32 bit: i segnali DSA, DSB e LWORD (attivi bassi) vengono usati per convalidare la sezione di bus interessata. Per semplicita implementiamo un registro a 8 bit che risponda sulle linee D[7:0] e accetti i tre tipi di ciclo: le scritture su D[31:8] verranno ignorate, le letture restituiscono 0. Il verso del trasferimento viene identificato tramite la linea WRITE: alto = lettura, basso = scrittura. In un ciclo di lettura occorre mettere sulle linee D[7:0] il contenuto del registro, mentre in un ciclo di scrittura occorre copiare nel registro il valore delle linee D[7:0]. Paolo Musico INFN Genova 47

INTERFACCIA VME (5) Chiusura del ciclo. Dopo aver effettuato l operazione richiesta occorre segnalarne la fine al master. Bisogna generare il segnale DTACK in caso di esito positivo e BERR in caso di errore. Entrambi sono attivi bassi e Open Collector. Essi verranno generati attivi alti dalla logica che pilotera un transistor NPN (es. 2N2222, 2N2369, ) per implementare il tipo di segnale richiesto. Possiamo decidere di generare BERR in caso di ciclo di indirizzamento errato, oppure, per semplicita, di non generarlo mai (ignoriamo i tipi di ciclo non gestiti). Implementiamo sia la logica di gestione VME che il nostro registro in una FPGA XILINX tipo XC5204-6PC68C, a parte i buffer dati (74ACT245) e i comparatori sulle linee A[31:8] (74ACT521). Implementiamo il circuito di controllo con logica SINCRONA: serve un segnale di clock abbastanza veloce (F CK 20 MHz). Paolo Musico INFN Genova 48

INTERFACCIA VME (6) Schema a blocchi del circuito: FPGA, buffer dati, comparatori di indirizzi. Paolo Musico INFN Genova 49

INTERFACCIA VME (7) Segue il listato del codice dell interfaccia e del modulo di test. Provare un implementazione indipente. Simulazione del modello realizzato. Caricamento di Synopsys e familiarizzazione con l interfaccia utente. Prova di sintesi e place & route utilizzando scripts. Simulazione post processamento e analisi delle differenze. Paolo Musico INFN Genova 50