Векторы
Часть раздела Основы путешествия по Verilog на Coddy — урок 9 из 90.
Вектор — это многобитный wire или reg. Вместо одного бита векторы позволяют работать с шинами данных. Это совокупность битов, сгруппированных вместе.
Примечание: Вектор не является отдельным типом данных. Это просто многобитовая версия wire или reg.
wire single; // Одиночный бит
wire [7:0] bus; // 8-битный вектор (биты с 7 по 0)Для объявления вектора используется синтаксис [MSB:LSB], где MSB — это старший значащий бит, а LSB — младший значащий бит.
wire [3:0] a; // 4-битный вектор типа wire
reg [7:0] data; // 8-битный вектор типа reg
wire [15:0] addr; // 16-битный вектор типа wireДоступ к битам
При доступе к отдельным битам или срезам вектора вы используете десятичные числа для позиций бит (индексов) и двоичные значения (0 или 1) для присваиваний.
Это связано с тем, что позиция бита — это местоположение (подобно адресу), которое естественным образом выражается десятичным числом, в то время как значение, хранящееся в этом бите, может быть только 0 или 1 — двоичный выбор.
Например, data[0] означает «нулевой бит», а = 1 означает «установить его в высокое состояние». Вы не можете присвоить десятичное число, такое как 75, одному биту, потому что в бите нет места для значений, отличных от 0 или 1.
reg [7:0] data;
data = 170;
data[0] = 1; // Установить LSB в 1
data[7] = 0; // Установить MSB в 0
data[3:1] = 3'b101; // Установить биты 3,2,1 в 101 (двоичный код сохраняется)Порядок битов
Порядок битов имеет значение:
wire [3:0] a; // a[3] — это MSB (старший бит), a[0] — это LSB (младший бит)
wire [0:3] b; // b[0] — это MSB, b[3] — это LSB (встречается реже)Большинство дизайнеров используют формат [MSB:LSB] с MSB слева.
Присваивание значений
reg [3:0] a;
a = 10;
a = 5;
a = 3; Слайсы векторов
Вы можете получить доступ к диапазону битов:
reg [15:0] word;
word[15:8] = 255; // Присвоить значение старшему байту (8'hFF = 255)
word[7:0] = 0; // Присвоить значение младшему байту (8'h00 = 0)
word[3:1] = 3'b101; // Присвоить значение слайсу Задание
Модулю ниже требуются объявления векторов.
Что нужно сделать:
- Измените каждый вход и выход так, чтобы они стали 8-битными векторами.
Шпаргалка
Вектор (vector) — это многобитный wire или reg, объявляемый с использованием синтаксиса [MSB:LSB]:
wire [7:0] bus; // 8-битный вектор wire
reg [15:0] addr; // 16-битный вектор regДоступ к отдельным битам и срезам:
reg [7:0] data;
data[0] = 1; // Установить LSB в 1
data[7] = 0; // Установить MSB в 0
data[3:1] = 3'b101; // Установить биты 3,2,1, используя двоичный кодПорядок битов: [MSB:LSB] является стандартным соглашением (например, [7:0] означает, что бит 7 — это MSB, а бит 0 — LSB).
Попробуйте сами
module vector_example(
input a, // Измените на 8-битный вектор [7:0]
input b, // Измените на 8-битный вектор [7:0]
output c // Измените на 8-битный вектор [7:0]
);
assign c = a & b;
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial