Уровни абстракции проектирования
Часть раздела Основы путешествия по Verilog на Coddy. Урок 5 из 90.
В цифровом проектировании мы можем описывать одну и ту же схему на разных уровнях детализации. Verilog — это язык, который позволяет описывать схемы на любом из этих уровней Abstraction. Именно это делает его таким мощным!
Это уровни:
Level 1: Behavioral
Этот уровень описывает, что делает схема, а не как она это делает. Он сосредоточен на функции или поведении, например «считать вверх» или «сложить два числа».
Внутренние детали того, как выполняется подсчёт или сложение, не показаны. Этот уровень ближе всего к человеческому мышлению, и его проще описывать.
Level 2: RTL
Этот уровень показывает, как data перемещается между регистрами и какие операции выполняются над этими данными. Вы можете увидеть путь data: data проходит от регистра к сумматору, а затем возвращается в регистр.
Это уровень, на котором работает большинство разработчиков цифровых устройств, поскольку он обеспечивает хороший баланс между понятностью и достаточной детализацией для создания аппаратного обеспечения.
Уровень 3: уровень вентилей
На этом уровне схема описывается с помощью базовых логических вентилей, таких как 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Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog