Vektörler
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 9 / 90.
Bir vector, çok bitli bir wire veya reg'dir. Tek bir bit yerine, vector'ler data basları (buses) ile çalışmanıza olanak tanır. Birlikte gruplanmış bit'lerden oluşan bir koleksiyondur.
Not: Bir vector ayrı bir veri tipi değildir. Sadece wire veya reg veri tiplerinin çok bitli bir versiyonudur.
wire single; // Tek bit
wire [7:0] bus; // 8-bit vektör (bitler 7'den 0'a)Bir vector bildirmek için, MSB en önemli bit (most significant bit) ve LSB en önemsiz bit (least significant bit) olmak üzere [MSB:LSB] sözdizimini kullanırsınız.
wire [3:0] a; // 4-bit wire vektörü
reg [7:0] data; // 8-bit reg vektörü
wire [15:0] addr; // 16-bit wire vektörüBitlere Erişme
Bir vektörün münferit bitlerine veya dilimlerine eriştiğinizde, bit konumları (indeksler) için ondalık sayıları ve atamalar için ikili değerleri (0 veya 1) kullanırsınız.
Bunun nedeni, bir bit konumunun (bir adres gibi) doğal olarak ondalık bir sayı şeklinde ifade edilen bir konum olması, bu bit içinde saklanan değerin ise yalnızca 0 veya 1 olabilmesidir — binary bir seçim.
Örneğin, data[0] "sıfır numaralı bit" anlamına gelir ve = 1 "onu yüksek seviyeye ayarla" demektir. 75 gibi bir ondalık değeri tek bir bite atamak 75'i saklamaz — Verilog sessizce yalnızca en düşük bitini tutar — bu nedenle her zaman açıkça 0 veya 1 yazın.
reg [7:0] data;
data = 170;
data[0] = 1; // LSB'yi 1 yap
data[7] = 0; // MSB'yi 0 yap
data[3:1] = 3'b101; // Set bits 3,2,1 to 101 (binary remains)Bit Sırası
Bitlerin sırası önemlidir:
wire [3:0] a; // a[3] MSB'dir, a[0] LSB'dir
wire [0:3] b; // b[0] MSB'dir, b[3] LSB'dir (daha az yaygın)Çoğu tasarımcı, MSB solda olacak şekilde [MSB:LSB] formatını kullanır.
Değer Atama
reg [3:0] a;
a = 10;
a = 5;
a = 3; Vector Slices
Bir bit aralığına erişebilirsiniz:
reg [15:0] word;
word[15:8] = 255; // Üst baytı ata (8'hFF = 255)
word[7:0] = 0; // Alt baytı ata (8'h00 = 0)
word[3:1] = 3'b101; // Assign a slice Görev
Aşağıdaki modülün vektör bildirimlerine ihtiyacı var.
Ne yapılmalı:
- Her bir
inputveoutputifadesini 8-bitlikvector'ler olarak değiştirin.
Kendin dene
module vector_example(
input a, // 8-bit vektöre [7:0] değiştir
input b, // 8-bit vektöre [7:0] değiştir
output c // 8-bit vektöre [7:0] değiştir
);
assign c = a & b;
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ığı