Безопасное декодирование case
Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 4 из 38.
Используй обычную конструкцию case для точных управляющих кодов. Задай поведение default для неподдерживаемых кодов и используй assign для всех выходов. Декодирование с подстановочными символами с помощью casex может скрывать неизвестные управляющие биты при симуляции, поэтому оно не подходит, если во время отладки неизвестные значения должны оставаться видимыми.
Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
endНеподдерживаемые коды приводят к явному статусу, а не сохраняют предыдущий результат.
Явно определяйте неподдерживаемые коды управления и не маскируйте неизвестные элементы управления с помощью casex.
Задание
СреднеРеализуйте 8-битный логический блок: op 0 вычисляет a AND b, op 1 вычисляет a OR b, op 2 вычисляет a XOR b, а op 3 возвращает ноль, устанавливая invalid в единицу. Для поддерживаемых операций значение invalid равно нулю. Столбцы вывода: y, invalid. Все входные значения являются известными двоичными значениями.
Завершите design.v, сохранив имена его модулей и портов. Заблокированный testbench.v задаёт изменения входных данных и выводит результаты после их стабилизации. Он выбирает сценарий с помощью аргумента симулятора, например +CASE=1; стандартный ввод не требуется. Не добавляйте в design вывод, задержки или завершение симуляции. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и заканчивающихся символом новой строки.
Попробуйте сами
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// Замените этот заполнитель на ваш дизайн.
initial y = 0;
initial invalid = 0;
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проектирование и верификация RTL
1Надёжная комбинационная RTL-логика
Значения по умолчанию предотвращают защёлкиПриоритетные кодировщикиПроверка One-HotБезопасное декодирование caseПовторение — маршрутизатор запросов4Управляемая последовательная RTL-логика
Приоритет сброса и разрешенияСчётчики с насыщениемКонвейеризация данных и validОбнаружение дискретизированных фронтовПовторение — счётчик событий2Разрядности и знаковая арифметика
Сохранение битов переносаСравнения знаковых чиселАрифметические сдвиги вправоПереполнение и насыщениеПовторение — знаковая разностьПотренируйтесь самостоятельно: Онлайн-компилятор Verilog