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-циклом. Тот же приём дальше размножает любые повторяющиеся узлы: разряды счётчика, биты АЛУ, строки памяти — всё, где одна и та же схема стоит много раз подряд.

Пройти вступление в игре · Гайд уровня 37 · Все вступления