Menu
Coddy logo textTech

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

Desafío

Add las tareas del sistema que faltan a este testbench.

Qué hacer:

  1. Add $display para imprimir el tiempo current al inicio
  2. Add $display para imprimir el tiempo current al end
  3. Add $finish para 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
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

Practica por tu cuenta: Compilador de Verilog online