Diziler
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 10 / 90.
Bir dizi, birden çok değeri tek bir değişkende depolamanızı sağlar. Dizideki her öğeye diziniyle erişilebilir.
Not: Dizi ayrı bir veri türü değildir. wire, reg, integer veya real türlerinden oluşan bir koleksiyondur.
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 tek bitlik yazmaç
wire [3:0] bus [0:3]; // 4 bus, her biri 4 bit genişliğinde
integer counters [0:9]; // 10 tamsayıKöşeli parantezlerdeki sayı [ ], bit genişliği değil, dizi boyutudur.
Dizi Öğelerine Erişme
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-bit değerlerden oluşan 4x4 dizi
matrix[0][0] = 255; // 8'hFF = 255 ondalık
matrix[2][1] = 85; // 8'h55 = 85 ondalıkDizi ve Vektör
| Vektör | Dizi | |
|---|---|---|
| Nedir | Çok bitli wire veya reg | Birden çok değerden oluşan koleksiyon |
| Sözdizimi | [MSB:LSB] | [size] |
| Örnek | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Erişim | data[3] (bit 3) | mem[3] (3. öğe) |
Bir vektör, birden çok bit içeren tek bir değerdir.
Bir dizi, her biri kendi bitlerine sahip olan birden çok değerdir.
Önemli Notlar
- Büyük boyutlarla kullanıldığında diziler birçok araçta sentezlenemez
- Diziler çoğunlukla testbench'lerde kullanılır
- Donanım belleği için özel bellek primitiflerini kullanın
Görev
Aşağıdaki kodu, 4 test değeri depolayan bir dizi oluşturacak şekilde tamamlayın.
Yapılacaklar:
test_dataadlı bir dizi bildirinregveri türünü kullanın (çünkü testbench'te değerleri depolar)- Her öğe 8 bit genişliğinde olmalıdır (
[7:0]) - Dizi 4 öğeye sahip olmalıdır (
[0:3])
Kendin dene
module arrays;
// test_data adında bir dizi bildir
// 4 elemana sahip olmalı, her biri 8 bit genişliğinde
// reg veri tipini kullan (çünkü bir testbench'te 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.
Temel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi