Ich habe gerade ein Digilent Basys 3-Board (Artix-7 FPGA) bekommen und versuche, ein Programm zu erstellen, um Daten über die UART-USB-Verbindung zu übertragen. Ich habe ein Modul geschrieben, aber als ich versuchte, es zu implementieren, bekam ich einen Timing-Fehler. Ich habe den standardmäßigen 100-MHz-Takt verwendet, der mit dem Board geliefert wird. Ich denke jetzt, ich brauche etwas langsameres wie 50 MHz. Ich glaube nicht, dass ich die Standarduhr ändern kann, da diese von der Platine auf 100 MHz festgelegt ist, also denke ich, dass ich eine generierte Uhr erstellen muss. Ich habe meiner xdc-Datei die folgenden Zeilen hinzugefügt.
set_property PACKAGE_PIN W5 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
create_clock -period 10.000 -name sys_clk_pin -waveform {0.000 5.000} -add [get_ports clk]
create_generated_clock -divide_by 2 -source [get_ports clk] [get_ports clk2]
Ich bekomme dann den Fehler. Die erzeugte Uhr clk2 hat keinen logischen Pfad von der Hauptuhr sys_clk_pin. Übersehe ich einen Schritt. Muss ich etwas mehr tun, als es in der XDC-Datei zu erstellen? Hier ist der Header für mein Top-Level-Modul.
module serial_emitter(
output RsTx,
input RsRx,
input clk,
input clk2,
output [3:0] an,
output [6:0] seg);
Ich möchte, dass die langsamere Uhr dem clk2-Eingang zugeordnet wird.
Sie haben die Uhr für die statische Timing-Analyse eingeschränkt, aber Sie haben nie die Logik geschrieben, um eine Uhr durch zwei zu teilen:
reg r_clk_div;
always @(posedge i_clk) begin
r_clk_div <= !r_clk_div;
end
assign o_clk2 = r_clk_div;
Dies sollte zu einem DFF synthetisieren, das durch den Eingangstakt getaktet wird, Q über einen Inverter mit D verbunden ist, und dann ist der Q-Ausgang Ihr neuer Takt. Ihre Einschränkung teilt den Tools mit, dass Sie diese Uhr aus einer vorhandenen Uhr / Ressource generiert haben, und sie entsprechend zu behandeln.
Beachten Sie, dass ich für diesen Teiler keinen Reset habe, da ich in Ihrem Modul keinen gesehen habe, aber es ist möglicherweise keine schlechte Idee, vorübergehende Metastabilität zu vermeiden.
Entschuldigung für Tippfehler, ich bin auf dem Handy.
Jake Robinson
Chasep255
Tom Tischler
create_generated_clock
Anweisungen sind nichts anderes als Anweisungen an den statischen Timing-Analysator, um zu beschreiben, welche Uhren was sind. Sie müssen tatsächlich die Logik oder Primitive implementieren , die die Uhr erzeugen.Paebbels