Menu
CoddyTech

Parameter

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 11 dari 90.

Kamu bisa membuat banyak salinan module yang sama dan menggunakannya di tempat yang berbeda. Ini disebut **multiple instances**. Alih-alih menulis kode yang sama berulang kali, kamu menulisnya sekali dan menggunakannya kembali sebanyak yang kamu perlukan. Setiap instance adalah salinan terpisah dari perangkat keras tersebut pada chip.

Namun, bagaimana jika kamu memerlukan setiap salinan yang berbeda? Misalnya, satu penghitung 8-bit, satu penghitung 16-bit, dan satu penghitung 32-bit. Tanpa parameter, kamu perlu menulis tiga module terpisah.

Parameter mengatasi masalah ini.

Parameter adalah nilai konstan yang dapat kamu tetapkan saat membuat instance. Parameter memungkinkan kamu mengonfigurasi setiap salinan module secara berbeda.

Mendeklarasikan Parameter

module counter #(
  parameter WIDTH = 8
)(
  input clk,
  output reg [WIDTH-1:0] count
);
  always @(posedge clk) count <= count + 1;
endmodule

#(parameter WIDTH = 8) mendefinisikan parameter bernama WIDTH dengan nilai default 8.

Saat mendeklarasikan parameter, kita menggunakan simbol # tepat setelah nama module dan sebelum daftar port. # memberi tahu Verilog bahwa yang mengikutinya adalah daftar parameter untuk mengonfigurasi module. Jika module-mu tidak memiliki parameter, cukup hilangkan # sepenuhnya.

Menggunakan Parameter

Parameter dapat digunakan di mana saja konstanta diperlukan:

reg [WIDTH-1:0] data;        // Ukuran vektor
count <= count + 1;           // Berfungsi untuk lebar berapa pun
assign out = data[WIDTH-1];   // Posisi MSB

Mengganti Parameter

Saat kamu menggunakan module, kamu bisa mengubah nilai parameter:

// Lebar bawaan (8 bit)
counter u1 (.clk(clk), .reset(reset), .count(count1));

// Ubah menjadi 16 bit
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2));

Beberapa Parameter

Kamu dapat memiliki beberapa parameter:

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 serupa, tetapi tidak dapat diubah dari luar:

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

Gunakan localparam untuk konstanta yang tidak boleh berubah.

challenge icon

Tantangan

Tambahkan parameter bernama WIDTH dengan nilai default 4.

Yang harus dilakukan:

  1. Tambahkan parameter bernama WIDTH
  2. Tetapkan nilai default-nya ke 4
  3. Parameter diletakkan di dalam #( ) setelah nama module

Coba sendiri

module counter #(
  // Tambahkan parameter WIDTH di sini dengan nilai default 4
  
)(
  input clk,
  input reset,
  output reg [WIDTH-1:0] count
);

endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online