EDA Playground'da Dene

Verilog vs SystemVerilog

Gün 1: SystemVerilog'a Giriş ve Veri Tipleri | İki dil arasındaki temel farklar ve SV'nin getirdiği yenilikler

Kaynak Kod

// =============================================================================
// GUN 1 - Konu 2: Verilog vs. SystemVerilog Farklari
// =============================================================================

module verilog_vs_sv;

  // -------------------------------------------------------------------------
  // VERILOG TARZI (Eski Yontem)
  // -------------------------------------------------------------------------
  reg  [7:0] verilog_data;      // reg ve wire ayrimi gerekli
  wire [7:0] verilog_wire;
  integer    verilog_int;       // 32-bit, her zaman signed
  reg        verilog_array [0:3]; // Kisitli dizi destegi
  
  // -------------------------------------------------------------------------
  // SYSTEMVERILOG TARZI (Modern Yontem)
  // -------------------------------------------------------------------------
  logic [7:0] sv_data;          // Tek tip: hem reg hem wire yerine
  int         sv_int;           // Kompakt 32-bit signed
  bit  [7:0]  sv_fast;          // 2-state, daha hizli simulasyon
  byte        sv_byte;          // 8-bit signed
  shortint    sv_short;         // 16-bit signed
  longint     sv_long;          // 64-bit signed

  // SystemVerilog: Gelismis donguler
  initial begin
    $display("=== Verilog vs. SystemVerilog Karsilastirmasi ===\n");

    // --- Verilog tarzi dongu ---
    $display("[Verilog] Klasik for dongusu:");
    begin : verilog_loop
      integer i;
      for (i = 0; i < 4; i = i + 1) begin
        $display("  i = %0d", i);
      end
    end

    // --- SystemVerilog tarzi dongu ---
    $display("\n[SystemVerilog] Gelismis for dongusu:");
    for (int i = 0; i < 4; i++) begin  // Dongu icinde tanimlama, ++ operatoru
      $display("  i = %0d", i);
    end

    // --- SystemVerilog: do-while ---
    $display("\n[SystemVerilog] do-while dongusu:");
    begin
      int count = 3;
      do begin
        $display("  count = %0d", count);
        count--;
      end while (count > 0);
    end

    // --- SystemVerilog: foreach ---
    $display("\n[SystemVerilog] foreach dongusu:");
    begin
      int arr [5] = '{10, 20, 30, 40, 50};
      foreach (arr[i])
        $display("  arr[%0d] = %0d", i, arr[i]);
    end

    // --- SystemVerilog: case ---
    $display("\n[SystemVerilog] case:");
    begin
      int sel = 2;
      case (sel)
        0: $display("  Secim: A");
        1: $display("  Secim: B");
        2: $display("  Secim: C");
        3: $display("  Secim: D");
      endcase
    end

    // --- SystemVerilog: Otomatik tip donusumu ---
    $display("\n[SystemVerilog] Tip donusumleri:");
    begin
      real    r = 3.14;
      int     i = int'(r);       // Casting
      bit [7:0] b = 8'(i);      // Bit genisligi casting
      $display("  real=%f -> int=%0d -> bit[7:0]=%0d", r, i, b);
    end

    $display("\n=== Karsilastirma Sonu ===");
    $finish;
  end

endmodule