Automatización del vector de prueba en Verilog HDL

Este es mi primer intento de aprender el banco de pruebas Verilog HDL para una puerta AND:

   '
   ' 
initial
   begin
  //case 0
  A_t <= 0; B_t <= 0;
  #1 $display("F_t = %b", F_t);

  //case 1
  A_t <= 0; B_t <= 1;
  #1 $display("F_t = %b", F_t);

  //case 2
  A_t <= 1; B_t <= 0;
  #1 $display("F_t = %b", F_t);

  // case 3
  A_t <= 1; B_t <= 1;
  #1 $display("F_t = %b", F_t);

  end
endmodule

Mi pregunta es que, dado que esto es para dos entradas, solo teníamos cuatro casos de prueba, digamos que tenemos 2000 casos, entonces podemos usar un bucle for como se muestra a continuación:

   '
   '
initial
  begin
 for (i=0;i<2000;i++)
{
 for (j=0;j<2000;j++)
 {
A_t <= i; B_t <= j;
  #1 $display("F_t = %b", F_t);
 }
}
  end
 endmodule   

¿Es legalmente correcto usar bucles como este? De lo contrario, sugiérame el método correcto para automatizar las entradas.

Respuestas (3)

Los bucles 'for' existen en verilog, pero se ven así:

for(i = 0; i < 2000; i = i + 1) begin
 A_t <= i;
 #1 $display("F_t = %b", F_t);
end

No hay ++operador y tienes que usar beginy end.

Es una forma muy razonable de automatizar las entradas. Por supuesto que tienes que acertar en el momento, que en tu caso se hace con eso #1ahí.

Es un enfoque bastante bueno ya que se supone que el banco de pruebas no debe sintetizarse. (Todavía se deben hacer pequeños cambios sintácticos como se sugiere en la respuesta anterior)

También puede extender el banco de pruebas al tener los vectores de prueba en un archivo externo, lo que lo haría más flexible.

Otra solución sería usar do-files para modelsim y generar estímulos de esa manera.

Una forma más fácil de aplicar todas las combinaciones es usar el operador de concatenación en lugar de bucles for anidados. Se parece a esto,

integer i; //Represents range of input values
for(i = 0; i < 2000; i = i + 1)
begin
{A_t, B_t} = i; //Nonblocking assignment "<=" is non needed here.
$display($time, "A = %b, B = %b", A_t, B_t);
#1;
end