Diziler
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 10 / 90.
Dizi, birden fazla değeri tek bir değişkende saklamanıza olanak tanır. Dizideki her bir elemana indeksi ile erişilebilir.
Not: Dizi ayrı bir veri tipi değildir. wire, reg, integer veya real tiplerinin bir koleksiyonudur.
Dizi Bildirimi
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 parantez [ ] içindeki sayı bit genişliği değil, array size değeridir.
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 (arrays), test verilerini saklamak için testbench'lerde oldukça kullanışlıdır.
Multi-Dimensional Arrays
Çok boyutlu arrays 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ıkArray vs Vector
| Vector | Array | |
|---|---|---|
| Nedir | Multi-bit wire veya reg | Birden fazla değer 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 bits içeren tek bir değerdir.
Bir array ise multiple values'dur, each kendi bits'ine sahiptir.
Önemli Notlar
- Diziler (
array), büyük boyutlarda kullanıldığında birçok araçta sentezlenemez - Diziler çoğunlukla
testbenchyapılarında kullanılır - Donanım belleği (
memory) için özel bellek ilkel öğelerini kullanın
Görev
4 test değerini saklayan bir dizi oluşturmak için aşağıdaki kodu tamamlayın.
Yapılacaklar:
test_dataadında bir dizi bildirinregveri 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 elemana sahip olmalıdır (
[0:3])
Kendin dene
module arrays;
// test_data adında bir dizi bildirin
// 4 elemanı olmalı, her biri 8 bit genişliğinde
// reg veri tipini kullanın (çünkü bir testbench'te değerler 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ığı