Parametreler
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 11 / 90.
Aynı modülün birçok kopyasını oluşturabilir ve bunları farklı yerlerde kullanabilirsiniz — buna **çoklu örnekleme** (multiple instances) denir. Aynı kodu tekrar tekrar yazmak yerine, bir kez yazarsınız ve ihtiyacınız olduğu kadar çok kez yeniden kullanırsınız. Her bir örnek, o donanımın çip üzerindeki ayrı bir kopyasıdır.
Peki ya her bir kopyanın farklı olmasını isterseniz? Örneğin, bir adet 8-bitlik sayaç, bir adet 16-bitlik sayaç ve bir adet 32-bitlik sayaç. Parametreler olmadan, üç ayrı modül yazmanız gerekirdi.
Parametreler bu problemi çözer.
Bir parametre, bir örnek oluşturduğunuzda ayarlayabileceğiniz sabit bir değerdir. Modülün her bir kopyasını farklı şekilde yapılandırmanıza olanak tanır.
Parametre Bildirimi
module counter #(
parameter WIDTH = 8
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmodule#(parameter WIDTH = 8), varsayılan değeri 8 olan WIDTH adlı bir parametre tanımlar.
Parametreleri tanımlarken, # sembolünü modül adından hemen sonra ve port listesinden önce kullanırız. #, Verilog'a arkasından gelenin modülü yapılandıran bir parametre listesi olduğunu söyler. Eğer modülünüzün parametresi yoksa, # işaretini tamamen atlarsınız.
Parametreleri Kullanma
Parametreler, bir sabitin gerekli olduğu her yerde kullanılabilir:
reg [WIDTH-1:0] data; // Vektör boyutu
count <= count + 1; // Herhangi bir genişlikte çalışır
assign out = data[WIDTH-1]; // MSB konumuParametreleri Geçersiz Kılma
Modülü kullandığınızda, parametre değerini değiştirebilirsiniz:
// Varsayılan genişlik (8 bit)
counter u1 (.clk(clk), .reset(reset), .count(count1));
// 16 bit olarak geçersiz kıl
counter #(.WIDTH(16)) u2 (.clk(clk), .reset(reset), .count(count2));Çoklu Parametreler
Birden fazla parametreye sahip olabilirsiniz:
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
Bir localparam benzerdir ancak dışarıdan geçersiz kılınamaz:
module example;
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;
localparam STATE_STOP = 2'b10;
// Bu değerler bu modül içinde sabittir
endmoduleDeğişmemesi gereken sabitler için localparam kullanın.
Görev
Varsayılan değeri 4 olan WIDTH adında bir parametre ekleyin.
Yapılacaklar:
WIDTHadında bir parametre ekleyin- Varsayılan değerini
4olarak ayarlayın - Parametre, modül adından sonra
#( )içine yazılır
Kopya kağıdı
Parametreler, kodun yeniden yazılmasına gerek kalmadan modül örneklerinin farklı şekilde yapılandırılmasına olanak tanır.
Parametrelerin Bildirilmesi
module counter #(
parameter WIDTH = 8 // default value
)(
input clk,
output reg [WIDTH-1:0] count
);
always @(posedge clk) count <= count + 1;
endmoduleÖrnekleme Sırasında Parametrelerin Geçersiz Kılınması (Overriding)
counter u1 (.clk(clk), .count(count1)); // uses default (8)
counter #(.WIDTH(16)) u2 (.clk(clk), .count(count2)); // overridden to 16Çoklu Parametreler
module fifo #(
parameter DEPTH = 16,
parameter WIDTH = 8
)( ... );Localparam (Geçersiz Kılınamayan Sabit)
localparam STATE_IDLE = 2'b00;
localparam STATE_RUN = 2'b01;Modül dışından değiştirilmemesi gereken dahili sabitler için localparam kullanın.
Kendin dene
module counter #(
// Buraya varsayılan değeri 4 olan WIDTH parametresini ekleyin
)(
input clk,
input reset,
output reg [WIDTH-1:0] count
);
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı