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 forma de onda.
Ya hemos cubierto $display, $monitor, $dumpfile, y $dumpvars en lecciones anteriores. En esta lección, veremos tareas de sistema adicionales que son útiles en los bancos de pruebas.
Tareas adicionales del sistema
| Tarea del sistema | Propósito |
|---|---|
$time | Devuelve el tiempo de simulación actual |
$finish | Finaliza la simulación |
$stop | Pausa la simulación |
$random | Genera un número aleatorio |
$time
Devuelve el tiempo de simulación actual. Es útil para realizar un seguimiento de cuándo ocurren los eventos.
$display("Current time is %0t", $time);$finish
Finaliza la simulación. Úselo siempre al final de su 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. Ú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
Agrega las tareas de sistema que faltan a este banco de pruebas.
Qué hacer:
- Agrega
$displaypara imprimir el tiempo actual al inicio - Agrega
$displaypara imprimir el tiempo actual al final - Agrega
$finishpara finalizar la simulación
Hoja de referencia
Las tareas del sistema en Verilog comienzan con $ y realizan utilidades de simulación:
| Tarea del sistema | Propósito |
|---|---|
$time | Devuelve el tiempo de simulación actual |
$finish | Finaliza la simulación |
$stop | Pausa la simulación |
$random | Genera un número aleatorio |
$display("Time: %0t", $time); // imprimir el tiempo actual
$finish; // finalizar simulación
$stop; // pausar simulación
reg [7:0] rand_value;
rand_value = $random; // asignar número aleatorioPrué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: Agregar $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: Agregar $display con el tiempo actual al final
// Formato: "End time: %0t"
// TODO: Agregar $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