Usando Digital Clock Manager con Verilog para generar un reloj de 25Mhz desde un reloj interno de 32Mhz

0

Estoy escribiendo un programa de controlador VGA en Verilog en un Spartan 3E (placa FPGA Papilio one- 500k incluida con LogicStart MegaWIng). La frecuencia del reloj interno de Spartan 3E es de 32MHz. Pero necesito generar un reloj de 25Mhz para enviar sings Vsync y Hsync. Intenté usar el Digital Clock Manager (disponible en los tableros de Xilinx Papilio) siguiendo el tutorial en ...

enlace

Sin embargo, el tutorial se explica al generar un código en VHDL. Seguí los mismos pasos con el único cambio de eso, opté por "Verilog" al elegir el idioma del código. Sin embargo, el código generado en mi caso es estructuralmente diferente del tutorial y no puedo generar un reloj de 25 Mhz.

Necesito saber cómo usar la función DCM de las placas Xilinx Papilio con Verilog para generar un reloj de 25 Mh desde el reloj interno de 32Mhz. ¿Cómo generar el código de creación de instancias y luego cómo usarlo en su archivo .v que contiene el código que usa el reloj de 25Mhz?

Adición

Estoy usando ISE Design Suite 14.7. El código que se genera con la función DCM utilizada con Verilog es el siguiente.

// Instantiate the module
DCM32to50 instance_name (
    .CLKIN_IN(CLKIN_IN), 
    .CLKFX_OUT(CLKFX_OUT), 
    .CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT), 
    .CLK0_OUT(CLK0_OUT)
);

No sé cómo usar esto en mi código y se producen 25Mhz en qué pin.

    
pregunta Kanupriya

2 respuestas

2

La plantilla de Instanitation le da un ejemplo de cómo usar el núcleo en su proyecto. Todo lo que necesitas hacer es pegarlo en tu archivo verilog.

// Instantiate the module
DCM32to50 instance_name (
    .CLKIN_IN(CLKIN_IN), 
    .CLKFX_OUT(CLKFX_OUT), 
    .CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT), 
                         ^ Change the signals in brackets to your signals
     ^ You don't need to change the port names
    .CLK0_OUT(CLK0_OUT)
);

Para ayudarte a combinarlo con el tutorial, en VHDL, se ve así:

DCM32to50_i : DCM32to50 
port map (
CLKIN_IN        => CLKIN_IN,
CLKFX_OUT       => CLKFX_OUT,
CLKIN_IBUFG_OUT => CLKIN_IBUFG_OUT,
CLK0_OUT        => CLK0_OUT);
                         ^ Signal name you can make what you want.
  ^ Port name doesn't change

CLKIN_IN es su entrada reloj de 32 Mhz
CLKFX_OUT es el nuevo reloj de 25 Mhz
CLKIN_IBUFG_OUT es una versión de su reloj de 32 Mhz
CLK0_OUT es su reloj de entrada en Fase 0 (básicamente su reloj de entrada de nuevo).

    
respondido por el stanri
0

'Plantilla de creación de instancias' es solo una forma elegante de decir que le está dando un ejemplo de código.

Las señales de los nombres de Verilog funcionan como .input_or_output_name (my_signalname) Como .clock (my_clock_signal) Así que su plantilla de instanciación se ve así:

//  DCM32to50 is the type of thing you want one of, 'instance_name' is what it will be called 
//  in the original instantiation template, I've changed it to 'my_dcm' 
//  
DCM32to50 my_dcm ( .CLKIN_IN(CLKIN_IN), // Clock input (32MHz)
               .CLKFX_OUT(CLKFX_OUT),  // Clock fx output 
               .CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT), // loop through of the clock you put in 
               .CLK0_OUT(CLK0_OUT) ); // Clock 0 

Puede verificar en el generador de núcleo qué fx de reloj y reloj 0 son. Espero que el reloj 0 sea tu reloj de 25Mhz.

Entonces, si tu nivel superior se ve así ahora

module toplevel(
   input wire clk_in,
   output reg [7:0] output
   );

always @(posedge clk_in)
begin
// do some stuff
end 
endmodule

Puedes poner el dcm de esta manera

module toplevel(
   input wire clk_in,
   output reg [7:0] output
   );

wire slow_clk, clk_fx, clk_loopthrough;

DCM32to50 my_dcm ( .CLKIN_IN(clk_in), // Clock input (32MHz)
                  .CLKFX_OUT(clk_fx),  // Clock fx output 
                  .CLKIN_IBUFG_OUT(clk_loopthrough), // loop through of the clock you put in 
                  .CLK0_OUT(slow_clk) ); // Clock 0    

always @(posedge slow_clk) //! NOTE THIS IS NOW USING THE CLOCK FROM THE DCM
begin
// do some stuff
end 
endmodule
    
respondido por el Will

Lea otras preguntas en las etiquetas