Menu
Coddy logo textTech

Условный generate

Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 14 из 38.

Конструкция generate-if выбирает аппаратную структуру с использованием постоянного parameter. Для данного экземпляра разворачивается только одна ветвь. Процедурная конструкция if или условное выражение с сигналом выбирает поведение во время выполнения; она не заменяет конфигурацию generate.

Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.

generate
    if(INVERT) begin: inverted
        assign y = ~a;
    end else begin: direct
        assign y = a;
    end
endgenerate

parameter выбирает, какой драйвер создаётся для этого экземпляра.

Используйте generate-if для постоянной конфигурации и обычный выбор RTL для элементов управления во время выполнения.

challenge icon

Задание

Средне

Используйте условный generate: MODE=0 передаёт a без изменений; MODE=1 инвертирует все восемь битов a. Вход b не используется. MODE может иметь значение 0 или 1. Тестбенч создаёт экземпляры обеих конфигураций и выводит сначала y0, затем y1.

Завершите design.v и сохраните имена его модулей и портов. Заблокированный testbench.v задаёт изменения входных данных и выводит результаты после их стабилизации. Он выбирает сценарий с помощью аргумента симулятора, например +CASE=1; стандартный ввод не требуется. Не добавляйте в design вывод, задержки или завершение симуляции. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и заканчивающихся символом новой строки.

Попробуйте сами

module dut #(parameter MODE=0) (input [7:0] a,b, output [7:0] y);
    assign y=0;
endmodule
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Проектирование и верификация RTL

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog