Уровни абстракции проектирования
Часть раздела Основы путешествия по Verilog на Coddy — урок 3 из 90.
В цифровом проектировании мы можем описывать одну и ту же схему на разных уровнях детализации. Verilog — это язык, который может описывать схемы на любом из этих уровней абстракции. Именно это делает его столь мощным!
Вот эти уровни:
Level 1: Behavioral
Этот Level описывает, что делает схема, а не how она это делает. Он сосредоточен на функции или поведении, например «считать по возрастанию» или «сложить два числа».
Внутренние details того, how происходит подсчет или сложение, не показаны. Этот уровень ближе всего к человеческому мышлению, и его проще писать.
Level 2: RTL
Этот уровень shows how data перемещается между регистрами и какие операции происходят с этими data. Вы можете видеть путь data: data поступают из регистра в сумматор, а затем возвращаются обратно в регистр.
Это уровень, на котором работает большинство проектировщиков цифровых систем, так как он обеспечивает хороший баланс между понятностью и достаточной детализацией для создания аппаратного обеспечения.
Уровень 3: 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