Verilog Dokümantasyonu
Kısa ve örneklerle anlatılan Verilog kaynağı. Kavramı oku, kodu gör, sonra Coddy yolculuğunda uygula.
Rehberli bir Verilog yolculuğuna başlaBaşlangıç
- Verilog Nedir?Verilog'a anlaşılır bir giriş - nedir, ne için kullanılır, normal bir programlama dilinden nasıl farklıdır ve dijital tasarımcılar neden 40 yıl sonra hala ona uzanırlar.
- Donanım vs YazılımVerilog'un yazılım dillerinden sonra neden kafa karıştırıcı hissettirdiği: varsayılan olarak eşzamanlılık, birinci sınıf bir kavram olarak zaman ve sırasıyla çalışmayan ifadeler.
- Verilog KurulumuVerilog'u yerel olarak derleyip simüle etmek için Icarus Verilog ve GTKWave'i kur. Veya kurulumu atla ve browser editörünü kullan - ikisi de bu doc'lar için çalışır.
- İlk ModülünSıfırdan ilk tam Verilog modülünü yaz - tanımlama, portlar, bir kombinasyonel mantık parçası ve onu süren bir testbench. Browser'da çalıştırılabilir.
- YorumlarVerilog'da tek satır ve çok satırlı yorumlar nasıl yazılır, artı modüller büyüdükçe onları okunabilir tutmak için dijital tasarımcıların kullandığı dokümantasyon kalıpları.
Veri tipleri ve sayılar
- Wire ve RegVerilog'daki iki ana veri tipi - sürekli bağlantılar için `wire` ve prosedürel depolama için `reg` - ve her seferinde aralarında seçim yapma kuralı.
- Vector'lar ve Array'ler`[7:0]` ile çok bitli sinyaller nasıl tanımlanır, dilimlenir, birleştirilir ve packed bir vector ile bir memory array arasındaki fark.
- ParametersDerleme zamanı sabitleri tanımlamak, genişlikleri ve derinlikleri parametrelemek ve bir modülü instantiate ettiğinde değerleri override etmek için `parameter` ve `localparam` nasıl kullanılır.
- Sayı Literal'leriVerilog sabitleri nasıl yazar: boyutlu ve boyutsuz, `'b` `'h` `'d` `'o` tabanları, signed sayılar, okunabilirlik için underscore'lar ve yeni başlayanları yakalayan tuzaklar.
- X ve Z DeğerleriVerilog sinyallerinin iki değil dört olası değeri vardır. Simülasyonda `x` (bilinmeyen) ve `z` (yüksek empedans) gerçekten ne anlama gelir ve onları nasıl debug ederim.
Operatörler
- OperatörlerVerilog'daki temel operatörler - aritmetik, karşılaştırma, mantıksal ve koşullu `?:` - karışık genişlikler ve signed olma etrafındaki kurallar ve tuzaklarla.
- Bitwise & ReductionVerilog'daki bit düzeyi operatörleri - bitwise AND/OR/XOR, terslenmiş formlar ve bütün bir vektörü tek bir bite indiren reduction operatörleri.
- Concatenation & ReplicationSinyalleri `{}` ile birleştirme ve `{N{...}}` ile bir kalıbı N kez kopyalama - parçalardan daha geniş bus'lar kurmak için vazgeçilmez Verilog operatörleri.
Modüller ve yapı
- Module PortsModül portları nasıl tanımlanır - input, output ve inout - ANSI tarzı port listesi ve bir output'un ne zaman `wire`, ne zaman `reg` olması gerektiği.
- Module InstantiationBir modülü diğerinin içinde nasıl instantiate edilir, adlandırılmış ve positional port bağlantıları arasındaki fark ve gerçek tasarımları kurmak için kullanacağın çoklu instance kalıpları.
- Continuous Assignment`assign` nasıl çalışır - tanımladığı her zaman doğru olan ilişki, neyi sürebilir, neyi süremez ve prosedürel kodla kıyaslandığında parladığı kalıplar.
Yordamsal bloklar
- Always Block`always` bloklarının nasıl çalıştığı, kombinasyonel `always @(*)` ile saatli `always @(posedge clk)` arasındaki fark ve her birinin hangi donanımı ürettiğini belirleyen kurallar.
- Initial Block`initial` bloklarının `always`'ten nasıl farklı olduğu, neden yalnızca simülasyonda var oldukları ve kullanıldıkları yaygın kalıplar - stimulus, waveform kurulumu, log header'ları.
- Blocking vs Non-blockingYeni başlayan Verilog programcılarının en çok kafa karıştırdığı konu. Bir `always` bloğunun içinde `=` ve `<=` gerçekten ne anlama gelir ve race condition'ların çoğunu önleyen kural.
Kontrol akışı
- If-Else`if`/`else` bir `always` bloğunun içinde nasıl çalışır, yeni başlayanları yakalayan latch tuzağı ve zincirlenmiş `else if`'lerin ürettiği priority encoder donanımı.
- Case İfadesi`case` temiz çok yönlü decoding için nasıl çalışır, asla atlamaman gereken `default` ve `case`, `casex`, `casez` arasındaki farklar.
- For DöngüleriVerilog `for` döngüleri yazılım kuzenlerinden nasıl farklıdır - sentezleyici tarafından çalışma zamanında yinelemeli olarak çalıştırılmak yerine paralel donanıma açılırlar.
Ardışık mantık ve FSM'ler
- Saatli MantıkSaatli `always` bloklarından register'lar, counter'lar, shift register'lar ve pipeline'lar nasıl kurulur - her senkron dijital tasarımın iş atı kalıbı.
- Finite State MachinesBir Verilog FSM'i profesyonellerin yaptığı şekilde nasıl yazılır - saatli bir state register, kombinasyonel bir next-state bloğu ve okumayı ve sentezlemeyi kolaylaştıran temiz bir ayrım.
Testbench ve simülasyon
- Testbench TemelleriBir Verilog testbench nasıl yazılır - saat üretimi, reset dizisi, stimulus, gözlem ve çalıştıracağın her simülasyonu süren standart iskelet.
- Display & Monitor`$display`, `$write` ve `$monitor` nasıl çalışır - kullanacağın format specifier'ları, aralarındaki fark ve her birinin doğru araç olduğu durumlar.
- Dumpfile & VCDBir testbench'e VCD waveform çıktısı nasıl eklenir - `$dumpfile`, `$dumpvars`, scope seçimi ve ortaya çıkan dosyanın GTKWave veya browser editöründe nasıl görüntüleneceği.
- Timescale & Delays`` `timescale `` direktifi `#delay`'in birimini nasıl ayarlar, dosyalar arasında farklı birimleri birleştirme kuralları ve gecikmelerin saatli mantıkla nasıl etkileşime girdiği.