🏗️ Sentez (Synthesis) Nedir? #
Sentez, RTL seviyesindeki Verilog kodunun, fiziksel donanıma (FPGA veya ASIC) eşlenecek bir kapı seviyesi netliste dönüştürülmesi sürecidir.
🔧 Sentez sırasında olanlar: #
always
veassign
blokları kapılara ve flip-floplara dönüştürülür- Parametreler ve lojik ifadeler çözülür
- Alan, hız ve güç açısından optimizasyon uygulanır
⚠️ Sentezlenebilir Kodda Kaçınılması Gereken Yapılar #
Yapı | Sorun Nedir? | Yerine Ne Kullanılmalı? |
---|---|---|
initial bloğu |
Sentez desteklemez | Reset mantığı |
#delay |
Sadece simülasyon içindir | Saatle çalışan always bloğu |
$display , $monitor |
Sentezlenemez | Sadece testbench içinde kullan |
for , while (değişken sınır) |
Sonlu olmayabilir | Sabit aralıklı generate |
Dinamik bellek | Donanımda desteklenmez | Sabit boyutlu diziler kullanın |
🎨 RTL Kodlama Tarzının Senteze Etkisi #
✅ Doğru Uygulamalar: #
- Ardışıl mantık için
always @(posedge clk)
+<=
(non-blocking) kullanın - Kombinasyonel mantık için
always @(*)
+=
(blocking) kullanın - Tüm çıkışlara atama yapın — aksi takdirde latch oluşabilir
- Duyarlılık listelerini tam tutun veya
(*)
kullanın
❌ Kötü Uygulamalar: #
- Aynı blokta
=
ve<=
karıştırmak - Kısmi atamalar → latch oluşturabilir
- Simülasyon yapılarını sentez kodunda kullanmak
❗ Örnek: İstenmeyen Latch Türetimi #
always @(*) begin
if (en)
y = a; // eğer en false ise latch oluşur
end
✅ Doğru sürüm:
always @(*) begin
if (en)
y = a;
else
y = 0;
end
🔁 Özet Tablosu #
Konu | Davranışsal Sim | Kapı Seviyesi Sim | Sentez |
---|---|---|---|
Simülasyon hızı | Hızlı | Yavaş | Uygulanmaz |
RTL yapıları | Kullanılır | Yassılaştırılır | Sentezlenebilir |
Zaman modelleme | Yaklaşık | Gerçekçi | Belirlenmiş |
Kullanım amacı | İşlevsel test | Son doğrulama | Netlist üretimi |
Gecikme desteği | Var (# ) |
Var (SDF) | Yok |