Основы проектирования RTL
Описывайте цифровые схемы на SystemVerilog. Изучите типы, разрядность, знак, комбинационную и последовательностную логику, модули, параметры и generate. Проверяйте граничные случаи и ошибки независимыми тестовыми стендами. В завершение соедините генератор периодических импульсов с накопителем и сохраните воспроизводимые результаты.
Чему вы научитесь
- Определять разрядность, знак, источник сигнала, момент достоверности и значение сброса каждого сигнала.
- Отделять полные комбинационные присваивания от обновления состояния по такту.
- Создавать статические структуры с помощью параметров и generate и проверять граничные конфигурации.
- Соединять модули именованными портами и использовать функции.
- Писать стимулы без гонок и независимые эталонные модели.
- Различать подтверждения компиляции, моделирования, синтеза и выполнения в DDS.
Перед началом
Упражнения в браузере используют учебные модели и не компилируют и не запускают HDL. Для отдельного запуска исходного кода следуйте руководству Digital Design Studio для вашей ОС и войдите в аккаунт, если этого требует операция.
Установка и первый запуск ↗ · Загрузки ↗Программа
- RTL и контракты модулей
- RTL: описание одновременно работающих схемТеория
Отделите порядок программных действий от параллельной структуры и задайте текущее состояние, следующее состояние и момент наблюдения.
- Сигналы и порты: контракт ширины, направления и времениТеория
Читайте интерфейс и разделяйте критерии проверки комбинационного выхода и выхода состояния.
- Модули, порты и экземпляры: соединения как контрактыТеория
Соединяйте комбинационные модули по именам портов и проверяйте единственный источник и границы иерархии.
- Проверка: комбинационный и сохранённый выходПроверка знаний
Различайте изменение входа и наблюдение регистра.
- Типы, разрядность, знак и выражения
- logic, wire, X/Z и явная разрядностьТеория
Разделите тип, источник и хранение; проверьте литералы, сравнения, расширения и неизвестные значения.
- Индексы векторов, порядок битов и знакТеория
Читайте тракт данных, разделяя номера битов, порядок последовательной передачи и арифметическую интерпретацию.
- Ширина срезов, конкатенации и повторенияТеория
Стройте тракт данных, рассчитывая суммарную ширину соединённых сигналов и условия сохранения значения.
- Дополнительный код, расширение знака и переполнениеТеория
Различайте знаковую интерпретацию битовой строки и условия переполнения сложения с помощью формул и контрпримеров.
- Проверка: диапазон и явное расширениеПроверка знаний
Проверяйте входную и выходную разрядность вместе.
- Полный комбинационный RTL и проверка
- Комбинационный RTL и полные присваиванияТеория
Выразите одну функцию условным оператором и always_comb, найдите пропуски, создающие защёлку.
- Шифратор и приоритет: выбор одного из нескольких запросовТеория
Различайте условие one-hot для обычного шифратора и выходы приоритетного шифратора: valid и результат выбора.
- Проверка MUX: полный перебор и свойстваТеория
Проверяйте покрытие комбинационных входов и хранение раздельно, минимизируйте контрпримеры.
- Проверка проекта: эквивалентность выбора и момент наблюденияПроверка знаний
Различайте проверки, для которых достаточно таблицы истинности, и проверки, требующие наблюдения такта.
- Состояние, присваивания и приоритет сброса
- Триггеры, enable и приоритет управленияТеория
Задайте хранение, загрузку и сброс функцией следующего состояния и избегайте непреднамеренного стробирования такта.
- Неблокирующие присваивания и одновременное обновление состоянияТеория
Разделяйте прежние и следующие значения для точного понимания RTL конвейеров и счётчиков.
- Модульные и насыщающие счётчики, импульс завершенияТеория
Задайте обработку максимума и точный цикл сигнала terminal-count.
- Практикум: сброс, циклический переход и инварианты счётчикаПрактика
Сравните состояние на каждом положительном фронте с эталоном, разделите влияние начального значения, сброса и ширины.
- Проверка проекта: границы ширины, приоритета и циклического переходаПроверка знаний
Оцените граничные значения и одновременные управления по заданной спецификации переходов.
- Параметры и построение статических структур
- parameter, localparam, $clog2 и граничные конфигурацииТеория
Разделите входы времени выполнения и настройку, проектируя ширину и завершение для N=1 и значений N, не являющихся степенями двойки.
- generate: построение статических схем цикламиТеория
Используйте genvar и generate-if для именованной иерархии и проверьте размещение каналов.
- function automatic и повторно используемые выраженияТеория
Пишите функции без затрат времени моделирования и проверяйте ширину, знак и независимость эталона.
- Проверка: N=1 и разрядностьПроверка знаний
Отделяйте минимальную ширину от допустимых состояний.
- Тестовые стенды и независимая проверка
- Моменты выборки и причинность на временных диаграммахТеория
Читайте диаграммы, разделяя установление комбинационной логики, захват тактом и порядок событий.
- Практика: тестовый стенд, самостоятельно сообщающий ошибкиПрактика
Разделите DUT, стимулы, эталон и сравнения для проверки сброса, enable и возврата без гонок.
- План проверки, покрытие и независимый эталонТеория
Различайте прохождение тестов и соответствие спецификации; включайте границы, пересечения условий и минимальные контрпримеры в план проверки.
- Отладка счётчика и минимальные контрпримерыТеория
Спроектируйте короткие тесты, различающие ошибки reset, enable и перехода через границу.
- Проверка: эталоны и гонкиПроверка знаний
Выберите независимые ожидания и наблюдение после обновления.
- Соединение модулей и комплексная практика
- Конечный автомат: разделение состояния, переходов и выходовТеория
Постройте FSM по таблице спецификации и сравните выходы Мура и Мили, недопустимые состояния и политику запросов.
- Итоговый проект: детектор перекрывающейся последовательности 101Теория
Объедините минимизацию состояний, действительность входа, выход регистра и независимую эталонную проверку.
- Ready/valid и эластичный буфер на один элементТеория
Спроектируйте передачу без потерь и повторов, включая одновременный ввод и вывод в останавливаемом тракте.
- Конвейер умножения и сложения, выравнивание данныхТеория
Разделите вычисление регистрами и сохраните принадлежность данных, valid и вспомогательных операндов одной транзакции.
- Комплексная практика: периодические импульсы и разрешаемый накопительПрактика
Опишите передачу старых значений и проверьте паузы, непрерывные импульсы и одновременный сброс.
- Диагностика инструментов и границы результатов
- Setup, hold и временной бюджетТеория
Разделите максимальные и минимальные задержки путей и рассчитайте условие hold, независимое от частоты такта.
- Границы тактовых доменов и метастабильностьТеория
Определите область применения двухступенчатого синхронизатора, различая один бит, короткие импульсы и многобитную передачу.
- Компиляция, lint и синтез: границы диагностикиТеория
Фиксируйте исходники, верхний модуль и язык; различайте синтаксис, ширину, защёлки и функциональную проверку.
- Записи выполнения и продолжение практики DDSТеория
Передайте исходники, входы, ожидания, ошибки и версии для воспроизводимой практики.
- Итоговая проверка: функция и подтвержденияПроверка знаний
Отделите локальные результаты от бесплатной практики DDS.