Menu
Coddy logo textTech

Verilog Hile Sayfası

Son güncelleme

Modül yapısı ve portlar

Modül temel yapı taşıdır - bir adı ve bir port listesi vardır.

Söz dizimiAnlamı
module adder(...); ... endmoduleBir modülü ve gövdesini tanımla
input clk;Bir giriş portu
output q;Bir çıkış portu
output reg q;Bir always bloğundan sürülen bir çıkış
input [7:0] data;8 bitlik bir giriş veri yolu (vektör)
inout sda;Çift yönlü bir port
adder u1 (.a(x), .b(y), .sum(s));Bir modülü adlandırılmış portlarla örnekle (instantiate)

Veri tipleri

wire bir bağlantıyı modeller; reg, prosedürel kodun atadığı bir değeri tutar.

ElementNe yapar
wire w;assign veya bir modül çıkışı tarafından sürülen bir net
reg r;Bir always/initial bloğu içinde atanan bir değeri tutar
wire [3:0] bus;4 bitlik bir vektör (bit 3'ten 0'a)
reg [7:0] count;8 bitlik bir register
bus[2]Tek bir biti seç
bus[3:1]Bir bit dilimini seç (part-select)
reg mem [0:255];Bir bellek: register'lardan oluşan bir dizi
parameter WIDTH = 8;Modül için adlandırılmış bir sabit

Sayı değişmezleri

Biçim <size>'<base><value> şeklindedir - bit cinsinden boyut, taban b/o/d/h olarak.

Söz dizimiAnlamı
4'b10104 bitlik ikili, değer 10
8'hFF8 bitlik onaltılık, değer 255
8'hffAynısı - onaltılık basamaklar büyük/küçük harf duyarsızdır
16'd25516 bitlik ondalık, değer 255
3'o73 bitlik sekizlik, değer 7
8'b1010_1100Alt çizgiler okunabilirlik için basamakları gruplar
1'bxBilinmeyen (x) bit değeri
1'bzYüksek empedanslı (z) bit değeri

Operatörler

Bit düzeyinde, mantıksal, karşılaştırma ve indirgeme (reduction) operatörleri.

OperatörNe yapar
& | ^ ~Bit düzeyinde AND, OR, XOR, NOT
&& || !Mantıksal AND, OR, NOT (1 bit döndürür)
== != < > <= >=Karşılaştırma operatörleri
<< >>Sola ve sağa kaydırma
+ - * / %Aritmetik operatörler
&busİndirgeme AND (tüm bitlerin AND'i)
|busİndirgeme OR (tüm bitlerin OR'u)
^busİndirgeme XOR (tüm bitlerin pariteleri)
{a, b}Birleştirme (concatenation); {4{1'b1}}, 4'b1111'e çoğaltır

Sürekli atama

assign bir wire'ı sürekli olarak sürer - onu kombinasyonel mantık için kullanın.

Söz dizimiAnlamı
assign y = a & b;y'yi a ile b'nin AND'iyle sür
assign sum = a + b;Sürekli olarak bir toplam hesapla
assign y = sel ? a : b;Üçlü (ternary) - 2'den 1'e çoklayıcı (mux)
assign {c, s} = a + b;Eldeyi (carry) ve toplamı birlikte yakala
assign y = ~en;Bir wire'ı tersine çevrilmiş bir sinyalden sür

Prosedürel bloklar

always ve initial ifade çalıştırır; duyarlılık listesi ne zaman olacağını kontrol eder.

Söz dizimiAnlamı
always @(*) begin ... endKombinasyonel mantık (herhangi bir giriş değişikliği)
always @(posedge clk)Her yükselen saat kenarında çalış (ardışıl)
always @(negedge clk)Her düşen saat kenarında çalış
always @(posedge clk or posedge rst)Asenkron reset'li saatli blok
initial begin ... endZaman 0'da bir kez çalış (testbench'ler, yalnızca simülasyon)
begin ... endBirden fazla ifadeyi grupla
#1010 zaman birimi geciktir (yalnızca simülasyon)

Blocking ile non-blocking

Kombinasyonel mantık için =, saatli ardışıl mantık için <= kullanın.

Söz dizimiAnlamı
a = b;Blocking - sırayla, hemen çalışır
a <= b;Non-blocking - önce tüm sağ taraflar okunur, sonra atanır
always @(*) y = a & b;Kombinasyonel: blocking = kullan
always @(posedge clk) q <= d;Bir flip-flop: non-blocking <= kullan
Tek bir blokta = ve <= karıştırmakBundan kaçının - yaygın bir hata kaynağı

Kontrol akışı

Prosedürel blokların içinde koşullar ve çok yollu dallanmalar.

Söz dizimiAnlamı
if (cond) ... else ...Koşullu ifade
if (a) x = 1; else x = 0;Tek satırlık if/else
case (sel) ... endcaseBir değer üzerinde çok yollu dallanma
2'b00: y = a;Bir case öğesi
default: y = 0;Yedek case öğesi
for (i = 0; i < 8; i = i + 1)Döngü (genellikle generate veya simülasyon içinde)
repeat (4) @(posedge clk);Bir ifadeyi N kez tekrarla

Yaygın desenler

Tekrar tekrar yazdığınız yapı taşları, ayrıca testbench görevleri.

DesenSöz dizimi
D flip-flopalways @(posedge clk) q <= d;
Reset'li registeralways @(posedge clk) if (rst) q <= 0; else q <= d;
Sayaçalways @(posedge clk) count <= count + 1;
FSM durum register'ıalways @(posedge clk) state <= next_state;
FSM sonraki-durum mantığıalways @(*) case (state) ... endcase
Bir değeri yazdır$display("q = %b", q);
Değişiklikte yazdır$monitor("t=%0t q=%b", $time, q);
Simülasyonu bitir$finish;

Başvurduğunuz her Verilog söz dizimi parçası tek sayfada. Bu Verilog hile sayfası, donanım tanımlama dili için hızlı bir başvurudur - modülleri ve portları bildirme, veri tiplerini seçme, kombinasyonel ve ardışıl mantık yazma ve gerçek devreleri tanımlayan always-bloğu desenleri.

Buradaki söz dizimi standart Verilog'dur (IEEE 1364) ve Icarus Verilog ile Verilator gibi yaygın simülatörlerde çalışır. İhtiyacınız olanı kopyalayın ya da Verilog playground'da canlı deneyin - bir modül yazın, simüle edin ve çıktıyı tarayıcınızda görün.

Verilog hile sayfası SSS

Bu Verilog hile sayfası ücretsiz mi?
Evet. Bu Verilog hile sayfası tamamen ücretsizdir ve kayıt gerektirmez. Yer imlerinize ekleyin ve bir söz dizimine, operatöre ya da always-bloğu desenine bakmanız gerektiğinde geri dönün.
wire ile reg arasındaki fark nedir?
Bir wire fiziksel bir bağlantıyı modeller ve sürekli olarak sürülmelidir - bir assign ifadesi veya bir modül çıkışı tarafından - bu yüzden onu kombinasyonel net'ler için kullanırsınız. Bir reg, prosedürel kod değiştirene kadar değerini tutar, dolayısıyla bir always veya initial bloğu içinde atanan her şey için onu kullanırsınız. Adına rağmen, bir reg her zaman bir donanım register'ına dönüşmez; yalnızca değerin prosedürel olarak ayarlandığı anlamına gelir.
Blocking ile non-blocking atama arasındaki fark nedir?
Blocking atama (=), normal bir programlama ifadesi gibi hemen ve sırayla çalışır, bu yüzden onu always @(*) bloklarında kombinasyonel mantık için kullanın. Non-blocking atama (<=), önce tüm sağ tarafları değerlendirir ve sonra sol tarafları birlikte günceller; bu da flip-flop'ları doğru şekilde modeller - dolayısıyla onu saatli always @(posedge clk) bloklarında kullanın. İkisini tek bir blokta karıştırmak klasik bir simülasyon hata kaynağıdır.
Verilog'u çevrimiçi olarak deneyebilir miyim?
Evet. Verilog playground'u açarak bir modül yazabilir, simüle edebilir ve çıktıyı tarayıcınızda görebilirsiniz - kurmanız gereken hiçbir şey yok. Yapı istediğinizde, Coddy'nin ücretsiz etkileşimli Verilog kursu sizi modüller ve veri tiplerinden always bloklarına ve sonlu durum makinelerine adım adım götürür.
Bu hile sayfası yeni başlayanlar için uygun mu?
Evet. Temellerden (modüller, portlar ve veri tipleri) ardışıl mantığa ve FSM desenlerine doğru düzenlenmiştir, böylece üstteki bölümlerle başlayıp zamanla gerçek devreleri tanımlamaya geçebilirsiniz.
Coddy programming languages illustration

Coddy ile Verilog öğren

BAŞLA