Forum: FPGA, VHDL & Co. Xilinx Zynq 7000: Delay Control


von Andre (Gast)


Lesenswert?

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

von rossi (Gast)


Lesenswert?

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.

von Andre (Gast)


Lesenswert?

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.

von rossi (Gast)


Lesenswert?

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.

von Andre (Gast)


Lesenswert?

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.
1
#include<ap_utils.h>
2
3
void delay(volatile int x, volatile bool input, volatile bool &output){
4
5
#pragma HLS INTERFACE ap_none port=input
6
#pragma HLS INTERFACE ap_none port=output
7
8
#pragma HLS INTERFACE s_axilite port=x bundle=CRTLS
9
10
  static int delayValue = 1;
11
12
  if (x<0){
13
    delayValue = 0;
14
  }else{
15
    delayValue= x;
16
  }
17
18
  if(input==false)
19
  {
20
    ap_wait_n(delayValue);
21
  }
22
        output = input;
23
}

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

von Duke Scarring (Gast)


Lesenswert?

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.

von Christoph Z. (christophz)


Lesenswert?

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?

von Christian R. (supachris)


Lesenswert?

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"

von Christian R. (supachris)


Lesenswert?

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.

: Bearbeitet durch User
von Andre (Gast)


Lesenswert?

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.

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.