Uso de tareas del sistema
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 actual de la simulación. Es útil para hacer 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 banco de pruebas.
$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
Añade las tareas del sistema que faltan a este banco de pruebas.
Qué hacer:
- Añade
$displaypara imprimir la hora actual al principio - Añade
$displaypara imprimir la hora actual al final - Añade
$finishpara finalizar la simulación
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ño4Operadores, parte 1
Operadores aritméticosOperador móduloOperadores de comparaciónRepaso: matemáticas simplesOperadores bit a bit7Asignaciones y compuertas
Asignación continuaAsignación con operadoresPrimitivas de compuertas integradasCompuertas AND, OR y NOTCompuertas XOR y XNORRepaso: 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 condicionalRepaso: desafío de operadores11Bucles
Bucle ForBucle WhileBucle de repeticiónBucle infinitoInstrucción DisableRepaso: patrones de bucles14Fundamentos de los testbench
¿Qué es un testbench?Creación de estímulosVisualización y monitorizaciónDumpfile y DumpvarsUso de tareas del sistemaRepaso: testbench completo3Sistema numérico
Representación binariaNúmeros con tamañoNúmeros sin tamañoNúmeros negativosValores especiales X y ZRepaso: formatos numéricos6Módulos
Estructura de módulosPuertos de entrada y salidaPuertos inoutInstanciación de módulosAsignación de puertos por nombreAsignación de puertos por ordenRepaso: construir un móduloPractica por tu cuenta: Compilador de Verilog online