Verilog HDL ile Sayısal Tasarım IV (Digital Design with Verilog HDL IV)

watch_later 3/21/2016
Çıkışların belirli bir andaki değeri, girişlerin yalnızca o andaki değerine bağlı olan devreler kombinasyonel devreler olarak adlandırılır.
Çıkışların belirli bir andaki değeri, girişlerin yalnızca o anki değerine değil, aynı zamanda girişlerin önceki değerlerinin sırasına da bağlı olan devrelere ardışıl devreler adı verilir.


Kombinasyonel Devreler 
1. Kombinasyonel mantık devreleri iç yapılarında öncesindeki herhangi bir durumu saklama yeteneği yoktur.
2. Bu nedenle, kombinasyonel mantık devreleri herhangi bir bellek elemanı içermez.
3. Bilgisayarlarda depolanan veriler üzerinde gerçekleştirilen aritmetik işlemler kombinasyonel mantık devreleri kullanılarak yapılır.
4. Kombinasyonel mantık devreleri temelde farklı devre türleri kullanılarak oluşturulur. Bunlar: multiplexer, demultiplexer , decoder, encoder, half adder ve full adder.
5. Bilgisayarların aritmetik ve mantık birimi bileşenleri genellikle kombinasyonel mantık devrelerinden oluşmaktadır.
6. Kombinasyonel mantık devreleri clock sinyalinden bağımsızdır.
7. Kombinasyonel mantık devrelerinde herhangi bir tetikleme gerekmez.
8. Kombinasyonel mantık devresinin davranışı çıkış fonksiyonlarının kümesi kullanılarak tanımlanabilir.

Ardışıl Devreler
1. Ardışıl sayısal mantık devreleri akım girişleri ve daha önceki durumuna göre sisteminin önceki durumunu koruma yeteneğine sahiptir.
2. Bu nedenle, kombinasyonel mantık devrelerin aksine, ardışıl mantık devreleri, dijital devredeki veri depolama yeteneğine sahiptir.
3. Latch ardışıl mantık devrelerinde önceki  durumu korumak için kullanılan en basit devre elemanı olarak kabul edilir.
4. Ardışıl mantık devrelerinin flip flop  sayısı kadar tetiklenmesi için clock sinyali kullanır.
5. Ardışıl mantık devreleri senkron ve asenkron ardışıl devreler olmak üzere ikiye ayrılır.
6. Ardışıl mantık devreleri çıkışlarından girişlerine geri bildirimleri kullanmaktadır.

Xlinix Ortamında Kombinasyonel ve Ardışıl Devre 

Ardışıl Devre Davranışı Gösteren Modül
module test(O,I);
    input [0:2] I;
    output O;
    reg O;
        always @(I)
            case({I})
                3'b000:O=1'b0;
                3'b001:O=1'b0;
                3'b010:O=1'b0;
                3'b011:O=1'b0;
                3'b100:O=1'b1;
            endcase    
 endmodule
Devreyi kombinasyonel olarak oluşturmak yerine bir LDCE içeren yani önceki durumunu hafıza da tutan bir ardışıl devre oluşturdu. 





Latches
Devre depolama elemanları latchlar ve flip-flop olmak üzere ikiye ayrılabilir. Latchlar da geri bildirim yolu vardır, bu nedenle geçici bellek alanlarında bir bit veri saklayabilir. Latchlar, mandal anlamına gelir, yani bir anlamda veriyi üzerine mandal gibi tutturulur.

LDCE
Primitive: Transparent Data Latch with Asynchronous Clear and Gate Enable

            

Kombinasyonel Devre Davranışı Gösteren Modül
module test(O,I);
    input [0:2] I;
    output O;
    reg O;
        always @(I)
            case({I})
                3'b000:O=1'b0;
                3'b001:O=1'b0;
                3'b010:O=1'b0;
                3'b011:O=1'b0;
                3'b100:O=1'b1;
                default:O=1'bx;  
            endcase    
 endmodule


Modülü oluştururken default ile tüm durumlar kapsandığı için kombinasyonel bir devre oluşturuldu.






Xlinix Ortamında Doğru Bilinen Yanlışlar
1. Bu modül örneğinde tüm durumlar tanımlanmadığı için kombinasyonel devre tasarmak yerine ardışıl bir Latch içeren devre oluşturulur. 
always @(coke or cola) 
begin
     if (coke)
       blah1 = 1;
     else if (cola > 2’b01)
       blah2 = coke;
end
Diğer durumlarda tanımlanarak kombinasyonel devre davranışı korunmuş olur.
always @(coke or cola) 
begin
      blah1 = 0;
      blah2 = 0;
    if (coke)
      blah1 = 1;
    else if (cola > 2’b01)
      blah2 = coke;
end

2. Bu modülde ise case yapısında atama işlemi birden fazla kere oluşturularak kod kendini tekrar etmiştir. 
module fred (f, a, b, c);
output f;
input a, b, c;
reg f;
always @ (a or b or c)
     case ({a, b, c})
      3’b000: f = 1’b0;
      3’b001: f = 1’b1;
      3’b010: f = 1’b1;
      3’b011: f = 1’b1;
      3’b100: f = 1’b1;
      3’b101: f = 1’b0;
      3’b110: f = 1’b0;
      3’b111: f = 1’b1;
    endcase
endmodule
Bunun yerine 0 durumlarının haricindeki diğer durumlara default ile 1 durumu atanmış olur.
module fred (f, a, b, c);
output f;
input a, b, c;
reg f;
always @ (a or b or c)
     case ({a, b, c})
       3’b000: f = 1’b0;
       3’b101: f = 1’b0;
       3’b110: f = 1’b0;
      default: f = 1’b1;
     endcase
endmodule






Bir sonraki yazımda görüşmek üzere...



sentiment_satisfied Emoticon