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 MSBMengganti 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];
endmoduleLocalparam
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
endmoduleGunakan localparam untuk konstanta yang tidak boleh berubah.
Tantangan
Tambahkan parameter bernama WIDTH dengan nilai default 4.
Yang harus dilakukan:
- Tambahkan parameter bernama
WIDTH - Tetapkan nilai default-nya ke
4 - 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
);
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online