![]() |
Verilog Sentezlenebilir Yapılar
Sentezlenebilir Yapılar Daha önce de belirtildiği gibi, donanımı tanımlamak için birkaç temel taslak kullanılabilir. // Çoklayıcı Örnekleri -Aynı işlemi yapmanın 3 farklı yolu // İlk örnek sürekli atamayı kullanmaktadır. wire out ; assign out = sel ? a : b; // İkinci örnek aynı işlemi gerçekleştirmek için izlek(prosedür) // kullanmaktadır. reg out; always @(a or b or sel) begin case(sel) 1'b0: out = b; 1'b1: out = a; endcase end // İzlek yapısında If/else // kullanılabilir. reg out; always @(a or b or sel) if (sel) out = a; else out = b; Sonraki ilginç yapı ise saydam mandaldır (transparent latch).Kapı işareti "geç" olarak ayarlandığında girişi çıkışa gönderecektir. Eğer kapı işareti "tut" olarak ayarlamışsa, çıkış işareti girişten bağımsız olarak aynı durumda kalacaktır. // Saydam Mandal Örneği reg out; always @(gate or din) if(gate) out = din; // İlet durumu // Burada "else" ifadesine gerek yoktur. "Gate" "high" durumdayken "out" // "din" değişkenini takip edecektir. // "Gate" "LOW" olduğu zaman "out" durumunu koruyacaktır. D Flip-Flop en basit yapılardan biridir. reg q; always @(posedge clk) q <= d; Örnekte tıkanmasız atama kullanıldığına dikkat edilmelidir. Temel kurallardan biri "always" yapısı içerisinde "posedge" (pozitif kenar) veya "negedge" (negatif kenar) ifadeleri kullanıldığında "<=" işlecini kullanmaktır. D flip-flop'un bir değişik türü, zamanuyumsuz sıfırlama (asynchronous reset) ile gerçekleştirilendir. Reset ifadesi geleneksel olarak yapı içerisindeki ilk "if" ifadesi olarak tanımlanmaktadır. reg q; always @(posedge clk or posedge reset) if(reset) q <= 0; else q <= d; Bir sonraki değişik yapıda, hem zaman uyumsuz sıfırlama hem de zaman uyumsuz değer ataması kullanmaktadır. Geleneksel olarak "reset" terimi "set" terimi (değer ataması) ile takip edilmektedir. reg q; always @(posedge clk or posedge reset or posedge set) if(reset) q <= 0; else if(set) q <= 1; else q <= d; Son değişik D flip-flop tipi ise girişini bir çoklayıcıdan alan tiptir. // Temel yapı geri besleme ile yapılmaktadır. always @(posedge clk) if(gate) q <= d; else q <= q; // açık geri besleme yolu always @(posedge clk) if(gate) q <= d; // "else" çoklayıcı gerçekleştirildi. Kaynak : Wikipedia |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.