Diziler
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 10 / 90.
Dizi, birden fazla değeri tek bir değişkende saklamanı sağlar. Dizideki her öğeye indeksiyle 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öz dizimi: <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 yazmaç
wire [3:0] bus [0:3]; // Her biri 4 bit genişliğinde 4 veri yolu
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ş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 test düzeneklerinde ç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 = ondalık 255
matrix[2][1] = 85; // 8'h55 = ondalık 85Dizi ve Vektör Karşılaştırması
| Vektör | Dizi | |
|---|---|---|
| Tanımı | Ç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] (3. bit) | mem[3] (3. öğe) |
Bir vektör, birden çok bite sahip tek bir değerdir.
Bir dizi, her biri kendi bitlerine sahip birden çok değerdir.
Önemli Notlar
- Bir
regdizisi sentezlenebilir: sentez araçları,reg [7:0] mem [0:255];gibi dizilerden RAM'ler ve yazmaç dosyaları gibi bellekler oluşturur. - Diziler, test verilerini depolamak için test düzeneklerinde de kullanılır.
Görev
4 test değeri saklayan bir dizi oluşturmak için aşağıdaki kodu tamamla.
Yapman gerekenler:
test_dataadlı bir dizi tanımlaregveri türünü kullan (çünkü bir testbench'te değerleri saklar)- Her eleman 8 bit genişliğinde olmalı (
[7:0]) - Dizide 4 eleman olmalı (
[0:3])
Kendin dene
module arrays;
// test_data adlı bir dizi tanımlayın
// Her biri 8 bit genişliğinde 4 elemanı olmalı
// reg veri türünü 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.
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