Ich arbeite mit Artix 7 (xc7a15tftg256). Beim Ausführen der Implementierung wird die folgende Fehlermeldung angezeigt:
[Platz 30-574] Schlechte Platzierung für das Routing zwischen einem IO-Pin und BUFG. Wenn diese suboptimale Bedingung für dieses Design akzeptabel ist, können Sie die Einschränkung CLOCK_DEDICATED_ROUTE in der .xdc-Datei verwenden, um diese Nachricht zu einer WARNUNG herabzustufen. Von der Verwendung dieser Überschreibung wird jedoch dringend abgeraten. Diese Beispiele können direkt in der .xdc-Datei verwendet werden, um diese Uhrregel zu überschreiben. < set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets input_IBUF] >
input_IBUF_inst
(IBUF.O) ist gesperrtIOB_X0Y83
input_IBUF_BUFG_inst
(BUFG.I) wird provisorisch von clockplacer aufgesetztBUFGCTRL_X0Y30
Für meine Bewerbung prüfe ich rising_edge(input)
. Bitte geben Sie die Lösung für dieses Problem an.
Es wird empfohlen, taktfähige Pins (CC-Pins) für Takteingänge zu verwenden. Diese können zu BUFGs geroutet werden.
Aber der Fehler ist in einem anderen Teil Ihres Codes. Wie du geschrieben hast, verwendest du
if rising_edge(input) then
Sie können rise_edge nicht für Netze ohne Takt verwenden, dies befördert sie zu einem Netz mit Takt, was die Eingabe nicht ist.
Der richtige Weg ist, den Eingang mit 2 D-FF zu synchronisieren und danach eine Flankenerkennung hinzuzufügen (3. D-FF, Not-Gate, And-Gate). Alle FF werden von Ihrer Systemuhr gesteuert.
input_meta <= input when rising_edge(Clock); -- 1st synchronizer D-FF
input_sync <= input_meta when rising_edge(Clock); -- 2nd synchronizer D-FF
input_d <= input_sync when rising_edge(Clock); -- edge detection D-FF (d = delayed)
input_re <= not input_d and input_sync; -- edge detection equation (re = rising edge)
process(Clock)
begin
if rising_edge(Clock) then
if (input_re = '1') then
-- do something
end if;
end if;
end process;
rising_edge(input)
. Also hat er entweder ein echtes Taktnetz benannt input
(umständliche Benennung für eine Uhr) oder das OP hat eine steigende_Flanke für ein Datensignal verwendet, was (in den meisten Fällen) für die Synthese falsch ist. Das Eingeben von Taktsignalen in ein FPGA an nicht taktfähigen Pins ist ein Designfehler.
Schallwelle
input
es sich tatsächlich um ein Taktsignal handelt und Sie ein benutzerdefiniertes Board verwenden, würde ich sagen, führen Sie ein Redesign durch und stellen Sie sicher, dass Sie einen korrekten, dedizierten Takteingang verwenden. Wenninput
es sich nicht um eine Uhr als solche handelt, sondern nur um ein Signal, auf das Sie flankentriggern möchten, warum verwenden Sie stattdessen nicht einfach ein "echtes" Taktsignal, um es abzutasten?FarhadA