Arrays
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 10 / 90.
Bir array, bir değişkende birden çok values saklamanı sağlar. Array içindeki her öğeye dizini aracılığıyla erişilebilir.
Not: Bir array ayrı bir data type değildir. Bu, wire, reg, integer veya real type'larının bir koleksiyonudur.
Diziler 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, array size değeridir.
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: 255Test data depolamak için arrays 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ıkArray ve Vector
| Vector | Array | |
|---|---|---|
| Nedir? | Çok bitli wire veya reg | Birden çok values 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] (elements 3) |
Bir vektör, birden çok bite sahip tek bir değerdir.
Bir array, her biri kendi bitlerine sahip birden çok değerdir.
Önemli Notlar
- array, büyük boyutlarla kullanıldığında birçok araçta sentezlenebilir değildir
- array çoğunlukla testbench içinde kullanılır
- Donanım belleği için özel bellek primitive'lerini kullan
Görev
4 test values depolayan bir array oluşturmak için aşağıdaki kodu tamamla.
Yapılacaklar:
- Declare
test_dataadlı bir arrayregdata type kullan (çünkü testbench içinde values stores)- Her element 8 bits wide olmalıdır (
[7:0]) - array 4 elements içermelidir (
[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.
Temeller bölümündeki tüm dersler
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi