Using System Tasks
Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 77 de 90.
Las tareas del sistema son comandos integrados en Verilog que comienzan con un signo de dólar ($). Realizan funciones útiles, como imprimir mensajes, finalizar la simulación y crear archivos de formas de onda.
Ya hemos visto $display, $monitor, $dumpfile y $dumpvars en lecciones anteriores. En esta lección, veremos tareas del sistema adicionales que son útiles en testbenches.
Tareas adicionales del sistema
| Tarea del sistema | Propósito |
|---|---|
$time | Devuelve el tiempo actual de la simulación |
$finish | Finaliza la simulación |
$stop | Pausa la simulación |
$random | Genera un número aleatorio |
$time
Devuelve el tiempo de simulation actual. Es útil para realizar un seguimiento de cuándo ocurren los eventos.
$display("Current time is %0t", $time);$finish
Finaliza la simulación. Úsalo siempre al final de tu testbench.
$finish;$stop
Pausa la simulación. Se puede reanudar con un comando del simulador. Es útil para la depuración.
$stop;$random
Genera un número aleatorio. Es útil para crear estímulos de prueba aleatorios.
reg [7:0] rand_value;
rand_value = $random;Ejemplo usando múltiples tareas del sistema
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
endmoduleDesafío
Add las tareas del sistema que faltan a este testbench.
Qué hacer:
- Add
$displaypara imprimir el tiempo current al inicio - Add
$displaypara imprimir el tiempo current al end - Add
$finishpara finalizar la simulation
Pruébalo tú mismo
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: Añade $display con el tiempo actual al inicio
// Formato: "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: Añade $display con el tiempo actual al final
// Formato: "End time: %0t"
// TODO: Añade $finish
end
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
Qué es VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators 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 LogicPractica por tu cuenta: Compilador de Verilog online