Parametri
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 11 di 90.
Puoi creare molte copie dello stesso modulo e usarle in posti diversi. Questo si chiama **istanze multiple**. Invece di scrivere lo stesso codice più e più volte, lo scrivi una volta e lo riutilizzi tutte le volte che vuoi. Ogni istanza è una copia separata di quell'hardware sul chip.
Ma cosa succede se hai bisogno che ogni copia sia diversa? Per esempio, un contatore a 8 bit, uno a 16 bit e uno a 32 bit. Senza parametri, dovresti scrivere tre moduli separati.
I parametri risolvono questo problema.
Un parametro è un valore costante che puoi impostare quando crei un'istanza. Ti consente di configurare ogni copia del modulo in modo diverso.
Dichiarazione dei parametri
module counter #(
parameter WIDTH = 8
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmodule#(parameter WIDTH = 8) definisce un parametro chiamato WIDTH con un valore predefinito di 8.
Quando dichiariamo i parametri, usiamo il simbolo # subito dopo il nome del modulo e prima dell’elenco delle porte. # indica a Verilog che ciò che segue è un elenco di parametri che configurano il modulo. Se il tuo modulo non ha parametri, ometti semplicemente del tutto #.
Usare i parametri
I parametri possono essere usati ovunque sia necessaria una costante:
reg [WIDTH-1:0] data; // Dimensione del vettore
count <= count + 1; // Funziona con qualsiasi larghezza
assign out = data[WIDTH-1]; // Posizione del MSBSovrascrivere i parametri
Quando usi il modulo, puoi modificare il valore del parametro:
// Larghezza predefinita (8 bit)
counter u1 (.clk(clk), .reset(reset), .count(count1));
// Imposta la larghezza a 16 bit
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2));Parametri multipli
Puoi avere più parametri:
module fifo #(
parameter DEPTH = 16,
parameter WIDTH = 8
)(
input clk, wr_en, rd_en,
input [WIDTH-1:0] data_in,
output [WIDTH-1:0] data_out
);
reg [WIDTH-1:0] memory [0:DEPTH-1];
endmoduleParametro locale
Un localparam è simile, ma non può essere sovrascritto dall'esterno:
module example;
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;
localparam STATE_STOP = 2'b10;
// These values are fixed inside this module
endmoduleUsa localparam per le costanti che non devono cambiare.
Sfida
Aggiungi un parametro chiamato WIDTH con un valore predefinito di 4.
Cosa fare:
- Aggiungi un parametro denominato
WIDTH - Imposta il suo valore predefinito su
4 - Il parametro va all'interno di
#( )dopo il nome del modulo
Provalo tu
module counter #(
// Aggiungi qui il parametro WIDTH con valore predefinito 4
)(
input clk,
input reset,
output reg [WIDTH-1:0] count
);
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online