Повторно используемые задачи-проверяющие
Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 27 из 38.
Конструкция task в Verilog объединяет процедурные действия и может возвращать результаты через аргументы output или inout. Задачи тестового окружения помогают сократить дублирование проверок. В отличие от комбинационной function, task при необходимости может содержать элементы управления временем, однако эти задачи-проверки выполняют только сравнения, не занимающие времени. Используй автоматические задачи, если отдельным параллельным вызовам требуется независимое локальное хранилище; приведённые здесь вызовы выполняются последовательно.
Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.
task check_value;
input [7:0] actual,expected;
output ok;
begin ok = (actual === expected); end
endtaskВызывающая сторона получает результат проверки через явный выходной аргумент.
Определите направления аргументов task и сбросьте переменные результатов перед каждым вызовом, прежде чем собирать сбои.
Задание
СреднеРеализуйте check_value так, чтобы ok принимал значение one, если actual и expected совпадают при равенстве с четырьмя состояниями, и значение zero в противном случае. Этот модуль содержит предназначенную только для симуляции task, вызываемую заблокированным тестбенчем. Столбцы вывода: ok.
Завершите design.v и сохраните имена его модулей и портов. Заблокированный testbench.v подаёт изменения входных данных и выводит результаты после их установления. Он выбирает сценарий с помощью аргумента симулятора, например +CASE=1; стандартный ввод не требуется. Оставьте вывод и управление сценарием в заблокированном тестбенче; реализуйте только тело task. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и завершающихся символом новой строки.
Попробуйте сами
module dut;
task check_value;
input [7:0] actual,expected;
output ok;
begin
// Завершите задачу проверки.
ok=0;
end
endtask
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проектирование и верификация RTL
1Надёжная комбинационная RTL-логика
Значения по умолчанию предотвращают защёлкиПриоритетные кодировщикиПроверка One-HotБезопасное декодирование caseПовторение — маршрутизатор запросов4Управляемая последовательная RTL-логика
Приоритет сброса и разрешенияСчётчики с насыщениемКонвейеризация данных и validОбнаружение дискретизированных фронтовПовторение — счётчик событий2Разрядности и знаковая арифметика
Сохранение битов переносаСравнения знаковых чиселАрифметические сдвиги вправоПереполнение и насыщениеПовторение — знаковая разность3Переиспользуемый RTL
Комбинационные функцииПараметры с безопасной разрядностьюЦиклы generateУсловный generateПовторение — переиспользуемая битовая маска6Самопроверяющиеся тестовые стенды
Проверки четырёх состоянийПовторно используемые задачи-проверяющиеЭталонные модели и оценкаПокрытие границ и управленияПовторение — проверка сумматораПотренируйтесь самостоятельно: Онлайн-компилятор Verilog