Ana içeriğe geç

SystemVerilog String Veri Türü

· loading · loading · ·
Doğrulama SystemVerilog String Testbench Simülasyon Dosya I/O Sentezlenemez
Doğrulama
Axolot Logic
Yazar
Axolot Logic
Sayısal Tasarım Mühendisi
Table of Contents
SystemVerilog Tasarım Serisi - This article is part of a series.
Part 4: This Article

🧵 string Nedir?
#

SystemVerilog’daki string veri türü, değişken uzunlukta karakter dizilerini ifade eder. Yani klasik [7:0] char_array [0:N] tarzı sabit boyutlu dizilere göre çok daha esnek ve kullanışlıdır.

string message;
message = "Hello, SystemVerilog!";

🧠 Özellikler
#

ÖzellikAçıklama
Dinamik uzunlukKarakter sayısına göre bellek dinamik olarak ayarlanır
Otomatik null sonuHer string otomatik olarak \0 ile sonlandırılır
Dahili işleçler+, ==, .len(), .toupper() gibi fonksiyonlar desteklenir
Testbench odaklıÖzellikle loglama, hata mesajı ve file I/O için yaygın kullanılır

📦 Temel Kullanım
#

  string s1, s2, full;
  s1 = "Axolot";
  s2 = "Logic";
  full = {s1 , " " , s2};
  $display("✅ Full string: %s", full);  // Output: Axolot Logic

🔧 Yaygın String Fonksiyonları
#

FonksiyonAçıklamaÖrnek Kullanım
.len()Karakter uzunluğunu verirs.len() → 12
.toupper()Büyük harfe çevirirs.toupper()
.tolower()Küçük harfe çevirirs.tolower()
.compare()Karşılaştırma sonucu döners1.compare(s2)
.substr(i, n)Alt string verirs.substr(2, 4)
.getc(i)Belirli index’teki karakteri döners.getc(0)"H"
.putc(i)Belirli index’e karakter yazar"H"s.putc(0)

🧪 Testbenchlerde Kullanımı
#

Testbench yazarken string türü özellikle loglama, dosya çıktısı, isimlendirme ve hata mesajları gibi durumlarda hayat kurtarır.

string filename, test_id = "test.txt";
int file;

filename = $sformatf("results/run_%0d.log", test_id);
file = $fopen(filename, "w");
$fwrite(file, "Simulation started for ID: %0d\n", test_id);

🚫 Sentezlenebilir mi?
#

Hayır. SystemVerilog string türü yalnızca simülasyon amaçlıdır. Bu türde yazılmış kodlar sentezlenemez, yani FPGA veya ASIC üzerinde donanıma dönüşmez.

🧠 RTL’de sabit uzunluklu byte, bit [7:0] veya logic [7:0] dizileri kullanılmalıdır.

module string_demo_tb;

  // String değişkenlerini tanımla
  string s1, s2, full;
  int length;
  string upper_str, lower_str, sub_str;
  string first_char;  // `byte` yerine `string` kullanılmalı

  // Dosya işlemleri için değişkenler
  string filename;
  int file;
  int test_id = 42;

  initial begin
    // Temel atama ve birleştirme
    s1 = "Axolot";
    s2 = "Logic";
    full = {s1 , " " , s2};
    $display("✅ Tüm metin: %s", full);  // Çıktı: Axolot Logic

    // String metodları
    length     = full.len();           // Uzunluk hesapla
    upper_str  = full.toupper();       // Büyük harfe çevir
    lower_str  = full.tolower();       // Küçük harfe çevir
    sub_str    = full.substr(2, 4);    // Alt string çıkar
    first_char = full.getc(0);         // İlk karakteri al

    $display("🔍 Uzunluk        : %0d", length);
    $display("🔠 Büyük Harf     : %s", upper_str);
    $display("🔡 Küçük Harf     : %s", lower_str);
    $display("🔖 Alt Metin      : %s", sub_str);
    $display("🆎 İlk karakter   : %s", first_char);

    // String karşılaştırma
    if (s1.compare("Axolot") == 0)
      $display("✔️ Stringler aynı: %s", s1);
    else
      $display("❌ Stringler farklı!");

    // String ile dosya işlemleri
    filename = $sformatf("results/run_%0d.log", test_id);  // Dosya ismi oluştur
    file = $fopen(filename, "w");  // Yazma modunda dosya aç
    if (file) begin
      $fwrite(file, "📂 Test ID: %0d için simülasyon başladı\n", test_id);
      $fclose(file);
      $display("📁 Dosya yazıldı: %s", filename);
    end else begin
      $display("⚠️ Dosya açılamadı: %s", filename);
    end
  end

endmodule

📤 Output:
#

# ? Tüm metin: Axolot Logic
# ? Uzunluk        : 12
# ? Büyük Harf     : AXOLOT LOGIC
# ? Küçük Harf     : axolot logic
# ? Alt Metin      : olo
# ? ?lk karakter   : A
# ?? Stringler ayn?: Axolot

📌 Özet
#

  • string, testbenchlerde metinle çalışmak için idealdir.
  • Dinamik yapısı sayesinde sabit boyutlu dizilere göre çok daha esnek ve okunabilir.
  • Sentezlenemez, sadece simülasyon ve doğrulama amaçlıdır.

✨ Loglama, hata mesajı, dosya ismi oluşturma gibi işlemlerde string türü kullan — RTL tarafında değil!


🔖 Not
#

string türü, run-time bellek kullanımı ve dinamik yapı içerdiği için sadece testbench seviyesinde kullanılmalıdır. RTL tasarımlarda logic [7:0] dizileri tercih edilir.

SystemVerilog Tasarım Serisi - This article is part of a series.
Part 4: This Article

Related

SystemVerilog Enum Veri Tipi
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Enum Durum Makinesi RTL Tasarımı Testbench Hata Ayıklama
Donanım Tasarımı Doğrulama
SystemVerilog Task ve Function Yapıları
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Task Function RTL Tasarımı Testbench Yeniden Kullanılabilirlik
Donanım Tasarımı Doğrulama
SystemVerilog Veri Türleri
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Verilog RTL Tasarımı Veri Tipleri Sentezleme Simülasyon
Donanım Tasarımı Doğrulama
SystemVerilog Diziler
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Diziler Packed Dinamik Dizi Kuyruk (Queue) Testbench
Donanım Tasarımı Doğrulama
SystemVerilog Döngüler ve Kontrol Akışı – for, while, foreach, repeat, break
· loading · loading
Donanım Tasarımı Doğrulama SystemVerilog Döngüler Kontrol Akışı Testbench RTL Tasarımı Break/Continue
Donanım Tasarımı Doğrulama
SystemVerilog fork...join Yapısı – Paralel İşlem Mantığı
· loading · loading
Doğrulama SystemVerilog Fork Join Paralel İşlem Testbench Join_any Join_none
Doğrulama