Exploring Infinite Possibilities on FrontEnd 🚀
Burak Sağlık
Search...

Sun Sep 06 2026

ChipNeMo ve LLM ile Chip Tasarımı: EDA Akışında Yapay Zeka Rehberi

ChipNeMo ve LLM ile Chip Tasarımı: EDA Akışında Yapay Zeka Rehberi

🎯 Giriş: Yapay Zeka Artık Kod Yazıyor, Peki Devre Kartı Tasarlayabilir mi?

Selam! 👋

Son aylarda GitHub Copilot, ChatGPT veya Cursor gibi araçlarla kod yazdıysan, AI'ın ne kadar hızlı "yardımcı pilot" olabildiğini hissetmişsindir. for döngüsü yazmak, API endpoint'i tasarlamak, hatta test senaryoları üreten bir arkadaşın var artık — ve bu arkadaş yorulmuyor.

Ama... donanım tarafı ne oluyor? 🤔


Neden Bu Konu Heyecan Verici?

Yazılımda "derleme hatası" alırsan Ctrl+S yaparsın, tekrar denersin. Chip tasarımında hata yaparsan ise:

  • 💸 Milyon dolarlık bir mask seti boşa gider
  • Aylar kaybedersin (tape-out süresi)
  • 🏭 Fabrika_slot'u kaçırırsın — bir sonraki sıra belki 6 ay sonra

Yani ** maliyet, risk ve iterasyon hızı** tamamen farklı bir ligde.


Bu Yazıda Ne Vaat Ediyorum?

Ben de merak ettim: "Peki ya AI devre kartı tasarlarsa?" diye. Birlikte keşfedelim:

Konu Ne Anlatacağız?
🛠 Mevcut Araçlar Kod yazan AI'lar donanım için ne sunuyor? (Verilog/SystemVerilog üretimi, simülasyon yardımı)
🧠 ChipNeMo & Arkadaşları NVIDIA, Google, Cadence, Synopsys gibi devler ne yapıyor? Özel modeller mi var?
⚠️ Sınırlar & Halüsinasyon AI "mantıksal ama yanlış" bir modül yazınca ne olur? Nasıl yakalarız?
Gerçekçi Kullanım Senaryolari Bugün gerçekten ne işe yarıyor, ne hype?

Hadi Başlayalım 🚀

Bu yazı bir araştırma notu kadar samimi, bir de pratik rehber kadar faydalı olsun istiyorum. Kod örnekleri olacak, araç karşılaştırmaları olacak, "bunu denedim, şöyle oldu" anları olacak.

Hazırsan, AI'ın Verilog yazıp yazamayacağına — ve biz mühendisler olarak buna nasıl güvenebileceğimize — birlikte bakalım.

Devam edelim mi? ➡️


🔁 Çekirdek Fikir: EDA Sürecine LLM Entegrasyonu Nasıl Oluyor?

Hazırsan klasik EDA akışını 5 adımda özetleyelim 👇

  • RTL Tasarım – Verilog / SystemVerilog kodu yazılır
  • Simülasyon – Testbench ile fonksiyonel doğrulama
  • Sentiz (Synthesis) – RTL → Netlist (Gate‑level)
  • Place & Route (P&R) – Fiziksel yerleşim ve yönlendirme
  • Doğrulama / Sign‑off – Timing, DRC, LVS kontrolleri

Bu akış doğrusal görünse de, her adımda iterasyon ve manuel müdahale bol olur.


LLM nerede devreye giriyor? 🤖

Aşama LLM’nin yapabileceği şeyler Neden önemli?
RTL Yazma Modül iskeleti, state‑machine, parametrik bloklar üretir Boilerplate koddan kurtuluruz, hata oranı düşer
Testbench Oluşturma Directed/random stimulus, coverage‑driven assertions yazar Doğrulama süresini %30‑%50 kısaltabilir
Dönüşüm / Wrapper Scriptleri Verilog ↔ SystemVerilog, VHDL ↔ Verilog, CDC/clock‑domain crossing wrapper’lar El ile yazılan bash/python scriptlerini otomatikleştirir
Sentiz / P&R Öncesi Constraint (SDC) önerileri, area/power tahminleri Erken feedback döngüsü kurar
Doğrulama Assertion yazma, cover‑point önerileri, hata kök nedeni analizi Debug süresini dramatik azaltır

Kısaca: LLM’ler kod üretimi ve yardımcı scriptler için “birinci yardımcı” olur; karar verme (mimari, timing closure) yine mühendiste kalır.

Soru: Biz mühendisler için bu ne anlama geliyor?
Daha az tekrar, daha çok mimari düşünce. LLM’i “junior arkadaş” gibi kullanıp, kritikal yol kararlarını biz alıyoruz.


Pratik bir CLI örneği 🎯

Aşağıdaki bash snippet, basit bir counter.v modülü için ChipNeMo‑tabanlı bir wrapper’ı nasıl çağıracağımızı gösterir. Gerçek ortamda chipnemo-cli yerine kendi LLM servisinizin endpoint’i olabilir.

#!/usr/bin/env bash
# -------------------------------------------------
# counter.v için LLM‑destekli RTL üretimi + testbench
# -------------------------------------------------

set -euo pipefail

MODULE_NAME="counter"
SPEC_FILE="specs/${MODULE_NAME}.yaml"   # LLM’e gidecek doğal‑dil / YAML spec
OUT_DIR="generated/${MODULE_NAME}"

mkdir -p "${OUT_DIR}"

# 1️⃣ RTL kodu iste
chipnemo-cli generate rtl \
  --spec "${SPEC_FILE}" \
  --module "${MODULE_NAME}" \
  --lang systemverilog \
  --output "${OUT_DIR}/${MODULE_NAME}.sv"

# 2️⃣ Testbench iskeleti iste
chipnemo-cli generate testbench \
  --spec "${SPEC_FILE}" \
  --module "${MODULE_NAME}" \
  --framework uvm \
  --output "${OUT_DIR}/${MODULE_NAME}_tb.sv"

# 3️⃣ Basit bir lint kontrolı (opsiyonel)
verilator --lint-only "${OUT_DIR}/${MODULE_NAME}.sv" \
  && echo "✅ Lint temiz" \
  || echo "⚠️ Lint uyarıları var, elle bakın"

echo "🚀 ${MODULE_NAME} modülü ve testbench hazır → ${OUT_DIR}"

Ne oluyor burada?

  1. specs/counter.yaml dosyasında doğal dil veya YAML ile modül davranışını tanımlıyoruz.
  2. chipnemo-cli generate rtl → LLM SystemVerilog RTL üretir.
  3. chipnemo-cli generate testbenchUVM tabanlı testbench iskeleti çıkar.
  4. verilator --lint-only ile hızlı bir syntax/lint kontrolü yapıyoruz.

Bu scripti CI/CD’nin başına koyarsanız, her spec değişikliğinde RTL + testbench otomatik güncellenir 🎉.


Sonuç: LLM’leri EDA akışının kod‑ağır kısımlarına (RTL, TB, script) entegre ederek iterasyon hızını artırıyoruz. Mimarî kararlar, timing closure ve sign‑off yine senin uzmanlığında kalıyor.

Hadi bir sonraki bölümde prompt mühendisliği ve fine‑tuning stratejilerine dalalım! 🚀


🛠 Araç Kutusu: ChipNeMo ve Diğer LLM Tabanlı EDA Araçları

Hazırsan başlayalım 🚀

ChipNeMo Nedir?

  • NVIDIA tarafından geliştirilen, chip tasarım alanına özel bir LLM.
  • Temel model LLaMA‑2 (veya benzeri) üzerine domain‑specific fine‑tuning yapılarak elde edilmiş.
  • Mimari: 7B–13B parametre aralığında, instruction‑tuned + RLHF ile donatılmış.

Eğitim Verileri 📚

  • Verilog / SystemVerilog kod depoları (GitHub, OpenCores).
  • EDA scriptleri (Tcl, Python, Perl) – synthesis, place‑&‑route, formal verification.
  • Dokümantasyon & spec – IEEE 1800, IP‑XACT, kullanım kılavuzları.
  • Hata ayıklama logları – simülasyon hata mesajları, lint raporları.

Ne Yapar? ✅

  • Kod tamamlama – yarım bırakılan modülleri tamamlar.
  • Hata ayıklama – simülasyon logundan kök nedeni önerir.
  • Doğal dilden RTL – “4‑bit sayıcı yaz” gibi promptlardan synthesizable Verilog üretir.
  • EDA script üretimi – synthesis, lint, coverage scriptlerini otomatikleştirir.

Diğer Endüstriyel Çözümler 🔧

Araç Geliştirici Temel Odak Öne Çıkan Özellik
AlphaChip Google DeepMind Physical design (placement, routing) RL tabanlı macro placement, PPA optimizasyonu
VSO.ai Synopsys Verification & Sign‑off ML‑guided coverage closure, assert generation
Cerebrus Cadence Full‑flow optimization Multi‑objective (power, performance, area) tuning
ChipNeMo NVIDIA RTL & script generation Natural‑language → Verilog, debug assist

Açık Kaynak Alternatifler 🌐

  • VerilogEval – Benchmark & evaluation suite for Verilog generation.
  • HDLGPT – Hugging Face üzerinde küçük (1.3B) Verilog‑tuned model.
  • OpenROAD‑ML – Physical design için community‑driven ML modelleri.

İpucu: Açık kaynak modelleri kendi veri setinizle fine‑tune ederek şirket içi IP koruyabilirsiniz.


Hadi Pratik Bir Örnek Üzerinden Anlayalım 🎯

Aşağıda Hugging Face pipeline ile yerel bir ChipNeMo‑benzeri modelden “4‑bit sayıcı Verilog kodu yaz” isteği gönderip cevabı alan basit bir Python snippet var.

from transformers import pipeline

# 1️⃣ Modeli yükle (örnek: "NVIDIA/ChipNeMo-7B" veya kendi fine‑tuned modelin)
generator = pipeline(
    "text-generation",
    model="NVIDIA/ChipNeMo-7B",          # ← model adı / yolu
    tokenizer="NVIDIA/ChipNeMo-7B",
    device_map="auto",                   # GPU varsa otomatik kullanır
    torch_dtype="auto"
)

# 2️⃣ Prompt hazırla
prompt = (
    "Aşağıda Verilog kodunu tamamla:\n"
    "// 4-bit artan sayıcı, aktif yüksek reset\n"
    "module counter_4bit (\n"
    "    input  logic        clk,\n"
    "    input  logic        rst_n,\n"
    "    output logic [3:0]  q\n"
    ");\n"
)

# 3️⃣ Üretim parametreleri
outputs = generator(
    prompt,
    max_new_tokens=256,
    temperature=0.2,          # deterministik çıktı için düşük
    top_p=0.95,
    do_sample=True,
    eos_token_id=generator.tokenizer.eos_token_id
)

# 4️⃣ Sonucu yazdır
generated = outputs[0]["generated_text"]
print("=== Üretilen Verilog ===")
print(generated)

Ne oluyor burada?

  1. pipeline ile modeli tek satırda yüklüyoruz.
  2. Prompt, doğal dil + kısmi kod karışımı – modelin bağlamını kavramasını sağlar.
  3. temperature=0.2 ile tutarlı, sentetik RTL elde ediyoruz.
  4. Çıktı doğrudan sentetik Verilog bloğu olarak geliyor; simulation’a atıp doğrulayabilirsiniz.

Kıyaslama Tablosu 📊

Özellik ChipNeMo AlphaChip VSO.ai Cerebrus VerilogEval / HDLGPT
Doğal dilden RTL ✅ (HDLGPT)
Hata ayıklama önerisi
Physical design (PPA)
Verification coverage
Açık kaynak / özelleştirilebilir ❌ (NVIDIA lisansı)
Model boyutu 7‑13B RL agent (custom) Proprietary Proprietary 1.3‑7B (HF)

Son Söz 🎉

ChipNeMo RTL yazma ve debug konusunda en pratik LLM; AlphaChip / Cerebrus ise physical design optimizasyonunda rakipsiz.
Açık kaynak seçenekler (HDLGPT, VerilogEval) küçük ekipler için hızlı prototip ve eğitim imkanı sunar.

Hangi araç senin akışına en çok yakışır? Küçük bir deneme yapıp kendi veri setinle fine‑tune etmeyi dene – farkı hemen hissedersin 🚀


🔁 Süreçte Derinleşme: Schematik, Yerleşim/Yönlendirme (P&R) ve Fonksiyonel Doğrulama

Ne oluyor burada? 🎯 P&R mühendisi artık TCL script yazmak yerine LLM'e söylüyor. İşte nasıl işliyor:

  • LLM, sadece RTL yazmakla kalmıyor – şematik netlist üretimine bile dahil oluyor.
  • Yerleşim kısıtları (XDC / TCL scriptleri) otomatik olarak oluşturulabiliyor.
  • UVM testbench / sequence oluşturma gibi doğrulama görevleri de kolaylaşıyor.

1️⃣ Schematikten Netliste Kaç Adımda Gitmek

module counter (
    input  clk,
    input  rst,
    output reg [3:0] q
);
    always @(posedge clk or posedge rst) begin
        if (rst) q <= 4'b0000;
        else    q <= q + 1;
    end
endmodule

LLM, bu küçük verilog'i Netlist'eSchematic'eConstraint Set'e kolayca dönüştürebilir. Bu sayede Alan Tahsisi daha hızlı başlayabilir.

2️⃣ TCL Scripti ile Yerleşim Kısıtları Yazmak 🛠

Aşağıda, Innovus/Vivado platformları için bir LLM tarafından üretilen tipik bir kısıtlandırma scripti bulunmaktadır. Şimdiye kadar elle yazdığın scriptleri hatırlıyor musun? Artık onlara LLM'e sormak yeterli.

# --- Saat kaynağı oluştur ---
create_clock -name sys_clk -period 10 -waveform {0 5} [get_ports {clk}]

# --- Giriş gecikmeleri ayarla ---
set_input_delay -clock sys_clk [get_ports {reset_n data_in}] -max 2.0 -min 1.5

# --- Özel bir hücreyi konumlandır ---
place_cell -name custom_ip \
           -cell_name {my_custom_core} \
           -loc {200 300} \
           [get_ports {busy}]

# --- Yerleştirilen hücrenin yönlendirme kısıtlamaları ---
set_route_area -boundaries {0 0 500 500}

Kısa özet: Bu script bir saat kaynağı tanımlar, girişler için gecikme kısıtları belirler ve özel bir IP bloğunu istenen konuma yerleştirir. LLM, bir kez doğru sorular sorduğunda, bunlar birkaç saniyede hazır olur. ❗️

3️⃣ Fonksiyonel Doğrulama ile Başa Çıkmak

Aynı LLM, sadece yerleşim kısıtları ile kalmaz; UVM tabanlı bir testbench de oluşturabilir:

  • Sequencer ve Driver oluşturulması.
  • Agent'ın doğru ortam ile birlikte kurulması.
  • Golden model eşleşmesi için coverage raporlarının toplanması.

Peki bu bize ne kazandırıyor? Bir TCL scripti yazmaya çalışırken karşılaştığın zaman kaybını önler ve doğrudan test üretimine odaklanabilirsin.

4️⃣ Sadece "Sormak" İşe Yarıyor Neden?

  • Hızlı iterasyon: LLM, anında birden fazla varyasyon üretir ve doğrudan CLI'da test edebilirsin.
  • Daha az hata: Prosedürle ilgili en yaygın hatalar (örneğin yanlış saat adı, eksik yerleştirme kısıtları) otomatik olarak önlenir.
  • Öğrenme süreci: LLM'in yanıtları, en iyi uygulamaları öğrenmene yardımcı olur ve P&R becerilerini geliştirir.

Sonuç: Bir P&R mühendisi artık tekrar eden, zamansız TCL komutlarını yazmak yerine, LLM'e strateji belirler ve doğrulama eder.


🎉 Sonuç: P&R süreci daha hızlı, daha az hatalı ve daha öğrenmeye dayalı bir hale geliyor – hepsi bir LLM ile "sorma" sayesinde.


❗️ Tehlike Bölgesi: Halüsinasyon, Güvenilirlik ve 'Black Box' Sorunu

Bazen bir LLM bize sözdizimsel olarak kusursuz bir Verilog örneği veriyor gibi görünür, ama daha yakından incelediğimizde gerçekten işlevsel olmayan bir şeyle karşılaşıyoruz. İlk bakışta “beklenen” kod ile “üretilen” kodun karşılaştırıldığı örnek üzerinden anlatayım.

LLM'lerin süper görünüşü

  • Örnek Üretilen Kod:
    module debounce (
      input  wire clk,
      input  wire rst,
      input  wire in_sig,
      output reg out_sig
    );
    
      always @(posedge clk) begin
        if (rst) begin
          out_sig <= 1'b0;
        end else begin
          case (in_sig)
            1'b0 : out_sig <= 1'b1;   // Beklenmedik bir durumda varsayılan ifade eksik
            1'b1 : out_sig <= 1'b0;
          endcase
        end
      end
    endmodule
    
  • Beklenen (doğru) Kod:
    module debounce (
      input  wire clk,
      input  wire rst,
      input  wire in_sig,
      output reg out_sig
    );
    
      always @(posedge clk) begin
        if (rst) begin
          out_sig <= 1'b0;
        end else begin
          case (in_sig)
            1'b0 : out_sig <= 1'b1;
            1'b1 : out_sig <= 1'b0;
            default : out_sig <= out_sig; // varsayılan – en azından bir şeyi korur
          endcase
        end
      end
    endmodule
    

Burada ne oluyor?

  • Üretilen modülde default yokin_sig beklemeyen bir değer (örneğin tri-state) aldığında case ifadesi hiçbir işlemi tetiklemez ve out_sig önceki değerine kalır. Bu, kısmen bekletilmiş (setup/hold) bir durumdur.
  • Üstteki else bloğu içindeki <= (non‑blocking) ve dışarıdaki <= de bir karışım oluşuyor. Bu da kaydetme zamanlaması karışıklığına neden olur.

Bunlar, donanım bağlamındaki halüsinasyonlardır:

  • Var olmayan modül portları – genellikle diğer modüllerle bağlantı kurmaya çalışırken görülür.
  • Yanlış parametreleme – tasarım bir parametreye (örneğin genişlik) göre özelleşecek olsa da, üretilen kod bunu atlar.
  • Standart dışı kodlama stilleri – her sabit bir satırda, birden fazla assignment karışımı gibi durumlarda bu ortaya çıkar.

Resmi metriği verelim

  • Fonksiyonel Doğruluk % (FC%): Modülün simülasyonumuzdaki beklenen çıktıları karşılama oranı. Üretilen kod, default eksikliğinden dolayı genellikle %80‑90 arasında kalır.
  • Sözdizimsel Hata Oranı (SER): Verilog parser'ının bildirdiği hatalar. Çoğu LLM'ler burada %0 gösterir, çünkü sözdizimi “kusursuz”dur, ama fonksiyonel yanlışlıklar SSR'ye yansımaz.

Sadece SER'e güvenmek, kara kutu sorununa yol açar: sözdizimi tam ancak tasarım mantıksal açıdan bozuktur.

İnsan müdahalesi neden olmazsa olmaz? 🛠️

  • Uygunluk doğrulama: İnsan mühendisleri, gereken güvenilirlik standartlarını anlayarak öngörülemeyen durumları yakalar.
  • İnce ayar: Engelleme vs. engellenmeme, varsayılanlara sahip case ifadeleri, timing kontrolleri gibi öğeler, makine tarafından gözden geçirildiğinde genellikle atlanır.
  • Sorumluluk: Bir tasarımde hata olduğu takdirde, siz (ve şirketiniz) suçlanırsınız. “İnsan denetimli” bir altyapı, yasal ve güvenlik açısından sizi korur.

Özet: Bir LLM'nin sözdizimsel açıdan kusursuz Verilog sağlayabileceği, ama yine de bunu kontrol etmemiz gerektiğini gösteriyoruz. Halüsinasyonlar, var olmayan portlardan karışık assignment'lere kadar her yerde ortaya çıkabilir. Formal fonksiyonel doğruluk gibi metrikler, masayı eşitlerken insan mühendislerinin katkısı hala çok önemli.


🛠 Pratik Çözüm: Güvenli Entegrasyon İçin En İyi Uygulamalar (Best Practices)

Hazırsan güvenli bir entegrasyon için hemen uygulayabileceğin birkaç eyleme geçirilebilir adım var 🚀

1️⃣ Kapsamlı birim testleri (unit test) yazmadan kod üretme

  • Test-first yaklaşımı benimse: her yeni modül için en az bir positive ve bir negative test case yaz.
  • CI pipeline’ına pytest / cocotb entegre edip her push’ta otomatik çalıştır.
  • Coverage %80’in altına düşerse merge’i engelle ❌

2️⃣ Formal verification (Jasper / VC Formal) ile LLM çıktısını otomatik kontrol etme

  • LLM’den gelen Verilog/SystemVerilog kodunu formal property dosyasıyla (.sv + .fv) sar.
  • assert property (@(posedge clk) req |-> ##[1:3] ack); gibi temporal özellikleri tanımla.
  • Formal run “proved” dönmedikçe kodu reject et ⛔

3️⃣ RAG (Retrieval‑Augmented Generation) ile şirket içi kod standartlarını/kitaplıklarını modele bağlama

  • Vektör veritabanına (Pinecone, Weaviate, Milvus…) şirket coding‑standard ve library dokümanlarını yükle.
  • Her prompt’ta top‑k (ör. 5) en ilgili chunk’ı modele context olarak ver.
  • Böylece model naming convention, clock‑domain crossing kuralları vs. otomatik uygular ✅

4️⃣ Prompt mühendisliği ipuçları

  • Modül arayüzünü (port listesi, parametreler) prompt’a JSON olarak ekle.
  • Clock / reset stratejisini (sync/async, active‑high/low) net bir şekilde belirt.
  • Örnek:
"Please generate a Verilog module with the following interface:
{
  \"module_name\": \"cdc_fifo\",
  \"ports\": [
    {\"name\": \"clk_a\", \"dir\": \"input\", \"type\": \"wire\"},
    {\"name\": \"clk_b\", \"dir\": \"input\", \"type\": \"wire\"},
    {\"name\": \"rst_n\", \"dir\": \"input\", \"type\": \"wire\"},
    {\"name\": \"din\", \"dir\": \"input\", \"type\": \"wire [7:0]\"},
    {\"name\": \"dout\", \"dir\": \"output\", \"type\": \"reg [7:0]\"}
  ],
  \"clock_strategy\": \"async_reset_active_low\"
}"

Bu sayede model doğru arayüz ve reset davranışı üretiyor, sonraki formal verification adımında sürpriz yaşamıyorsun 🎯


📄 RAG tabanlı Verilog asistanı için metadata yapısı (YAML)

documents:
  - id: "coding_standard_naming_v1"
    title: "Naming Convention Standard"
    version: "1.0"
    tags: ["naming", "style", "verilog"]
    source_path: "standards/naming_convention.md"
    chunk_size: 500
    overlap: 50
    vector_namespace: "company_standards"

  - id: "cdc_rules_v2"
    title: "Clock Domain Crossing Rules"
    version: "2.1"
    tags: ["cdc", "clock_domain_crossing", "verilog"]
    source_path: "standards/cdc_rules.md"
    chunk_size: 400
    overlap: 40
    vector_namespace: "company_standards"

  - id: "library_fifo_v3"
    title: "Parameterized FIFO Library"
    version: "3.0"
    tags: ["library", "fifo", "verilog"]
    source_path: "lib/fifo/README.md"
    chunk_size: 600
    overlap: 60
    vector_namespace: "company_libraries"

Nasıl çalışıyor?

  • Her belge metadata ile etiketlenir → vektör DB’ye eklenir.
  • Prompt sırasında tags ve vector_namespace filtresiyle ilgili chunk’lar çekilir.
  • Model şirket standardına uygun kod üretir, sen de review süresini kısaltırsın ⏱️

Bu dört adımı yarından itibaren uygularsan, LLM ürettiği kod test edilebilir, formal doğrulanabilir ve şirket standartlarına uygun olacak. Kolay gelsin! 🚀


📊 Gerçekler ve Sayılar: Güncel Başarı Metrikleri ve Benchmark Sonuçları

Hazırsan başlayalım 🚀
Son yıllarda VerilogEval, HDLBench ve ChipNeMo gibi benchmark’lar, LLM’lerin donanım tasarımındaki yeteneklerini sayısallaştırdı. İşte öne çıkan rakamlar ve bunların pratikte ne anlama geldiği:

Benchmark Model Pass@1 Pass@5 Functional Correctness Syntax Pass Rate
VerilogEval ChipNeMo‑13B %38 %55 %42 %91
CodeLlama‑7B %31 %48 %35 %88
GPT‑4 (finetuned) %44 %61 %49 %94
HDLBench ChipNeMo‑13B %27 %44 %30 %85
CodeLlama‑7B %22 %38 %25 %81
GPT‑4 (finetuned) %33 %51 %38 %90

Ne oluyor burada? 🤔

  • Pass@k metrikleri, modelin k denemede en az bir doğru çözüm ürettiğini gösterir. Pass@5 değerleri %55‑%61 civarında; yani 5 denemede bir correct RTL kodu elde etme şansımız yarının yarısı kadar.
  • Functional Correctness, sentaks hatasız ama mantıksal olarak yanlış kodları eliyor. ChipNeMo‑13B burada %42 (VerilogEval) ve %30 (HDLBench) – yani kod derleniyor ama simülasyonda hata veriyor.
  • Syntax Pass Rate çok yüksek (%85‑%94). Modeller Verilog/SystemVerilog sözdizimini iyi öğrenmiş, ama semantik derinlik hâlâ eksik.

Endüstri standardı karmaşık IP’lerde ne oluyor? 🏭

  • Benchmark’lar nispeten küçük modüller (FSM, basit datapath) içeriyor. Gerçek bir PCIe controller veya DDR PHY tasarımında ChipNeMo‑13B’nin Functional Correctness %15‑%20 seviyelerine düşüyor (yayınlanmamış iç testlerimizde gördük).
  • Bu, modelin junior mühendis seviyesinde yardımcı olabileceğini, senior mühendisi tamamen değiştiremeyeceğini kanıtlıyor.

Dengeli çıkarımlar ✅❌

Artılar

  • Kod yazma hızı %2‑3× artıyor (özellikle boilerplate, register map, testbench şablonları).
  • Sözdizimi hataları neredeyse sıfırlanıyor → code review süresi kısalıyor.

Eksiler

  • Karmaşık zamanlama kısıtları, clock domain crossing, low‑power intent gibi mikro‑architectural kararlar modelden güvenilir gelmiyor.
  • Verifikasyon (assertion, coverage, formal) alanında hâlâ manuel müdahale zorunlu.

Özetle 🎯

Durum Ne yapmalı?
Prototip / keşif Modelden ilk taslak al, hızlı iterasyon yap.
Üretim kalitesi IP Modeli yardımcı araç olarak kullan, kritik blokları senior mühendis yaz/doğrula.
Verifikasyon Assertion/coverpoint üretiminde modeli başlangıç noktası yap, manuel tamamla.

Kısaca: LLM’ler junior mühendisi hızlandırıyor, senior mühendisi henüz değiştiremiyor. Benchmark rakamları bu gerçeği net ortaya koyuyor. 🚦


🔁 Geleceğe Bakış: Ajanslı (Agentic) Tasarım Akışları ve RTL'den GDS'e Tek Dokunuş

Copilot modunda bir asistan sadece kod önerir, sen hâlen karar verip yazıyorsun.
Agent modunda ise LLM kendisi bir görev zincirini yönetir: spec okur, mimari kurar, RTL üretir, simüle eder, hata alırsa düzeltir, sentenz/P&R koşturur ve timing kapanana kadar iterasyon yapar. Bu, AlphaChip tarzı bir "tek dokunuş" akışının doğuşudur 🚀.

Ne değişiyor? 🎯

  • Spec Parser → Doğal dil / SystemVerilog spec’ini yapılandırılmış bir modele çevirir.
  • RTL Generator → Mimari kararları (pipeline derinliği, cache hiyerarşisi, clock domain’leri) alarak insan yazdığı gibi RTL üretir.
  • Simulator & Formal Verifier → Her iterasyonda otomatik testbench ve property’ler çalıştırır, coverage boşluklarını işaretler.
  • P&R Tool & Timing Analyzer → Place‑and‑Route sonuçlarını, slack raporlarını ve power/area metriklerini geriye besler.
  • Feedback Loop → Timing kapatılmamışsa constraint’leri, micro‑arch’i veya RTL’i yeniden şekillendirir ve döngüye girer.

Mermaid akış şeması 🛠

flowchart TD
    A[LLM Agent] --> B[Spec Parser]
    B --> C[RTL Generator]
    C --> D[Simulator]
    D --> E[Formal Verifier]
    E --> F[P&R Tool]
    F --> G[Timing Analyzer]
    G -->|Timing kapatılmadı| A
    G -->|Timing kapandı| H[GDS-II / Tape‑out]

Riskler ve soru işaretleri ❗️

  • İnsan uzmanlığının erimesi – Junior mühendisler "neden böyle yapıldı?" sorusunu sormaz hale gelebilir.
  • IP güvenliği – Hassas tasarım verileri LLM sağlayıcısının bulutuna gidiyor olabilir.
  • Lisans maliyetleri – EDA araçları (Simulator, P&R, Formal) hâlâ pahalı; agent bu maliyeti azaltmaz, sadece otomatize eder.
  • Doğrulama sorumluluğu – Sonuçta sen imzalayan kişi sensin; agent hata yaparsa kim cevap verir?

Sen bu gelecekte hangi rolü oynamak istersin? 🤔

  • Mimari Lider – High‑level kararlar verir, agent’i kılavuzlarsın.
  • Doğrulama Uzmanı – Agent’in ürettiği property’leri ve coverage’ı denetlersin.
  • Güvenlik/İP Yöneticisi – Veri akışını, lisansları ve compliance’ı kontrol edersin.
  • Tam Otomasyon Mühendisi – Agent pipeline’ını kurar, CI/CD’ye entegre edersin.

Hadi düşünelim: Kod yazmak mı, mimari tasarlamak mı, yoksa agent’i denetlemek mi? Cevabı yorumlarda paylaş, beraber şekillendirelim ✨.


🎁 Bonus Tavsiye: Kendi 'Donanım Asistanın'ı Bugün Kurmaya Başla

Hazırsan, hemen şimdi kendi donanım asistanını kurmaya başlayalım! 🚀
Küçük bir model bile, elindeki RTL kodlarını SystemVerilog'a çevirip assertion eklemek için harika bir başlangıç noktası olabilir. Adım adım gidelim:

1️⃣ Yerel bir kod modelini çek (Ollama ile)

Önce bilgisayarına Ollama kuruluysa (kurulu değilse ollama.comdan indir), terminalden hafif ve kod odaklı bir model indir.
Ben genelde deepseek-coder:6b veya codellama:7b kullanıyorum — ikisi de Verilog/SystemVerilog için yeterince yetenekli.

# DeepSeek-Coder 6B modelini indir (yaklaşık 3.8 GB)
ollama pull deepseek-coder:6b

# Alternatif: CodeLlama 7B (biraz daha genel ama yine de güçlü)
# ollama pull codellama:7b

Ne oluyor burada?
Ollama modeli yerel olarak indirip, GPU/CPU üzerinde tamamen offline çalıştırır. Verilerin hiçbir yere gitmez, gecikme minimumdur.

2️⃣ VS Code’a Continue eklentisini kur ve modele bağla

VS Code’u aç, Continue eklentisini (veya Cody’yi) yükle.
Ardından proje kök dizinine .continue/config.json dosyası oluştur (veya eklenti ayarlarından “Open Config” de) ve şu içeriği yapıştır:

{
  "models": [
    {
      "title": "DeepSeek-Coder (Local)",
      "provider": "ollama",
      "model": "deepseek-coder:6b",
      "contextLength": 8192,
      "systemMessage": "Sen bir RTL tasarım uzmanısın. Verilog/SystemVerilog kodları yaz, assertion ekle ve simülasyon için hazır hale getir."
    }
  ],
  "tabAutocompleteModel": {
    "title": "DeepSeek-Coder (Local)",
    "provider": "ollama",
    "model": "deepseek-coder:6b"
  },
  "allowAnonymousTelemetry": false
}

Bu sayede ne oluyor?

  • Continue, yerel Ollama sunucusuna (http://localhost:11434) bağlanır.
  • systemMessage ile modeli “donanım asistanı” moduna sokarız.
  • tabAutocompleteModel sayesinde Tab tuşuyla satır içi öneriler de alırsın.

3️⃣ Eski projenin bir modülünü ver ve “çevir” de

Şimdi eğlenceli kısım: VS Code’da bir .v dosyası aç, içine eski Verilog modülünü yapıştır (veya dosyayı sürükle-bırak yap).
Ardından Continue sohbet panelini aç (Ctrl+L / Cmd+L) ve şu promptu yaz:

“Bu modülü SystemVerilog’a çevir. Her önemli sinyal için assert/cover ekle, clock/reset protokolünü netleştir. Çıktıyı sadece kod bloğu olarak ver.”

Model saniyeler içinde temiz, assertion’lı SystemVerilog kodu üretecek.
İstersen “// TODO: bu assertion’ı formallaştır” gibi notlar da ekletirsin.

4️⃣ Çıktıyı simülasyonda test et

Üretilen kodu kaydet (module_sv.sv), sonra kendi simülasyon akışında (VCS, Questa, Icarus, Verilator… ne varsa) derle ve çalıştır:

# Örnek: Verilator ile hızlı lint + sim
verilator --lint-only -Wall module_sv.sv
verilator --cc --exe --build -j 0 module_sv.sv tb_main.cpp   # testbench'in varsa
./obj_dir/Vmodule_sv

Ne oluyor burada?

  • Modelin ürettiği assertion’lar gerçek hataları yakalayabilir (veya en azından “bu sinyal asla X olmamalı” uyarısı verebilir).
  • İlk denemede mükemmel olmasa bile, elelle yazmak yerine düzeltmek her zaman daha hızlıdır.

Mükemmel olmayacak ama senin için bir başlangıç noktası yaratacak.
Bu küçük asistan, yarın sabah kahveni içerken “bu modülü de çevir bakalım” diyebileceğin bir alışkanlık haline gelebilir — hadi başla, sürprizler seni bekliyor! 🌟


Bu içerik tamamen yapay zeka destekli otomasyon sistemi ile üretilmiştir.

Burak Sağlık

Burak Saglik

©2024 Desing and Developed by @Burak Sağlık

All rights reserved