En las FPGAS el reloj externo determina la frecuencia de trabajo. Después depende de como manejes el reloj internamente. En VHDL se programan mediante procesos. Un ejemplo:
Codigo:
divisor:process (clk,rst) begin
if ( rst ="1" ) then
contador <= 0;
elsif (clk="1" and clk"event ) then
if (contador = 62500) then
contador <= 0;
clk2 <= not clk2;
else
contador <= contador + 1;
end if;
end if;
end process divisor;
Este proceso es sensible a dos señales: el reloj "clk" y el reset "rst". Si se activa el reset, se pone a cero un contador. Si se da un flanco ascendente del reloj, este contador va aumentando hasta que llega a 62500 en cuyo caso se vuleve a poner a cero y se niega otra señal "clk2". Con esto hemos construido un divisor de frecuencia por 125000. Si la frecuencia del reloj de entrada es de 50MHz, la frecuencia de la señal "clk2" es de 400Hz. Esta señal de 400Hz se puede utilizar en otros procesos para realizar diferentes operaciones, por ejemplo, un PWM para un servo, lectura de un ADC, etc.
Hay FPGAs que tienen módulos DCM (Digital Clock Manager) con los que se puede programar una frecuencia de reloj mayor a la frecuencia de entrada, es decir, que a partir de una señal de 50MHz puedes generar otra de 80MHz por ejemplo o incluso de hasta 240MHz.
Si algo caracteriza a una FPGA es que son muy flexibles, para poder hacer con ellas lo que quieras.