Arrays
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 10/90。
配列を使うと、1つの変数に複数の値を格納できます。配列内の各要素には、そのインデックスでアクセスできます。
注: 配列は独立したデータ型ではありません。wire、reg、integer、またはreal型の集合です。
arrays の宣言
構文: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256バイトのメモリ(各8ビット)
reg data [0:7]; // 8個の1ビットレジスタ
wire [3:0] bus [0:3]; // 4本のバス、各4ビット幅
integer counters [0:9]; // 10個の整数角括弧 [ ] 内の数値はarray のサイズであり、ビット幅ではありません。
array の要素へのアクセス
reg [7:0] memory [0:3];
memory[0] = 165; // 10進数 165
memory[1] = 90; // 10進数 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // 表示: 255Arrays は、testbench でテストデータを格納するのに非常に便利です。
多次元配列
複数の次元を持つ配列を作成できます:
reg [7:0] matrix [0:3][0:3]; // 8ビット値の4x4配列
matrix[0][0] = 255; // 8'hFF = 255 10進数
matrix[2][1] = 85; // 8'h55 = 85 10進数Array とベクター
| Vector | Array | |
|---|---|---|
| 概要 | マルチビットの wire または reg | 複数の values の集合 |
| 構文 | [MSB:LSB] | [size] |
| 例 | reg [7:0] data; | reg [7:0] mem [0:255]; |
| アクセス | data[3] (bit 3) | mem[3] (element 3) |
ベクトルは複数のビットを持つ1つの値です。
配列は複数の値で、それぞれが独自のビットを持ちます。
重要な注意事項
- Arrays は、大きなサイズで使用すると、多くのツールで合成できません
- Arrays は主にtestbenchesで使用されます
- ハードウェアのmemoryには、専用のmemoryプリミティブを使用してください
チャレンジ
4つのテスト値を格納する配列を作成するために、以下のコードを完成させてください。
行うこと:
- array
test_dataをDeclareregdata typeを使用する(because testbenchでvaluesをstoresするため)- each elementは8 bits wideにする(
[7:0]) - arrayは4 elementsをhaveする(
[0:3])
自分で試してみよう
module arrays;
// test_dataという配列を宣言する
// 4つの要素を持ち、それぞれ8ビット幅であるべき
// regデータ型を使用する(テストベンチで値を格納するため)
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
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
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 Logic自分で練習してみよう: Verilogオンラインコンパイラ