Оператор конкатенации
Часть раздела Основы путешествия по Verilog на Coddy — урок 27 из 90.
Оператор конкатенации { } объединяет несколько сигналов, констант или выражений в один вектор большего размера. Он используется всякий раз, когда вам нужно соединить биты вместе для формирования более широких значений.
Какие значения работают с конкатенацией
Вы можете конкатенировать:
- Wires и regs — любой сигнал
- Константы — числа вроде
4'b1010или8'hFF
- Выражения — результаты операций, таких как
a + b - Репликации — повторение значения несколько раз
Все объединяемые значения должны иметь фиксированную, известную ширину.
Базовый синтаксис: {value1, value2, value3, ...} Результирующая ширина равна сумме всех отдельных ширин.
Примеры
Объединение двух 4-битных значений в 8 бит:
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high становится верхними 4 битами, low становится нижними 4Комбинирование с константами:
data = {4'b1010, 4'b0000}; // 8'b10100000Объедините более двух:
full = {a, b, c, d}; // Все ширины суммируютсяРепликация
Вы можете повторить значение несколько раз, используя {n{value}}:
repeat = {4{4'b1010}}; // 16'b1010101010101010 (повторить 4 раза)Это полезно для расширения знака:
signed_8bit = {4{sign_bit}, value_4bit};Пример кода
module concatenation_demo;
reg [3:0] upper, lower;
reg [7:0] combined;
reg [11:0] repeated;
initial begin
upper = 4'b1010;
lower = 4'b1100;
combined = {upper, lower}; // 10101100
repeated = {3{4'b1010}}; // 101010101010
$display("{upper, lower} = %b", combined);
$display("{3{4'b1010}} = %b", repeated);
$finish;
end
endmoduleРезультат:
{upper, lower} = 10101100
{3{4'b1010}} = 101010101010Важные примечания
- Порядок имеет значение:
{a, b}отличается от{b, a} - Все части должны иметь фиксированную ширину (числа без указания размера не допускаются)
- Конкатенация может использоваться как в левой, так и в правой части присваиваний
Задание
Напишите правильные выражения конкатенации для каждой задачи.
Что нужно сделать:
- Объедините
aиbв 8-битный результат и сохраните вcombine1 - Объедините
c,dиeв 12-битный результат и сохраните вcombine2 - Объедините
fи две копииgв 12-битный результат и сохраните вcombine3
Шпаргалка
Оператор конкатенации { } объединяет биты в более широкий вектор. Ширина результата = сумма всех отдельных ширин.
// Основы: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high = старшие биты, low = младшие биты
// С константами
data = {4'b1010, 4'b0000}; // 8'b10100000
Репликация {n{value}} повторяет значение n раз:
repeated = {3{4'b1010}}; // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b}; // расширение знака
Основные правила:
- Порядок имеет значение:
{a, b}≠{b, a} - Все части должны иметь фиксированную, известную ширину
- Может использоваться с обеих сторон присваивания
Попробуйте сами
module concatenation_challenge;
reg [3:0] a, b;
reg [3:0] c, d, e;
reg [3:0] f, g;
reg [7:0] combine1;
reg [11:0] combine2, combine3;
initial begin
a = 4'b1010;
b = 4'b0101;
c = 4'b1111;
d = 4'b0000;
e = 4'b1100;
f = 4'b1001;
g = 4'b0110;
combine1 = ______; // Combine a and b into an 8-bit result
combine2 = ______; // Combine c, d, and e into a 12-bit result
combine3 = ______; // Combine f and two copies of g into a 12-bit result
$display("{a, b} = %b", combine1);
$display("{c, d, e} = %b", combine2);
$display("{f, g, g} = %b", combine3);
$finish;
end
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