Il Linguaggio VERILOG - ge.infn.itmusico/CourseStuff/VerilogSlides.pdf · Paolo Musico INFN Genova...

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

Transcript of Il Linguaggio VERILOG - ge.infn.itmusico/CourseStuff/VerilogSlides.pdf · Paolo Musico INFN Genova...

Paolo Musico INFN Genova 1

Il Linguaggio VERILOG

IntroduzioneConcetti di baseSintassi del linguaggioModellazione di librerieModelli comportamentali (behavioral) orientati alla sintesi logicaVerifica (simulazione)Sintesi logica di FPGAImplementazione di una semplice interfaccia VME

Paolo Musico INFN Genova 2

INTRODUZIONE (1)

Verilog e’ un linguaggio di programmazione orientato alla descrizionedi strutture hardware (HDL) digitali.Viene usato per descrivere sistemi digitali a differenti livelli:

switch level: transistor levelgate level: porte logiche elementariRegister Transfer Level (RTL): scambio dati tra registri

Verilog e’ stato introdotto nel 1985 da Gateway Design System Corporatione 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 realizzazionedi altri simulatori (VeriWell, VCS, VeriBest, …).

Questo corso e’ orientato all’ introduzione della modellazione RTL.

Paolo Musico INFN Genova 3

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 sintassiADA-like ed e’ molto formale.

Perche’ si usa un HDL?La complessita’ odierna dei circuiti non permette piu’ la semplice rappresentazioneschematica.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 implementazionialternative dello stesso circuito e scegliere la piu’ performante.

Paolo Musico INFN Genova 4

CONCETTI BASE (1)

Metodologia Bottom-Up: usando componenti esistenti si sviluppa il progettoe 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 ogniblocco viene decomposto a sua volta fino ad limite (un banco di registri ha bisognooltre che dei registri stessi di una decodifica, il singolo registro sara’ poiimplementato 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 digates).

Paolo Musico INFN Genova 5

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 chepermetta 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 glistimoli 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 6

SINTASSI (1)

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;

elseout <= b;

end/* Altro commento */endmodule

Esempio completo di modulo: mux 2 → 1.

Definizione del modulo con i segnalidi I/O.Definizione del tipo regBlocco procedurale alwaysUso di begin-endStatement decisionale if-elseAssegnazione: <=Commenti: // e /* */Statement di chiusura del modulo

Paolo Musico INFN Genova 7

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 ignoratidal parser del simulatore. E’ possibile usare commenti particolari come direttiveper 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 bit6’b11_0010 // binario a 6 bit’o576 // ottale senza dimensione32’bz // binario a 32 bit Hi-Z

Il carattere ‘_’ viene ignorato e puo’ essere usato come separatore

Paolo Musico INFN Genova 8

SINTASSI (3)

Identificatori: iniziano con un carattere alfabetico (a-z, A-Z), possono contenerenumeri (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 sonousati.Crearsi una convenzione sugli identificatori; per esempio:

i moduli iniziano con una maiuscolale porte sono sempre tutte maiuscolei segnali interni al modulo sono sempre tutti minuscolii segnali attivi bassi terminano con “b” oppure con “_”

Verilog e’ “case sensitive” (per default) quindi “pippo” e’ diverso da “Pippo”.

Paolo Musico INFN Genova 9

SINTASSI (4)

Variabili di tipo fisico.Tipo reg : memorizza il valore dell’ ultimo assegnamento in un blocco proceduraleTipo wire: rappresenta la connessione tra porte di varie entita’. Puo’ venire assegnatotramite “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; // scalarereg [7:0] data_bus; // 8 bit buswire [1:0] select; // 2 bit buswire enabled; // scalare

E’ possibile avere variabili vettoriali con segno:reg signed [7:0] s1data_bus; // range -128 <-> +127wire signed [3:0] s2data_bus; // range -8 <-> +7

Le variabili con segno vengono rappresentate in complemento a 2.

Paolo Musico INFN Genova 10

SINTASSI (5)

E’ possibile dichiarare una memoria come:reg [7:0] data_mem[1023:0]

Notare che la dimensione dei vettori e’ [<start bit>:<end 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 11

SINTASSI (6)

Operatori aritmetici.+ addizione- sottrazione e negazione unaria* moltiplicazione/ divisione% modulo

Operatori logici.! negazione logica&& AND logico|| OR logico

Paolo Musico INFN Genova 12

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 13

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 combinatoriae per cambiare nome ai segnali. Spesso usato per modellare i 3-state.

assign A = in1 & in2; // A e’ di tipo wireassign B = enable ? out : 1’bz; // B e’ di tipo wire

Paolo Musico INFN Genova 14

SINTASSI (9)

Assegnamento blockingA = 3;

L’ espressione viene valutata nel flusso diesecuzione e la variablile viene assegnataimmediatamente.

Assegnamento NON blockingA <= A + 1;

L’ espressione viene valutata nel flusso di esecuzione,viene assegnato il risultato ad una variabile temporanea ela variablile viene assegnata prima di passare all’ istante disimulazione successivo.

A = 3;#1 A = A+1;

B = A+1;// A = 4, B = 5

#1 A <= A+1;B <= A+1;

// A = 5, B = 5

Paolo Musico INFN Genova 15

SINTASSI (10)

Strutture di controllo (1).if-else e case (casex e casez): esecuzione condizionata semplice e multipla

if( A == B )begin

C = 0;endelsebegin

C = 1;end

case (sel)2’b00: out = 0;2’b01: out = 1;default: out = x;

endcase

Paolo Musico INFN Genova 16

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);end

while(i < 10)begin

i = i + 1;end

repeat( 5 )begin

i = i + 1;$display(”i = %0d”, i);

end

forever#10 CK = ~CK;

Paolo Musico INFN Genova 17

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 psecinitialbegin

#10 A = 0; // dopo 10 nsec A = 0@(posedge CK); // aspetta il fornte di salita di CKA = 1;@( B ); // aspetta una variazione di BA = 0;

end

Paolo Musico INFN Genova 18

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 19

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;endendfunction

task sleep;input [31:0] period;begin

repeat( period )#10;

endendtask

…sleep(10); // aspetta 10 * 10 unita’ temporalic = add1(b); // c = b + 1…

Paolo Musico INFN Genova 20

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); // binary file format$readmemh(“mem_file.txt”, data_mem); // hexadecimal file format

Il file testo avra’ il formato riportato nel riquadro.Uso di ‘_’ per migliorare la leggibilita’Uso di ‘@’ per accedere ad un indirizzo specificoVerilog non riporta errori di indirizzamento

MODELLAZIONE DI MEMORIE

0000_00000101_0001 0001_0101// one line comment@100 // at address 100 (hex)1111_1100/* multi linecomment */1100_0011@3FF0000_0000

Paolo Musico INFN Genova 21

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 = 1bufif0 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 22

User Defined Primitives (UDP)

E’ possibile definire delle funzioni logiche primitive aggiuntive, combinatoriee 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 indicataproduce una ‘x’ in uscita.Il ‘?’ rappresenta qualunque valore.

E’ possibile definire UDP sequenzialisia ‘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;

endtableendprimitive

Paolo Musico INFN Genova 23

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 ilcalcolo dei ritardi in funzione del carico.

La descrizione funzionale puo’ essereimplementata con primitive e/o UDPoppure con statement behavioral: evitarela descrizione mista.

`celldefine`timescale 1ns/10psmodule mux_21(o, a, b, s);output o;input a, b, s;// Functional description…// Timing…endmodule`endcelldefine

Paolo Musico INFN Genova 24

MODELLAZIONE DI LIBRERIE (2)

Le temporizzazioni identificano il ritardo di propagazione dei segnali all’ internodella cella e permettono di effettuare controlli (tipo setup/hold).Di solito si definiscono i ritardi ‘pin to pin’ (path delay)che possono dipendere dallo stato logicodei segnali.Se uno stato non e’ definito il ritardoe’ nullo.

$setup $hold $width sono usati per controllarele 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/10psmodule XOR2(y, a, b);output y;input a, b;// Functional description

xor i1 (y, a, b);// Timing

specifyif( b ) (a => y)= (20, 20);if(~b ) (a => y)= (10, 20);if( a ) (b => y)= (20, 10);if(~a ) (b => y)= (15, 10);

endspecifyendmodule`endcelldefine

Paolo Musico INFN Genova 25

MODELLI BEHAVIORAL (1)

Seguire il metodo top-down. Separare il problema in blocchi elementari,implementarli e collegarli gerarchicamente, istanziandoli.Collegamento dei moduli:

per posizioneper nome

module MUX2_1(out, a, b, sel);…endmodule

module top_level;…

MUX2_1 first_mux(out1, a1, b1, sel1);MUX2_1 second_mux(.out(out2), .sel(sel2), .b(b1), .a(a1));

…endmodule

Paolo Musico INFN Genova 26

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.

initialbegin

a = 0;b = 0;

#10 b = 1;a = 1;

#50 b = 0;#10 a = 0;

end

always @(posedge CK)begin

A_reg <= A_reg;if( RSTb == 0 )

A_reg <= 7’b0;else

if( LD == 1 )A_reg <= data_in;

end

Paolo Musico INFN Genova 27

MODELLI BEHAVIORAL (3)

Le variabili assegnate in un blocco procedurale devono essere di tipo regaltrimenti 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 end 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;

endcase

Paolo Musico INFN Genova 28

MODELLI BEHAVIORAL (4)

Modellazione del reset sincrono e asincrono.Tutte le logiche sequenziali devono avere uno stato iniziale, di solitoimposto 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;endendmodule

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;endendmodule

Paolo Musico INFN Genova 29

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 adun 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 30

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;

endcaseelse

data_out <= 0;end

Paolo Musico INFN Genova 31

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 combinatoriatipo “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;endmodule

Paolo Musico INFN Genova 32

MODELLI BEHAVIORAL (8)

Macchine a stati implicite.La variabile di stato non e’ dichiarata. Il sintetizzatore se ne accorge e ne mettequante ne servono.Codifica elegante.Sintesi poco controllabile.Usare sempre lo stessofronte di clock per controllarel’ avanzamento dello stato.Attenzione al RESET dellavariabile di stato.Occorre imporre valori di resete di default per le variabilidi uscita.Tutte le variabili di ingresso devono essere sincrone: eventualmente sincronizzarle.

module implicit;always @(posedge CK)begin

out_pulse <= 0;if( inp_signal == 1 )begin

out_pulse <= 1;@(posedge CK);while( inp_signal == 1 )

@(posedge CK);end

endendmodule

Paolo Musico INFN Genova 33

MODELLI BEHAVIORAL (9)

Macchine a stati esplicite.La variabile di stato dischiarataesplicitamente.Maggior controllo sulla sintesi,sullo stato iniziale e di RESET.Separazione della parte registratadalla logica di generazione dellostato successivo e delle variabilid’ 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: beginout_var <= 0;if( input_var == 1 )

new_state <= S1;else

new_state <= S0;end

S1: beginout_var <= 1;new_state <= S2;

endS2: begin

out_var <= 1;if( input_var == 1 )

new_state <= S2;else

new_state <= S0;end

S3: new_state <= S0;endcase

endendmodule

Paolo Musico INFN Genova 34

MODELLI BEHAVIORAL (10)

Macchine a stati esplicite con unsolo blocco always.Come la sintassi precedente con ilvantaggio di avere tutte le variabili di uscitaregistrate.

I sintetizzatori riconoscono bene le macchineesplicite con le 2 implementazioni descritte,mentre “fanno fatica” a riconoscere quelleimplicite.

always @(posedge CK)begin

case( state_var )S0: begin

out_var <= 0;if( input_var == 1 )

new_state <= S1;else

new_state <= S0;end

S1: beginout_var <= 1;new_state <= S2;

endS2: begin

out_var <= 1;if( input_var == 1 )

new_state <= S2;else

new_state <= S0;end

S3: new_state <= S0;endcase

end

Paolo Musico INFN Genova 35

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 istanziarloe generare gli stimoli che ne permettano una verifica esaustiva.Nel modulo di test di solito vengono chiamate le system task per salvareil database di simulazione che puo’ essere visualizzato in forma grafica.Di solito si mette un blocco initial per inizializzare tutte le variabili al tempo 0e 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 stimoliche semplificano la scrittura dei vettori di test e rendono piu’ leggibile il codice.I vettori di test vengono posti in un blocco initial e alla fine di questo sichiude il database di simulazione e utilizza la system task $finish per terminareil processo.

Paolo Musico INFN Genova 36

SIMULAZIONE (2)

`timescale 1ns/10psmodule test;reg A, B, selector;wire sig_out;MUX2_1 mux_instance(sig_out, A, B, selector);

initial // inizializzazione al tempo 0begin

A = 0; B = 0; selector = 0;$shm_open(”waves.shm”); $shm_probe(”AS”);

endinitial // vettori di testbegin

#50 A = 1;#50 selector = 1;#50 B = 1;#50 $shm_close; $finish; // termina

endendmodule

Paolo Musico INFN Genova 37

SIMULAZIONE (3)

Far girare la simulazione e aprire il database con il visualizzatore diforme d’ onda.

Se si utilizza Verilog-XL (Cadence)verilog test_mux.v mux.vsignalscan

Se si utilizza VCS (Synopsys)vcs –Mupdate –I -line test_mux.v mux.v./simvvirsim

Manuali utente principali:/cds_2002/psd142/doc/vlogref/vlogref.pdf/cds_2002/psd142/doc/vloguser/vloguser.pdf

Paolo Musico INFN Genova 38

CALCOLO E ANALISI DEI RITARDI

Occorre poter calcolare il ritardo di propagazione dei segnali in funzione delcarico, della forza di pilotaggio di ogni nodo e di altri parametri (V, T, …).

Il calcolo viene fatto prendendo informazioni di connettivita’ dalla netlist e diparassiti dai tools di place and route: viene generato una informazione di ritardiin formato SDF, che puo’ essere utilizzata nella simulazione.Occorre mettere una chiamata $sdf_annotate nel codice Verilog in modo chele informazioni dei ritardi possano essere usate.

Paolo Musico INFN Genova 39

SINTESI DI FPGA (1)

Struttura interna di una XILINXdella famiglia XC3000: IOB, CLB,matrice di interconnessione.

Paolo Musico INFN Genova 40

SINTESI DI FPGA (2)

Struttura interna di una XILINXdella famiglia Spartan IIE

Paolo Musico INFN Genova 41

SINTESI DI FPGA (3)

Il modello verilog viene sintetizzato usando il pogramma fpga_compilerdi 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 processoe poi si prepara un file di script che viene interpretato dalla secondacon piu’ efficenza nelle fasi successive.Il sintetizzatore deve venire inizializzato identificando sia la famiglia di FPGAda utilizzare che il modello specifico. Questo si fa di solito utilizzandoun file di startup (.synopsys_dc.setup) nella directory correnteche viene letto ogni volta che lo si invoca.Noi abbiamo tools per sviluppare FPGA della famiglia XILINX.

Paolo Musico INFN Genova 42

SINTESI DI FPGA (4)

Le operazioni elementari che occorre far eseguire al sintetizzatore possonoessere riassunte:

lettura del file sorgentedefinizione del (o dei) segnale di clockapplicazione di vincoli temporali sugli ingressi e sulle usciteapplicazione di vincoli sull’ ottimizzazione (area o velocita’)inserimento dei pads e vincoli relativi (slew rate, pullup, …)compilazione e ottimizzazioneopzionalmente si puo’ inserire la posizione dei padse il tipo di componentegenerazione della netlist in formato opportuno (XNF)generazione di report post sintesigenerazione di vincoli per il processo di place & route

Paolo Musico INFN Genova 43

SINTESI DI FPGA (5)

Successivamente occorre utilizzare i progammi proprietari di XILINX pereffettuare il place & route della netlist XNF generata ed ottenere ilrisultato finale. La sequenza (script) puo’ essere cosi’ riassunta:

Generazione del database iniziale partendo dal file XNF (anche piu’ di 1)Mappatura dei gate della netlist nei blocchi elementari del dispositivoPlace & Route vero e proprioGenerazione del bitstream necessario alla programmazione del componenteGenerazione del file esadecimale con cui programmare la PROM serialeEstrazione delle informazioni temporali (ritardi) reali del componenteGenerazione del modello verilog gate level con ritardi reali

Vengono generati reports ad ogni passo con i quali si puo’ verificarel’ andamento del processo.E’ poi possibile simulare il risultato finale con gli stimoli di progetto

Paolo Musico INFN Genova 44

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 diimplementare una struttura il piu’ generale possibile.Gestiamo semplici cicli dati, senza interrupts.

Paolo Musico INFN Genova 45

INTERFACCIA VME (2)

Ciclo di lettura Ciclo di scrittura

Diagrammi temporali dei cicli di bus che ci interessano

Paolo Musico INFN Genova 46

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 (extended),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 diAddress Strobe AS, attivo basso.Decidiamo di rispondere a cicli di indirizzamento a 32 bit, sia in spazio utente chesupervisore (programma e dati), senza trasferimento a blocchi.Implementando un solo registro decidiamo di rispondere ad un singolo indirizzodi longword (allineato a 4 byte) per generalita’.Usando l’ estensione V430 (CERN) e’ possibile avere un’ informazione geograficasulla posizione dell’ unita’ all’ interno del crate: non la usiamo per generalita’.

Paolo Musico INFN Genova 47

INTERFACCIA VME (4)

Ciclo dati.Il VME permette trasferimenti dati a 8, 16 e 32 bit: i segnali DSA, DSB eLWORD (attivi bassi) vengono usati per convalidare la sezione di businteressata.Per semplicita’ implementiamo un registro a 8 bit che risponda sulle lineeD[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 48

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 incaso 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 FPGAXILINX tipo XC5204-6PC68C, a parte i buffer dati (74ACT245) e i comparatorisulle linee A[31:8] (74ACT521).Implementiamo il circuito di controllo con logica SINCRONA: serve un segnaledi clock abbastanza veloce (FCK ≥ 20 MHz).

Paolo Musico INFN Genova 49

INTERFACCIA VME (6)

Schema a blocchi del circuito: FPGA, buffer dati, comparatori di indirizzi.

Paolo Musico INFN Genova 50

INTERFACCIA VME (7)

Segue il listato del codice dell’ interfaccia e del modulo di test.Provare un’ implementazione indipendente.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.