Циклы generate
Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 13 из 38.
Цикл generate-for создаёт повторяющуюся аппаратную структуру на этапе элаборации. Его индекс genvar не является изменяющимся регистром времени выполнения. Именованные блоки generate обеспечивают предсказуемые иерархические имена для создаваемых экземпляров или присваиваний. Границы цикла должны быть константами, определяемыми во время элаборации.
Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.
genvar i;
generate
for(i=0;i<WIDTH;i=i+1) begin: bitcell
assign y[i] = a[i] ^ b[i];
end
endgenerateКаждая итерация разворачивается в отдельную операцию на уровне бита, а не занимает такт.
Используйте genvar с постоянными границами, чтобы описать повторяющуюся структуру на этапе развёртывания.
Задание
СреднеИспользуйте именованный цикл generate-for с genvar i, чтобы создать одно непрерывное присваивание для каждого бита, формируя y[i] = a[i] XOR b[i]. WIDTH является положительным. Заблокированный тестбенч создаёт экземпляры со значениями WIDTH 1, 4 и 8, используя младшие биты a и b для экземпляров меньшей разрядности. Столбцы вывода — y1, y4 и y8 в десятичном формате.
Завершите design.v и сохраните имена его модулей и портов. Заблокированный testbench.v подаёт изменения входных данных и выводит результаты после их стабилизации. Он выбирает сценарий с помощью аргумента симулятора, например +CASE=1; стандартный ввод не требуется. Не добавляйте в проект вывод, задержки или завершение симуляции. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и завершающихся символом новой строки.
Попробуйте сами
module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
// Реализуйте параметризованную схему.
assign y = 0;
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проектирование и верификация RTL
1Надёжная комбинационная RTL-логика
Значения по умолчанию предотвращают защёлкиПриоритетные кодировщикиПроверка One-HotБезопасное декодирование caseПовторение — маршрутизатор запросов4Управляемая последовательная RTL-логика
Приоритет сброса и разрешенияСчётчики с насыщениемКонвейеризация данных и validОбнаружение дискретизированных фронтовПовторение — счётчик событий2Разрядности и знаковая арифметика
Сохранение битов переносаСравнения знаковых чиселАрифметические сдвиги вправоПереполнение и насыщениеПовторение — знаковая разность3Переиспользуемый RTL
Комбинационные функцииПараметры с безопасной разрядностьюЦиклы generateУсловный generateПовторение — переиспользуемая битовая маскаПотренируйтесь самостоятельно: Онлайн-компилятор Verilog