Cómo usar el reloj generado simple en Verilog Code Vivado 2015.2

1

Soy nuevo en FPGAs. Estoy usando un Artix-7 que viene en el Nexys4DDR, y estoy programando en Verilog. Quiero crear un D Flip-Flop simple que se activará con un CLK de 50MHz. El CLK en la placa viene a través del pin E3 y es de 100MHz, entiendo que puedo dividir por 2 este reloj en el mismo código de Verilog, pero pensé que quería usar un reloj derivado de 100MHz. Así que hago esto en el archivo de Restricción:

Señal de reloj

set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK100MHZ }]; 
create_clock -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { CLK100MHZ }];
create_generated_clock -name clkdiv2 -source [get_ports CLK100MHZ] -divide_by 2 [get_pins REGA/Q]; 

¿Cómo puedo usar el reloj generado en mi código de Verilog? Esta es probablemente una pregunta muy simple, pero ¿cómo puedo tomar el pin Q del REGA y usarlo como mi reloj en el D Flip-Flop ?, ¿cómo puedo completar este diseño? ¿Tengo que crear una instancia de REGA? ¿Si es así, cómo? He intentado de muchas maneras, pero ninguna funciona. Gracias por su ayuda.

module D_ff_behavior
    (
        input D, 
        input CLK100MHZ,
        output reg Q
     );

wire clk_div_2;

always @ (posedge clk_div_2)
    Q <= D;

endmodule
    
pregunta user3275414

2 respuestas

2

El archivo de restricciones solo se usa para aplicar varias restricciones en el diseño.

Pero usted debe escribir el código que genera el reloj de 50 MHz. Puede usar una división de frecuencia por 2 códigos

wire clk_50MHz;

always @(posedge clk_100MHz)
clk_50MHz <= ~clk_50MHz;

Pero para que xilinx sepa que este clk_50MHz no es una señal normal, debe avisar a xilinx que este clk_50MHz es una restricción de reloj generada en xdc / ucf

    
respondido por el rahdirs
1

Siempre se puede usar la línea de habilitación en un DFF en lugar de mezclarse con las frecuencias del reloj y quizás forzar que la señal no enrutada sea un reloj que se usará como reloj.

Cuente los pulsos de 100MHz, y cada vez que golpee 2 (o cualquier divisor), encienda otra señal. Esta otra señal habilita tu DFF. De esta manera usted tiene su reloj estable de 100MHz que está correctamente enrutado en la estructura de FPGA, y es más flexible ya que también puede crear otros separadores. Podrías hacerlo de esta manera:

reg counter;
wire enable_50MHz;

always @(posedge clk_100MHz)
   counter <= counter + 1;
end

assign enable_50MHz = (counter == 1'b1); 
    
respondido por el Mewa

Lea otras preguntas en las etiquetas