Hallo Leute,
ich habe ein Problem. Und zwar bekomme ich bei der Implementierung im
Vivado den Fehler, den ich im Bild angehängt habe.
Ich habe leider keinen Plan wie ich das beheben soll. Ich habe gelesen
das ich die Sweep Phase ausschalten kann. Aber ich weiss nicht wie das
funktioniert.
Könnt ihr mir erklären was dieser Fehler bedeutet? Ich benutzt IP's die
mir nur als Black Box bekannt sind.
Danke
Grüsse
Max
Steht ja alles ganz genau da. Das IODELAY alleine geht nicht, da muss
immer ein IDELAYCTL dazu. Das musst du einfach noch mit instanziieren
und dann ist gut.
Christian R. schrieb:> Steht ja alles ganz genau da. Das IODELAY alleine geht nicht, da> muss> immer ein IDELAYCTL dazu. Das musst du einfach noch mit instanziieren> und dann ist gut.
Ok aber wo finde ich denn dieses IODELAY? Ich benutze im Block Designer
eigentlich nur 2 IP's. Auf den HDL Code von diesen IP's kann ich nicht
zugreifen. Ich habe lediglich einen Wrapper rumdum gebastelt.
Ich habe jetzt folgendes im README des IP's gefunden:
The design will require the instantiation of a XILINX IDELAYCTRL module
clocked at 200 Mhz.
Xilinx recommends using the IODELAY_GROUP attribute to associate IDELAYs
with a particular IDELAYCTRL
The IODELAY_GROUP string for the Rx D-PHY is "MIPI_IDLYCTRL";
Refer to Xilinx Constraints Guide (UG625) for details.
The IDELAYCTRL instance is not part of the IP. Its instantiation will
look something like this:
(* IODELAY_GROUP = "MIPI_IDLYCTRL" *) // Specifies group name for
associated IODELAYs and IDELAYCTRL
IDELAYCTRL #(.SIM_DEVICE("ULTRASCALE")) idelayctrl_1
(.REFCLK(your_200mhz_clk), .RDY(idelayctl_rdy), .RST(~reset_n));
Ich schätze ich muss die Instanzierung im Constraints file vornehmen?
Kann mir jemand sagen wie das funktioniert?
RST=>RST-- 1-bit input: Active high reset input. Asynchronous assert, synchronous deassert to
9
-- REFCLK.
10
);
Soll ich das jetzt einfach auf TOP ebene so instanziieren? Das Beispiel
in der README ist anscheinend ein Verilog Ausschnitt. Jetzt weiß ich
aber nicht was ich mit dem RDY Anschluss machen soll? Und was hat es mit
diesem
(* IODELAY_GROUP = "MIPI_IDLYCTRL" *)
Befehl auf sich? Wie schreibe ich das in VHDL?
Danke im Vorraus
Gruß
Max
Ja, das musst du irgendwo hin packen, wo es für dich am
übersichtlichsten ist. Wenn du im ganzen Design nur den einen einzigen
IDELAYCNTL hast, brauchst du die Gruppe nicht anzugeben. Falls du
mehrere hast, geht das dann im Normalfall über die Constraints, also im
XDC File.
Hallo Christian R.
Danke für deine Hilfe. Ich habe jetzt eine Instanz im Blockdesigner
angelegt. den RDY PIN hab ich jetzt einfach offen gelassen.
Der Error bei der Implementierung ist jetzt verschwunden. Leider bekomme
ich jetzt stattdessen haufen Timing Verletzungen. D.h. ich habe etwas
falsch gemacht oder etwas noch nicht gemacht. Ich weiss nicht wieviele
IDELAYCTRL im design sind. Ich habe nur eine erstellt. Vielleicht muss
ich doch diesen Gruppennamen, wie er im README steht definieren:
(* IODELAY_GROUP = "MIPI_IDLYCTRL" *)
Nur wie mache ich das? Im VHDL? Im Constraint(XDC file) ??
Ich wäre dir oder jemandem anderen sehr dankbar wenn ihr mir helfen
könnt.
Gruss
Max
Die Infos sind mal echt spärlich. Poste doch mal die Fehlermeldung.
Hängen die direkt mit dem iodelay zusammen oder fängt das Tool jetzt
erst an dir neue Baustellen zu zeigen?
Klakx schrieb:> Die Infos sind mal echt spärlich. Poste doch mal die> Fehlermeldung.> Hängen die direkt mit dem iodelay zusammen oder fängt das Tool jetzt> erst an dir neue Baustellen zu zeigen?
Die Fehlermeldung die ich oben gepostet habe bekomme ich nicht mehr weil
ich diese IDELAYCTRL instanz angelegt habe. Dafür aber viele Timing
Verletzungen.
Ok hier nochmal eine Zusammenfassung.
Ich arbeite mit dem Vivado 2015.4 mit dem Block Designer. Ich benutze
einen IP Core dem ich von außen über einen clocking wizard clocks zur
verfügung stelle. Wenn ich die Implementierung starte bekomme ich die
Fehlermeldung von dem ersten Post. Da steht das ich eine IDELAYCTRL
Instanz brauche. Wie sowas aussieht steht in der Readme Datei von dem IP
in Verilog. Dann hab ich im Block Designer auch so einen IDELAYCTRL
gefunden. Diesen habe ich wie in dem angehängtem Bild angeschlossen.
Nach erneuten Implementierung ist der Fehler (von oben) verschwunden und
es läuft durch. Das Problem ist aber das ich viele Timing Verletzungen
bekomme.
Gruss
Max
Max schrieb:> Die Fehlermeldung die ich oben gepostet habe bekomme ich nicht mehr weil> ich diese IDELAYCTRL instanz angelegt habe. Dafür aber viele Timing> Verletzungen.
Eben, das sind auch Fehler!
Und die sollte man sich anschauen bzw. wenn du Hilfe willst, dann
schreib die uns hier hin.
Das IDELAYCTRL ist eine simple Komponente. An der wird es wahrscheinlich
nicht mehr liegen.
Klakx schrieb:> Max schrieb:>> Die Fehlermeldung die ich oben gepostet habe bekomme ich nicht mehr weil>> ich diese IDELAYCTRL instanz angelegt habe. Dafür aber viele Timing>> Verletzungen.>> Eben, das sind auch Fehler!> Und die sollte man sich anschauen bzw. wenn du Hilfe willst, dann> schreib die uns hier hin.>> Das IDELAYCTRL ist eine simple Komponente. An der wird es wahrscheinlich> nicht mehr liegen.
Ok verstehe, ich hatte gedacht das diese schon etwas mit dem IDELAYCTRL
zu tun haben.
ich hab euch 1 Bild zur Timing Summery angehängt. Es sieht so aus als ob
es zu Verletzungen im IP selber kommt. Das sollte aber nicht so sein
denn der IP sollte funktionieren. Evtl bekommt er von mir nicht die
richten Clocks?
mfg
Max
Max schrieb:>> (* IODELAY_GROUP = "MIPI_IDLYCTRL" *)>
Das definert ein Attribute für die darauf folgende Komponente, in deinem
Fall "idelayctrl_1"
> Nur wie mache ich das? Im VHDL? Im Constraint(XDC file) ??>
In VHDL macht man das mit User defined Attributes, für die genaue Syntax
suche einfach danach, oder jemand der in VHDL fit ist postet es hier.
Der Timing Report zeigt Fehler zwischen zwei Taktdomänen basierend auf
zwei Plls bzw DCMs. Nun ist die Frage ob du die Übergänge synchronisiert
hast. Vllt fehlt auch ein asynchrones FIFO. Kann ich nicht sagen, da ich
dein Design nicht kenne.
Wie aber vermutet ist das eine andere Baustelle und hat mit IDELAYCTRL
wahrscheinlich nichts zu tun.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang