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: 255Diziler, 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ıkDizi (Array) vs Vektör (Vector)
| Vektör | Dizi | |
|---|---|---|
| Nedir | Çok bitli wire veya reg | Birden fazla değerin koleksiyonu |
| Sözdizimi | [MSB:LSB] | [size] |
| Örnek | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Erişim | data[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
Görev
4 test değerini saklayan bir dizi oluşturmak için aşağıdaki kodu tamamlayın.
Yapılması gerekenler:
test_dataadında bir dizi tanımlayınregveri tipini kullanın (çünkü bir testbench içinde değerleri saklar)- Her eleman 8 bit genişliğinde olmalıdır (
[7:0]) - 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
endmoduleBu 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
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı