¿Cómo definir un reloj en Quartus II?

Tengo este fragmento de código aquí:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity first is
port(
a : in STD_LOGIC_VECTOR(3 downto 0);
b : in STD_LOGIC_VECTOR(3 downto 0);
result : out STD_LOGIC_VECTOR(3 downto 0);
clk : in STD_LOGIC
);
end first;

architecture behavioral of first is
begin
process(clk)
begin
result <= a + b;
end process;
end behavioral;  

En Quartus II, ¿cómo puedo decirle al software que quiero que 'clk' sea un reloj para poder averiguar la frecuencia máxima (Fmax) a la que se puede ejecutar este diseño? Cada vez que compilo mi diseño, aparece la advertencia 'No hay relojes definidos en el diseño'.

Para un análisis Fmax correcto, debe registrar a, b y el resultado o debe agregar restricciones de tiempo adecuadas. Las respuestas a continuación agregan un registro solo a la salida (resultado) no a las entradas.
¿Cómo uso correctamente la palabra clave 'registrar' para estas señales?

Respuestas (3)

El problema es que en realidad no tienes reloj, o para ser más precisos, no se usa ningún reloj . Revisa tu proceso:

process(clk)
begin
    result <= a + b;
end process;

Este proceso no utiliza el reloj. Probablemente querías hacer esto:

process(clk)
begin
    if rising_edge(clk) then
        result <= a + b;
    end if;
end process;

Este código usa el reloj y Quartus debería informarlo.

Actualizar

Si este es su nivel superior, no tendrá un valor fmax para el reloj porque no tiene una ruta de registro a registro. Sus señales de entrada ay bno están registradas, por lo tanto, la ausencia de una ruta de registro a registro. Puedes resolver esto fácilmente:

process(clk)
begin
    if rising_edge(clk) then
        a_r <= a;
        b_r <= b;
        result <= a_r + b_r;
    end if;
end process;
Gracias, el software ahora ve que tengo un reloj, pero ¿cómo puedo encontrar el Fmax?
No tengo Quartus ATM en mi nueva computadora, pero creo que está en algún lugar de los informes, incluso si no especifica la frecuencia del reloj. Sin embargo, vi otro problema en su prueba, hice una edición.

Su diseño tiene una señal llamada clk, pero no se usa como reloj. Debe agregar if(rising_edge(clk))declaraciones en el cuerpo del proceso.

Una vez que modifique su diseño, Quartus detectará que clkse utiliza como reloj y podrá continuar con su análisis de Fmax.

Una vez que haya incluido un reloj en su lógica (vea otras respuestas), puede echar un vistazo a timequest, la herramienta de cronometraje en Quartus. Puede usar timequest para crear un archivo sdc para restringir su diseño (o puede escribir uno manualmente). A menudo tiene sentido decirle a Quartus cuál es el Fmax que necesita, ya que entonces puede intentar lograrlo.
Si tiene varios relojes, esto es particularmente importante porque las herramientas pueden priorizar las cosas que deben ir más rápido a expensas de las cosas menos críticas.