¿Cómo dar el reloj en xilinx spartan 6?

1

Estoy tratando de ejecutar un contador en el kit de desarrollo Digilent Atlys Spartan 6 xc6slx45, que cambia las cuentas en el borde del reloj. Soy un usuario nuevo de Verilog, por lo que no sé cómo darle un reloj a mi programa desde la placa Xilinx.

¡Gracias!

    
pregunta Awais Hussain

2 respuestas

3

El reloj viene de un oscilador de reloj en el tablero. Estoy bastante familiarizado con el tablero de Atlys, usamos algunos de ellos para algunas investigaciones de redes. Tiene un oscilador de reloj de 100 MHz conectado a la FPGA. Todo lo que necesita hacer es agregar un pin al archivo de nivel superior de su diseño y asignarlo al pin correspondiente en el archivo ucf. También deberá especificar la velocidad del reloj en el archivo UCF. El archivo UCF que usamos para el tablero de Atlys tiene la siguiente información para el pin del reloj:

NET "clk" LOC = "L15" | IOSTANDARD=LVCMOS33; # IO_L42P_GCLK7_M1UDM (GCLK)
NET "clk" TNM_NET = "sys_clk_pin";
TIMESPEC "TS_sys_clk_pin" = PERIOD "sys_clk_pin" 100000 kHz;

Esto lo ubica en el pin L15, donde el oscilador está conectado al FPGA en la placa. Luego le dice a la cadena de herramientas la frecuencia de reloj de 100 MHz con una restricción de tiempo.

El pin también debe enviarse a través de un IBUFG y BUFG antes de poder usarlo, de este modo:

module fpga_top (input wire clk, some_other_signals....)
    wire clk_ibufg;
    wire clk_int;
    IBUFG clk_ibufg_inst (.I(clk), .O(clk_ibufg));
    BUFG clk_bufg_inst (.I(clk_ibufg), .O(clk_int));

    your logic goes here...

endmodule

Luego solo usa clk_int para sincronizar tu lógica. Se requieren los elementos IBUFG y BUFG para que la señal del reloj ingrese a la red global del reloj para que pueda impulsar su diseño de manera efectiva.

Si desea utilizar una frecuencia distinta de 100 MHz, puede crear un módulo DCM con coregen e instanciarlo en lugar de los elementos IBUFG y BUFG (el archivo de envoltura DCM contendrá los búferes necesarios). Los módulos DCM instanciarán módulos PLL en el FPGA para sintetizar una frecuencia de reloj que es una fracción racional del reloj de entrada (2, 1/2, 2/3, 3/4, etc.).

Aquí hay un ejemplo de diseño de barebones para la placa Atlys que usa un DCM para generar un reloj de 125 MHz: enlace .

    
respondido por el alex.forencich
2

Para casos simples, todo lo que necesita es esto:

  1. En Verilog, agregue una entrada de reloj a su módulo de nivel superior.

  2. En su archivo de restricciones, defina la señal que se conectará a un pin donde una señal de reloj está realmente conectada en la placa.

  3. Aún en el archivo de restricciones, asegúrese de que la señal esté definida como la misma norma de señalización (CMOS, LVDS, ...) que la que realmente se proporciona en la placa.

Puede agregar mucha más complejidad, por ejemplo,

  • Use un administrador de reloj digital (DCM) para hacer que la señal del reloj interno tenga una frecuencia diferente a la de la placa.

  • Use un estándar de lógica diferencial como LVDS o LVPECL.

Para usar estas capacidades, querrá leer detenidamente las Guías de usuario apropiadas (Guía de usuario de recursos de cronometraje y Guía de usuario de recursos de SelectIO).

    
respondido por el The Photon

Lea otras preguntas en las etiquetas