1 votos

Automatización de vector de prueba en Verilog HDL

Este es mi primer intento de aprender el testbench de Verilog HDL para una compuerta AND:

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

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

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

  // caso 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 y solo tuvimos cuatro casos de prueba, digamos que tenemos 2000 casos, ¿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 de esta manera? Si no, por favor sugiérame el método correcto para automatizar las entradas.

2voto

jns Puntos 449

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 debes utilizar begin y end.

Es una manera muy razonable de automatizar las entradas. Por supuesto, debes ajustar correctamente el timing, lo cual en tu caso se hace con ese #1 allí.

0voto

jonaz Puntos 39

Es un enfoque bastante bueno ya que el banco de pruebas no se supone que sea sintetizado. (Todavía se deben hacer pequeños cambios sintácticos según lo sugerido por la respuesta anterior)

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

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

0voto

Craig Puntos 11

Una forma más sencilla de aplicar todas las combinaciones es usar el operador de concatenación en lugar de bucles for anidados. Se ve así,

entero i; //Representa el rango de valores de entrada
para(i = 0; i < 2000; i = i + 1)
begin
{A_t, B_t} = i; //Asignación no bloqueante "<=" no es necesario aquí.
$display($time, "A = %b, B = %b", A_t, B_t);
#1;
end

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X