Verilog - Iterando sobre todos los casos en Testbench

0

En el trabajo de curso, estamos creando varios circuitos y probando explícitamente cada caso en Verilog. La forma en que hemos estado escribiendo bancos de pruebas hasta ahora es la siguiente:

initial begin
    $monitor("%d %d %d %d | %d  %d", A, B, C, D, F1, F2);
    A=0;B=0;C=0;D=0;#10;
    A=0;B=0;C=0;D=1;#10;
    A=0;B=0;C=1;D=0;#10;
    A=0;B=0;C=1;D=1;#10;
    A=0;B=1;C=0;D=0;#10;
    A=0;B=1;C=0;D=1;#10;
    A=0;B=1;C=1;D=0;#10;
    A=0;B=1;C=1;D=1;#10;
    A=1;B=0;C=0;D=0;#10;
    A=1;B=0;C=0;D=1;#10;
    A=1;B=0;C=1;D=0;#10;
    A=1;B=0;C=1;D=1;#10;
    A=1;B=1;C=0;D=0;#10;
    A=1;B=1;C=0;D=1;#10;
    A=1;B=1;C=1;D=0;#10;
    A=1;B=1;C=1;D=1;#10;
end

Siento que tiene que haber una mejor manera de iterar sobre cada estado de la entrada y ver la salida. ¿Alguien sabe de una manera de hacer que un banco de pruebas haga esto?

    
pregunta Tanaki

1 respuesta

3

Si trata las entradas como un bus, puede agregar 1 a ellas hasta que se desborden. Algo así funciona ( simulación en línea ):

initial begin
  $monitor("%d %d %d %d", A, B, C, D);
  {A,B,C,D} = 4'b0000;
end 
always begin
  #10;
  {A,B,C,D} = {A,B,C,D} + 4'b1;
  if (&{A,B,C,D}) begin
    #10;
    $finish;
  end
end
    
respondido por el Justin

Lea otras preguntas en las etiquetas