Generate-for: цикл в пространстве, а не во времени
Вступление к уровню 37: как описать восемь одинаковых триггеров одной строкой цикла — и почему они всё равно срабатывают все вместе, за один такт.
Опыт: все 8 бит одним фронтом
Восемь ламп — байт данных, тумблер ЗАПИСЬ — общий такт всех восьми триггеров регистра. Один фронт — и весь байт записан: включили лампы 4 и 1, нажали ЗАПИСЬ, регистр показал 5. Входы меняются — регистр держит записанное до нового нажатия.
Прогноз: сколько тактов на восемь триггеров
В generate-цикле описаны 8 D-триггеров с общим входом clk. Записать все 8 бит помогает один такт: восемь — это число копий схемы, а не число тактов. Порядок в описании влияет только на имена копий, не на очерёдность их работы.
Правило: нарисуй 8 копий рядом
generate-for — не «сделай восемь раз подряд», а «нарисуй восемь копий рядом»: цикл разворачивается в 8 независимых триггеров ещё до работы схемы. Три обязательных элемента: genvar i — счётчик чертежа, begin : bit_cell — метка клона (копии получают имена bit_cell[0].u … bit_cell[7].u) и подстановка in[i], при i = 3 соединяющая с битом 3.
Зачем это нужно
На этом уровне вы соберёте 8-битный регистр из D-триггеров generate-циклом. Тот же приём дальше размножает любые повторяющиеся узлы: разряды счётчика, биты АЛУ, строки памяти — всё, где одна и та же схема стоит много раз подряд.