Arrays
Часть раздела Основы путешествия по Verilog на Coddy. Урок 10 из 90.
array позволяет хранить несколько значений в одной переменной. К каждому элементу в array можно обратиться по его индексу.
Примечание: array не является отдельным типом data. Это набор типов wire, reg, integer или real.
Объявление массивов
Синтаксис: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 байт памяти (каждый по 8 бит)
reg data [0:7]; // 8 однобитных регистров
wire [3:0] bus [0:3]; // 4 шины, каждая шириной 4 бита
integer counters [0:9]; // 10 целых чиселЧисло в скобках [ ] — это размер array, а не разрядность.
Доступ к элементам массива
reg [7:0] memory [0:3];
memory[0] = 165; // Десятичное 165
memory[1] = 90; // Десятичное 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // Выводит: 255Массивы очень полезны в testbench для хранения тестовых data.
Многомерные массивы
Вы можете создавать arrays с несколькими измерениями:
reg [7:0] matrix [0:3][0:3]; // массив 4x4 из 8-битных значений
matrix[0][0] = 255; // 8'hFF = 255 десятичное
matrix[2][1] = 85; // 8'h55 = 85 десятичноеМассивы array и Вектор
| Vector | Array | |
|---|---|---|
| Что это | Многобитный провод или reg | Набор нескольких значений |
| Синтаксис | [MSB:LSB] | [size] |
| Пример | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Доступ | data[3] (бит 3) | mem[3] (элемент 3) |
Вектор — это одно значение с несколькими битами.
Массив — это несколько значений, каждое со своими битами.
Важные примечания
- Массивы часто не поддерживают синтез во многих инструментах при использовании больших размеров
- Массивы в основном используются в testbenches
- Для аппаратной памяти используйте специальные примитивы памяти
Задание
Завершите приведённый ниже код, чтобы создать массив, который хранит 4 тестовых значения.
Что нужно сделать:
- Объявите массив с именем
test_data- Используйте тип данных
reg(because он stores values в testbench) - Каждый элемент should быть 8 bits wide (
[7:0]) - Массив should have 4 elements (
[0:3])
- Используйте тип данных
Попробуйте сами
module arrays;
// Объявите массив с именем test_data
// Он должен иметь 4 элемента, каждый шириной 8 бит
// Используйте тип данных reg (потому что он хранит значения в testbench)
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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования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