problema con verilog testbench

0

Tengo un problema con la señal del reloj en el banco de pruebas Verilog.

He intentado casi todas las formas posibles de crear un reloj, pero en la forma de onda es U que significa "Desconocido".

Aquí está mi código para el reloj ( i_SysCLK es mi reloj de entrada):

'timescale 1ps/100fs   

 module sim_tb_top;  
   parameter CLKIN_PERIOD          = 5000;  
  reg                     sys_clk_i;  

  reg clk_ref_i;  
  wire                    i_SysCLK;  
      initial  
    sys_clk_i = 1'b0;  
  always  
    sys_clk_i = #(CLKIN_PERIOD/2.0) ~sys_clk_i;  


  initial  
    clk_ref_i = 1'b0;  
  always  
    clk_ref_i = #REFCLK_PERIOD ~clk_ref_i;  
  initial  
    i_SysCLK = 1'b0;  
  always  
    i_SysCLK = #(REFCLK_PERIOD/2.0) ~i_SysCLK;  
endmodule
    
pregunta Foad Hoseyni

1 respuesta

1

Recibo 2 errores de compilación cuando ejecuto tu código en 2 simuladores diferentes. ¿Has probado tu código en edaplayground?

No definió REFCLK_PERIOD y declaró i_SysCLK como wire . Después de hacer estas 2 correcciones, y asumiendo algún valor para REFCLK_PERIOD , obtengo una salida que demuestra claramente que las 3 señales de reloj están alternando entre 0 y 1. Anule el comentario de UNO de las líneas $monitor :

'timescale 1ps/100fs

module sim_tb_top;
    parameter REFCLK_PERIOD = 1000;
    parameter CLKIN_PERIOD  = 5000;
    reg sys_clk_i;
    reg clk_ref_i;
    reg i_SysCLK;

initial sys_clk_i = 1'b0;

always sys_clk_i = #(CLKIN_PERIOD/2.0) ~sys_clk_i;

initial clk_ref_i = 1'b0;
  always
    clk_ref_i = #REFCLK_PERIOD ~clk_ref_i;
  initial
    i_SysCLK = 1'b0;
  always
    i_SysCLK = #(REFCLK_PERIOD/2.0) ~i_SysCLK;

initial begin
//    $monitor($time, " %b", sys_clk_i);
//    $monitor($time, " %b", clk_ref_i);
    $monitor($time, " %b", i_SysCLK);
    #10_000 $finish;
end
endmodule
    
respondido por el toolic

Lea otras preguntas en las etiquetas