Parameter
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 11 von 90.
Du kannst viele Kopien desselben Moduls erstellen und sie an verschiedenen Stellen verwenden. Dies nennt man **mehrere Instanzen**. Anstatt denselben Code immer wieder zu schreiben, schreibst du ihn einmal und verwendest ihn so oft wieder, wie du ihn brauchst. Jede Instanz ist eine separate Kopie dieser Hardware auf dem Chip.
Aber was ist, wenn jede Kopie anders sein muss? Zum Beispiel ein 8-Bit-Zähler, ein 16-Bit-Zähler und ein 32-Bit-Zähler. Ohne Parameter müsstest du drei separate Module schreiben.
Parameter lösen dieses Problem.
Ein Parameter ist ein konstanter Wert, den du beim Erstellen einer Instanz festlegen kannst. Dadurch kannst du jede Kopie des Moduls unterschiedlich konfigurieren.
Parameter deklarieren
module counter #(
parameter WIDTH = 8
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmodule#(parameter WIDTH = 8) definiert einen Parameter namens WIDTH mit dem Standardwert 8.
Beim Deklarieren von Parametern verwenden wir das Symbol # direkt nach dem Modulnamen und vor der Portliste. Das # teilt Verilog mit, dass das Folgende eine Liste von Parametern ist, die das Modul konfigurieren. Wenn dein Modul keine Parameter hat, lässt du # einfach vollständig weg.
Parameter verwenden
Parameter können überall dort verwendet werden, wo eine Konstante benötigt wird:
reg [WIDTH-1:0] data; // Vektorgröße
count <= count + 1; // Funktioniert mit beliebiger Breite
assign out = data[WIDTH-1]; // MSB-PositionParameter überschreiben
Wenn du das Modul verwendest, kannst du den Parameterwert ändern:
// Standardbreite (8 Bits)
counter u1 (.clk(clk), .reset(reset), .count(count1));
// Überschreiben auf 16 Bits
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2));Mehrere Parameter
Du kannst mehrere Parameter haben:
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
Ein localparam ist ähnlich, kann aber nicht von außen überschrieben werden:
module example;
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;
localparam STATE_STOP = 2'b10;
// These values are fixed inside this module
endmoduleVerwende localparam für Konstanten, die sich nicht ändern sollten.
Aufgabe
Füge einen Parameter namens WIDTH mit dem Standardwert 4 hinzu.
Was zu tun ist:
- Füge einen Parameter namens
WIDTHhinzu - Lege seinen Standardwert auf
4fest - Der Parameter kommt nach dem Modulnamen in
#( )
Probier es selbst
module counter #(
// Parameter WIDTH hier mit Standardwert 4 hinzufügen
)(
input clk,
input reset,
output reg [WIDTH-1:0] count
);
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler