ForumSinsi - 2006 Yılından Beri

ForumSinsi - 2006 Yılından Beri (http://forumsinsi.com/index.php)
-   ForumSinsi Ansiklopedisi (http://forumsinsi.com/forumdisplay.php?f=476)
-   -   Verilog Örnekler (http://forumsinsi.com/showthread.php?t=497078)

Prof. Dr. Sinsi 08-20-2012 12:25 AM

Verilog Örnekler
 

Örnekler
Bir "Merbaha Dünya" programı şu şekildedir.

module main;
initial
begin
$display("Merhaba Dunya!");
$finish;
end
endmodule

Basit şekilde iki Flip-flop şu şekildedir:

module toplevel(clock,reset);
input clock;
input reset;

reg flop1;
reg flop2;

always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule

Tüm benzetim yürütülürken , "<=" işleci ile atanmış bütün sinyaller, işlemlerini aynı anda gerçekleşen tüm ifadeler yürütüldükten sonra yapılacak şekilde sıraya sokarlar. Bu işlece tıkanmasız (non-blocking) işleç denmektedir. Bir olayda ki tüm ifadeler yürütüldükten sonra, sıralanmış atanmalar yapılır. Bu olay eş zamanlı davranan kodların daha kolay çalıştırılmasını sağlar. Yukarıdaki örnekte, flop1 değeri, flop2'ye atanmıştır. Benzer şekilde flop2 değeri, flop1'e atanmıştır. Bu ifadeler aynı zaman olayında yürütülmektedir. İfadeler "<=" tıkanmasız işleç ile kodlandığından, işlemler olayın sonunda yapılacak şekilde sıralanmıştır. O zamana kadar, flop1 ve flop2 için ihtiyaç duyulan değerler zaman olayının başındaki değerlerdir. Bu demektir ki atamalar alakasız bir şekilde sıralansa dahi aynı sonuç elde edilecektir. Flop1 ve flop2 her saat vuruşunda (clock olayında) değerlerini takas edeceklerdir. Bu atama için bir diğer seçenek ise tıkanmalı (blocking) olarak bilinen "=" işlecidir. Bu işleç kullanıldığında olaylar diğer dillerdeki gibi bir sıra halinde meydana gelir. Eğer yukarıdaki örnekte "<=" işleç yerine "=" tıkamalı işleci kullanılsaydı, ifadeler sırası davranışı etkilerdi. Reset flop2'yi 1 e, flop1 de 0 a değiştirirdi. Clock olayı daha sonra flop1 i flop2'ye atardı(reset'ten sonra bu değer 1'dir).Sonraki ifade flop2'yi flop1'e atardı. Değerleri takaslamak yerine clock,flop1,flop2 1 olurdu ve değişmezdi.


Gecikme Örneği:

...
reg a, b, c, d;
wire e;
...
always @(b or e)
begin
a = b & e;
b = a | b;
#5 c = b;
d = #6 c * e;
end

Yukarıdaki "always" tümcesinin kullanımı diğerlerinden farklıdır. Örnek olarak, "always" tümcesindeki "b or e" koşulu b veya e parametrelerinin değişmesi koşulunda aşağıdaki ifadelerin yürütülmesi gerektiğini belirtir.5 birim zamanlık bir gecikmeden sonra b'nin değeri c'ye atanır ve c^e değeri görünmeyen bir yere atanır. 6 birim zaman sonra bu yerden d yazmacına atanır. Bir işlem içinde (initial veya always bloğunun içinde) yürütülen işaretlerin her zaman "reg (yazmaç)" türünde olmalıdır. Dışarıdan yürütülen işlemlerde işaretler "wire(tel)" tipinde olmalıdır."Reg" anahtar sözcüğü donanımsal bir yazmacı belirtmemektedir.

Kaynak : Wikipedia


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.