Parametry
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 11 z 90.
Możesz utworzyć wiele kopii tego samego modułu i używać ich w różnych miejscach. Nazywa się to **wieloma instancjami**. Zamiast za każdym razem pisać ten sam kod, piszesz go raz i używasz ponownie tyle razy, ile potrzebujesz. Każda instancja jest osobną kopią tego sprzętu na chipie.
A co, jeśli potrzebujesz, aby każda kopia była inna? Na przykład jednego 8-bitowego licznika, jednego 16-bitowego licznika i jednego 32-bitowego licznika. Bez parametrów trzeba by napisać trzy osobne moduły.
Parametry rozwiązują ten problem.
Parametr to stała wartość, którą możesz ustawić podczas tworzenia instancji. Pozwala skonfigurować każdą kopię modułu inaczej.
Deklarowanie parametrów
module counter #(
parameter WIDTH = 8
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmodule#(parameter WIDTH = 8) definiuje parametr o nazwie WIDTH z domyślną wartością 8.
Podczas deklarowania parametrów używamy symbolu # bezpośrednio po nazwie modułu i przed listą portów. Symbol # informuje Verilog, że dalej znajduje się lista parametrów konfigurujących moduł. Jeśli Twój moduł nie ma parametrów, po prostu całkowicie pomijasz #.
Korzystanie z parametrów
Parametrów można używać wszędzie tam, gdzie potrzebna jest stała:
reg [WIDTH-1:0] data; // Rozmiar wektora
count <= count + 1; // Działa przy dowolnej szerokości
assign out = data[WIDTH-1]; // Pozycja MSBNadpisywanie parametrów
Podczas korzystania z modułu możesz zmienić wartość parametru:
// Domyślna szerokość (8 bitów)
counter u1 (.clk(clk), .reset(reset), .count(count1));
// Zmień na 16 bitów
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2));Wiele parametrów
Możesz mieć wiele parametrów:
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];
endmodulelocalparam
localparam jest podobny, ale nie można go nadpisać z zewnątrz:
module example;
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;
localparam STATE_STOP = 2'b10;
// These values are fixed inside this module
endmoduleUżywaj localparam dla stałych, które nie powinny się zmieniać.
Wyzwanie
Dodaj parametr o nazwie WIDTH z domyślną wartością 4.
Co zrobić:
- Dodaj parametr o nazwie
WIDTH - Ustaw jego domyślną wartość na
4 - Parametr umieść wewnątrz
#( )po nazwie modułu
Spróbuj swoich sił
module counter #(
// Dodaj tutaj parametr WIDTH z wartością domyślną 4
)(
input clk,
input reset,
output reg [WIDTH-1:0] count
);
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online