Menu
Coddy logo textTech

Diziler

Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 10 / 90.

Bir dizi, birden fazla değeri tek bir değişkende saklamanıza olanak tanır. Dizideki her bir öğeye indeksi aracılığıyla erişilebilir.

Not: Bir dizi, ayrı bir veri tipi değildir. Bu; wire, reg, integer veya real tiplerinin bir koleksiyonudur.

Dizileri Tanımlama

Sözdizimi: <data_type> <name> [<size>];

reg [7:0] memory [0:255];   // 256 bayt bellek (her biri 8 bit)
reg data [0:7];              // 8 adet tek bitlik kaydedici
wire [3:0] bus [0:3];       // 4 veri yolu, her biri 4 bit genişliğinde
integer counters [0:9];      // 10 tam sayı

Köşeli parantez [ ] içindeki sayı bit genişliği değil, dizi boyutudur.

Dizi Elemanlarına Erişim

reg [7:0] memory [0:3];

memory[0] = 165;        // Ondalık 165
memory[1] = 90;         // Ondalık 90
memory[2] = memory[0] + memory[1];

$display("%d", memory[2]);  // Yazdırır: 255

Diziler, test verilerini depolamak için testbench'lerde çok kullanışlıdır.

Çok Boyutlu Diziler

Birden fazla boyuta sahip diziler oluşturabilirsiniz:

reg [7:0] matrix [0:3][0:3];   // 8 bitlik değerlerden oluşan 4x4 dizi

matrix[0][0] = 255;            // 8'hFF = 255 ondalık
matrix[2][1] = 85;             // 8'h55 = 85 ondalık

Dizi (Array) vs Vektör (Vector)

 VektörDizi
NedirÇok bitli wire veya regBirden fazla değerin koleksiyonu
Sözdizimi[MSB:LSB][size]
Örnekreg [7:0] data;reg [7:0] mem [0:255];
Erişimdata[3] (bit 3)mem[3] (eleman 3)

Bir vektör, birden fazla bite sahip tek bir değerdir.
Bir dizi ise, her biri kendi bitlerine sahip birden fazla değerdir.

Önemli Notlar

  • Diziler, büyük boyutlarda kullanıldığında birçok araçta sentezlenemez
  • Diziler çoğunlukla testbench'lerde kullanılır
  • Donanım belleği için özel bellek ilkel öğelerini (primitives) kullanın
challenge icon

Görev

4 test değerini saklayan bir dizi oluşturmak için aşağıdaki kodu tamamlayın.

Yapılması gerekenler: 

  1. test_data adında bir dizi tanımlayın
    1. reg veri tipini kullanın (çünkü bir testbench içinde değerleri saklar)
    2. Her eleman 8 bit genişliğinde olmalıdır ([7:0])
    3. Dizi 4 elemanlı olmalıdır ([0:3])

Kopya kağıdı

Diziler, indeks ile erişilen tek bir değişkende birden fazla değer saklar. Bir dizi; wire, reg, integer veya real türlerinin bir koleksiyonudur.

Bildirim sözdizimi: <data_type> <name> [<size>];

reg [7:0] memory [0:255];  // 256 eleman, her biri 8 bit genişliğinde
wire [3:0] bus [0:3];      // 4 eleman, her biri 4 bit genişliğinde
integer counters [0:9];    // 10 tam sayı

Elemanlara erişim:

memory[0] = 165;
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]);

Çok boyutlu diziler:

reg [7:0] matrix [0:3][0:3];  // 8 bitlik değerlerden oluşan 4x4 dizi
matrix[0][0] = 255;

Dizi (Array) ve Vektör (Vector) Karşılaştırması:

  • Vektör — birden fazla bit içeren tek bir değer: reg [7:0] data;data[3] 3. bite erişir
  • Dizi — her biri kendi bitlerine sahip birden fazla değer: reg [7:0] mem [0:255];mem[3] 3. elemana erişir

Diziler çoğunlukla testbench'lerde kullanılır; donanım belleği için özel bellek primitiflerini kullanın.

Kendin dene

module arrays;
  
  // test_data adında bir dizi tanımlayın
  // 4 elemanlı olmalı ve her biri 8 bit genişliğinde olmalı
  // reg veri tipini kullanın (çünkü bir testbench içinde değerleri saklar)

  
  integer i;
  
  initial begin
    test_data[0] = 170;   
    test_data[1] = 240;    
    test_data[2] = 204;    
    test_data[3] = 15;   
    
    for (i = 0; i < 4; i = i + 1) begin
      $display("test_data[%0d] = %b", i, test_data[i]);
    end
    $finish;
  end
  
endmodule
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler