Upload
truongthu
View
228
Download
0
Embed Size (px)
Citation preview
VERILOG HDL Training
PROGRAMMA DEL CORSOPROGRAMMA DEL CORSO
Introduzione Concetti di base Sintassi del linguaggiog ggModelli comportamentali (behavioral) orientati alla sintesi logica Verifica (simulazione) Sintesi logica di FPGASintesi logica di FPGA Demo board
Paolo Musico INFN GenovaFebbraio 2017 1
INTRODUZIONE (1)
Verilog e’ un linguaggio di programmazione orientato alla descrizionedi strutture hardware (HDL) digitali.di strutture hardware (HDL) digitali.Viene usato per descrivere sistemi digitali a differenti livelli:
switch level: transistor levelgate level: porte logiche elementarigate level: porte logiche elementariRegister Transfer Level (RTL): scambio dati tra registri
Verilog e’ stato introdotto nel 1985 da Gateway Design System Corporationi i li t d C d V il XLe 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 GenovaFebbraio 2017 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.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 rappresentazione
h tischematica.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 GenovaFebbraio 2017 3
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 ognig p p p gblocco 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 )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 ii 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 GenovaFebbraio 2017 4
CONCETTI BASE (2)
Un intero progetto viene contenuto in piu’ files HDL: ogni file puo’contenere uno o piu’ moduli.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 )(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(li iti di l it ’ )(limiti di velocita’, …).Strumenti necessari e disponibili su piattaforma Sun-Solaris:editor di testo (VI, EMACS, …),simulatore (Verilog-XL, VCS),visualizzatore di seganli (Signalscan, Virsim),sintetizzatore (Synopsys design_compiler o fpga_compiler).
Paolo Musico INFN GenovaFebbraio 2017 5
SINTASSI (1)
module MUX2_1(out, a, b, sel);output out;
Esempio completo di modulo: mux 2 -> 1.output out;input a, b, sel;
reg out; // Commento
Definizione del modulo con i segnalidi I/O.D fi i i d l ti
always @(sel or a or b)begin
if( sel == 0 )
Definizione del tipo regBlocco procedurale alwaysUso di begin-end
if( sel 0 )out <= a;
elseout <= b;
Statement decisionale if-elseAssegnazione <=Commenti // e /* */
end/* Altro commento */endmodule
Statement di chiusura del modulo
Paolo Musico INFN GenovaFebbraio 2017 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 ignoratidal parser del simulatore. E’ possibile usare commenti particolari come direttiveper il sintetizzatore (synopsys).p ( y p y )Numeri: interi e reali (non usati per la sintesi). Formato generico di un intero:
<size>’<base><value>
Esempi:p12 // decimale (base 10)8’h5F // esadecimale a 8 bit6’b11_0010 // binario a 6 bit’ 576 // tt l di i’o576 // ottale senza dimensione32’bz // binario a 32 bit Hi-Z
Il carattere ‘ ’ viene ignorato e puo’ essere usato come separatore
Paolo Musico INFN GenovaFebbraio 2017 7
Il carattere _ viene ignorato e puo essere usato come separatore
SINTASSI (3)
Identificatori: iniziano con un carattere alfabetico (a-z, A-Z), possono contenerenumeri (0-9), “ ” e “$”. Devono essere diversi dalle parole riservate.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 sonoUsare identificatori che abbiano significato per la funzione in cui sonousati.Crearsi una convenzione sugli identificatori; per esempio:
i d li i i i i li 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 GenovaFebbraio 2017 8
SINTASSI (4)
Variabili di tipo fisico.Tipo reg : memorizza il valore dell’ ultimo assegnamento in un blocco proceduraleTipo 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)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 busg [ ] _ ; //wire [1:0] select; // 2 bit buswire enabled; // scalare
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: 0 (logic zero, false), 1 (logic one, true), x (unknown), z (Hi-Z).
Paolo Musico INFN GenovaFebbraio 2017 9
( g , ), ( g , ), ( ), ( )
SINTASSI (5)
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.Ti i i 64 biTipo time: intero a 64 bit senza segno.
Operatori aritmetici.+ addizione- sottrazione e negazione unaria* moltiplicazionep/ divisione% modulo
Operatori logiciOperatori logici.! negazione logica&& AND logico|| OR logico
Paolo Musico INFN GenovaFebbraio 2017 10
|| OR logico
SINTASSI (6)
Operatori logici relazionari.> maggiore>= maggiore o ugualemaggiore o uguale< minore<= minore o uguale== uguaglianza logica (NON assegnazione)== uguaglianza logica (NON assegnazione)!= diseguaglianza logica
Operatori bitwise (operano sui singoli bit di un vettore).i~ negazione
& AND| OR^ XOR~& NAND~| NOR
Paolo Musico INFN GenovaFebbraio 2017 11
~^ XNOR
SINTASSI (7)
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{,} { , };
Assegnamento blockingA = 3;
A = 3;#1 A = A+1;
B = A+1;A = 3;
Assegnamento NON blockingA <= A + 1;
B A+1;// A = 4, B = 5
#1 A <= A+1;B <= A+1;
//Continuous assignment
assign A = in1 & in2; // A e’ di tipo wire
// A = 5, B = 5
Paolo Musico INFN GenovaFebbraio 2017 12
SINTASSI (8)
Strutture di controllo.if-else e case (casex e casez): esecuzione condizionata semplice e multiplafor, while, repeat e forever: ripetizione multipla
if( A == B )begin
case (sel)2’b00 o t 0
for(i=0; i<10; i=i+1)beginbegin
C = 0;endelse
2’b00: out = 0;2’b01: out = 1;default: out = x;
endcase
begin$display(”i = %0d”, i);
end
beginC = 1;
endwhile(i < 10)begin
i = i + 1;
repeat( 5 )begin
i = i + 1;end
i = i + 1;$display(”i = %0d”, i);
endforever
Paolo Musico INFN GenovaFebbraio 2017 13
#10 CK = ~CK;
SINTASSI (9)
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#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 GenovaFebbraio 2017 14
SINTASSI (10)
Altre parole chiave.parameter x = 2; // definisce il parametro x con valore 2parameter 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>
System tasks.$ //$finish // termina la simulazione$time // ritorna l’ istante corrente di simulazione (per stampe)$display$monitor$monitor$shm_open $shm_probe $shm_close // interfaccia verso signalscan$vcdpluson // interfaccia verso virsim
Paolo Musico INFN GenovaFebbraio 2017 15
SINTASSI (11)
Task.Equivalente (circa) ad una procedura in un comune linguaggio di programmazione.P ’ i i l iPuo’ avere argomenti, non ritorna valori.Puo’ impiegare statement di controllo temporale. task sleep;
input [31:0] period;begin
Funzioni.Puo’ avere argomenti e deve ritornare un valore.Non puo’ impiegare statement di controllo temporale.
beginrepeat( period )
#10;endp p g p
function [3:0] add1;input [3:0] a;begin
endtask
beginadd1 = a + 1;
endendfunction
…sleep(10); // aspetta 10 * 10 unita’ temporalic = add1(b); // c = b + 1…
Paolo Musico INFN GenovaFebbraio 2017 16
MODELLI BEHAVIORAL (1)
Seguire il metodo top-down. Separare il problema in blocchi elementari,implementarli e collegarli gerarchicamente, istanziandoli.
ll d i d liCollegamento dei moduli:per posizioneper nome
module MUX2_1(out, a, b, sel);…endmoduleendmodule
module top_level;…
2 iMUX2_1 first_mux(out1, a1, b1, sel1);MUX2_1 second_mux(.out(out2), .sel(sel2), .b(b1), .a(a1));
…endmodule
Paolo Musico INFN GenovaFebbraio 2017 17
endmodule
MODELLI BEHAVIORAL (2)
Blocchi procedurali initial e always.I blocchi initial vengono eseguiti una volta sola.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 testI blocchi initial vengono usati di solito nei moduli di test.I blocchi always modellano il comportamento di reti logiche e sequenziali.
initial always @(posedge CK)begin
a = 0;b = 0;
#10 b = 1;
beginA_reg <= A_reg;if( RSTb == 0 )
A reg <= 7’b0;#10 b 1;a = 1;
#50 b = 0;#10 a = 0;
A_reg < 7 b0;else
if( LD == 1 )A_reg <= data_in;
Paolo Musico INFN GenovaFebbraio 2017 18
end end
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.p p g g g qL’ 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 specificarlocasex 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 GenovaFebbraio 2017 19
endcase
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 sincronoimposto 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); module ASyncRstReg(OUT,D,CK,RSb);output [3:0] OUT;input [3:0] D;input CK, RSb;begin
output [3:0] OUT;input [3:0] D;input CK, RSb;beginbegin
always @(posedge CK)if( RSb == 0 )
OUT <= 0;
beginalways @(posedge CK or negedge RSb)
if( RSb == 0 )OUT <= 0;
elseOUT <= D;
endendmodule
elseOUT <= D;
endendmodule
Paolo Musico INFN GenovaFebbraio 2017 20
endmodule endmodule
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.un cambiamento della variabile.
wire out;wire eq;wire [7:0] data_out;
assign out = a & b;assign eq = (a == b);assign eq (a b);assign data_out = (enable == 1) ? data_in : 8’bz;
Paolo Musico INFN GenovaFebbraio 2017 21
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’b10: data_out <= reg2;2’b11: data_out <= reg3;
endcaseelse
data_out <= 0;end
Paolo Musico INFN GenovaFebbraio 2017 22
MODELLI BEHAVIORAL (7)
NON CONDIZIONARE MAI IL SEGNALE DI CLOCK!!!Condizionare il dato d’ ingresso invece…ContatoriContatori.Usare operatori ‘+’ e ‘-’ per implementare contatori in avanti o indietro.La generazione dei segnali d’ uscita puo’ essere fatta con logica combinatoriati “ ti i t ” i t t (1 i d di l k i )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 )if( RSTb 0 )
DATA_OUT <= 4’b0;else
DATA_OUT <= DATA_OUT + 1;
Paolo Musico INFN GenovaFebbraio 2017 23
endmodule
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.
module implicit;always @(posedge CK)begin
l 0Usare sempre lo stessofronte di clock per controllarel’ avanzamento dello stato.
out_pulse <= 0;if( inp_signal == 1 )begin
out pulse <= 1;Attenzione al RESET dellavariabile di stato.Occorre imporre valori di reset
_p ;@(posedge CK);while( inp_signal == 1 )
@(posedge CK);dOccorre imporre valori di reset
e di default per le variabilidi uscita.Tutte le variabili di ingresso devono essere sincrone: eventualmente sincronizzarle
endend
endmodule
Paolo Musico INFN GenovaFebbraio 2017 24
Tutte le variabili di ingresso devono essere sincrone: eventualmente sincronizzarle.
MODELLI BEHAVIORAL (9)
always @(input var or state var)
Macchine a stati esplicite.La variabile di stato dischiarata
y ( p _ _ )begin
out_var <= out_var;case( state_var )
S0: beginout var <= 0;
esplicitamente.Maggior controllo sulla sintesi,sullo stato iniziale e di RESET.
out_var <= 0;if( input_var == 1 )
new_state <= S1;else
new_state <= S0;
Separazione della parte registratadalla logica di generazione dellostato successivo e delle variabili
endS1: begin
out_var <= 1;new_state <= S2;
endstato successivo e delle variabilid’ uscita.
module explicit;reg [1:0] state_var, new_state;parameter S0 = 0, S1 = 1,
S2: beginout_var <= 1;if( input_var == 1 )
new_state <= S2;elsep
S2 = 2, S3 = 3;
always @(posedge CK)state_var <= new_state;
elsenew_state <= S0;
endS3: new_state <= S0;
endcased
Paolo Musico INFN GenovaFebbraio 2017 25
endendmodule
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 istanziarloCreare 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 graficail 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 tt i bl l l i d i li di l k ( i di i)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 GenovaFebbraio 2017 26
SIMULAZIONE (2)
`timescale 1ns/10psmodule test;reg A, B, selector;wire sig out;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”);
endendinitial // vettori di testbegin
#50 A = 1;#50 selector = 1;#50 B = 1;#50 $shm_close; $finish; // termina
end
Paolo Musico INFN GenovaFebbraio 2017 27
endendmodule
SIMULAZIONE (3)
Simulatori commerciali:Mentor QuestaSim (ex ModelSim)Mentor QuestaSim (ex ModelSim)Cadence ncsim (Incisive suite)Synopsys vcsXilinx ISEXilinx ISEAltera Qsim
P d tti F /O SProdotti Free/OpenSource:Icarus VerilogVerilatorVeriWell
Paolo Musico INFN GenovaFebbraio 2017 28
ALTERA CYCLONE IV LABs
LEs are organized in LABs
1 LAB = 16 LEs
Paolo Musico INFN GenovaFebbraio 2017 34
DESIGN EXAMPLE ON DEMO BOARD
A lot of examples come with the board
Try to develop a custom example: Frequency Metermeasure the frequency of an input signal and show on 7 segment displays
CLOCK
COUNTER LATCHReset
TIMEBASECOUNTER LATCH DISPLAY
DRIVER
Reset
Load
INPUT
Paolo Musico INFN GenovaFebbraio 2017 35
CLASS EXERCISE
Implement a DSP function.Inputs are provided by a ADC and output must drive a DAC.Inputs are provided by a ADC and output must drive a DAC.Input signal will be generated by a pulse/function/arbitrary generatorOutput signal will be shown on a o-scope (together with input)
FunctionGenerator
ADC DSPFunction
DAC Oscilloscope
• Wire function to see that everything is OK• Moving average with programmable number of samples to be averagedMoving average with programmable number of samples to be averaged• Deconvolution with a known (simple) function• Other proposal from class?• Possibily serializing at least 2 proposed functions
Paolo Musico INFN GenovaFebbraio 2017 36
• Possibily serializing at least 2 proposed functions