Verilog elektronik sistemleri modellemek için kullanılan bir donanım tanımlama dilidir. Verilog (bazen “Verilog HDL” olarak da adlandırılır) analog, sayısal ve karışık işaretli devrelerin tasarımını, doğrulanmasını ve yürütülmesini değişik düzeylerde desteklemektedir. Verilog dilinin tasarımcıları dilin C programlama diline yakın bir söz dizimine sahip olmasını istemişlerdir. Böylece bu dile yatkın olan mühendislerin dili kolayca kullanmasını amaçlamışlardır. Dil küçük/büyük harf duyarlılığına sahiptir ve temel denetim akışının “if” ve “while” gibi anahtar kelimeleri, C'ye benzemektedir. Verilog birkaç temel yönde C’den farklıdır. Verilog bir blok kodu tanımlamak için kıvrık parantezler yerine Begin/End kullanmaktadır. Verilog 95 ve 2001 işaretçi veya yinelemeli alt yordamlar yapılarına sahip değildir fakat SystemVerilog bu özelliklere sahiptir. Son olarak Donanım Tanımlama Dilleri için çok önemli olan zaman kavramı C dilinde bulunmamaktadır. Verilog geleneksel programlama dilleri gibi basamaklarını tam olarak ardışık bir şekilde yürütmez. Verilog tasarımı modüller arasında bir hiyerarşi bulundurur. Modüller bir takım giriş, çıkış ve çift yönlü portlar şeklinde tanımlanır. Bir modül içinde yazmaç ve kablo listesi bulunur. Eş zamanlı ve ardışık ifadeler modülün davranışını; portların, kabloların ve yazmaçların arasındaki ilişki ile tanımlar. Ardışık ifadeler bir begin/end bloğuna konur ve blokla beraber ardışık olarak yürütülür. Tüm eş zamanlı ifadeler ve begin/end blokları koşut olarak yürütülür. Bir modül aynı zamanda diğer bir modülün bir veya daha çok örneğini içererek bir alt-davranışı belirtebilir. Eğer tasarımdaki modüller sadece sentezlenebilir ifadeler içeriyorsa bu tasarımın donanımda gerçekleştirilecek temel bileşenlerini ve bağlantılarını içeren netlist, yazılım sayesinde sentezlenebilir. Elde edilen bu netlist bir tümleşik devreyi (örn. ASIC veya FPGA) tanımlamak amacıyla kullanılabilir.
Tarihçe
Başlangıç
Verilog 1983/1984 yıllarında Automated Integrated Design Systems (daha sonraları “ Gateway Design Automation” olarak ismi değiştirildi) ve tarafından icat edilmiştir.1985 yılında ise donanım modelleme dili olarak değiştirilmiştir. Gateway Design Automation firması daha sonra tarafından 1990 yılında satın alınmıştır. Cadence şu anda Gateway firmasının Verilog diline ve Verilog-XL simülatörünün haklarına tamamen sahiptir.
Verilog-95
VHDL’in o zamanlarki yükselen başarısı karşısında Cadence, dili standardlaştırmaya açmaya karar vermiştir. Cadence Verilog’u genel bir alan adresine taşımıştır Open Verilog International19 Haziran 2020 tarihinde Wayback Machine sitesinde . (OVI) ( olarak biliniyor).Verilog daha sonraları IEEE’ye verilmiştir. IEEE Standard 1364-1995, Verilog-95 olarak referans gösterilir.
Verilog 2001
Orijinal Verilog-95 standardında kullanıcılar tarafından bulunan eksikler kapatılarak IEEE’ye tekrar gönderilen standarttır. Bu eklemeler sonrasında Verilog-2001 IEEE Standard 1364-2001 şeklinde referans gösterilir. Verilog-2001, Verilog-95’ten sonra önemli bir geliştirmedir. Öncelikle ikiye tümleyen ve işaretli değişkenlerle ilgili önemli bir destek eklenmiştir. Daha önceleri kod yazıcılar işaretli işlemleri garip bit işlemleri yaparak gerçekleştiriyorlardı. Dosya giriş/çıkış işlemleri birkaç yeni sistem görevi ile geliştirildi. Son olarak kodun okunabilirliğini artıran birkaç söz dizimi eklentisi yapıldı.(örneğin: always@* ve C dilindekine benzer fonksiyon/görev/modül başlık bildirimi gibi.) Verilog-2001 ticari elektronik tasarım otomasyonu yazılımlarının temel olarak desteklediği Verilog dilidir.
Verilog 2005
Verilog 2005 (IEEE Standard 1364-2005) ile karıştırılmamalıdır. Verilog’un bu sürümü birkaç küçük düzeltme, özellik açıklaması ve birkaç yeni dil özelliği içermektedir. Verilog standardının ayrı bir parçası olan analog ve karışık işaret işlemleri ile geleneksel Verilog’u birleştirme çabasındadır.
SystemVerilog
Systemverilog, Verillog 2005’in bir üst kümesi olarak tasarım doğrulama, tasarım modelleme gibi özellikleri olan bir dildir.
Örnekler
Bir “Merhaba Dünya” programı şu şekildedir.
module main; initial begin $display("Merhaba Dunya!"); $finish; end endmodule
Basit şekilde iki ş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 olaydaki 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.
Sabitlerin Tanımlanması
Temel söz dizimi şu şekildedir. <Genişlik (bit cinsinden)>'<taban harfi><sayı>
Örnekler:
- 12'h123 – 16’lık tabanda 123 (12 bit kullanarak)
- 20'd44 – Ondalık tabanda 44 (20 bit kullanarak - 0 ile otomatik olarak genişletilir.)
- 4'b1010 – ikilik tabanda 1010 (4 bit kullanarak)
- 6'o77 – Sekizlik tabanda 77 (6 bit kullanarak)
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.
Initial ve Always
Verilog işlemini belirtmek için iki tane farklı anahtar kelime bulunmaktadır. Bunlar “always” ve “initial” anahtar kelimeleridir. “Always” sözcüğü durum kontrolü (@) ifadesiyle tetiklenen serbest çalışan işlemleri ifade eder.”Initial” anahtar sözcüğü sadece bir kere yürütülen işlemler için kullanılır. Her ikisi de benzetimlik zamanının 0 anında “begin” yapısını kurar ve blok sonuna kadar yürütülür. Blok sona ulaştığında tekrar sıraya alınır. Genel düşünce “initial” bloğunun, “always’den” önce yürütüleceğinin varsayılmasıdır fakat “initial” bloğunun “always” bloğunun sadece bir kere çalıştıktan sonra duran özel bir durumu olarak düşünülmesi daha doğrudur.
//Örnekler: initial begin a = 1; // zaman 0 anında reg tipi değişkene değer ata #1; // 1 birim zaman bekle b = a; // reg a’yı reg b’ye ata end always @(a or b) // a veya b değiştiğinde aşağıdaki ifadeleri gerçekleştir. begin if (a) c = b; else d = ~b; end // Bu blokla işlem bittiğinde tekrar yukarı dön (@ durum kontrolü) always @(posedge a)// reg a pozitif kenar değeri aldığında çalıştır a <= b;
Bunlar iki anahtar kelimenin klasik kullanımıdır. Bunun dışında iki tane ek kullanım özelliği bulunmaktadır.”Always” anahtar sözcüğünü @() duyarlılık listesini eklemeden de kullanabiliriz. Örneğin:
always begin // 0 zamanında yürütmeye başla ve hiçbir zaman durma clk = 0; #1; // 1 birim zaman bekle clk = 1; #1; end // Yürütmeye devam ediyor – yukarıdan tekrar başlar.
“Initial” kullanımının bir diğer kullanımı ise “forever” anahtar sözcüğü ile kullanımdır. Aşağıdaki örnek işlemsel olarak yukarıdaki “always” örneği ile aynıdır.
initial forever // 0 zamanında başla ve begin/end’i sürekli tekrarla. begin clk = 0; #1; clk = 1; #1; end
Fork/Join
Verilog’da “Fork/Join” yapısı koşut işlemler yaratmak amacıyla kullanılır. Fork/join çiftinin içindeki tüm ifadeler (veya bloklar) “fork” ile eş zamanlı olarak yürütülmeye başlanır. Yürütme “join” ile yürütmenin en uzun süren elemanın tamamlanmasıyla sona erer.
initial fork $write("A"); // A karakterini yaz $write("B"); // B karakterini yaz begin #1; // 1 birim zaman bekle $write("C");// C karakterini yaz end join
Yukarıdaki yazılan şekilde “ABC” veya “BAC” şeklinde bir sonuç almak mümkündür. Benzetimin sırası (ilk $write ve ikinci $write ifadelerinin sırası) simülatöre bağlıdır. Bu olay Verilog’daki en önemli durumlardan birini açığa çıkarmaktadır. Yarış koşulu adı verilen bu durumda yürütüm sırası sonuçların tutarlığını gölgeye düşürebilir.
Yarış Koşulları
Verilog’ta yürütüm sırası her zaman aynı olmayabilir. Bu durum iki sonucun çıkışa yarışması gibi düşünülebilir. Bu durum klasik bir örnekle açıklanmaktadır.
initial a = 0; initial b = a; initial begin #1; $display("Value a=%a Value of b=%b",a,b); end
A ve b değerleri için ne çıktı verilecek? Cevap 0 ve 0 olabileceği gibi, 0 ve herhangi değer olabilir. Bu olay tamamen “initial” bloklarının yürütüm sırasına bağlıdır. Eğer benzetim programının sıralayıcısı dosyayı yukarıdan aşağıya ele alıyorsa 0 ve 0 sonucu alınır. Eğer aşağıdan yukarıya ele alıyorsa, b benzetimin başındaki 0’a çekilemeyen “a” değerini alacaktır. 3. “initial” bloğunda böyle bir problem yaşanmayacaktır çünkü #1 ifadesi ile küçük bir gecikme eklenmiştir.
İşleçler
İşleç tipi | İşleç sembolü | Yapılan işlem |
---|---|---|
Bit bit(bitwise) | ~ | 1'e tümleyen |
& | AND | |
| | OR | |
^ | XOR | |
~^ or ^~ | XNOR | |
Mantıksal (logical) | ! | NOT |
&& | AND | |
|| | OR | |
Azaltma (reduction) | & | AND |
~& | NAND | |
| | OR | |
~| | NOR | |
^ | XOR | |
~^ or ^~ | XNOR | |
Aritmetik | + | Toplama |
- | Çıkarma | |
- | 2'ye tümleyen | |
* | Çarpma | |
/ | Bölme | |
** | üs (*Verilog-2001) | |
İlişkisel | > | Büyüktür |
< | Küçüktür | |
>= | Büyük veya eşittir | |
<= | Küçük veya eşittir | |
== | mantıksal eşitlilik | |
!= | Mantıksal eşitsizlik | |
=== | 4 durumlu mantıksal eşitlilik | |
!== | 4 durumlu mantıksal eşitsizlik | |
Kaydırma | >> | Mantıksal sağa kaydırma |
<< | Mantıksal sola kaydırma | |
>>> | Aritmetik sağa kaydırma (*Verilog-2001) | |
<<< | Aritmetik sola kaydırma (*Verilog-2001) | |
Birbirine bağlama | {, } | Birbirine bağlama |
Çoğaltma | Çoğaltma | |
Koşullu | ? : | Koşullu |
Sistem görevleri
Sistem görevleri basit giriş/çıkış ve değişik tasarım işlevleri için bulunmaktadır. Tüm sistem görevleri kullanıcı görevleri ve fonksiyonları ile karıştırılmaması amacıyla “$” ön takısını bulundurmaktadır. Bu bölüm çok kullanılan görevlerin kısa bir listesini ele almaktadır yeteri kadar kapsamlı değildir.
- $display – Yeni bir satırla ekrana yazdırma
- $write – Satırbaşı yapmadan ekrana yazdırma
- $swrite – Bir değişkene satırbaşı yapmadan yazdırma
- $fdisplay – Bir dosyaya satırbaşı yaparak yazdırma.
- $fwrite –Bir dosyaya satırbaşı yapmadan yazdırma.
- $readmemh – Hafıza dizisine hex dosyası alınması.
- $readmemb - Hafıza dizisine binary dosyası alınması.
- $monitor – Değerlerinde bir değişiklik olan değişkenlerin yazdırılması.
- $time – Benzetim zamanının değeri.
- $random – Rastgele bir değer döndürülmesi.
Dış bağlantılar
Verilog Kaynakları
- Asic-World16 Aralık 2007 tarihinde Wayback Machine sitesinde .
- Verilog.net22 Aralık 2007 tarihinde Wayback Machine sitesinde .
- Digital Computer Courses16 Şubat 2020 tarihinde Wayback Machine sitesinde .
- [1]28 Eylül 2007 tarihinde Wayback Machine sitesinde .
- [2]27 Aralık 2007 tarihinde Wayback Machine sitesinde .
Standard Geliştirmeler
- IEEE Std 1364-200129 Ocak 2009 tarihinde Wayback Machine sitesinde . – Verilog 2001’in orijinal standardı (üyelik gerektiriyor)
- IEEE P136416 Temmuz 2012 tarihinde Wayback Machine sitesinde . – Verilog için çalışan bir grup (aktif değil).
- IEEE P180012 Mart 2016 tarihinde Wayback Machine sitesinde . – Systemverilog için çalışan bir grup (yukarıdakinin yerine).
- Verilog syntax21 Aralık 2007 tarihinde Wayback Machine sitesinde . – Backus-Naur biçimindeki (Backus-Naur Form, BNF) söz diziminin tanımlaması. IEEE-1364 standardından önce geliyor.
- Verilog 2001 syntax1 Aralık 2007 tarihinde Wayback Machine sitesinde . – BNF ile oldukça bağlantı Verilog 2001 için söz dizimi. .
Verilog Araçları
- – UNIX tabanlı çok hızlı bir verilog simülatörü.
- ModelSim18 Mayıs 2001 tarihinde Wayback Machine sitesinde . –Birçok DTD’ini destekliyor.
- Active HDL11 Ekim 2007 tarihinde Wayback Machine sitesinde . – Birçok DTD’ini destekliyor
- LogicSim18 Aralık 2007 tarihinde Wayback Machine sitesinde . – Düşük maliyetli Windows tabanlı verilog simülatörü.
- VeriLogger Extreme2 Ocak 2008 tarihinde Wayback Machine sitesinde . – Windows ve UNIX için Verilog simülatörü.
Açık Kaynak Verilog Araçları
- –Verilog 2001’i destekleyen bir simülatör.
- Wave VCD22 Aralık 2007 tarihinde Wayback Machine sitesinde . Verilog ve Vhdl destekleyen bedava bir waveform görüntüleyicisi.
- Icarus Verilog15 Aralık 2007 tarihinde Wayback Machine sitesinde . Verilog 2001 destekleyen sentezleme aracı ve simülatör.
- Veriwell30 Aralık 2007 tarihinde Wayback Machine sitesinde . açık kaynaklı bir simülatör projesi.
Kaynakça
- Thomas, Donald, Moorby, Phillip "The Verilog Hardware Description Language" Kluwer Academic Publishers, Norwell, MA.
- [4]9 Mayıs 2008 tarihinde Wayback Machine sitesinde . Cornell ECE576 Course illustrating synthesis constructs
- Janick Bergerdon, "Writing Testbenches: Functional Verification of HDL Models", 2000, . (The HDL Testbench Bible)
- Burak Kelleci, "VHDL ve Verilog ile Sayısal Tasarım", Seçkin Yayıncılık, 2017,
- Burak Kelleci, "VHDL ve Verilog ile Sayısal Tasarım", 2. baskı, Seçkin Yayıncılık, 2019,
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Verilog elektronik sistemleri modellemek icin kullanilan bir donanim tanimlama dilidir Verilog bazen Verilog HDL olarak da adlandirilir analog sayisal ve karisik isaretli devrelerin tasarimini dogrulanmasini ve yurutulmesini degisik duzeylerde desteklemektedir Verilog dilinin tasarimcilari dilin C programlama diline yakin bir soz dizimine sahip olmasini istemislerdir Boylece bu dile yatkin olan muhendislerin dili kolayca kullanmasini amaclamislardir Dil kucuk buyuk harf duyarliligina sahiptir ve temel denetim akisinin if ve while gibi anahtar kelimeleri C ye benzemektedir Verilog birkac temel yonde C den farklidir Verilog bir blok kodu tanimlamak icin kivrik parantezler yerine Begin End kullanmaktadir Verilog 95 ve 2001 isaretci veya yinelemeli alt yordamlar yapilarina sahip degildir fakat SystemVerilog bu ozelliklere sahiptir Son olarak Donanim Tanimlama Dilleri icin cok onemli olan zaman kavrami C dilinde bulunmamaktadir Verilog geleneksel programlama dilleri gibi basamaklarini tam olarak ardisik bir sekilde yurutmez Verilog tasarimi moduller arasinda bir hiyerarsi bulundurur Moduller bir takim giris cikis ve cift yonlu portlar seklinde tanimlanir Bir modul icinde yazmac ve kablo listesi bulunur Es zamanli ve ardisik ifadeler modulun davranisini portlarin kablolarin ve yazmaclarin arasindaki iliski ile tanimlar Ardisik ifadeler bir begin end bloguna konur ve blokla beraber ardisik olarak yurutulur Tum es zamanli ifadeler ve begin end bloklari kosut olarak yurutulur Bir modul ayni zamanda diger bir modulun bir veya daha cok ornegini icererek bir alt davranisi belirtebilir Eger tasarimdaki moduller sadece sentezlenebilir ifadeler iceriyorsa bu tasarimin donanimda gerceklestirilecek temel bilesenlerini ve baglantilarini iceren netlist yazilim sayesinde sentezlenebilir Elde edilen bu netlist bir tumlesik devreyi orn ASIC veya FPGA tanimlamak amaciyla kullanilabilir TarihceBaslangic Verilog 1983 1984 yillarinda Automated Integrated Design Systems daha sonralari Gateway Design Automation olarak ismi degistirildi ve tarafindan icat edilmistir 1985 yilinda ise donanim modelleme dili olarak degistirilmistir Gateway Design Automation firmasi daha sonra tarafindan 1990 yilinda satin alinmistir Cadence su anda Gateway firmasinin Verilog diline ve Verilog XL simulatorunun haklarina tamamen sahiptir Verilog 95 VHDL in o zamanlarki yukselen basarisi karsisinda Cadence dili standardlastirmaya acmaya karar vermistir Cadence Verilog u genel bir alan adresine tasimistir Open Verilog International19 Haziran 2020 tarihinde Wayback Machine sitesinde OVI olarak biliniyor Verilog daha sonralari IEEE ye verilmistir IEEE Standard 1364 1995 Verilog 95 olarak referans gosterilir Verilog 2001 Orijinal Verilog 95 standardinda kullanicilar tarafindan bulunan eksikler kapatilarak IEEE ye tekrar gonderilen standarttir Bu eklemeler sonrasinda Verilog 2001 IEEE Standard 1364 2001 seklinde referans gosterilir Verilog 2001 Verilog 95 ten sonra onemli bir gelistirmedir Oncelikle ikiye tumleyen ve isaretli degiskenlerle ilgili onemli bir destek eklenmistir Daha onceleri kod yazicilar isaretli islemleri garip bit islemleri yaparak gerceklestiriyorlardi Dosya giris cikis islemleri birkac yeni sistem gorevi ile gelistirildi Son olarak kodun okunabilirligini artiran birkac soz dizimi eklentisi yapildi ornegin always ve C dilindekine benzer fonksiyon gorev modul baslik bildirimi gibi Verilog 2001 ticari elektronik tasarim otomasyonu yazilimlarinin temel olarak destekledigi Verilog dilidir Verilog 2005 Verilog 2005 IEEE Standard 1364 2005 ile karistirilmamalidir Verilog un bu surumu birkac kucuk duzeltme ozellik aciklamasi ve birkac yeni dil ozelligi icermektedir Verilog standardinin ayri bir parcasi olan analog ve karisik isaret islemleri ile geleneksel Verilog u birlestirme cabasindadir SystemVerilog Systemverilog Verillog 2005 in bir ust kumesi olarak tasarim dogrulama tasarim modelleme gibi ozellikleri olan bir dildir OrneklerBir Merhaba Dunya programi su sekildedir module main initial begin display Merhaba Dunya finish end endmodule Basit sekilde iki su sekildedir module toplevel clock reset input clock input reset reg flop1 reg flop2 always posedge reset or posedge clock if reset begin flop1 lt 0 flop2 lt 1 end else begin flop1 lt flop2 flop2 lt flop1 end endmodule Tum benzetim yurutulurken lt isleci ile atanmis butun sinyaller islemlerini ayni anda gerceklesen tum ifadeler yurutuldukten sonra yapilacak sekilde siraya sokarlar Bu islece tikanmasiz non blocking islec denmektedir Bir olaydaki tum ifadeler yurutuldukten sonra siralanmis atanmalar yapilir Bu olay es zamanli davranan kodlarin daha kolay calistirilmasini saglar Yukaridaki ornekte flop1 degeri flop2 ye atanmistir Benzer sekilde flop2 degeri flop1 e atanmistir Bu ifadeler ayni zaman olayinda yurutulmektedir Ifadeler lt tikanmasiz islec ile kodlandigindan islemler olayin sonunda yapilacak sekilde siralanmistir O zamana kadar flop1 ve flop2 icin ihtiyac duyulan degerler zaman olayinin basindaki degerlerdir Bu demektir ki atamalar alakasiz bir sekilde siralansa dahi ayni sonuc elde edilecektir Flop1 ve flop2 her saat vurusunda clock olayinda degerlerini takas edeceklerdir Bu atama icin bir diger secenek ise tikanmali blocking olarak bilinen islecidir Bu islec kullanildiginda olaylar diger dillerdeki gibi bir sira halinde meydana gelir Eger yukaridaki ornekte lt islec yerine tikamali isleci kullanilsaydi ifadeler sirasi davranisi etkilerdi Reset flop2 yi 1 e flop1 de 0 a degistirirdi Clock olayi daha sonra flop1 i flop2 ye atardi reset ten sonra bu deger 1 dir Sonraki ifade flop2 yi flop1 e atardi Degerleri takaslamak yerine clock flop1 flop2 1 olurdu ve degismezdi Gecikme Ornegi reg a b c d wire e always b or e begin a b amp e b a b 5 c b d 6 c e end Yukaridaki always tumcesinin kullanimi digerlerinden farklidir Ornek olarak always tumcesindeki b or e kosulu b veya e parametrelerinin degismesi kosulunda asagidaki ifadelerin yurutulmesi gerektigini belirtir 5 birim zamanlik bir gecikmeden sonra b nin degeri c ye atanir ve c e degeri gorunmeyen bir yere atanir 6 birim zaman sonra bu yerden d yazmacina atanir Bir islem icinde initial veya always blogunun icinde yurutulen isaretlerin her zaman reg yazmac turunde olmalidir Disaridan yurutulen islemlerde isaretler wire tel tipinde olmalidir Reg anahtar sozcugu donanimsal bir yazmaci belirtmemektedir Sabitlerin TanimlanmasiTemel soz dizimi su sekildedir lt Genislik bit cinsinden gt lt taban harfi gt lt sayi gt Ornekler 12 h123 16 lik tabanda 123 12 bit kullanarak 20 d44 Ondalik tabanda 44 20 bit kullanarak 0 ile otomatik olarak genisletilir 4 b1010 ikilik tabanda 1010 4 bit kullanarak 6 o77 Sekizlik tabanda 77 6 bit kullanarak Sentezlenebilir YapilarDaha once de belirtildigi gibi donanimi tanimlamak icin birkac temel taslak kullanilabilir Coklayici Ornekleri Ayni islemi yapmanin 3 farkli yolu Ilk ornek surekli atamayi kullanmaktadir wire out assign out sel a b Ikinci ornek ayni islemi gerceklestirmek icin izlek prosedur kullanmaktadir reg out always a or b or sel begin case sel 1 b0 out b 1 b1 out a endcase end Izlek yapisinda If else kullanilabilir reg out always a or b or sel if sel out a else out b Sonraki ilginc yapi ise saydam mandaldir transparent latch Kapi isareti gec olarak ayarlandiginda girisi cikisa gonderecektir Eger kapi isareti tut olarak ayarlamissa cikis isareti giristen bagimsiz olarak ayni durumda kalacaktir Saydam Mandal Ornegi reg out always gate or din if gate out din Ilet durumu Burada else ifadesine gerek yoktur Gate high durumdayken out din degiskenini takip edecektir Gate LOW oldugu zaman out durumunu koruyacaktir D Flip Flop en basit yapilardan biridir reg q always posedge clk q lt d Ornekte tikanmasiz atama kullanildigina dikkat edilmelidir Temel kurallardan biri always yapisi icerisinde posedge pozitif kenar veya negedge negatif kenar ifadeleri kullanildiginda lt islecini kullanmaktir D flip flop un bir degisik turu zamanuyumsuz sifirlama asynchronous reset ile gerceklestirilendir Reset ifadesi geleneksel olarak yapi icerisindeki ilk if ifadesi olarak tanimlanmaktadir reg q always posedge clk or posedge reset if reset q lt 0 else q lt d Bir sonraki degisik yapida hem zaman uyumsuz sifirlama hem de zaman uyumsuz deger atamasi kullanmaktadir Geleneksel olarak reset terimi set terimi deger atamasi ile takip edilmektedir reg q always posedge clk or posedge reset or posedge set if reset q lt 0 else if set q lt 1 else q lt d Son degisik D flip flop tipi ise girisini bir coklayicidan alan tiptir Temel yapi geri besleme ile yapilmaktadir always posedge clk if gate q lt d else q lt q acik geri besleme yolu always posedge clk if gate q lt d else coklayici gerceklestirildi Initial ve AlwaysVerilog islemini belirtmek icin iki tane farkli anahtar kelime bulunmaktadir Bunlar always ve initial anahtar kelimeleridir Always sozcugu durum kontrolu ifadesiyle tetiklenen serbest calisan islemleri ifade eder Initial anahtar sozcugu sadece bir kere yurutulen islemler icin kullanilir Her ikisi de benzetimlik zamaninin 0 aninda begin yapisini kurar ve blok sonuna kadar yurutulur Blok sona ulastiginda tekrar siraya alinir Genel dusunce initial blogunun always den once yurutuleceginin varsayilmasidir fakat initial blogunun always blogunun sadece bir kere calistiktan sonra duran ozel bir durumu olarak dusunulmesi daha dogrudur Ornekler initial begin a 1 zaman 0 aninda reg tipi degiskene deger ata 1 1 birim zaman bekle b a reg a yi reg b ye ata end always a or b a veya b degistiginde asagidaki ifadeleri gerceklestir begin if a c b else d b end Bu blokla islem bittiginde tekrar yukari don durum kontrolu always posedge a reg a pozitif kenar degeri aldiginda calistir a lt b Bunlar iki anahtar kelimenin klasik kullanimidir Bunun disinda iki tane ek kullanim ozelligi bulunmaktadir Always anahtar sozcugunu duyarlilik listesini eklemeden de kullanabiliriz Ornegin always begin 0 zamaninda yurutmeye basla ve hicbir zaman durma clk 0 1 1 birim zaman bekle clk 1 1 end Yurutmeye devam ediyor yukaridan tekrar baslar Initial kullaniminin bir diger kullanimi ise forever anahtar sozcugu ile kullanimdir Asagidaki ornek islemsel olarak yukaridaki always ornegi ile aynidir initial forever 0 zamaninda basla ve begin end i surekli tekrarla begin clk 0 1 clk 1 1 endFork JoinVerilog da Fork Join yapisi kosut islemler yaratmak amaciyla kullanilir Fork join ciftinin icindeki tum ifadeler veya bloklar fork ile es zamanli olarak yurutulmeye baslanir Yurutme join ile yurutmenin en uzun suren elemanin tamamlanmasiyla sona erer initial fork write A A karakterini yaz write B B karakterini yaz begin 1 1 birim zaman bekle write C C karakterini yaz end join Yukaridaki yazilan sekilde ABC veya BAC seklinde bir sonuc almak mumkundur Benzetimin sirasi ilk write ve ikinci write ifadelerinin sirasi simulatore baglidir Bu olay Verilog daki en onemli durumlardan birini aciga cikarmaktadir Yaris kosulu adi verilen bu durumda yurutum sirasi sonuclarin tutarligini golgeye dusurebilir Yaris KosullariVerilog ta yurutum sirasi her zaman ayni olmayabilir Bu durum iki sonucun cikisa yarismasi gibi dusunulebilir Bu durum klasik bir ornekle aciklanmaktadir initial a 0 initial b a initial begin 1 display Value a a Value of b b a b end A ve b degerleri icin ne cikti verilecek Cevap 0 ve 0 olabilecegi gibi 0 ve herhangi deger olabilir Bu olay tamamen initial bloklarinin yurutum sirasina baglidir Eger benzetim programinin siralayicisi dosyayi yukaridan asagiya ele aliyorsa 0 ve 0 sonucu alinir Eger asagidan yukariya ele aliyorsa b benzetimin basindaki 0 a cekilemeyen a degerini alacaktir 3 initial blogunda boyle bir problem yasanmayacaktir cunku 1 ifadesi ile kucuk bir gecikme eklenmistir IsleclerIslec tipi Islec sembolu Yapilan islemBit bit bitwise 1 e tumleyen amp AND OR XOR or XNORMantiksal logical NOT amp amp AND ORAzaltma reduction amp AND amp NAND OR NOR XOR or XNORAritmetik Toplama Cikarma 2 ye tumleyen Carpma Bolme us Verilog 2001 Iliskisel gt Buyuktur lt Kucuktur gt Buyuk veya esittir lt Kucuk veya esittir mantiksal esitlilik Mantiksal esitsizlik 4 durumlu mantiksal esitlilik 4 durumlu mantiksal esitsizlikKaydirma gt gt Mantiksal saga kaydirma lt lt Mantiksal sola kaydirma gt gt gt Aritmetik saga kaydirma Verilog 2001 lt lt lt Aritmetik sola kaydirma Verilog 2001 Birbirine baglama Birbirine baglamaCogaltma CogaltmaKosullu KosulluSistem gorevleriSistem gorevleri basit giris cikis ve degisik tasarim islevleri icin bulunmaktadir Tum sistem gorevleri kullanici gorevleri ve fonksiyonlari ile karistirilmamasi amaciyla on takisini bulundurmaktadir Bu bolum cok kullanilan gorevlerin kisa bir listesini ele almaktadir yeteri kadar kapsamli degildir display Yeni bir satirla ekrana yazdirma write Satirbasi yapmadan ekrana yazdirma swrite Bir degiskene satirbasi yapmadan yazdirma fdisplay Bir dosyaya satirbasi yaparak yazdirma fwrite Bir dosyaya satirbasi yapmadan yazdirma readmemh Hafiza dizisine hex dosyasi alinmasi readmemb Hafiza dizisine binary dosyasi alinmasi monitor Degerlerinde bir degisiklik olan degiskenlerin yazdirilmasi time Benzetim zamaninin degeri random Rastgele bir deger dondurulmesi Dis baglantilarVerilog Kaynaklari Asic World16 Aralik 2007 tarihinde Wayback Machine sitesinde Verilog net22 Aralik 2007 tarihinde Wayback Machine sitesinde Digital Computer Courses16 Subat 2020 tarihinde Wayback Machine sitesinde 1 28 Eylul 2007 tarihinde Wayback Machine sitesinde 2 27 Aralik 2007 tarihinde Wayback Machine sitesinde Standard Gelistirmeler IEEE Std 1364 200129 Ocak 2009 tarihinde Wayback Machine sitesinde Verilog 2001 in orijinal standardi uyelik gerektiriyor IEEE P136416 Temmuz 2012 tarihinde Wayback Machine sitesinde Verilog icin calisan bir grup aktif degil IEEE P180012 Mart 2016 tarihinde Wayback Machine sitesinde Systemverilog icin calisan bir grup yukaridakinin yerine Verilog syntax21 Aralik 2007 tarihinde Wayback Machine sitesinde Backus Naur bicimindeki Backus Naur Form BNF soz diziminin tanimlamasi IEEE 1364 standardindan once geliyor Verilog 2001 syntax1 Aralik 2007 tarihinde Wayback Machine sitesinde BNF ile oldukca baglanti Verilog 2001 icin soz dizimi Verilog Araclari UNIX tabanli cok hizli bir verilog simulatoru ModelSim18 Mayis 2001 tarihinde Wayback Machine sitesinde Bircok DTD ini destekliyor Active HDL11 Ekim 2007 tarihinde Wayback Machine sitesinde Bircok DTD ini destekliyor LogicSim18 Aralik 2007 tarihinde Wayback Machine sitesinde Dusuk maliyetli Windows tabanli verilog simulatoru VeriLogger Extreme2 Ocak 2008 tarihinde Wayback Machine sitesinde Windows ve UNIX icin Verilog simulatoru Acik Kaynak Verilog Araclari Verilog 2001 i destekleyen bir simulator Wave VCD22 Aralik 2007 tarihinde Wayback Machine sitesinde Verilog ve Vhdl destekleyen bedava bir waveform goruntuleyicisi Icarus Verilog15 Aralik 2007 tarihinde Wayback Machine sitesinde Verilog 2001 destekleyen sentezleme araci ve simulator Veriwell30 Aralik 2007 tarihinde Wayback Machine sitesinde acik kaynakli bir simulator projesi Kaynakca Thomas Donald Moorby Phillip The Verilog Hardware Description Language Kluwer Academic Publishers Norwell MA ISBN 0 7923 8166 1 4 9 Mayis 2008 tarihinde Wayback Machine sitesinde Cornell ECE576 Course illustrating synthesis constructs Janick Bergerdon Writing Testbenches Functional Verification of HDL Models 2000 ISBN 0 7923 7766 4 The HDL Testbench Bible Burak Kelleci VHDL ve Verilog ile Sayisal Tasarim Seckin Yayincilik 2017 ISBN 978 9 7502 4192 5 Burak Kelleci VHDL ve Verilog ile Sayisal Tasarim 2 baski Seckin Yayincilik 2019 ISBN 978 9 7502 5561 8