Hallo zusammen,
meine Frage bezieht sich zum einen, worin der Unterschied zwischen den
beiden Deleay Funktionalitäten besteht?
Die erste Option wäre die SelectIO Methode, die im User Guide UG471
beschrieben ist "7 Series FPGAs SelectIO Resources User Guide" Kapitel 2
und der zweiten Option, dem IP-Core "Utility Idelay Control" aus dem
Vivado v2021.2 IP Catalog.
Als Test Boards verwende ich das Zturn Board (Xilinx Zynq-7020) von MYIR
Tech Limited.
Die zweite Frage bezieht sich auf variabel Verstellung des Delays.
Welche praktischen Möglichkeiten gibt es?
Danke und viele Grüße,
Andre
Andre schrieb:> Die zweite Frage bezieht sich auf variabel Verstellung des Delays.> Welche praktischen Möglichkeiten gibt es?
Variante 1:
Du kannst das Delay per CE und INC synchron zum C Takteingang einen Tap
pro Taktzyklus inkrementieren bzw. dekrementieren.
CE = 1, INC = 1 -> + 1 Tap / Takt
CE = 1, INC = 0 -> - 1 Tap / Takt
CE = 0, INC = x -> nix passiert.
Variante 2:
Synchron zum C Takteingang mit LD und CNTVALUEIN das neue Delay setzen.
Das steht aber auch alles in UG471 bei der Beschreibung der IDELAYE2
Primitive.
Damit das alles funktioniert, braucht es aber nicht nur ein IDELAYE2 pro
zu verzögerndem Pin, sondern auch noch eine Instanz des IDELAYCTRL pro
benutzter Clock Region.
Danke für die Antwort...
Wenn man einen Schritt zurückgeht und das Delay von der ARM9 CPU (Bare
Metal) verstellen möchte, sieht es so aus, als müsste man sich um das
Interfacing selbst kümmern.
Ich sehe keine AXI Schnittstelle über die Driver-Files im Vitis/SDK
erzeugt werden, um die Signale für Variante 1 (CE = 1, INC) oder
Variante 2 (LD und CNTVALUEIN) setzen zu können.
Zum Bespiel mit den IPs AXI GPIO oder dem Clock Wizard (Option Dynamic
Reconfig: activ) ist es möglich, die IPs über den Zynq zu steuern.
Prinzipiell braucht es da nur ein memory-mapped Register mit ausreichend
Bits an die die INC/CE Signale angeschlossen werden. Das sind eigentlich
nur wenige Zeilen VHDL/Verilog um einen passendes AXI-Modul zu bauen.
Siehe z. B. hier:
https://www.hackster.io/j-abate/integrating-zynq-ps-and-pl-with-memory-mapped-registers-292a42
Ich habe sowas allerdings noch nicht selbst gemacht. Unsere FPGA-Designs
haben Register auf die über ein PCIe-Interface vom Host-PC zugegriffen
wird. Damit funktioniert das IDELAY-Verschieben aber ohne großen
Aufwand.
Hallo,
ich hatte etwas Zeit, mich mit dem Thema weiterzubeschäftigen.
Das Board welches ich benutze (Zturn Board (Xilinx Zynq-7020) von MYIR
Tech Limited) bzw. die Variante des Zynq7000 hat kein ODelay an Board.
Bevor ich einen RTL-Ansatz verfolge, habe ich erste Tests mit dem
HLS-Tool von Xilinx gemacht.
Mit diesem Ansatz lässt sich ein Input-Signal um x-Clock-Cycles über das
AXI-Interface verschieben. Das konnte ich am Oszi-Messen.
Bei einer Frequenz von 10 Hz und x=1, gab es eine Verzögerung von ca. 40
ns.
Meine Frage zielt nun auf die Optimierung ab.
Wie fein kann ein Delay eingestellt werden, über HLS?
Schönes Wochenende
Jede 'Software' kann nur so gut sein, wie die zugrundeliegende Hardware.
Schau dir an, wie dein Delay in Hardware umgesetzt wird, dann kannst du
dir die Frage selbst beantworten.
Duke
P.S.: Die üblichen IO-Delays von Xilinx erlauben Abstufungen von einigen
zehn Picosekunden.
Andre schrieb:> Das Board welches ich benutze (Zturn Board (Xilinx Zynq-7020) von MYIR> Tech Limited) bzw. die Variante des Zynq7000 hat kein ODelay an Board.
Glaub ich nicht so richtig. Wie hast du das probiert bzw. festgestellt?
Denn gemäss Xilinx Dokumentation sollten einige Ausgänge ODELAY
anbieten:
(https://www.xilinx.com/content/dam/xilinx/support/documentation/data_sheets/ds190-Zynq-7000-Overview.pdf
Seite 17)
"With the exception of the supply pins and a few dedicated configuration
pins, all other PL pins have the same I/O capabilities, constrained only
by certain banking rules. [...] Any input and some outputs can be
individually delayed by up to 32 increments of 78 ps or 52 ps each. Such
delays are implemented as IDELAY and ODELAY. The number of delay steps
can be set by configuration and can also be incremented or decremented
while in use."
Leider habe ich innerhalb von 15 min nicht das richtige Dokument
gefunden, wo drinsteht welche Pins das jetzt genau beim Z-7020 sind (den
wir hier auch einsetzen).
In den Pinout Tabellen habe ich es jedenfalls nicht gefunden:
https://www.xilinx.com/content/dam/xilinx/support/documentation/user_guides/ug865-Zynq-7000-Pkg-Pinout.pdf
Wer weiss mehr?
Christoph Z. schrieb:> Andre schrieb:>> Das Board welches ich benutze (Zturn Board (Xilinx Zynq-7020) von MYIR>> Tech Limited) bzw. die Variante des Zynq7000 hat kein ODelay an Board.>> Glaub ich nicht so richtig. Wie hast du das probiert bzw. festgestellt?
Der Zynq 7020 ist ein Artix Derivat, hat daher nur High Range IO Bänke.
ODELAY gibts aber nur bei den High Performance Bänken:
UG471: "Every HP I/O block contains a programmable absolute delay
primitive called ODELAYE2"
Andre schrieb:> Wie fein kann ein Delay eingestellt werden, über HLS?
So schnell wie deine IOs getaktet werden können. Ich habe ein Artix
Design, bei dem ich die OSERDES dafür missbrauche, einen Puls in Länge
und Verzögerung in 1ns Schritten einzustellen (8:1 Mode DDR, 125 MHz
System-Takt, 500 MHz IO-Takt). Klappt bestens.
Christian R. schrieb:>> Wie fein kann ein Delay eingestellt werden, über HLS?>> So schnell wie deine IOs getaktet werden können. Ich habe ein Artix> Design, bei dem ich die OSERDES dafür missbrauche, einen Puls in Länge> und Verzögerung in 1ns Schritten einzustellen (8:1 Mode DDR, 125 MHz> System-Takt, 500 MHz IO-Takt). Klappt bestens.
Danke für den Tipp mit der OSERDES. Das werde bei Gelegenheit testen und
berichten.