Forum: FPGA, VHDL & Co. 2 FPGAs bidirektional verbinden


von Tobias (. (Gast)


Lesenswert?

Wir haben ein ARM-Plattform mit einem FPGA, die mit einer IO-Funktion 
und Überwachung erweitert werden soll, die aber nicht mehr in den FPGA 
passt (bei Weitem nicht!).

Deshalb soll in das Gehäuse nachträglich eine weitere Platine eingesetzt 
werden, die einen weiteren FPGA, wahrscheinlich MAX10 oder etwas 
Ähnliches enthalten wird. Dieser FPGA braucht sehr viele Daten vom ARM 
und dem Haupt-FPGA, die in Blockrams gespeichert sind und die ich gerne 
"rüberstreamen" würde.

Die Hauptplatine hat aber nur noch 4 Lötaugen frei, die an FPGA-Pins 
angeschlossen sind. Die sind als Testpins ausgeführt, um einen Tastkopf 
draufhalten zu können. Die Funktion kann ich im FPGA aber einstellen.

Die Frage ist jetzt, wie ich das verbinden kann und welche Bandbreiten 
ich erwarten kann. Der Abstand der Platinen wird etwa 5cm sein.

Folgende Ideen:

A) bidirektionaler 3-fach serieller Bus, full duplex
- 4 Leitungen single ended
- 3 BIT-Bus mit Takt-Leitung
- auf allen 3 Leitungen ein serielles 11-Bit Protokoll
- Steuercodes, internes proprietäres Format
- es wird per Protokoll umgeschaltet und der Slave FPGA sendet
- Bandbreite ca 60% Senden, 30%, Empfangen, 10% Overhead
- Effizienz 8/11 * 90% = 70%, davon 30% Daten = 27% * 3 =80%
- Geschätzt 100 MHz Leitung -> 80Mbps
- Auslastung wegen Gleichverteilung von Schreiben und Lesen bei 70%
- 50Mbps Nutzdaten hoch
- 100Mbps Daten+Addressen runter

B) Alternativ, statische Richtungen:
- eine Leitung uplink, 2 Leitungen downlink, + Takt
- Keine Umschaltverluste, dafür statischer und weniger gut ausgelastet, 
weil immer eine Leitung für Daten brach liegt.
- 60 Mbps Addressen
- 60 Mbps entweder hoch oder runter - > 30MHz

C) 2 Serielle Verbindungen mit LVDS, dafür schneller
- 2 Leitungen LVDS uplink
- 2 Leitungen LVDS downlink
- senden synchron, Empfangen asynchron mit Rekonstruktion, Taktrate 
bekannt, aber anders Quarz.
- Geschätzte Geschwindigkeit 200 MHz (????)
- 100 Mbps downlink Addressen
- 100 Mbps downlink Daten Schreiben
- 200 Mpbs uplink Daten Lesen, die aber nicht ausgelastet sind, weil nur 
1:2 gelesen wird -> 100 M * 0,5 = 50M

Aufgrund der Datenverhältnisse, dass man doppelt so viel schreiben muss, 
wie man statistisch liest, ist der dynamische Bus A) der Bessere. LVDS 
wäre wahrscheinlich technisch stabiler, aber ich muss dann auch 
mindestens doppelt so viel Rate haben, wie bei B).

Wie schnell kriegt man das single ended hin?

Und wie schnell geht es über LVDS?

Wie verbindet man das praktisch am Besten? Serielle / Parallele 
Terminierung? - Wo?

Verkabelung?

hier gab es das schon einmal, aber auch ohne verwertbares Ergebnis:
Beitrag "2 Spartans verbinden, welcher IO Standard"

von Tobias (. (Gast)


Lesenswert?

Eine Idee habe ich noch: Kann man LVDS auch umschalten?

Der FPGA hat noch SERDES, aber das wäre ein größerer Umbau wegen PLLs 
wie es aussieht und mit denen kenne ich mich auch nicht genug aus.

von mh (Gast)


Lesenswert?

Das sagt Dir eigentlich alles das Manual Deines geheimen FPGAs...

von Tobias (. (Gast)


Lesenswert?

Das FPGA-Manual nimmt einem keine Entscheidung ab, was Protokoll 
anbelangt und macht auch keine Vorgbane für die Leitungsführung. 
Höchstens das mit der LVDS-Umschaltung kann ich recherchieren. Ich lese 
mich gerade in die Serializer ein (Cyclone IV), dort steht nicht einmal 
etwas von Randbedingungen für die Leitungsführung. Wird wohl in einem 
Extra-Datenblatt sein.

Die Transceiver wären ja ganz nett, da wenigstens 600Mbps, nur brauchen 
die sicher eine noch qualitativ höhere Leitungsführung und deshalb werde 
ich die kaum per Luftverdrahtung aufs Nachbar-FPGA bekommen. Und 
obendrein muss dann auch einiges an zusätzlichen Resourcen verbraucht 
werden, die wahrscheinlich nicht vorhanden sind.

Ich brauche also eine Einschätzung, was man da zu erwarten hat.

Ich habe bisher selbst geroutete Platinen gebaut, auf denen Datenbusse 
um 100MHz aufs FPGA gingen. Das war in einem Cyclone noch gut zu machen. 
Aber natürlich befand sich die CPU in relativer Nähe zum FPGA und wenn 
nicht, war es dennoch das gleiche PCB.

von Martin S. (strubi)


Lesenswert?

Tobias N. schrieb:
> Ich brauche also eine Einschätzung, was man da zu erwarten hat.

Typischerweise das Redesign der Hauptplatine (mal aus der 
wirtschaftlichen Perspektive gesehen). Ansonsten sind alle 'guten Ideen' 
ad absurdum, wenn nicht gerade zufaellig die richtigen LVDS-Pins frei 
sind und es zufaellig mit der Impedanz und manuellen 
Leiterlaengenkorrektur gerade so hinhaut.

von Gustl B. (-gb-)


Lesenswert?

Der TO hat doch gar keine Mindestanforderungen genannt. Also ist fast 
alles gut genug.

Tja was tatsächlich geht hängt sehr davon ab wie die Schaltung und das 
Layout der beiden Platinen aussieht. 5 cm zwischen den Platinen wird 
egal wenn die Platinen groß sind und die FPGAs trotzdem weit auseinander 
sitzen.

Ich würde da ein USB3 Kabel ranlöten, also beide Superspeed Paare 
verwenden. Und natürlich auch die Masse schön mit verbinden. Und dann 
einfach testen wie schnell du dein LVDS machen kannst bis es Fehler 
gibt.

von Christoph Z. (christophz)


Lesenswert?

Tobias N. schrieb:
> Dieser FPGA braucht sehr viele Daten vom ARM
> und dem Haupt-FPGA, die in Blockrams gespeichert sind und die ich gerne
> "rüberstreamen" würde.

Kannst du uns hier noch grobe Zahlen nennen?
- Menge Daten pro Zeit
- Latenz von Anfrage zur Antwort
- Anzahl Anfragen pro Sekunde
- Grosse zusammenhängende Datenblöcke oder kurze häppchen dafür sehr oft

Das hat erheblichen Einfluss, was tauglich sein kann oder nicht.

Was mir an allen deinen Vorschlagen auffällt:
Musst du wirklich für jede einzelne Anfrage die Adresse mitschicken oder 
reicht da auch eine Startadresse und dann als Antwort ein Block Daten 
mit Variabler/Fixer Länge?

Tobias N. schrieb:
> A) bidirektionaler 3-fach serieller Bus, full duplex
> B) Alternativ, statische Richtungen:

Du führst den Takt in Richtung Slave, der kann dann alles einfach 
Empfangen (so lange die Leitungen ungefähr gleich lang sind aber das 
kanns du ja auf dem Zusatz PCB sonst Kompensieren).

Und wie geschiet das Rückwärts zum Master hin? Muss der Slave dann so 
schnell reagieren, dass seine Antwort dann genüg früh wieder beim Master 
ankommt?
Kann schon gehen, macht deine Timing Anforderungen einfach strenger.

Du kannst dir auch bei Single-endet Gedanken über Clock-Recovery machen.

> C) 2 Serielle Verbindungen mit LVDS, dafür schneller
LVDS geht wohl sogar noch schneller aber wie Martin geschrieben hat, 
wohl kaum ohne ein Redesign auf differenzielle Paare.
Clock-Data-Recovery mit 8/10 bit Codierung geht super.

Andere Ideen:
- Vielleicht reicht ja am Ende doch SPI mit 20 bis 50 MHz :-)
- Single-ended, statische Richtung mit Data/Strobe Codierung (z. B. bei 
Firewire oder SpaceWire)

von Uwe Bonnes (Gast)


Lesenswert?

"Junge, keine Gewalt, nimm ein groesseres FPGA"

von Techniker (Gast)


Lesenswert?

Ich würde es einfach testen, da sehr kabel- und störungsabhängig. LVDS 
hat in jedem Fall den Vorteil der größeren Störsicherheit gegenüber 
Signalen von Außen. Siehe EEE 1596.3 Es kommt auch drauf an, ob eine 
Leitungscode benutzt wird, der Takt rekonstruiert wird und was noch an 
overhead hinein muss.

Wenn es mit den gematchten Leitungen nicht passt, dann eben händisch mit 
Spannungsteiler und serieller Terminierung, wobei dann 2 halb so 
schnelle serielle Datenströme sicher schneller sind.

von Tobias (. (Gast)


Lesenswert?

Uwe Bonnes schrieb:
> "Junge, keine Gewalt, nimm ein groesseres FPGA"

Die bestehenden Systeme sollen damit auch ausgestattet werden, was 
bedeuten würden, die Elektronik wegzuwerfen. Aus Gründen der 
funktionalen Sicherheit soll es auch in einen anderen Baustein, weil 
dieser eben überwachen soll.

Martin S. schrieb:
> Redesign der Hauptplatine (mal aus der
> wirtschaftlichen Perspektive gesehen).
...

> zufaellig die richtigen LVDS-Pins frei sind
Es sind in der Tat zwei benachbarte Pins ausgeführt und das sollten 
LVDS-fähige IOs sein. Könnte nur mit der benötigten Bankspannung 
klemmen. Werde ich checken.

Gustl B. schrieb:
> 5 cm zwischen den Platinen wird
> egal wenn die Platinen groß sind und die FPGAs trotzdem weit auseinander
> sitzen.
Die Testpunkte sitzen soweit aussen, dass es am Ende tatsächlich 5cm 
werden. Maximal vielleicht 8, durch gekrümmte Kabel.

> Ich würde da ein USB3 Kabel ranlöten, also beide Superspeed Paare
> verwenden. Und natürlich auch die Masse schön mit verbinden.
"Schön Masse verbinden" heißt konkret was? Abschirmung? Oder 
zwischenliegende Leitungen?

von Tobias (. (Gast)


Lesenswert?

Christoph Z. schrieb:
> Kannst du uns hier noch grobe Zahlen nennen?
Das Protokoll ist noch nicht ganz klar. Sicher kann man da funktionell 
etwas einsparen, aber zunächst geht es um die Bandbreite an sich. 
Geplant ist ein mehr oder weniger dichtes Streamen von Daten, um eine 
möglichst hohe Überwachungsrate zu erhalten.

> Du kannst dir auch bei Single-endet Gedanken über Clock-Recovery machen.
> Clock-Data-Recovery mit 8/10 bit Codierung geht super.
Literatur-Tipp?

von Gustl B. (-gb-)


Lesenswert?

Tobias N. schrieb:
> Es sind in der Tat zwei benachbarte Pins ausgeführt und das sollten
> LVDS-fähige IOs sein. Könnte nur mit der benötigten Bankspannung
> klemmen. Werde ich checken.

Das wäre erstmal wichtig.

Tobias N. schrieb:
> "Schön Masse verbinden" heißt konkret was? Abschirmung? Oder
> zwischenliegende Leitungen?

Die Massen der beiden Platinen sollen möglichst niederohmig verbunden 
werden. Im USB Kabel sind dazu Masseleitungen dabei. Meist eine je 
Superspeed Paar und dann noch eine von der normalen Stromversorgungs 
Masse. Alle möglichst nahe an den anderen Anschlüssen mit Masse 
verbinden. Gut wäre es wenn du dazu Fotos machen könntest und da auch 
schreibst welcher der Testpunkte welcher FPGA Pin bei welchem FPGA 
(genaue Modellnummer) ist.
Aber selbst wenn deine Pins nicht zu LVDS Paaren gehören kannst du die 
gegenphasig betreiben (dann Spannung statt Strom). Ob du da viel 
gewinnst weiß ich aber nicht.


Tobias N. schrieb:
> Das Protokoll ist noch nicht ganz klar. Sicher kann man da funktionell
> etwas einsparen, aber zunächst geht es um die Bandbreite an sich.
> Geplant ist ein mehr oder weniger dichtes Streamen von Daten, um eine
> möglichst hohe Überwachungsrate zu erhalten.

Nun, das Problem ist, dass deine Takte der beiden FPGAs 
auseinanderlaufen werden. Du musst also entweder
a) einen Takt mitliefern, das geht
   1) über eine eigene Leitung - Nachteil, kostet eine Leitung
   2) über eine eingebettete Clock im Datensignal mit z. B. 8B/10B 
Kodierung - Nachteil: Ist aufwändiger und du kannst je 10 Bits auf der 
Leitung nur 8 Bit Nutzdaten übertragen. Vorteil: Du verlierst keine 
Leitung und du kannst das auch bei hoher Bitrate machen.
b) etwas asynchrones fahren. Du könntest am Anfang nur für einen Test 
zweimal UART über die LVDS machen. Einen in jede Richtung. Wenn du am 
Empfänger SerDes verwendest für die Überabtastung, dann solltest du da 
auch > 100 MBit/s hinbekommen. Nachteil: Das kann keine sehr hohen 
Datenraten und du nutzt ebenfalls nur 8 von 10 Bits.

Also zu bevorzugen wäre wirklich 8B/10B Kodierung und dann eine hohe 
Bitrate. Also mit einem SerDes ausgeben und ebenfalls mit einem SerDes 
empfangen.

Fotos wären gut und die genau Bezeichnung vom FPGA und den Pins am FPGA.

von Martin S. (strubi)


Lesenswert?

Tobias N. schrieb:
> Aus Gründen der
> funktionalen Sicherheit soll es auch in einen anderen Baustein, weil
> dieser eben überwachen soll.

Das macht mich jetzt doch etwas stutzig. Dem gegenueber soll also 
stehen:
- 'fliegende' Verkabelung
- Zusaetzliche Logik, die verifiziert werden muss
- Custom-Protokoll fuer Datentransfer

Und das dann alles zum TueV? Ich will hier niemandem auf die Fuesse 
treten, aber das klingt fuer mich nach grober Stolperfalle.

Wenn es dennoch mit einem externen Baustein laufen soll: Bloss so simpel 
wie moeglich halten. Normalerweise muss man keine Daten streamen, 
sondern nur ein CRC-Vergleichsprotokoll fahren. Dann reicht ein 
einfaches SPI-Interface.

Fuer eine kritische Anwendung (in der ich haften muesste) wurde so etwas 
aehnliches fuer einen Programmablauf implementiert. Der bereits 
zertifizierte externe Controller ueberprueft nur noch ca. 20 
Checksummen/s per SPI (i2c ist tabu) und stimuliert einen 
Watchdog-Schaltkreis.
Was dann bleibt, ist, an den kritischen Stellen die 'Checkpoints' fuer 
die CRC-Bildung einzufuegen. Das ist mehr Analyse (Wahrscheinlichkeiten) 
als Entwicklung.

von Bolle (Gast)


Lesenswert?

Martin S. schrieb:
> Tobias N. schrieb:
>> Aus Gründen der
>> funktionalen Sicherheit soll es auch in einen anderen Baustein, weil
>> dieser eben überwachen soll.
>
> Das macht mich jetzt doch etwas stutzig.

Datt Mopped kommt so aber nech übern TÜV ;)

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Martin S. schrieb:
> Tobias N. schrieb:
>> Aus Gründen der
>> funktionalen Sicherheit soll es auch in einen anderen Baustein, weil
>> dieser eben überwachen soll.
>
> Das macht mich jetzt doch etwas stutzig.
Meine Frage wäre, WAS da alles überwacht und abgesichert werden soll und 
ob mit dem Begriff "funktionale Sicherheit" auch wirklich das gemeint 
ist, was man offiziell darunter versteht.

Tobias N. schrieb:
>> Du kannst dir auch bei Single-endet Gedanken über Clock-Recovery machen.
>> Clock-Data-Recovery mit 8/10 bit Codierung geht super.
> Literatur-Tipp?
Das gibt es als Core im Megawizzard, bei den Transceivern. Man muss aber 
nicht 8/10 betreiben (wegen "Dateneffizienz"-Argument oben). Kommt 
letzlich auf den FPGA an, ob man das manuell baut oder einen fertigen 
Transportlayer verwendet. Für die höherwertigen Xilinx Bausteine gibt es 
u.a. das Aurora mit B64B66 Codierung.

Was die Verbindungen und - qualität angeht, würde ich das mal ansehen:
https://www.xilinx.com/publications/archives/books/serialio.pdf

Hohe Raten erfordern in jedem Fall LVDS über SER-IOs - und ein 
PCB-Design dafür, bzw man muss im Empfänger einiges tun. Wenn das 
nachgerüstet werden muss, wird man irgendwo bei 50...100 MHz landen. Das 
hängt aber auch davon ab, wie der Signaldatenstrom aussieht: Für meine 
Chip to Chip Verbindungen habe ich anfänglich S/PDIF mit höheren 
Tatkraten gefahren. Mit den verfügbaren Standard-Bausteinen waren da 192 
kHz/64 Bit drin, über COAX, bei 48 Bit Nutzdaten. S/PDIF ist "BMC" und 
der Empfänger rekonstruiert sich den Takt selber. Klappte über etliche 
Meter (industriell auch durch EMI-verseuchte Maschinen!) und ist super 
billig.

Wenn du keine besonderen EMI-Probleme hast, geht auch erheblich mehr. 
Konkretes Beispiel: 150 MHz Video, 20cm über Flachband von Platine zu 
Platine mit komplettem 33-Bit Bus mit einem Spartan 6, single ended - 
allerdings mit per ISE-constraints justierten IO-Delays auf der 
Sendeseite (ca 100ps Koheränz) und einem Video-Receiver-Chip, der seine 
Eingänge trainiert. Bei nur 4 Leitungen würde ich keinen Takt 
verschwenden, sondern alle 4 als einzelne, SER-Ströme fahren und gfs 
Leitungs-Code, Daten-Redundanz und Scrambling einbauen. Bei 
individuellen Leitungen braucht man kein Eintrainieren.

Das Maximum, was ich über eine Leitung ohne Transceiver über ein paar 
Zentimeter zu einem Folge-FPGA geschafft habe, waren 320Mbps: Kapazitiv 
gekoppelt, intern terminiert, B4B7 Code mit 2 NRZ-Ausgleichs-Bits und 
einem FEC-Protokoll. Der Takt ist dann da mit drin und Fehler wirden 
korrigiert. Ist aber eine statistische Sache, wie weit man von den 
Problemfällen wegbleiben will. Liegen die Ausgänge noch eng beieinander, 
kommt noch ein SSO-Problem.

Momentan fahre ich ein 8-Bus-System mit knapp 8x150 Mbps netto (192kHz x 
256 ch). Ohne Codierung und Fehlerkorrektur ist es die Hälfte; bei 4 
Kanälen vlt. 4x75.

: Bearbeitet durch User
von Computer-Spezialist (Gast)


Lesenswert?

Gustl B. schrieb:
> Ob du da viel
> gewinnst weiß ich aber nicht.

Wahrscheinlich nicht, weil ihm der headroom der Signale verloren geht.
Gleichtaktunterdrückung funktioniert auch nur, wenn die Signale wirklich 
synchron laufen.

von Rolf S. (audiorolf)


Lesenswert?

Gustl B. schrieb:
> Nun, das Problem ist, dass deine Takte der beiden FPGAs
> auseinanderlaufen werden. Du musst also entweder
> a) einen Takt mitliefern, das geht

Das Allereinfachste wäre sicher, dass beide FPGAs aus demselben Takt 
gespeist werden. Dafür müssen ja Pins an beiden Submoduln vorhanden 
sein.

von Tobias (. (Gast)


Angehängte Dateien:

Lesenswert?

Gustl B. schrieb:
> Also zu bevorzugen wäre wirklich 8B/10B Kodierung und dann eine hohe
> Bitrate. Also mit einem SerDes ausgeben und ebenfalls mit einem SerDes
> empfangen.
Ich konnte den 8b10b-core von open cores laden und simulieren. Scheint 
zu stimmen. Er wurde um einen Serialisierung in der Testbench erweitert 
mit der ich das probieren möchte. Die Frage wäre jetzt, wie ich aus dem 
1-Bit Input zu einem Takt komme?

In der Testbench habe ich probehalber einfach den Sendetakt genutzt. 
Aber das Ziel wäre, ohne einen extra Takt zu arbeiten und nur das Signal 
zu versenden. Wie macht man das?
Abtasten und asynchron wie bei einer UART? Oder gibt es da einen Trick?

Mein Problem ist, dass ich das zwar asynchron machen könnte, aber für 
die gewünschte Taktfrequenz von 100 MHz einen wenigstens um Faktor 2 
größeren Takt bräuchte.

Mit SERDES wäre es wieder eine Extra-Leitung.

Außerdem habe ich versucht, eines der files zu synthetisieren. Es kommt
1
  SYNCRST: process (RESET, XLRESET, SBYTECLK)
2
  begin
3
    if SBYTECLK'event and SBYTECLK = '1' then
4
      XLRESET <= RESET ;
5
    elsif SBYTECLK'event and SBYTECLK = '0' then
6
      LRESET <= XLRESET ;
7
    end if ;
8
  end process SYNCRST ;
Xilinx meckert, dass das nicht zulässig sei.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?


von Jayden Bubblegum Blue (Gast)


Lesenswert?

Der Code bräuchte DDR-Register.

Ich weiß nicht wie das bei xilinx ist. Bei Actel musste man ein DDR IO 
instantieren und dann intern mit doppelten Takt anfahren, wenn ich mich 
richtig erinnere.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Jayden Bubblegum Blue schrieb:
> er Code bräuchte DDR-Register.
Damit wäre aber nur das interne Taktproblem gelöst, daß nicht deswegen 
überabgetastet werden muss. Beim klassischen Einlesen asynchroner Daten 
muss aber intern in jedem Fall ein Takt her, der schneller ist, dass das 
zweifache der Daten (Grundfrequenz), sonst geht irgendwann eine Flanke 
flöten. Da der aussendende Takt aber ungefähr bekannt ist, muss man nur 
den Jitter in Betracht ziehen. Bei 100 MHz Daten reichen 2x125 MHz 
dicke.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Uwe B. schrieb:
> PonyLink
Ist ziemlich aufgebläht mit AXIS und allem, hat aber Decoder / Encoder 
schon verbaut. Immerhin "100 MBit/s at 166 MHz". Fast 1/3 von meinem :-)

von Jayden Bubblegum Blue (Gast)


Lesenswert?

Jürgen S. schrieb:
> Damit wäre aber nur das interne Taktproblem gelöst, daß nicht deswegen
> überabgetastet werden muss.

Wollte nur darauf hinweisen,warum die Synthese meckert  :-)

von Duke Scarring (Gast)


Lesenswert?

Tobias N. schrieb:
> Aber das Ziel wäre, ohne einen extra Takt zu arbeiten und nur das Signal
> zu versenden. Wie macht man das?
Das Stichwort heißt "clock and data recovery (CDR)", "clock recovery" 
bzw. Taktrückgewinnung:
https://de.wikipedia.org/wiki/Taktr%C3%BCckgewinnung
Üblicherweise füttert man mit dem 'gemischten' Signal eine PLL, die mit 
den Flanken nachgeführt wird.

Duke

von Christoph Z. (christophz)


Lesenswert?

Tobias N. schrieb:
> Aber das Ziel wäre, ohne einen extra Takt zu arbeiten und nur das Signal
> zu versenden. Wie macht man das?
> Abtasten und asynchron wie bei einer UART? Oder gibt es da einen Trick?

Ich habe mich damals an dieser Präsentation orientiert:
Digital Phase Follower -- Deserializer in Low-Cost FPGA
https://ppt-online.org/8875

von Gustl B. (-gb-)


Lesenswert?

Auf Folie 3 steht was von PLL, ich habe das mal versucht zu simulieren, 
also den seriellen enkodierten Datenstrom in eine PLL gefüttert. Aber 
die lockt nicht.
Geht das überhaupt das Clock Recovery nur mit PLL? Ich tendiere zu ja 
wenn die seriellen Daten genug Flanken haben.

Manchmal lockt die PLL. Kann man irgendwie die Trägheit einstellen oder 
so?

: Bearbeitet durch User
von Duke Scarring (Gast)


Lesenswert?

Gustl B. schrieb:
> Geht das überhaupt das Clock Recovery nur mit PLL? Ich tendiere zu ja
> wenn die seriellen Daten genug Flanken haben.
Prinzipiell ja, aber es muss alles passen:
1. man braucht den richtigen Phasenkomparator,
2. das Schleifenfilter sollte passen,
3. der VCO sollte schon ungefähr mit der nominellen Bitrate laufen und 
sich auch nicht zu arg verstimmen lassen
4. im Datensignal müssen genügend Flanken drin sein. Dafür sorgt z.B. 
die 8B10B-Kodierung.

Ein üblicher Phasenkomperator benötigt immer die Flanken von beiden 
Signalen (Referenz und VCO). Hier braucht man einen, der die fehlende 
Eingangsflanke ignoriert.
Sonst wird bei fehlenden Flanken versucht die Frequenz zu senken, da ja 
die 'Frequenzen' nicht gleich sind.
Der Phasenkomparator muß ähnlich arbeiten wie beim FM-Empfänger im Auto: 
Da will man auch nicht, das der Sender wegläuft, nur weil das Signal 
schwach wird.

Duke

von Klakx -. (klakx)


Lesenswert?

Christoph Z. schrieb:
> Tobias N. schrieb:
>> Aber das Ziel wäre, ohne einen extra Takt zu arbeiten und nur das Signal
>> zu versenden. Wie macht man das?
>> Abtasten und asynchron wie bei einer UART? Oder gibt es da einen Trick?
>
> Ich habe mich damals an dieser Präsentation orientiert:
> Digital Phase Follower -- Deserializer in Low-Cost FPGA
> https://ppt-online.org/8875

Eine Multiphase-CDR ist eine gute Wahl, wenn der Takt limitiert ist.
Die Aufbereitung ist aber relativ aufwendig. Insbesondere muss man 
beachten, dass der Skew der verschiedenen Taktphase möglichst gleich am 
Ziel ankommt.

Alternativ existieren auch CDR-Konzepte über IDELAY-Regelschleifen. 
Nicht unbedingt einfacher.

Auch eine tolle Idee über einen NCO. z.B. "NCO based CDR implementation 
in FPGA - Xilinx XOHW20-203". Ein offenes Git-Projekt dazu ist mir noch 
nicht bekannt.

Eine schnelle, gute All-Digital-CDR zu bauen, benötigt grob den gleichen 
Aufwand wie die Protokollschicht der Übertragungstrecke.

Bitte auch nicht den Aligner vergessen, denn ein Shift um ein bis 
mehrere Bits ist nicht ungewöhnlich.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Klakx -. schrieb:
> Alternativ existieren auch CDR-Konzepte über IDELAY-Regelschleifen.
> Nicht unbedingt einfacher.
Finde ich schon einfacher. Mit einem doppelten Takt detektiert man immer 
eine Flanke (wenn vorhanden) und nimmt dann das Signal des anderen 
cycles, befindet sich also ziemlich in der Mitte des Bits. Man muss das 
Delay nur rotieren, das man sicher ist, immer etwas schneller als der 
richtige Takt zu sein und im Fall des Überlaufens eben 2-3 delays 
zurückspringen. Damit rennt die Taktflanke des Lesetaktes immer "gegen 
die Wand und prallt ab". Wenn keine Flanke erkennbar ist, regelt man 
nicht weiter und liest nur (Bit eh konstant). Wichtig ist nur, dass das 
update der Schleife nicht so schnell passiert, dass der Takt 
rausspringt. Es gibt daher einen maximalen Jitter, der verträglich ist. 
Sind rund 15%-20% der Taktperiode.

Klakx -. schrieb:
> Bitte auch nicht den Aligner vergessen, denn ein Shift um ein bis
> mehrere Bits ist nicht ungewöhnlich.
Die im paper vorgeschlagene Lösung für denTeilchenbeschleuniger ist eine 
Sicherheitslösung, die für weite Strecken gedacht ist, hier aber nicht 
so gut taugt. Die Daten haben nur 62,5 MBit müssen im Manchester-Code 
vorliegen, haben also eine geringe Bandbreite / Spektrum. Das lässt sich 
einfach dekodieren, ist aber nur sinnvoll, wenn man wirklich nur eine 
Leitung hat. Im Grunde ist es so, als würde man 2 Leitungen mit jeweils 
dem halben Takt und der halben Rate parallel fahren. Mit 8/10 hat man 
aber 160% davon.

Interessanterweise brauchen die Autoren für 125 einen Xilinx Kintex! 
Würde man die Signalverarbeitung etwas schlauer machen, z.B. mit einem 
IQ-Mischer, käme man auf 2 Pfade mit der halben der hier 6fachen PLL 
aus. Macht 187,5 MHz und geht auch in einem Artix.

von Komisch (Gast)


Lesenswert?

Jürgen S. schrieb:
> Interessanterweise brauchen die Autoren für 125 einen Xilinx Kintex!

Forschungseinrichtungen haben i.d.R. die teuren FPGA Boards rumliegen 
bzw. Budget dafür, also machen die das halt damit. Ist bei den 
Stückzahlen (und bei den sonstigen Kosten) um die es da geht egal was 
das FPGA kostet.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Komisch schrieb:
> Forschungseinrichtungen haben i.d.R. die teuren FPGA Boards rumliegen
> bzw. Budget dafür, also machen die das halt damit. Ist bei den
> Stückzahlen (und bei den sonstigen Kosten) um die es da geht egal was
> das FPGA kostet.

Das ist so und hat viel damit zu tun, daß sie diese boards vergünstigt 
bekommen. Damit lernen sie aber nicht unbedingt das Richtige:

Zu einem soliden Design gehört, nur Bauteile zu nutzen, die auch 
benötigt werden und bei FPGAs heisst das, die Schaltung klein 
auszulegen. Wenigstens könnte man erwarten, daß mehrere Wege aufgezeigt 
und dann anhand von Kriterien ein plausibler ausgewählt wird.

Es scheint in der Tat so, daß der Versuch der Hersteller, Studenten mit 
Baukästen auszustatten, damit sie schnell und richtig groß designen und 
damit Anforderungen an die Chipfläche zu generieren, Erfolg gehabt hat! 
Es wird verschwenderisch gebaut. Auch wenn die Studenten 10 Jahre im Job 
sind, ändert sich das nicht mehr. Aber wehe du kommst und zeigst auf, 
wie es mit dem nächst kleineren FPGA ginge. Dann ist der Bär los. Dann 
wird die Lösung verteidigt, wie die bachelor-Arbeit.

von Tim (Gast)


Lesenswert?

Ich finde das Kintex Board KC705 ist ein ziemlich guter Allrounder.
Auf ein Artix kann man dann immer noch gehen, wenn nicht mehr das große 
Debugging droht. Die 7er Generation ist dabei recht ähnlich.

Auch ein Virtex hat seinen Zweck. Forschungseinrichtungen überlegen sich 
das gut. Geschenkt gibt's die nicht. Hauptmarkt ist jedoch Datacenter 
für diese FPGAs. Nebenbei, auf dem Mars fährt auch ein Kintex mit.

Für billig und klein kann man gleich auf lattice gehen. Besonders in 
solchen GT-losen FPGAs sind o.g. CDRs interessant.

Es kommt immer auf die Anwendung an und ob jemand bereit es zu zahlen. 
Ab Ethernet mit Stack wird es auch auf dem Artix eng.

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Tim schrieb:
> Ab Ethernet mit Stack wird es auch auf dem Artix eng.
Wieso? Ethernet habe ich schon auf dem S6 gemacht.

von Komisch (Gast)


Lesenswert?

Jürgen S. schrieb:
> Tim schrieb:
>> Ab Ethernet mit Stack wird es auch auf dem Artix eng.
> Wieso? Ethernet habe ich schon auf dem S6 gemacht.


Ja, das geht auf nem kleinen LX9.
https://www.avnet.com/shop/us/products/avnet-engineering-services/aes-s6mb-lx9-g-3074457345628965461/

Und der hat signifikant weniger Ressourcen als der kleinste Artix.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Komisch schrieb:
> Ja, das geht auf nem kleinen LX9.
Eine komplette TCP/IP - Schicht in einem LX9?

von Strubi (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #6888043:
> Komisch schrieb:
>> Ja, das geht auf nem kleinen LX9.
> Eine komplette TCP/IP - Schicht in einem LX9?

Für einen Hard-IP-Stack mit Hardware-Packet-Filter-Logik wird's eng, 
aber eher wegen BlockRAM-Mangel, nicht wegen der Logik. Wer keine 
Performance braucht: lwip laeuft auf ner ZPU in wenigen kB. Ich nutze 
allerdings UDP/RTP, wegen Durchsatz und Echtzeit.

von Duke Scarring (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #6886604:
> Zu einem soliden Design gehört, nur Bauteile zu nutzen, die auch
> benötigt werden und bei FPGAs heisst das, die Schaltung klein
> auszulegen.
Du hast noch nie Designs für die Wissenschaft gemacht.
Der Entwicklungsaufwand für ein kleines FPGA ist erstmal genauso groß, 
wie für ein großes FPGA. Wenn dann aber neue Ideen und Anforderungen auf 
dem Tisch liegen, fängst Du beim kleinen FPGA nochmal von vorn an, was 
die Hardware angeht.

Duke

von Komisch (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #6888043:
> Komisch schrieb:
>> Ja, das geht auf nem kleinen LX9.
> Eine komplette TCP/IP - Schicht in einem LX9?

Man braucht ja nicht unbedingt TCP, UDP reicht oft.
Und wie Strubi schon schreibt, auf dem AVNET Board läuft TCP natürlich 
in nem Microblaze der auch externes LPDDR RAM mit dran hat.

von Christian R. (supachris)


Lesenswert?

Duke Scarring schrieb:
> Weltbester FPGA-Pongo schrieb:
>
>> Zu einem soliden Design gehört, nur Bauteile zu nutzen, die auch
>> benötigt werden und bei FPGAs heisst das, die Schaltung klein
>> auszulegen.
>
> Du hast noch nie Designs für die Wissenschaft gemacht.
> Der Entwicklungsaufwand für ein kleines FPGA ist erstmal genauso groß,
> wie für ein großes FPGA. Wenn dann aber neue Ideen und Anforderungen auf
> dem Tisch liegen, fängst Du beim kleinen FPGA nochmal von vorn an, was
> die Hardware angeht.
> Duke

Das ist das eine. Das andere ist, dass Arbeitszeit um Größenordnungen 
teurer ist als Hardware. Da es nie um Stückzahl geht, ist das 
Gesamtprojekt dann immer noch viel günstiger als wenn man ewig optimiert 
und das FPGA nimmt was gerade so reicht.

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Duke Scarring schrieb:
> Weltbester FPGA-Pongo schrieb im Beitrag #6886604:
>> Zu einem soliden Design gehört, nur Bauteile zu nutzen, die auch
>> benötigt werden und bei FPGAs heisst das, die Schaltung klein
>> auszulegen.
> Du hast noch nie Designs für die Wissenschaft gemacht.

Oh doch und wir haben schon in unserer DA sehr genau ausführen müssen, 
welche Wege zu welchen Aufwänden, Kosten und Risiken führen würden und 
warum wir DEN Weg gewählt haben, den wir gegangen sind, Das war Teil der 
Aufgabe.

Dies geschah um so mehr in den Forschungsprojekten. Dort mussten nämlich 
VOR Projektbeginn Mittel angefordert werden und man konnte nachher 
schlecht aufstocken. Es ist auch nicht von Wissenschaft abhängig oder 
nicht, wie man baut. Es ist gerade beim FPGA ein Leichtes, bei der 
Simulation herauszubekommen, ob eine Methode funktioniert und wieviel 
Fläche sie braucht, BEVOR man Einkaufen geht. Wer sagt denn, dass das 
"große" board reicht und man nicht 2-3 kleine oder 5 ganz große braucht?

Konkret bei FPGAs ist es zumindest im Nachgang möglich, das Design zu 
analysieren und zu prognostizieren, welchen minimalen FPGA es braucht. 
Gerade diese wissenschaftlichen Projekte wollen doch immer on top sein, 
also das Beste aus der Technologie herauskitzeln. Aber bei 
Wissenschaftsprpjekten muss es ja immer groß und teuer sein.

Mann darf sich dann nur noch wundern, wenn man solche Super-Forscher ins 
Team holt, die dann doppelt so viele Kosten an Hardware verursachen, wie 
es nötig wäre.

von Duke Scarring (Gast)


Lesenswert?

Weltbester FPGA-Pongo schrieb im Beitrag #6901840:
> Dies geschah um so mehr in den Forschungsprojekten. Dort mussten nämlich
> VOR Projektbeginn Mittel angefordert werden und man konnte nachher
> schlecht aufstocken. Es ist auch nicht von Wissenschaft abhängig oder
> nicht, wie man baut. Es ist gerade beim FPGA ein Leichtes, bei der
> Simulation herauszubekommen, ob eine Methode funktioniert und wieviel
> Fläche sie braucht, BEVOR man Einkaufen geht. Wer sagt denn, dass das
> "große" board reicht und man nicht 2-3 kleine oder 5 ganz große braucht?
Du hast also vor Projektantrag schon das Design fertig gemacht und 
komplett durchsimuliert, damit im Antrag der richtige Typ mit der 
richtigen Größe steht?!?

Ich nicht. Ich mache aus der Erfahrung eine Schätzung und schlage einen 
Faktor drauf, wenn mich jemand fragt.
Wenn ich dann ein Jahr oder länger daran beschäftigt bin, relativieren 
sich die Hardwarekosten ganz schnell.

> Aber bei
> Wissenschaftsprpjekten muss es ja immer groß und teuer sein.
Na wenn Du meinst...

Duke

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Duke Scarring schrieb:
> Du hast also vor Projektantrag schon das Design fertig gemacht und
> komplett durchsimuliert,
Solchige Projekte beginnt nicht bei Null. In der Regel forscht ein 
Institut jahrelang an irgendwelchen Themen, bevor ein Produkt bei raus 
kommt, oder (wie hier) ein industrieller Einsatz. Methoden und 
Mathematik sind also lange vorher fertig, denn die wird man dem Kunden 
ja anbieten müssen. Von daher ist es sicher möglich, eine Abschätzung zu 
liefern, wenn es daran geht die Kosten für eine Installation zu 
definieren. Muss man in Projekten außerhalb des Elfenbeinturms auch.

von Tobias (. (Gast)


Lesenswert?

Schön, dass wir das alles geklärt haben. Hat jemand noch eine Idee 
bezüglich der eigentlichen Fragestellung:
Beitrag "Re: 2 FPGAs bidirektional verbinden"

von Gustl B. (-gb-)


Lesenswert?

Was hast du denn zwischenzeitlich ausprobiert? Ideen gab es schließlich 
genug.

von Tobias (. (Gast)


Lesenswert?

Die entscheidende Platine ist noch nicht da und die firmware auch noch 
nicht drin. Gfs klappt es noch vor Weihnachten, dass ich es testen kann. 
Werde aber 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.