Menu
Coddy logo textTech

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 MSB

Nadpisywanie 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];
endmodule

localparam

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
endmodule

Używaj localparam dla stałych, które nie powinny się zmieniać.

challenge icon

Wyzwanie

Dodaj parametr o nazwie WIDTH z domyślną wartością 4.

Co zrobić:

  1. Dodaj parametr o nazwie WIDTH
  2. Ustaw jego domyślną wartość na 4
  3. 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
);

endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online