mikrocontroller.net

Forum: FPGA, VHDL & Co. Welches FPGA geeignet


Autor: Mathias Dubdidu (darkfirefighter)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mathias Dubdidu (darkfirefighter)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...?

Autor: Mathias Dubdidu (darkfirefighter)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Harald Flügel (hfl)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Mathias Dubdidu (darkfirefighter)
Datum:

Bewertung
0 lesenswert
nicht 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
   |---|      |---|
   |   |      |   |
---|   |------|   |-----

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ß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.