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 .