Devreleri Tanımlamak İçin Bir Dil
Karşılaştığın çoğu dil - Python, JavaScript, Go - bir CPU'nun yürütmesi için bir talimat dizisini tanımlar. Verilog bir devreyi tanımlar. Hangi wire'ların var olduğunu, hangi register'ların var olduğunu ve sinyallerin aralarında nasıl aktığını yazarsın. Bir simülatör sonra devrenin davranışını oynatabilir ve bir sentez aracı aynı metni gerçek bir chip'in kapı ve flip-flop'larına derleyebilir.
Tek satırlık tanımı bu. İçerimlerin emilmesi daha uzun sürer.
O snippet küçük bir program gibi görünüyor: bir module, bir initial bloğu, bir $display system task. Run'a bas ve hello from verilog göreceksin. Ama altında simülatör bir fonksiyon yürütmüyor - zamanın geçtiğini farz ediyor ve devreyi ileri adımlıyor. Bu yüzden her yerde $finish göreceksin: birisinin simülatöre durmasını söylemesi gerekir.
"Hardware Description" Aslında Ne Demek
Bir C satırı, program sayacı ona ulaştığında çalışır. Bir Verilog satırı her zaman var olan bir devre parçasını tanımlar. Düşün:
assign y = a & b;
Bu "y'yi bir kez hesapla" değildir. "Bir wire y vardır ve zamanın her anında a AND b'ye eşittir." a veya b'yi değiştir ve y hemen takip eder. Bir modüldeki birkaç assign ifadesi bir dizi değildir - bunlar devrenin ayrı parçalarının paralel tanımlamalarıdır.
Bu Verilog'un tanımlayıcı özelliğidir ve her başlangıç hatasının kaynağıdır. Yazdığın şeyin çoğu eşzamanlı olarak gerçekleşen şeyleri tanımlar ve sıralı ifadeler gibi görünen birkaç yapı (initial ve always bloklarının içinde) sadece simülatör öyle gibi yaptığı için öyle görünür.
Verilog İle Ne Kurarsın
Verilog'u dijital yığının her seviyesinde kullanıldığını göreceksin:
- Kombinasyonel mantık. Adder'lar, multiplexer'lar, decoder'lar, ALU dilimleri - çıkışın yalnızca mevcut girişlere bağlı olduğu her şey.
- Sıralı mantık. Counter'lar, shift register'lar, finite state machine'ler, bir
posedge clkile saatlenen her şey. - Processor core'ları. Üniversite derslerindeki ödev CPU'larından gerçek silikonda gönderilen açık kaynak RISC-V core'lara, RTL genellikle Verilog veya SystemVerilog'tur.
- FPGA tasarımları. Bir Xilinx veya Intel FPGA'ya yüklenen mantık - ağ, görüntü işleme, gömülü kontrol - büyük ölçüde Verilog ile yazılmıştır.
- ASIC'ler. Telefonun, router'ın, araba'nın içindeki özel chip'ler - front-end tasarım HDL'dir ve Verilog iki baskın seçenekten biridir.
Öğrenmek için bu donanımın hiçbirine ihtiyacın yok. Bu doc'lardaki her şey browser tabanlı bir simülatörde çalışır.
Simülasyon vs Sentez
Verilog'u "çalıştırmanın" iki yolu var ve aynı değiller:
- Simülasyon devrenin davranışını yazılımda oynatır. Simülatör (Icarus Verilog, Verilator, ModelSim, ticari araçlar) modüllerini artı bir testbench - girişleri süren kod - okur ve çıktı üretir: metin log'lar, waveform'lar, pass/fail raporları.
- Sentez, Verilog'un bir alt kümesini alır ve onu gerçek kapıların bir netlist'ine derler. Bir vendor aracı (Vivado, Quartus, büyük şirketlerde design-compiler araçları) eşlemeyi yapar. Sentezlenmiş Verilog ekstra kurallara uymalıdır -
initialbloklar ve$displayçağrıları silikonda yoktur.
Bu sayfalardaki browser editör simülasyon yapar. Gerçek bir chip gönderene veya bir FPGA programlayana kadar ihtiyacın olan tek şey budur.
Verilog vs SystemVerilog
Bakarsan, iki adı da göreceksin. SystemVerilog bir üst kümedir - her Verilog yapısını korur ve özellikle doğrulamaya yönelik özellikler ekler (sınıflar, kısıtlı rastgele test, assertion'lar, interface'ler, çok daha zengin tip sistemi). Burada öğrendiğin her şey geçerli SystemVerilog'tur. İki ad pratikte birbirine karışır; çoğu araç her ikisini de kabul eder ve çoğu dosya ne olursa olsun .v ile biter. Bu doc'lar boyunca "Verilog" diyeceğiz.
Verilog vs VHDL
İkisi de hardware description language'lerdir. İkisi de IEEE standartlarıdır. İkisi de 1980'lerden beri var. Farklar:
- Sözdizimi. Verilog C'den miras alır - parantezler, kısa anahtar sözcükler, daha gevşek tip kuralları. VHDL Ada'dan miras alır - daha uzun, tipler konusunda çok daha katı.
- Coğrafya. Verilog ABD merkezli ticari tasarımda baskındır. VHDL Avrupa'da, savunma çalışmalarında ve eski kod tabanlarında hala yaygındır.
- Yetenek. İfade edebildikleri açısından kabaca eşdeğerdirler. Takımının ne kullandığına göre seç.
İlk kez HDL öğreniyorsan, Verilog daha yumuşak bir başlangıçtır - daha küçük sözdizimi, daha izin verici ve online standart örnek kütüphanesi daha büyüktür.
Bu Doc'lar Verilog'u Nasıl Çalıştırır
Aşağıdaki editör Icarus Verilog (iverilog) kullanır. Kaynağını bir simülatöre derler ve bir sandbox içinde çalıştırır. Vivado lisansı yok, Quartus kurulumu yok, FPGA board gerekmiyor. Bir modül artı küçük bir testbench yaz, Run'a bas ve çıktıyı ve waveform'u gör.
Bu tam bir 4 bitlik counter artı bir testbench'tir. counter modülü design under test (DUT)'tur; test modülü saati salınır, reset'i serbest bırakır ve her döngü değeri yazdırır. Çalıştır ve count'un 0'dan 15'e yürüyüp sardığını göreceksin. Waveform sekmesini aç ve aynı şeyi voltaj geçişleri olarak göreceksin.
Sırada Ne Var
Modüller yazmaya başlamak için yeterli bağlama sahipsin. Bir sonraki doc - Hardware vs Software - yeni Verilog programcıları için en büyük takılma olduğu için zihinsel model kaymasına biraz daha fazla zaman ayırır. Ondan sonra yerel bir simülatör kurmak (isteğe bağlı - browser iyidir), sıfırdan ilk modülü yazmak ve dilin geri kalanı.
Kendini ayarla. Sözdizimi küçük; zihinsel model çalıştır.
Sıkça Sorulan Sorular
Basit terimlerle Verilog nedir?
Verilog, dijital devreleri metinde tanımlamak için kullanılan bir hardware description language (HDL)'dir. Bir CPU'nun yürüttüğü talimatları yazmak yerine, wire'ları, register'ları, kapıları ve sinyallerin aralarında nasıl aktığını tanımlarsın. Bir simülatör sonra davranışı doğrulamak için tanımı çalıştırır ve bir sentez aracı aynı tanımı gerçek bir chip yerleşimine dönüştürebilir.
Verilog ne için kullanılır?
Verilog dijital donanımı tasarlamak ve doğrulamak için kullanılır: CPU'lar, GPU'lar, ağ switch'leri, memory kontrolörleri, sinyal işleme blokları, FPGA tasarımları - kapı ve flip-flop'tan yapılan her şey. Ayrıca herhangi bir silikon üretilmeden önce dijital mantık öğretmek ve tasarımları prototiplemek için saf simülasyonda da çalışır.
Verilog bir programlama dili midir?
Olağan anlamda değil. Verilog kodu, CPU talimatlarının bir dizisinden ziyade donanım yapısını ve davranışını - sinyalleri, kapıları ve saatli depolamayı - tanımlar. Yazdığın birçok satır chip üzerinde eşzamanlı olarak, birbiri ardına değil, gerçekleşir. Bu zihinsel kayma yazılımdan Verilog'a geçerken en büyük engeldir.
Verilog ile SystemVerilog arasındaki fark nedir?
SystemVerilog, Verilog'un bir üst kümesidir. Tüm Verilog sözdizimini korur ve özellikle doğrulama için özellikler ekler: sınıflar, kısıtlı rastgele stimulus, assertion'lar, interface'ler ve daha zengin veri tipleri. SystemVerilog'u kabul eden araçlar düz Verilog'u da kabul eder. Çoğu giriş çalışması için ikisi aynı görünür.
Verilog ile VHDL arasındaki fark nedir?
Verilog ve VHDL, aynı problemi çözen hardware description language'lerdir. Verilog'un sözdizimi C'den miras alır ve daha kısadır; VHDL'inki Ada'dan miras alır ve daha uzundur ve tipler konusunda daha katıdır. Endüstri kullanımı bölgeye ve takıma göre değişir - her ikisi de canlıdır, her ikisi de standardize edilmiştir (Verilog/SystemVerilog için IEEE 1364/1800, VHDL için IEEE 1076).
Verilog öğrenmek zor mu?
Sözdizimi küçüktür - C++'tan daha küçük. Zor kısım yazılım alışkanlıklarını öğrenmektir. Verilog'da çoğu ifade aynı anda olan şeyleri tanımlar, sırasıyla değil ve yanlış yerleştirilmiş bir blocking vs non-blocking atama devrenin çalışıp çalışmadığını değiştirebilir. İlk haftanın hissini yerine oturmadan önce kafa karıştırıcı hissetmesini bekle.