Wie definiere ich eine Uhr in Quartus II?

Ich habe dieses Stück Code hier:

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;  

Wie kann ich in Quartus II der Software mitteilen, dass 'clk' eine Uhr sein soll, damit ich die maximale Frequenz (Fmax) herausfinden kann, mit der dieses Design ausgeführt werden kann? Immer wenn ich mein Design zusammenstelle, erhalte ich die Warnung „Keine Uhren im Design definiert“.

Für eine korrekte Fmax-Analyse müssen Sie a, b und das Ergebnis registrieren oder die richtigen Timing-Einschränkungen hinzufügen. Die folgenden Antworten fügen ein Register nur zum Ausgang (Ergebnis) hinzu, nicht zu den Eingängen.
Wie verwende ich das Schlüsselwort „registrieren“ für diese Signale richtig?

Antworten (3)

Das Problem ist, dass Sie eigentlich keine Uhr haben, oder genauer gesagt, keine Uhr verwendet wird . Überprüfen Sie Ihren Prozess:

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

Dieser Prozess verwendet die Uhr nicht. Sie wollten wahrscheinlich dies tun:

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

Dieser Code verwendet die Uhr und Quartus sollte dies melden.

Aktualisieren

Wenn dies Ihre oberste Ebene ist, hat sie keinen fmax-Wert für die Uhr, da sie keinen Register-zu-Register-Pfad hat. Ihre Eingangssignale aund bwerden nicht registriert, daher das Fehlen eines Register-zu-Register-Pfads. Das kannst du ganz einfach lösen:

process(clk)
begin
    if rising_edge(clk) then
        a_r <= a;
        b_r <= b;
        result <= a_r + b_r;
    end if;
end process;
Danke, die Software sieht jetzt, dass ich eine Uhr habe, aber wie finde ich die Fmax?
Ich habe Quartus ATM nicht auf meinem neuen Computer, aber ich denke, es ist irgendwo in den Berichten, auch wenn Sie die Frequenz der Uhr nicht angeben. Ich habe jedoch ein anderes Problem in Ihrem Test gesehen, ich habe eine Bearbeitung vorgenommen.

Ihr Design hat ein Signal namens clk, aber es wird nicht als Uhr verwendet. if(rising_edge(clk))Sie sollten Anweisungen im Prozesshauptteil hinzufügen .

Sobald Sie Ihr Design ändern, erkennt Quartus, dass clkes als Uhr verwendet wird, und Sie können mit Ihrer Fmax-Analyse fortfahren.

Sobald Sie eine Uhr in Ihre Logik aufgenommen haben (siehe andere Antworten), können Sie sich timequest ansehen, das Timing-Tool in Quartus. Sie können timequest verwenden, um eine sdc-Datei zu erstellen, um Ihr Design einzuschränken (oder Sie können eine manuell schreiben). Oft ist es sinnvoll, Quartus mitzuteilen, welche Fmax Sie benötigen, da es dann versuchen kann, dies zu erreichen.
Wenn Sie mehrere Uhren haben, ist dies besonders wichtig, da die Tools dann die Dinge priorisieren können, die auf Kosten der weniger kritischen Dinge schneller laufen müssen.