Using System Tasks
Часть раздела Основы путешествия по Verilog на Coddy. Урок 77 из 90.
Системные задачи — это встроенные команды в Verilog, которые начинаются со знака доллара ($). Они выполняют полезные функции, такие как вывод сообщений, завершение simulation и создание файлов сигналов.
В предыдущих уроках мы уже рассмотрели $display, $monitor, $dumpfile и $dumpvars. В этом уроке мы рассмотрим дополнительные системные задачи, полезные в testbench.
Дополнительные системные задачи
| Системная задача | Назначение |
|---|---|
$time | Возвратить текущее время simulation |
$finish | Завершить simulation |
$stop | Приостановить simulation |
$random | Сгенерировать случайное число |
$time
Возвращает текущее время Simulation. Полезно для отслеживания того, когда происходят события.
$display("Current time is %0t", $time);$finish
Завершает simulation. Всегда используйте в конце своего testbench.
$finish;$stop
Приостанавливает simulation. Может быть возобновлена с помощью команды симулятора. Полезно для отладки.
$stop;$random
Генерирует случайное число. Полезно для создания случайного тестового воздействия.
reg [7:0] rand_value;
rand_value = $random;Пример использования нескольких системных задач
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleЗадание
Add the missing system tasks to this testbench.
Что нужно сделать:
- Add
$display, чтобы вывести current time в начале - Add
$display, чтобы вывести current time в конце - Add
$finish, чтобы завершить simulation
Попробуйте сами
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: Добавить $display с текущим временем в начале
// Формат: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: Добавить $display с текущим временем в конце
// Формат: "End time: %0t"
// TODO: Добавить $finish
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog