Карточка 8. Переход к Verilog
Паспорт концепта
- Уровни: 30 «Первая схема на Verilog» (10 мин), 31 «Параллельность» (15 мин), 32 «MUX на Verilog» (15 мин), 33 «Полусумматор» (15 мин), 34 «Иерархия модулей» (20 мин). Часть 3.
- Суммарно: ~75 минут игры, два занятия.
- Результаты обучения: ученик объясняет, что Verilog описывает схему, а не алгоритм, и инстанцирует вентили; объясняет параллельность операторов; переносит схемные задачи (MUX, полусумматор) в структурный Verilog; переиспользует собственный модуль через иерархию.
- Гайды: ур. 30, ур. 31, ур. 32, ур. 33, ур. 34. Компоненты — в хабе компонентов.
План занятия на 45 минут
Главная задача занятия — сломать привычку «код исполняется сверху вниз». Уровни 30–31 проходят в классе, 32–34 дома.
- 0–10 мин. Вопрос классу: чем текстовое описание схемы лучше рисования? Соберите три-четыре ответа (копирование, правка, ревью, генерация).
- 10–25 мин. Уровень 30 у всех на экранах. Каждый вентиль — это спаянные контакты. После успеха откройте RTL Viewer и покажите, что текст превратился в схему из первых уровней курса.
- 25–35 мин. Разбор концепт-чека уровня 30 (как «выполняется» and). Ключевая фраза занятия: «код не исполняется, код описывает провода».
- 35–45 мин. Демонстрация параллельности: поменяйте местами две строки описания вентилей — схема не изменилась. Домой: уровни 32–34.
Вопросы для обсуждения
- Что физически происходит в кремнии, когда выполняется строка
and a1(out, in1, in2)? Найдите эту схему среди первых уровней игры. - Почему порядок строк в Verilog не важен? Что было бы, если бы был важен?
- Вы уже собрали MUX мышками на уровне 9. Что изменилось в вашем понимании MUX после описания его текстом?
- Строка
wire [7:0] bus;— что она означает в кремнии? Сколько это проводов? - Что значит «инстанцировать модуль»? Где физически окажется схема HalfAdder после инстанцирования в другом модуле?
Ожидаемые ошибки
Список собран из неверных вариантов концепт-чеков; по мере накопления телеметрии он будет уточняться по реальной доле верных ответов с первой попытки.
- Ученик говорит: «and вызывается как функция при каждом изменении входов». Реакция: у функций есть момент вызова и возврата; у спаянного контакта его нет. Связь живёт постоянно.
- Ученик говорит: «компилятор один раз вычислит результат и подставит константу». Реакция: попросите поменять вход после «компиляции» и показать на RTL Viewer, что сигнал всё равно бежит по схеме.
- Ученик говорит: «wire [7:0] — один провод, байты идут по очереди». Реакция: последовательная передача — это отдельная схема (и отдельная головная боль); здесь восемь параллельных проводников.
- Ученик говорит: «процессор вызывает модули по очереди, как функции». Реакция: внутри кристалла нет вызывающего; все инстанцированные схемы вытравлены и работают одновременно.
- Ученик пишет присваивание в сигналу в двух местах и ждёт «последнюю строку». Реакция: два драйвера на одном проводе — знакомый конфликт шины из уровня 22, теперь в текстовой форме.
Критерии оценки
- Собрал. Уровни 30–34 закрыты, тесты зелёные.
- Собрал и объяснил. Формулирует «код описывает провода», объясняет параллельность и иерархию, отвечает на вопросы 1, 2, 5.
- Перенёс на новую задачу. Выполнил задачу для сильных или сам объясняет, что покажет RTL Viewer для их кода до открытия инструмента.
Задача для сильных
Опишите текстом полный сумматор из уровня 7 (XOR + AND + OR), не заглядывая в гайд. Затем соберите его из двух инстансов вашего HalfAdder из уровня 34 и одного OR. Сравните оба описания: число строк, число вентилей, картинку в RTL Viewer.
Парная работа
Проектировщик пишет код; проверяющий до каждой компиляции рисует на бумаге схему, которую описывает этот код, и проговаривает: «этот провод соединяет то-то с тем-то». Расхождение рисунка с RTL Viewer разбирается вместе до исправления. Смена ролей — на каждом уровне (с 32 на 33).