Uso de tareas del sistema
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 77 de 90.
Las System tasks (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 ondas.
Ya hemos cubierto $display, $monitor, $dumpfile y $dumpvars en lecciones anteriores. En esta lección, veremos tareas del sistema adicionales que son útiles en testbenches.
Tareas del sistema adicionales
| 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 current simulation time. Útil para realizar un seguimiento de cuándo ocurren los eventos.
$display("Current time is %0t", $time);$finish
Finaliza la simulation. Úsalo siempre al final de tu testbench.
$finish;$stop
Pausa la simulation. Se puede reanudar con un comando del simulador. Útil para la depuración.
$stop;$random
Genera un número aleatorio. Útil para crear estímulos de prueba aleatorios.
reg [7:0] rand_value;
rand_value = $random;Ejemplo de uso de 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
Agrega las tareas de sistema que faltan a este testbench.
Qué hacer:
- Agrega
$displaypara imprimir el tiempo actual (time) al inicio (start) - Agrega
$displaypara imprimir el tiempo actual (time) al final (end) - Agrega
$finishpara terminar la simulación (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 Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores14Fundamentos de Testbench
¿Qué es un Testbench?Creación de estímulosDisplay y MonitorDumpfile y DumpvarsUso de tareas del sistemaResumen: Testbench completo3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo