Forum: FPGA, VHDL & Co. Welches FPGA geeignet


von Mathias D. (darkfirefighter)


Lesenswert?

Hallo zusammen,

ich habe in meinem Projekt einen Datenstrom von 12bit, den ich mit einem 
exakten Timing auf die Reise schicken will. Da mein Controller das nicht 
kann wollte ich ein FPGA dazwischen hängen, das für ein exaktes Timing 
sorgt. Zwischen den einzelnen Bits soll dann auf einen Counter gewartet 
werden und so ein einstellbares Timing erreicht werden. All das so 
schnell wie möglich (so ab 500ns gerne aber auch schneller). Leider habe 
ich bisher noch keine Erfahrung mit FPGA's und wollte deshalb mal 
fragen, ob es eines gibt, das ihr mir empfehlen könnt. Es sollte nicht 
zu überdimensioniert sein, da es nur die Aufgabe hat die Bits exakt 
rauszuschicken.
Danke schonmal für die Hilfe

Gruß

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


Lesenswert?

Mathias Dubdidu schrieb:
> einen Datenstrom von 12bit, den ich mit einem
> exakten Timing auf die Reise schicken will
> (so ab 500ns gerne aber auch schneller)
Für das gesamte 12er Paket?
> die Bits exakt rauszuschicken.
Was exakt bedeutet "exakt"?

So wie ich das sehe könnte das auch ein CPLD...
Wie sollen die Daten vom uC an das FGPA/CPLD übergeben werden?
Welchen Takt hast du? Welches Protokoll? Handshake?

von Mathias D. (darkfirefighter)


Lesenswert?

Lothar Miller schrieb:
> Mathias Dubdidu schrieb:
>> einen Datenstrom von 12bit, den ich mit einem
>> exakten Timing auf die Reise schicken will
>> (so ab 500ns gerne aber auch schneller)
> Für das gesamte 12er Paket?

Nein gemeint war, wenn das hier das Signal ist:

     |------|     |------
     |      |     |
_____|      |_____|

Die Länge einer ------ oder ____ 500ns Sekunden beträgt


>> die Bits exakt rauszuschicken.
> Was exakt bedeutet "exakt"?

Das Timing soll exakt sein, d.h. wenn ich eine Wartezeit von 40ns 
dazwischen habe, dass dann jedes Signal auf 540ns kommt.

> So wie ich das sehe könnte das auch ein CPLD...
> Wie sollen die Daten vom uC an das FGPA/CPLD übergeben werden?
> Welchen Takt hast du? Welches Protokoll? Handshake?

Takt ist frei wählbar. Über den Rest habe ich mir ehrlich gesagt noch 
keine Gedanken gemacht, mache das in einem Praktikum und hab das 
momentan so als Aufgabe bekommen. Werde dann aber nochmal genauer 
nachfragen
Danke

Gruß

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


Lesenswert?

Mathias Dubdidu schrieb:
> Die Länge einer ------ oder __ 500ns Sekunden beträgt
Das ist zum Glück recht gemächlich... ;-)

> Das Timing soll exakt sein, d.h. wenn ich eine Wartezeit von 40ns
> dazwischen habe, dass dann jedes Signal auf 540ns kommt.
Woher kommt die Wartezeit?
Willst du die 500ns quasi einstellbar haben 480,490,500,510ns...?

von Mathias D. (darkfirefighter)


Lesenswert?

Lothar Miller schrieb:
> Mathias Dubdidu schrieb:
>> Die Länge einer ------ oder __ 500ns Sekunden beträgt
> Das ist zum Glück recht gemächlich... ;-)

Ah gut wie gesagt gerne auch schneller :D

>> Das Timing soll exakt sein, d.h. wenn ich eine Wartezeit von 40ns
>> dazwischen habe, dass dann jedes Signal auf 540ns kommt.
> Woher kommt die Wartezeit?
> Willst du die 500ns quasi einstellbar haben 480,490,500,510ns...?

Ja genau dachte mir eben mit einem Counter bis x zählen lassen, was dann 
einer Wartezeit von: t = 1/f * x + "Grundzeit" enstprechen müsste oder?

von Harald F. (hfl)


Lesenswert?

Na ja, wenn Du das in einem Praktikum machst, dann ist das ok. Merk dir 
vielleicht für später, dass eine der wertvollen Eigenschaften der FPGAs 
die Integrationsfähigkeit ist. Nur so 12 Bit mit zu serialisieren, das 
sind eigentlich Peanuts. Interessant wird das erst, wenn dieser Teil mit 
anderen Teilen zusammen in das FPGA kommt, z.B. mit eine uC, der die 
Daten berechnet.

Wenn man, wie Lothar das sinnvollerweise tut, annimmt, dass die 500 ns 
in Schritten von 10 ns veränderlich sein sollen, dann braucht man dazu 
einem Takt von 100 MHz, den man wohl mit einer FPGA-internen PLL aus 
einem externen Takt erzeugt. Dann braucht man ein paar Zähler, eine 
Statemachine, und fertig ist die Laube. Fragt sich dann nur noch, woher 
die Logik die Daten bekommt, die sie senden soll, und wie sie getriggert 
wird, das zu tun. Und wie die Anzahl von 10 ns Takten übergeben wird, 
die pro halbem Bit gewartet werden soll.

Die Aufgabe kann vermutlich vom jeweils kleinsten FPGA der namhaften 
Hersteller bewältigt werden soll. Schwierig ist eher, sich für einen 
Prototyp ein Board auszuwählen und zu beschaffen. Und, in deinem Fall, 
wahrscheinlich auch noch die Kodierung der Logik mit Hilfe einer 
Beschreibungssprache. Mein Rat: Wenn Du schon C kennst, nimm Verilog, 
das sieht ganz ähnlich aus.

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


Lesenswert?

Mathias Dubdidu schrieb:
> Ja genau dachte mir eben mit einem Counter bis x zählen lassen, was dann
> einer Wartezeit von: t = 1/f * x + "Grundzeit" enstprechen müsste oder?
Ich habe offenbar die Aufgabe nicht verstanden...  :-/

>>> Zwischen den einzelnen Bits soll dann auf einen Counter gewartet
>>> werden und so ein einstellbares Timing erreicht werden.
Du willst also eine Art Pulsdauer-Modulation machen?
Woher kommt der Counterwert?
Zeichne doch mal ein Bild, wie z.B. das 4-Bit Datenwort 1001 verschickt 
werden würde...

von Mathias D. (darkfirefighter)


Lesenswert?

Also gedacht hab ich mir das so:
Die Daten kommen von einem STM32F103, ebenso ein Counterwert und ein 
Triggersignal, auf das das FPGA dann loslegt.

Bei einem Counterwert von 1 beispielsweise würde dann jedes Datum 510ns 
lang anliegen. d.h. 1001 wäre
1
   |---|      |---|
2
   |   |      |   |
3
---|   |------|   |-----

wobei ein - 50ns entspricht. Bei Cnt = 2 wären es dann 520 usw.
Wobei man auch bei 400ns starten könnte, wenn das mit dem FPGA machbar 
ist.

Gruß

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.