Уровни абстракции проектирования
Часть раздела Основы путешествия по Verilog на Coddy — урок 3 из 90.
В цифровом проектировании мы можем описывать одну и ту же схему на разных уровнях детализации. Verilog — это язык, который может описывать схемы на любом из этих уровней абстракции. Именно это делает его мощным!
Вот эти уровни:
Уровень 1: Поведенческий
Этот уровень описывает, что делает схема, а не то, как она это делает. Он фокусируется на функции или поведении, например, «счет в прямом направлении» или «сложение двух чисел».
Внутренние детали того, как происходит подсчет или сложение, не отображаются. Этот уровень наиболее близок к человеческому мышлению, и на нем легче писать.
Уровень 2: RTL
Этот уровень показывает, как данные перемещаются между регистрами и какие операции происходят с этими данными. Вы можете увидеть путь данных: данные поступают из регистра в сумматор, а затем обратно в регистр.
Это уровень, на котором работает большинство разработчиков цифровых схем, так как он обеспечивает оптимальный баланс между простотой понимания и достаточной детализацией для проектирования аппаратного обеспечения.
Уровень 3: Уровень вентилей
Этот уровень описывает схему, используя базовые логические вентили, такие как AND, OR и XOR. Каждое соединение показано явно.
Этот уровень очень детализирован, и его сложно писать вручную. Обычно он генерируется инструментами на основе описаний более высокого уровня, а не создается вручную.
Почему это важно
- **Высокий уровень** = Проще писать, меньше контроля
- **Низкий уровень** = Сложнее писать, больше контроля
- **RTL** — это «золотая середина» для большинства задач проектирования
Задание
Что нужно сделать:
- Запустите этот код и посмотрите, как одна и та же операция описывается на трех разных уровнях:
Шпаргалка
Verilog может описывать схемы на различных уровнях абстракции:
- Поведенческий (Behavioral) – описывает, что делает схема (например, «сложить два числа»). Проще всего в написании, но дает минимум контроля.
- RTL (Register Transfer Level) – уровень регистровых передач. Описывает, как данные перемещаются между регистрами и какие операции при этом происходят. Стандартный уровень для большинства задач по проектированию цифровых устройств.
- Вентильный уровень (Gate Level) – описывает схему с использованием явных логических вентилей (AND, OR, XOR). Наиболее детализированный, сложнее всего писать вручную; обычно генерируется инструментами автоматизации.
Компромисс: выше уровень = проще писать, меньше контроля. Ниже уровень = сложнее писать, больше контроля. RTL — это «золотая середина».
Попробуйте сами
module abstraction_demo;
initial begin
$display("=== Design Abstraction Levels ===");
$display("");
$display("Level 1 (Behavioral):");
$display(" 'Add a and b' - no details how");
$display("");
$display("Level 2 (RTL):");
$display(" 'On clock edge, result <= a + b' - shows data flow");
$display("");
$display("Level 3 (Gate Level):");
$display(" 'XOR gates for sum, AND gates for carry' - actual gates");
$display("");
$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