Forum: FPGA, VHDL & Co. FPGA Serielle Daten multiplexen?


von Martin (Gast)


Lesenswert?

Hallo,

kann mir jemand einen Tipp oder ein Beispiel geben wie man zwei bzw. 
mehrere serielle Datenströme mit jeweils eigener Clock mittels VHDL 
multiplexen kann? (Bin Anfänger damit und versuche gerade Anhaltspunkte 
zusammenzusuchen um das Konzept dahinter zu verstehen).

Also angenommen 2x je 8 bit streams zu einem zusammenzufassen.

Ich stelle mir das vom Input so vor:
Input 1: 8 Bit
Input 2: 8 Bit

Output 1: 12 Bit interleaved, jeder Kanal fügt ggf. einen Prefix beim 
Datenstrom hinzu woher dieser kommt, aber wie man das in VHDL umsetzt 
ist für mich noch nicht klar...

Wenn man das in der Praxis anders macht bitte darauf hinweisen, ich 
versuch wie gesagt das irgendwie zu lernen auch wenn noch ein ganzer 
Berg vor mir ist...

von Freiberufler (Gast)


Lesenswert?

Stell Dir vor, Du müsstest eine Handvoll Arbeiter einweisen, genau das 
zu leisten, Daten abzuholen, sie markieren und wechselseitig zum Ausgang 
geben.

Die Arbeiter müssten wissen, wann was Neues da ist, was sie auf die 
Daten draufschreiben sollen und wann sie dran sind, was auf den Ausgang 
zu geben.

Wenn du das formulieren kannnst, malst du die Schaltung hin. Und dann 
hast du die Lösung.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> Wenn man das in der Praxis anders macht bitte darauf hinweisen
Dazu müsste man mehr zum "das" wissen: Quelle, Ziel, Datenraten, 
Taktfrequenzen...

von Martin (Gast)


Lesenswert?

Als Quelle würde ich einfach mal einen billigen Funktionsgenerator 
nehmen der 10101010101 (ohne Synchronisation) mit z.B 10 MHz ausgibt. Es 
geht mir ja in erster Linie darum das Konzept dahinter zu verstehen.

Bei der Ausgabe vom FPGA würde ich dann einen USB Chip (z.B FX2) 
verwenden.

Ich stehe da noch ganz am Anfang...

von P. K. (pek)


Lesenswert?

Martin schrieb:
> Bei der Ausgabe vom FPGA würde ich dann einen USB Chip (z.B FX2)
> verwenden.

Naja, nimm gleich den FX3, wenn Du was neues machst. Der ARM ist 
wesentlich angenehmer zu debuggen als der 80C51...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> Ich stehe da noch ganz am Anfang...
Von WAS denn? WAS soll denn das Ganze letztendlich geben?

Ein USB-Wandler gibt ja keinen kontinuierlichen Bitstrom, sondern Daten 
entsprechend einem Protokoll aus.

von Martin (Gast)


Lesenswert?

Lothar Miller schrieb:
> Martin schrieb:
>> Ich stehe da noch ganz am Anfang...
> Von WAS denn? WAS soll denn das Ganze letztendlich geben?
>
> Ein USB-Wandler gibt ja keinen kontinuierlichen Bitstrom, sondern Daten
> entsprechend einem Protokoll aus.

Wiegesagt von einem Funktionsgenerator (1010101010...) also der Input 
ist nicht sinnvoll, Ausgabe soll am PC ein 8 bit Datenstrom sein. 
Synchronisation ist hinfällig ich will mal das allgemeine Konzept 
dahinter verstehen.

Ich hab bis jetzt ein paar Schaltungen probiert leuchtende LED, Adder, 
Dekodierung eines Streams und Ausgabe auf einem 7-Segment Modul. Aber 
wie man einen Datenstrom bei einem FPGA einlesen, serialisieren und 
ausgeben kann dazu fehlt mir nach wie vor das Hintergrundwissen bzw. ich 
erkenne da auch kein Konzept wie man das machen könnte..

von Achim S. (Gast)


Lesenswert?

Martin schrieb:
> ich
> erkenne da auch kein Konzept wie man das machen könnte..

weil das Konzept von den Randbedingungen abhängt. Und die 
Randbedingungen von nicht-sinnvollen Problemstellungen sind nicht 
definiert

Hilft dir folgender Vorschlag:
- jeder der beiden seriellen Datenströme wird durch ein Schieberegister 
erst mal in 8 bit breite Datenströme umgewandelt.
- diese byte-breiten Datenströme aus den nicht synchronisierten Quellen 
werden in jeweils ein FIFO geschickt, dessen Eingang in der Taktdomäne 
der jeweiligen Datenquelle läuft
- am anderen Ende der FIFOs wartet eine FSM darauf, dass die FIFOs Daten 
enthalten. Sobald das der Fall ist, holt sie beim volleren FIFO ein 
Paket von Daten ab, versieht es mit dem passenden Prefix (der die Quelle 
identifiziert), und sendet es an den PC

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> Aber wie man einen Datenstrom bei einem FPGA einlesen, serialisieren und
> ausgeben kann dazu fehlt mir nach wie vor das Hintergrundwissen bzw. ich
> erkenne da auch kein Konzept wie man das machen könnte..
Bei einer so allgemeinen Fragestellung kann man nur verallgemeinert 
antworten: den Datenstrom schnell genug einlesen, schnell genug 
verarbeiten und mit der nötigen Geschwindigkeit ausgeben. Das wars.

Bei einem mit 100MHz getakteten FPGA und einer Datenrate von 1MBit/s 
wäre das kein Problem. Bei einer Datenrate von 50MBit/s wäre das schon 
spannender. Deshalb eben die Frage nach dem WOZU...

von Falk B. (falk)


Lesenswert?

Die Aufgabenstellung ist viel zu wässrig und abstrakt, als dass man 
daraus eine konkrete Übung mit konkreten Tips machen könnte. Da es aber 
anscheinend erstmal um Grundlagen geht, sollte man ein eher einfaches 
Beispiel wählen, auch nicht mit hohen Takten oder sonstwas. Man sollte 
auch nichts mit mehrfachen Takten etc. nehen, das ist was für die 
höheren Semester. Also ein einfaches System mit EINEM globalen Takt und 
mehreren Daten/Steuereingängen.

Z.B. 2x 8 Bit Dateneingänge mit je einem Data enable Eingang (der 
natürlich nicht permanant aktiv sein kann). Diese werden auf einen 4 Bit 
Datenausgang gemultiplext. Dazu wird auf einer Zusatzleitung eine 
Synchronmarke ausgegeben, damit der Empfänger die Daten wieder 
demultiplexen kann. Alles mit einem globalen Takt. Dafür braucht man ein 
paar Zwischenpuffer, Schieberegister, Zähler und eine kleine state 
machine. Für den Anfang sollte das reichen. Als ersten Schritt erstellt 
man ein Blockschaltbild, dann kann man schrittweise die einzelnen Module 
erstellen, dazu die Testbenches. Wobei hier auf grund der eher geringen 
Komplexität alles in einer VHDL-Entity Platz hat, man muss nicht 
krampfhaft modularisieren. Trotzdem sollten sich die Blöche des 
Blockschaltbildes in den VHDL-Konstrukten wiederfinden lassen.

Und als 2. Aufgabe kann man dann den Demultiplexer entwerfen.

Als Zusatzaufgabe kann man beim MUX eine Fehlererkennung einbauen, wenn 
z.B. die Eingangsdaten zu schell kommen (data enable ist zu oft oder zu 
lange aktiv).

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.