Las entradas no pueden forzar a DUT en Testbench

-2

He escrito tb en verilog. Mis entradas de banco de pruebas van a una alta impedancia, es decir, zz. Mi ho no puede forzar el estímulo. Por favor, ayúdeme, ya que no puedo detectar el problema en mi banco de pruebas.

module_tb()

 reg [47:0]  data_out_1;  
top_design uut1(
           //inputs

            .clock(clk),
           .reset(rst),
           .data_in(data_i),
           .dcsel(dcsel),
           .xlat(xlat),
           .blank(),
           .RD(read),
           ///OUTPUTS
           .Data_out(data_out_tb));
 initial 
       begin
      //inialize 
inputs

      #1 rst=0
      exp_case_2a(data_out_1);
      exp_case_2b(data_out_1);
      #100000 $finish;
       end
 task   operation_1;

      reg [47:0] data_out_1;
      begin
     exp_case_2a(data_out_1);
      end
   endtask 

   task   operation_2;

      reg  [47:0]  data_out_1;
      begin
     exp_case_2b(data_out_1);
      end
   endtask 

 task exp_case_2a;

      reg data_i;
      reg reset;
      reg read;
      reg dcsel;
      reg xlat;
      output [47:0] data_o;
      begin
         repeat(47)begin@(posedge clk)
       data_i = 1;
        reset = 0;
        read = 0;
        dcsel = 0;
        xlat = 0;
        data_o = Data_out;
         end    
     @(posedge clk)
       begin
          data_i = 0;
          reset = 0;
          dcsel = 0;
          xlat = 1;
          read = 1;
          data_o = Data_out;
       end

         #5250  compare_data_2(data_out_tb); 
      end   
   endtask // exp_case_2a


   task exp_case_2b;

      reg  data_i;
      reg  reset;
      reg  read;
      reg  dcsel;
      reg  xlat;
      output [47:0] data_o;
      begin
     repeat(47)begin @(posedge clk)
       data_i = 1;
        reset   = 0;
        read = 0;
        dcsel = 0;
        xlat = 0;
        data_o = Data_out;          
     end
     @(posedge clk)
       begin
          data_i = 0;
          reset = 0;
          read = 0;
          dcsel = 0;
          xlat = 1;
          data_o = Data_out;
       end   
     #5250   compare_data_2(data_out_tb);
      end       
   endtask 

 /* ...........  SCORE-BOARD..............  

   task compare_data_1;               
      input [47:0] exp_data;

      begin        
     if(exp_data == 'comp_data_1 )
       begin
          $display("test passed 0");
          -> error; 
       end
     else
       begin
          $display("test failed 0");  
          -> error; 
          err_cnt_1 = err_cnt_1 + 1;
       end // else:
      end
   endtask
    
pregunta Manzer

1 respuesta

1

Aunque hay otros problemas, su problema básico es que los cables (implícitos) que ha conectado a su unidad bajo prueba no están controlados por nada.

Las variables reg con los mismos nombres que ha declarado dentro de cada task son locales para esa tarea y no tienen nada que ver con los cables de nivel superior.

Si desea que la tarea pueda leer y / o manejar cables en el nivel superior, necesita pasar esas conexiones como argumentos a la tarea y declararlos como entradas y / o salidas dentro de la tarea en sí.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas