Forum: FPGA, VHDL & Co. IODELAY Fehler


von Max (Gast)


Angehängte Dateien:

Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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?

von Max (Gast)


Lesenswert?

Ok ich habe jetzt herausgefunden, dass eine IDELACTRL Instatntiierung in 
VHDL folgendermaßen aussieht:
1
IDELAYCTRL_inst : IDELAYCTRL
2
generic map (
3
SIM_DEVICE => "7SERIES" -- Set the device version (7SERIES, ULTRASCALE)
4
)
5
port map (
6
RDY => RDY, -- 1-bit output: Ready output
7
REFCLK => REFCLK, -- 1-bit input: Reference clock input
8
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

von Christian R. (supachris)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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

von Klakx (Gast)


Lesenswert?

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?

von Max (Gast)


Angehängte Dateien:

Lesenswert?

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

von Klakx (Gast)


Lesenswert?

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.

von Max (Gast)


Angehängte Dateien:

Lesenswert?

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

von Lattice User (Gast)


Lesenswert?

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.

von Klakx (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.