Son Yazılar

Verilog'da Always@ ve Initial Kullanımı





Verilog HDL ile programlama gerçekleştirirken "reg" ve "wire" tipinde iki ifadeyle karşılaşırsınız. Bunlardan "reg" bir değişkeni ifade ederken; "wire" ise "tel-bus-yol" gibi ifadelerle karşılık bulur. Bu yazı içerisinde reg türünden değişkenlerimize değer atama gerçekleştirirken faydalandığımız "always@" ve "initial" bloklarının kullanımını ve farklarını anlatacağım. 

Ortak Özellikleri Nelerdir?

  • Her ikisi de "reg" ile tanımladığımız değişkenler için kullanılır. 
  • Her ikisi de "begin" ile başlayıp "end" ile biten bloklardır.
Farkları Nelerdir?
  • IniTial, tek seferlik çalışırken, always ise içerisindeki değişkenlerin aldığı değerlere göre tekrarlı bir çalışma gerçekleştirir. 
  • Initial sadece sabit değişkenlerle çalışır; always'de ise böyle bir zorunluluk yoktur. 


Kullanımları:

Initial:

   initial begin
    c=2'b11 & 2'b01;
   end

Görüldüğü gibi sadece sabit değerler kullanılarak ve "and" operatöründen faydalanılarak basit bir program gerçekleştirildi. Yukarıda belirttiğim gibi "initial" program başladığında sadece bir kez çalışmaktadır. Burada extra olarak şunu belirtebilir: c değişkenimiz burada gösterilmese bile programda output ve reg olarak tanımlanmalıdır. Aksi takdirde program hata vermektedir. C'nin tanımını aşağıdaki always örneğinde de görebilirsiniz. 

always@:

`timescale 1ns / 1ps
module conditionalOperators(
    input [2:0] A,
    input [2:0] B,
    output reg [2:0] C
    );
    assign A =3'b110;
    assign B=3'b101;
    always@(*) begin
        C= A & B;
    end

endmodule

Görüldüğü gibi, bu sefer oluşturduğumuz blok içerisine sabit bir değer değil değişken atadık ve içerisinde "and" operatörü yardımıyla bir işlem gerçekleştirdik. Burada always'ten sonra "*" kullanmayı tercih ettik fakat parantez içerisine değişken yazmak da tercih edilebilir. Ancak, genelde en makul ve kolay olan burada "*" sembolünü kullanmaktır. 

Yazıyı okuduğunuz için teşekkürler...

İyi çalışmalar...

Hiç yorum yok