Параметры с безопасной разрядностью
Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 12 из 38.
В разделе «Основы» были введены настраиваемые разрядности. Повторно используемый RTL также должен обрабатывать наименьшую допустимую разрядность, намеренно задавать размер промежуточных выражений и избегать жёстко заданных позиций битов. Репликация {WIDTH{1'b1}} создаёт маску, соответствующую разрядности. Параметры — это константы этапа elaboration, а не элементы управления во время выполнения.
Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.
wire [WIDTH:0] sum;
assign sum = {1'b0,a} + {1'b0,b};
assign y = sum[WIDTH] ? {WIDTH{1'b1}} : sum[WIDTH-1:0];Позиция переноса и значение насыщения адаптируются к настроенной разрядности.
Проверьте минимальную допустимую ширину и выведите каждый зависящий от ширины срез и константу из параметров.
Задание
СреднеСоздайте инкрементатор разрядности WIDTH, который возвращает младшие WIDTH бит выражения a+1. Вход b не используется. Один и тот же модуль должен работать как при WIDTH=1, так и при большей разрядности. Значение WIDTH положительно. Заблокированный тестбенч создаёт экземпляры со значениями WIDTH 1, 4 и 8, используя младшие биты a и b для экземпляров с меньшей разрядностью. Столбцы вывода — это y1, y4 и y8 в десятичном формате.
Завершите design.v и сохраните имена его модулей и портов. Заблокированный testbench.v подаёт изменения входных данных и выводит результаты после их установления. Он выбирает сценарий с помощью аргумента симулятора, например +CASE=1; стандартный ввод не требуется. Не добавляйте в design вывод, задержки или завершение симуляции. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и заканчивающихся символом новой строки.
Попробуйте сами
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