Menu
Coddy logo textTech

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 sistemaPropósito
$timeDevuelve el tiempo de simulación actual
$finishFinaliza la simulación
$stopPausa la simulación
$randomGenera 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
endmodule
challenge icon

Desafío

Agrega las tareas de sistema que faltan a este banco de pruebas.

Qué hacer:

  1. Agrega $display para imprimir el tiempo actual al inicio
  2. Agrega $display para imprimir el tiempo actual al final
  3. Agrega $finish para finalizar la simulación

Hoja de referencia

Las tareas del sistema en Verilog comienzan con $ y realizan utilidades de simulación:

Tarea del sistemaPropósito
$timeDevuelve el tiempo de simulación actual
$finishFinaliza la simulación
$stopPausa la simulación
$randomGenera 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 aleatorio

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: 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
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos