Verilog - Verilog

Verilog
ParadigmaYapılandırılmış
İlk ortaya çıktı1984 (1984)
Kararlı sürüm
IEEE 1364-2005 / 9 Kasım 2005; 15 yıl önce (2005-11-09)
Yazma disipliniStatik, güçsüz
Dosya adı uzantıları.v, .vh
Lehçeler
Verilog-AMS
Tarafından etkilenmiş
C, Fortran
Etkilenen
SystemVerilog

Verilogolarak standartlaştırıldı IEEE 1364, bir donanım açıklama dili (HDL) modellemek için kullanılır elektronik sistemler. En yaygın olarak tasarım ve doğrulama işlemlerinde kullanılır. dijital devreler -de kayıt aktarım düzeyi nın-nin soyutlama. Doğrulamasında da kullanılır. analog devreler ve karışık sinyal devreleri yanı sıra tasarımında genetik devreler.[1] 2009 yılında Verilog standardı (IEEE 1364-2005), SystemVerilog standart, IEEE Standardı 1800-2009 oluşturuyor. O zamandan beri Verilog resmi olarak SystemVerilog dilinin bir parçası. Mevcut sürüm IEEE standardı 1800-2017'dir.[2]

Genel Bakış

Verilog gibi donanım tanımlama dilleri şuna benzer: yazılım Programlama dilleri çünkü yayılma süresini ve sinyal güçlerini (hassasiyet) açıklama yollarını içerirler. İki tür vardır atama operatörleri; bir engelleme ataması (=) ve engellemeyen (<=) bir atama. Engellemesiz atama, tasarımcıların bir durum makinesi güncellemesini beyan etmeye ve kullanmaya gerek kalmadan tanımlamasına olanak tanır geçici depolama değişkenleri. Bu kavramlar Verilog'un dil anlambiliminin bir parçası olduğu için, tasarımcılar büyük devrelerin açıklamalarını nispeten kompakt ve kısa bir biçimde hızlıca yazabilirler. Verilog'un tanıtımı sırasında (1984), Verilog, halihazırda grafik kullanan devre tasarımcıları için muazzam bir üretkenlik iyileştirmesini temsil ediyordu. şematik yakalama belgelemek ve belgelemek için özel olarak yazılmış yazılım programları ve elektronik devreleri simüle et.

Verilog tasarımcıları, söz dizimine benzer bir dil istediler. C programlama dili mühendislikte zaten yaygın olarak kullanılan yazılım geliştirme. C gibi Verilog harfe duyarlı ve temel önişlemci (ANSI C / C ++ 'dan daha az karmaşık olsa da). Onun kontrol akışı anahtar kelimeler (if / else, for, while, case, vb.) eşdeğerdir ve Operatör Önceliği C ile uyumludur. Sözdizimsel farklılıklar şunları içerir: değişken bildirimler için gerekli bit genişlikleri, yordamsal blokların sınırlarının belirlenmesi (Verilog, küme parantezleri {} yerine başlangıç ​​/ bitiş kullanır) ve diğer birçok küçük fark. Verilog, değişkenlere belirli bir boyut verilmesini gerektirir. C'de bu boyutlar, değişkenin "türünden" kabul edilir (örneğin bir tamsayı türü 8 bit olabilir).

Verilog tasarımı şunlardan oluşur: modül hiyerarşisi. Modüller kapsüllü tasarım hiyerarşisive bir dizi bildirilmiş girdi, çıktı ve diğer modüllerle iletişim kurun. çift ​​yönlü bağlantı noktaları. Dahili olarak, bir modül aşağıdakilerin herhangi bir kombinasyonunu içerebilir: net / değişken bildirimleri (tel, reg, tamsayı vb.), eşzamanlı ve sıralı ifade blokları ve diğer modüllerin örnekleri (alt hiyerarşiler). Sıralı ifadeler bir başlangıç ​​/ bitiş bloğunun içine yerleştirilir ve blok içinde sıralı sırayla yürütülür. Ancak, blokların kendileri eşzamanlı olarak yürütülür ve Verilog'u veri akışı dili.

Verilog'un "tel" kavramı, hem sinyal değerlerinden (4 durumlu: "1, 0, değişken, tanımsız") hem de sinyal güçlerinden (güçlü, zayıf, vb.) Oluşur. Bu sistem, birden fazla kaynağın ortak bir ağı yönlendirdiği paylaşılan sinyal hatlarının soyut modellemesine izin verir. Bir kablonun birden fazla sürücüsü olduğunda, kablonun (okunabilir) değeri, kaynak sürücülerin ve güçlerinin bir işlevi tarafından çözülür.

Verilog dilindeki ifadelerin bir alt kümesi sentezlenebilir. RTL olarak bilinen sentezlenebilir bir kodlama stiline uyan Verilog modülleri (kayıt aktarım düzeyi ), sentez yazılımı ile fiziksel olarak gerçekleştirilebilir. Sentez yazılımı, (soyut) Verilog kaynağını algoritmik olarak bir netlist, yalnızca belirli bir sistemde mevcut olan temel mantık ilkellerinden (AND, OR, NOT, flip-flop, vb.) oluşan mantıksal olarak eşdeğer bir açıklama FPGA veya VLSI teknoloji. Netlist üzerinde yapılacak daha fazla manipülasyon, sonuçta bir devre üretim planına yol açar (örneğin fotoğraf maskesi seti bir ... için ASIC veya a bit akışı dosya için FPGA ).

Tarih

Başlangıç

Verilog tarafından oluşturuldu Prabhu Goel, Phil Moorby, Chi-Lai Huang ve Douglas Warmke arasında 1983 sonu ile 1984 başı arasında.[3] Chi-Lai Huang daha önce Profesör S.Y.H. tarafından geliştirilen bir donanım açıklaması olan LALSD üzerinde çalışmıştı. Su, doktora çalışması için.[4] Bu sürecin hak sahibi, o sırada tescilli, "Otomatik Entegre Tasarım Sistemleri" idi (daha sonra Ağ Geçidi Tasarım Otomasyonu 1985'te). Gateway Design Automation tarafından satın alındı Cadence Tasarım Sistemleri Cadence artık Gateway'in Verilog'u ve fiili standardı (Verilog'un fiili standardı haline gelecek olan HDL simülatörü) Verilog-XL'nin tüm mülkiyet haklarına sahiptir. mantık simülatörleri ) önümüzdeki on yıl için. Başlangıçta Verilog yalnızca simülasyonu tanımlama ve simülasyona izin verme amacındaydı; Dilin alt kümelerinin fiziksel olarak gerçekleştirilebilir yapılara (kapılar vb.) otomatik sentezi, dilin yaygın kullanıma ulaşmasından sonra geliştirilmiştir.

Verilog, "doğrulama" ve "mantık" kelimelerinin bir portmanteau'sudur.[5]

Verilog-95

Artan başarısı ile VHDL o sırada Cadence, dili açık hale getirmeye karar verdi. standardizasyon. Cadence, Verilog'u kamu malı altına Verilog International'ı açın (OVI) (artık Accellera ) organizasyon. Verilog daha sonra şuraya gönderildi IEEE ve genellikle Verilog-95 olarak anılan IEEE Standardı 1364-1995 oldu.

Aynı zaman dilimi içinde Cadence, Verilog-A analog simülatörünün arkasına standartlar desteği koymak Spectre. Verilog-A hiçbir zaman bağımsız bir dil olmayı amaçlamadı ve bir alt kümesidir Verilog-AMS Verilog-95'i kapsayan.

Verilog 2001

Verilog-95 uzantıları, kullanıcıların orijinal Verilog standardında bulduğu eksiklikleri karşılamak için IEEE'ye geri gönderildi. Bu uzantılar oldu IEEE Verilog-2001 olarak bilinen Standart 1364-2001.

Verilog-2001, Verilog-95'ten önemli bir yükseltmedir. İlk olarak, (2'nin tamamlayıcı) işaretli ağları ve değişkenleri için açık destek ekler. Daha önce, kod yazarları, garip bit seviyesi manipülasyonları kullanarak imzalı işlemler gerçekleştirmek zorundaydı (örneğin, basit bir 8-bit toplamanın gerçekleştirme biti, doğru değerini belirlemek için Boole cebirinin açık bir açıklamasını gerektiriyordu). Verilog-2001 altındaki aynı işlev, yerleşik operatörlerden biri tarafından daha kısa ve öz olarak tanımlanabilir: +, -, /, *, >>>. Oluştur / endgenerate bir yapı (VHDL'nin üretme / endgenerate'e benzer), Verilog-2001'in normal karar operatörleri (durum / eğer / değilse) aracılığıyla örnek ve ifade somutlaştırmasını kontrol etmesine izin verir. Generate / endgenerate kullanarak Verilog-2001, bireysel örneklerin bağlanabilirliği üzerinde kontrol ile bir dizi örneği başlatabilir. Dosya G / Ç, birkaç yeni sistem görevi ile geliştirildi. Ve son olarak, kod okunabilirliğini geliştirmek için birkaç sözdizimi ilavesi yapıldı (örneğin her zaman, @ *, adlandırılmış parametre geçersiz kılma, C-stili işlev / görev / modül başlığı bildirimi).

Verilog-2001, Verilog'un ticari yayınların çoğunluğu tarafından desteklenen sürümüdür. EDA yazılım paketleri.

Verilog 2005

Kafanı karıştırmamak SystemVerilog, Verilog 2005 (IEEE Standart 1364-2005) küçük düzeltmelerden, özellik açıklamalarından ve birkaç yeni dil özelliğinden (uwire anahtar sözcüğü gibi) oluşur.

Verilog standardının ayrı bir bölümü, Verilog-AMS, analog ve karışık sinyal modellemeyi geleneksel Verilog ile entegre etmeye çalışır.

SystemVerilog

Gelişi donanım doğrulama dilleri gibi OpenVera ve Verisity'nin e dil Superlog'un Co-Design Automation Inc tarafından geliştirilmesini teşvik etti ( Özet ). Superlog ve Vera'nın temelleri bağışlandı Accellera daha sonra IEEE standardı olan P1800-2005: SystemVerilog oldu.

SystemVerilog bir süperset Verilog-2005, tasarım doğrulama ve tasarım modellemeye yardımcı olacak birçok yeni özellik ve yeteneklerle. 2009 itibariyle, SystemVerilog ve Verilog dil standartları SystemVerilog 2009 (IEEE Standardı 1800-2009) ile birleştirildi. Mevcut sürüm IEEE standardı 1800-2017'dir.[6]

Misal

Basit bir örnek iki parmak arası terlik aşağıdaki gibidir:

modül Üst düzey(saat,Sıfırla);  giriş saat;  giriş Sıfırla;  kayıt flop1;  kayıt flop2;  her zaman @ (poz Sıfırla veya poz saat)    Eğer (Sıfırla)      başla        flop1 <= 0;        flop2 <= 1;      son    Başka      başla        flop1 <= flop2;        flop2 <= flop1;      sonson modül

<= Verilog'daki operatör, normal bir prosedür dilinin aksine bir donanım tanımlama dili olmasının başka bir yönüdür. Bu, "engellemeyen" atama olarak bilinir. Eylemi, always bloğu yürütülene kadar kaydedilmez. Bu, atamaların sırasının ilgisiz olduğu ve aynı sonucu üreteceği anlamına gelir: flop1 ve flop2 her saat değerleri değiş tokuş eder.

Diğer atama operatörü = engelleme ataması olarak adlandırılır. Ne zaman = atama kullanılır, mantık amacıyla hedef değişken hemen güncellenir. Yukarıdaki örnekte, ifadeler = yerine engelleme operatörü <=, flop1 ve flop2 değiştirilemezdi. Bunun yerine, geleneksel programlamada olduğu gibi, derleyici flop1'i flop2'ye eşit ayarlamayı anlayacaktır (ve daha sonra flop2'yi flop1'e eşit ayarlamak için fazlalık mantığı yok sayacaktır).

Bir örnek sayaç devre aşağıdaki gibidir:

modül Div20x (ilk, clk, cet, cep, Miktar, tc);// BAŞLIK 'Etkinleştirilmiş 20'ye Bölme Sayacı'// CEP'yi etkinleştir yalnızca bir saat etkinleştirme// CET etkinleştir bir saat etkinleştirmedir ve// TC çıktısını etkinleştirir// Verilog dilini kullanan bir sayaçparametre boyut = 5;parametre uzunluk = 20;giriş ilk; // Bu girdiler / çıktılar,giriş clk; // modüle bağlantılar.giriş cet;giriş cep;çıktı [boyut-1:0] Miktar;çıktı tc;kayıt [boyut-1:0] Miktar; // atanan sinyaller                      // her zaman içinde                      // (veya ilk) blok                      // reg türünde olmalıdırtel tc; // Diğer sinyaller tel tipindedir// Aşağıdaki always ifadesi paraleldir// yürütme ifadesi// sinyaller her zaman yürütülür// düşükten yükseğe ilk veya clk geçişiher zaman @ (poz clk veya poz ilk)  Eğer (ilk) // Bu, cntr'nin sıfırlanmasına neden olur    Miktar <= {boyut{1'b0}};  Başka  Eğer (cet && cep) // Her ikisini de etkinleştirir    başla      Eğer (Miktar == uzunluk-1)        Miktar <= {boyut{1'b0}};      Başka        Miktar <= Miktar + 1'b1;    son// tc'nin değeri sürekli olarak atanır// ifadenin değeriatamak tc = (cet && (Miktar == uzunluk-1));son modül

Gecikmelere bir örnek:

...kayıt a, b, c, d;tel e;...her zaman @(b veya e)  başla    a = b & e;    b = a | b;    #5 c = b;    d = #6 c ^ e;  son

her zaman Yukarıdaki madde, diğer kullanım yöntemini gösterir, yani listedeki varlıklardan herhangi biri ( b veya e) değişiklikler. Bunlardan biri değiştiğinde, a hemen yeni bir değer atanır ve engelleme ataması nedeniyle, b daha sonra yeni bir değer atanır (yeni değeri hesaba katarak a). 5 zaman birimlik bir gecikmeden sonra, c değeri atanır b ve değeri c ^ e görünmez bir mağazada saklanıyor. Sonra 6 zaman birimi daha sonra, d saklanan değer atanır.

Bir sürecin içinden (bir başlangıç ​​veya her zaman blok) yönlendirilen sinyaller tipte olmalıdır kayıt. Bir sürecin dışından gelen sinyaller tipte olmalıdır tel. Anahtar kelime kayıt bir donanım kaydı anlamına gelmez.

Sabitlerin tanımı

Verilog'daki sabitlerin tanımı, bir genişlik parametresinin eklenmesini destekler. Temel sözdizimi şöyledir:

<Bit cinsinden genişlik>'<temel harf><numara>

Örnekler:

  • 12'h123 - Onaltılık 123 (12 bit kullanarak)
  • 20'd44 - Ondalık 44 (20 bit kullanarak - 0 uzantı otomatiktir)
  • 4'b1010 - İkili 1010 (4 bit kullanarak)
  • 6'o77 - Sekizli 77 (6 bit kullanarak)

Sentezlenebilir yapılar

Verilog'da gerçek donanımda analogu olmayan birkaç ifade vardır, örn. $ display. Sonuç olarak, dilin çoğu donanımı tanımlamak için kullanılamaz. Burada sunulan örnekler, gerçek kapılarla doğrudan eşlemesi olan klasik dil alt kümesidir.

// Mux örnekleri - Aynı şeyi yapmanın üç yolu.// İlk örnek sürekli atamayı kullanıyortel dışarı;atamak dışarı = sel ? a : b;// ikinci örnek bir prosedür kullanıyor// aynı şeyi başarmak için.kayıt dışarı;her zaman @(a veya b veya sel)  başla    durum(sel)      1'b0: dışarı = b;      1'b1: dışarı = a;    son kasa  son// Son olarak - if / else'i bir// prosedür yapısı.kayıt dışarı;her zaman @(a veya b veya sel)  Eğer (sel)    dışarı = a;  Başka    dışarı = b;

Bir sonraki ilginç yapı bir şeffaf mandal; geçit sinyali "geçiş" için ayarlandığında girişi çıkışa geçirecek ve girişi yakalayıp geçit sinyalinin "bekletme" ye geçişi üzerine depolar. Çıkış, giriş sinyali ne olursa olsun, geçit "tut" olarak ayarlandığında sabit kalacaktır. Aşağıdaki örnekte geçidin "geçiş" seviyesi, if cümlesinin değeri doğru olduğunda, yani geçit = 1 olacaktır. Bu, "geçit doğruysa, din sürekli olarak mandal çıkışına beslenir" okunur. İf cümlesi false olduğunda, latch_out'taki son değer kalır ve din değerinden bağımsızdır.

// Şeffaf mandal örneğikayıt latch_out;her zaman @(kapı veya din)  Eğer(kapı)    latch_out = din; // Eyaletten geç    // Burada başkasının gerekli olmadığını unutmayın. Değişken    // latch_out, geçit olduğu sürece din değerini takip edecektir    // yüksek. Geçit düşük olduğunda, latch_out sabit kalacaktır.

takla sonraki önemli şablondur; Verilog'da, D-flop en basit olanıdır ve şu şekilde modellenebilir:

kayıt q;her zaman @(poz clk)  q <= d;

Örnekte dikkat edilmesi gereken önemli şey, engellemesiz atamanın kullanılmasıdır. Temel temel kural kullanmak <= ne zaman poz veya olumsuzluk always cümlesi içindeki ifade.

D-flop'un bir çeşidi, asenkron sıfırlamalı olandır; İfadede sıfırlama durumunun ilk if cümlesi olacağına dair bir kural vardır.

kayıt q;her zaman @(poz clk veya poz Sıfırla)  Eğer(Sıfırla)    q <= 0;  Başka    q <= d;

Bir sonraki varyant, hem eşzamansız sıfırlama hem de eşzamansız küme koşulunu içerir; yine kongre devreye girer, yani sıfırlama teriminin ardından belirlenen terim gelir.

kayıt q;her zaman @(poz clk veya poz Sıfırla veya poz Ayarlamak)  Eğer(Sıfırla)    q <= 0;  Başka  Eğer(Ayarlamak)    q <= 1;  Başka    q <= d;

Not: Bu model bir Set / Reset flip flopunu modellemek için kullanılırsa simülasyon hataları meydana gelebilir. Aşağıdaki olayların test sırasını düşünün. 1) sıfırlama yükselir 2) klk yükselir 3) set yükselir 4) klk tekrar yükselir 5) sıfırlama düşer, ardından 6) set alçalır. Kurulum ve bekletme ihlallerini varsaymayın.

Bu örnekte always @ ifadesi ilk olarak sıfırlamanın yükselen kenarı oluştuğunda çalıştırılır ve bu da q'yu 0 değerine getirir. Bir dahaki sefere her zaman bloğu çalıştırıldığında clk'nin yükselen kenarı yine q değerini şu değerde tutar. 0. Her zaman blok daha sonra set yüksek olduğunda yürütülür, çünkü sıfırlama yüksek olduğundan q, 0'da kalmaya zorlar. Bu durum gerçek flip flop'a bağlı olarak doğru olabilir veya olmayabilir. Ancak, bu modeldeki ana sorun bu değildir. Sıfırlama düştüğünde, bu setin hala yüksek olduğuna dikkat edin. Gerçek bir flip flopta bu, çıktının 1'e gitmesine neden olacaktır. Ancak, bu modelde bu gerçekleşmeyecektir çünkü her zaman blok, seviyelerin değil, set ve sıfırlamanın artan kenarları tarafından tetiklenir. Flip flopları ayarlamak / sıfırlamak için farklı bir yaklaşım gerekli olabilir.

Son temel varyant, girdisini besleyen bir mux ile bir D-flop uygulayan bir varyanttır. Mux bir d-girdisine ve flopun kendisinden geri beslemeye sahiptir. Bu, kapılı bir yük işlevine izin verir.

// EXPLICIT geribildirim yoluna sahip temel yapıher zaman @(poz clk)  Eğer(kapı)    q <= d;  Başka    q <= q; // açık geribildirim yolu// Daha yaygın yapı, geri bildirimin mevcut olduğunu varsayar// Bu güvenli bir varsayımdır çünkü// donanım derleyicisi bunu yorumlayacaktır. Bu yapı// bir mandala çok benziyor. Farklılıklar// '' '@ (posedge clk)' '' ve engellemeyen '' '<=' ''//her zaman @(poz clk)  Eğer(kapı)    q <= d; // "else" mux "ima edilir"

Bu açıklamada bahsedilen "başlangıç" bloklarının olmadığını unutmayın. Bu yapı üzerinde FPGA ve ASIC sentez araçları arasında bir ayrım vardır. FPGA araçları, "sıfırlama" sinyali kullanmak yerine reg değerlerinin oluşturulduğu ilk bloklara izin verir. ASIC sentez araçları böyle bir ifadeyi desteklemez. Bunun nedeni, bir FPGA'nın başlangıç ​​durumunun FPGA'nın bellek tablolarına indirilen bir şey olmasıdır. ASIC, gerçek bir donanım uygulamasıdır.

İlk ve her zaman

Bir Verilog sürecini bildirmenin iki ayrı yolu vardır. Bunlar her zaman ve ilk anahtar kelimeler. her zaman anahtar kelime, serbest çalışan bir süreci belirtir. ilk anahtar kelime, bir işlemin tam olarak bir kez yürütüldüğünü gösterir. Her iki yapı da simülatör zamanı 0'da çalışmaya başlar ve her ikisi de bloğun sonuna kadar yürütülür. Bir kez her zaman blok sonuna ulaştı, yeniden planlandı (tekrar). Bir başlangıç ​​bloğunun her zaman bir bloktan önce çalışacağına inanmak yaygın bir yanılgıdır. Aslında, düşünmek daha iyidir ilk-özel bir durum olarak blok her zaman-blok, ilk kez tamamlandıktan sonra sona eren blok.

// Örnekler:ilk  başla    a = 1; // 0 zamanında reg a'ya bir değer atayın    #1; // 1 zaman birimi bekle    b = a; // reg a'nın değerini reg b'ye atayın  sonher zaman @(a veya b) // a veya b DEĞİŞİKLİK her seferinde işlemi çalıştırbaşla  Eğer (a)    c = b;  Başka    d = ~b;son // Bu blokla tamamlandı, şimdi en üste dönün (yani @ olay kontrolü)her zaman @(poz a)// reg a'nın düşükten yükseğe değiştiği her durumda çalıştır  a <= b;

Bunlar, bu iki anahtar kelimenin klasik kullanımlarıdır, ancak iki önemli ek kullanım vardır. Bunlardan en yaygın olanı bir her zaman anahtar kelime olmadan @(...) hassasiyet listesi. Her zaman aşağıda gösterildiği gibi kullanmak mümkündür:

her zaman  başla // Her zaman 0 zamanında başlar ve ASLA durmaz    clk = 0; // clk'yi 0'a ayarla    #1; // 1 zaman birimi bekle    clk = 1; // clk'yi 1'e ayarla    #1; // 1 zaman birimi bekle  son // Yürütmeye devam eder - bu yüzden başlangıcın en üstünde devam edin

her zaman anahtar kelime C dili yapısına benzer davranır süre (1) {..} sonsuza kadar devam edecek olması anlamında.

Diğer ilginç istisna, ilk eklenmiş anahtar kelime sonsuza dek anahtar kelime.

Aşağıdaki örnek işlevsel olarak aynıdır her zaman yukarıdaki örnek.

ilk sonsuza dek // 0 zamanında başlayın ve başlangıcı / sonu sonsuza kadar tekrarlayın  başla    clk = 0; // clk'yi 0'a ayarla    #1; // 1 zaman birimi bekle    clk = 1; // clk'yi 1'e ayarla    #1; // 1 zaman birimi bekle  son

Çatal / birleştirme

çatal / birleştirme çifti, paralel işlemler oluşturmak için Verilog tarafından kullanılır. Bir çatal / birleştirme çifti arasındaki tüm ifadeler (veya bloklar), yürütme akışının çatal. Yürütme, katılmak en uzun süren ifadenin veya arasındaki bloğun tamamlanması üzerine çatal ve katılmak.

ilk  çatal    $ write("A"); // A karakterini yazdır    $ write("B"); // B karakterini yazdır    başla      #1; // 1 zaman birimi bekle      $ write("C"); // karakter C'yi yazdır    son  katılmak

Yukarıdakilerin yazıldığı gibi, "ABC" veya "BAC" dizilerinin çıktısını almak mümkündür. İlk $ write ile ikinci $ write arasındaki simülasyon sırası, simülatör uygulamasına bağlıdır ve simülatör tarafından amaçlı olarak rastgele hale getirilebilir. Bu, simülasyonun hem tesadüfi yarış koşullarını hem de kasıtlı deterministik olmayan davranışları içermesine izin verir.

VHDL'nin Verilog gibi birden çok işlemi dinamik olarak üretemeyeceğine dikkat edin.[7]

Yarış koşulları

Verilog'da infaz emri her zaman garanti edilmez. Bu, en iyi şekilde klasik bir örnekle açıklanabilir. Aşağıdaki kod parçasını düşünün:

ilk  a = 0;ilk  b = a;ilk  başla    #1;    $ display("Değer a =% d Değer b =% d",a,b);  son

A ve b'nin değerleri için ne yazdırılacak? İlk blokların yürütme sırasına bağlı olarak, sıfır ve sıfır veya alternatif olarak sıfır ve diğer bazı rasgele başlatılmamış değer olabilir. $ Display deyimi, # 1 gecikme nedeniyle her iki atama bloğu tamamlandıktan sonra her zaman yürütülür.

Operatörler

Not: Bu operatörler değil öncelik sırasına göre gösterilir.

Operatör tipiOperatör sembolleriGerçekleştirilen işlem
Bitsel~Bit tabanlı DEĞİL (1'in tamamlayıcısı)
&Bitsel AND
|Bit tabanlı VEYA
^Bitsel ÖZELVEYA
~ ^ veya ^ ~Bitsel XNOR
Mantıklı!DEĞİL
&&VE
||VEYA
İndirgeme&Redüksiyon VE
~&Azaltma NAND
|Redüksiyon VEYA
~|Redüksiyon NOR
^XOR azaltma
~ ^ veya ^ ~XNOR Azaltma
Aritmetik+İlave
-Çıkarma
-2'nin tamamlayıcısı
*Çarpma işlemi
/Bölünme
**Üsleme (* Verilog-2001)
İlişkisel>Büyüktür
<Daha az
>=Büyük veya eşit
<=Küçüktür veya eşittir
==Mantıksal eşitlik (1'bX bit değeri karşılaştırmadan çıkarılır)
!=Mantıksal eşitsizlik (bit değeri 1'bX, karşılaştırmadan çıkarılır)
===4 durumlu mantıksal eşitlik (bit değeri 1'bX değişmez olarak alınır)
!==4 durumlu mantıksal eşitsizlik (bit değeri 1'bX değişmez olarak alınır)
Vardiya>>Mantıksal sağa kaydırma
<<Mantıksal sola kaydırma
>>>Aritmetik sağa kaydırma (* Verilog-2001)
<<<Aritmetik sola kaydırma (* Verilog-2001)
Birleştirme{, }Birleştirme
Çoğaltma{n {m}}M değerini n kez yineleyin
Koşullu? :Koşullu

Dört değerli mantık

IEEE 1364 standardı, bir dört değerli mantık dört durumla: 0, 1, Z (yüksek empedans ) ve X (bilinmeyen mantık değeri). Rakip VHDL için, çok değerli mantık için özel bir standart şu şekilde mevcuttur: IEEE 1164 dokuz seviyeli.[8]

Sistem görevleri

Simülasyon sırasında basit G / Ç ve çeşitli tasarım ölçüm fonksiyonlarını işlemek için sistem görevleri mevcuttur. Tüm sistem görevlerinin başında $ bunları kullanıcı görevlerinden ve işlevlerinden ayırmak için. Bu bölümde en sık kullanılan görevlerin kısa bir listesi sunulmaktadır. Kesinlikle kapsamlı bir liste değildir.

  • $ display - Bir satırın ardından otomatik bir yeni satır görüntülemek için yazdırın.
  • $ write - Satırsonu olmadan bir satırı perdelemek için yazdırın.
  • $ swrite - Yeni satır olmadan değişken bir satırı yazdırır.
  • $ sscanf - Değişkenden biçimle belirlenmiş bir dizeyi okur. (* Verilog-2001)
  • $ fopen - Bir dosyanın tanıtıcısını açar (okuma veya yazma)
  • $ fdisplay - Bir dosyadan bir satır ve ardından otomatik bir satırsonu yazdırır.
  • $ fwrite - Bir satırı satırsonu olmadan dosyalamak için yazdırın.
  • $ fscanf - Biçimle belirlenmiş bir dizgeyi dosyadan okur. (* Verilog-2001)
  • $ fclose - Açık bir dosya tutamacını kapatır ve serbest bırakır.
  • $ readmemh - Onaltılık dosya içeriğini bir bellek dizisine okur.
  • $ readmemb - İkili dosya içeriğini bir bellek dizisine okur.
  • $ monitor - Herhangi bir değişiklik değeri olduğunda listelenen tüm değişkenleri yazdırın.
  • $ time - Geçerli simülasyon zamanının değeri.
  • $ dumpfile - VCD'yi bildirin (Değer Değişikliği Dökümü ) format çıktı dosyası adı.
  • $ dumpvars - Açın ve değişkenleri boşaltın.
  • $ dumpports - Açın ve değişkenleri Genişletilmiş-VCD biçiminde dökümünü alın.
  • $ random - Rastgele bir değer döndürür.

Program Dili Arayüzü (PLI)

PLI, bir programcıya kontrolü Verilog'dan C dilinde yazılmış bir program işlevine aktaran bir mekanizma sağlar. Resmi olarak kullanımdan kaldırıldı IEEE Std 1364-2005 tarafından yeni lehine Verilog Prosedür Arayüzü PLI'nin tamamen yerini alan.

PLI (şimdi VPI), Verilog'un aşağıdaki gibi C dilinde yazılmış diğer programlarla işbirliği yapmasını sağlar: test koşum takımı, komut seti simülatörleri bir mikrodenetleyici, hata ayıklayıcılar, ve benzeri. Örneğin, C işlevlerini sağlar tf_putlongp () ve tf_getlongp () sırasıyla mevcut Verilog görevinin veya işlevinin argümanını yazmak ve okumak için kullanılır.

Simülasyon yazılımı

Verilog simülatörleri hakkında bilgi için bkz. Verilog simülatörlerinin listesi.

Ayrıca bakınız

Ek malzeme

Benzer diller

Verilog jeneratörleri

Referanslar

  1. ^ Nielsen AA, Der BS, Shin J, Vaidyanathan P, Paralanov V, Strychalski EA, Ross D, Densmore D, Voigt CA (2016). "Genetik devre tasarımı otomasyonu". Bilim. 352 (6281): aac7341. doi:10.1126 / science.aac7341. PMID  27034378.
  2. ^ 1800-2vhhu017 - SystemVerilog için IEEE Standardı - Birleşik Donanım Tasarımı, Spesifikasyonu ve Doğrulama Dili
  3. ^ "Verilog'un mucidi EDA'nın Kaufman ödülünü aldı". EE Times. 7 Kasım 2005.
  4. ^ Huang, Chi-Lai; Su, S.Y.H. "Donanım Tanımlama Dilini Kullanarak Bilgisayar Destekli Mantık Sistemi Tasarımına Yönelik Yaklaşımlar". Uluslararası Bilgisayar Sempozyumu Bildirileri 1980, Taipei, Tayvan, Aralık 1980. s. 772–79O. OCLC  696254754.
  5. ^ "Philip Raymond'un Sözlü Tarihi" Phil "Moorby" (PDF). Bilgisayar Tarihi Müzesi. 22 Nisan 2013. s. 23–25.
  6. ^ 1800-2017 - SystemVerilog için IEEE Standardı - Birleşik Donanım Tasarımı, Spesifikasyonu ve Doğrulama Dili
  7. ^ Cummings, Clifford E. (2003). "SystemVerilog - Bu Verilog ve VHDL'nin Birleşmesi mi?" (PDF). SNUG Boston 2003.
  8. ^ Miller, D. Michael; Thornton, Mitchell A. (2008). Çok değerli mantık: kavramlar ve temsiller. Sayısal Devreler ve Sistemler Üzerine Sentez Dersleri. 12. Morgan ve Claypool. ISBN  978-1-59829-190-2.
Notlar

Dış bağlantılar

Standart geliştirme

Dil uzantıları

  • Verilog AUTO'lar - Verilog kodunun bakımını basitleştirmek için endüstri IP'si tarafından kullanılan açık kaynaklı bir meta yorum.