mikrocontroller.net

Forum: FPGA, VHDL & Co. Serielle Schnittstelle verwenden mit VHDL


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Board: Spartan-3 Starter Kit Board

Ich mache gerade meine Diplomarbeit und stehe gerade etwas unter
Zeitdruck. Verzeiht mir deshalb, wenn meine Frage schon einmal
beantwortet wurde. Ich habe keine Antwort gefunden, mit der ich richtig
etwas anfangen konnte.

Zu meinem Problem:
Mein VHDL programm läuft im FPGA :-))  Jetzt möchte ich auf die
schnelle zwei oder drei 32Bit-Zahlen über die serielle Schnittstelle
ausgeben. Datzu erst mal eine Zwischenfrage:
Ist dies in einem halben oder ganzen Tag zu schaffen? Mehr Zeit dafür
habe ich wirklich nicht mehr, wenn nicht, lasse ich es gleich ganz
sein, bevor ich dafür Zeit verschwende (wäre halt schön, wenn ich das
noch hinbekommen würde).

Wie gesagt ich verwende VHDL. Ich habe für alles eine Clock von 2 MHz
verwendet (muss etwas mit 2 MHz senden), was sich jetzt vielleicht im
Nachhinein als falsch herausstellt. Ein DCM habe ich dadurch
verbraucht. Wenn die Daten übertragen wurden, sollen einmalig (oder
mehrmalig) 2 oder 3 Zahlen an den PC geschickt werden. Dies ist nur
dafür da, um zu wissen, was das Ergebnis ist. Wüsste sonst nicht, wie
ich einfach an das Ergebnis des FPGAs herankomme (weiß jemand was
anderes?).

Habe mal jemanden gefragt, der meinte ich müsste einen UART verwenden.
Habe auch direkt beim Hersteller meines Boards (www.digilentinc.com)
einen UART gefunden, aber überhaupt keine Beschreibung. Das Problem ist
wohl, dass die eine bestimmte Senderate benötigen und das macht
vielleicht Probleme mit meinen 2 MHz, mit denen ich arbeite.

Kann mir jemand helfen, dies schnell zu erledigen oder weiß jemand eine
Seite, bei der man das gut nachlesen kann. Wie gesagt, nur 3 Zahlen
senden, nix empfangen. Wäre sehr dankbar, wenn jemand eine schnelle
Lösung für mich hat.


PS: nicht über die Uhrzeit wundern, bin in den USA und mache jetzt
Feierabend.

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Serielle Schnittstelle ist sehr einfach. Ich kann Dir jetzt nicht
mit einem Beispiel dienen, aber im Internet gibt es unendlich viele
Programme, brauchst nur zu suchen! Sogar bei Xilinx selbt gibt es
AppNote darüber. Oder www.opencores.org
Wenn Du Dich etwas mit FPGAs auskennst, dann schaffst Du es locker an
einem Tag.
Du hast Starter Kit von Xilinx? Wie wäre es, wenn du auf eine Taste
drückst, dann siehst Du auf dem 7SEg-Anzeigen Dein Ergebniss? Sind 32
Bin (Hexadezimal) (4 Digits), andere Taste - anderes Ergebnis und so
weiter? Auch sehr einfach. Mach ich immer so, wenn ich was debugge.

Hoffe, hab' Dir etwas geholfen. Ich fürchte aber, Du musst schon
selber ran

Gruß
Kest

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab in einem Projekt eine auch mal eine UART verwendet. Hatte damals
mich bei dieser Quelle bedient:
http://www.ba-loerrach.de/~sikora/pld_buch/pld_buch.htm
Die läuft auch ohne Probleme, wenn du 2 oder 3 Stellen änderst, auch
mit deinen 2MHz. So wie sie ist, läuft sie mit 16MHz bei 1Mbps
Baudrate. Naja, du musst im Prinzip nur die Zählerwerte verändern, wenn
du ne Standardbaudrate wie 9600Baud bei deinen 2MHz erreichen willst.
Bei Fragen kannst ja mich mal anmailen unter meissnertorsten(ät)web.de

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im downloadpacket des Picoblaze von Xilinx ist auch eine sehr
platzsparende Version einer UART-Schnittstelle mit gute Doku enthalten.
Ausserdem ist sie for free.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
ich hab für meine Praktikumsarbeit auch ein UART im FPGA gebraucht.
Erstmals hab ich auch nach fertigen Lösungen gesucht, da gibts etliche,
aber die eine Hälfte kostet unsinnig viel Geld, und die andere ist
schlecht beschrieben. Letztendlich hab ich dann innerhalb von einem
halben Tag selbst etwas geschrieben (was sogar gut funktioniert, sende
mit 1MBaud bei 24,xxx Mhz).

Im Prinzip kannste die UART mit 9600baud laufen lassen für deine 3
Zahlen, diese Baudrate (und auch noch höhere) sollte Problemlos mit
deinen 2Mhz machbar sein. Prinzip fürs Senden:
Sendeleitung am Anfang auf 1 haben, dann für 1/Baudrate auf 0 setzen
(startbit), dann jeweils mit der Länge von 1/Baudrate 8 Bits senden,
dann eine 1 für 1/Baudrate, und wenn du weitersenden willst das gleiche
von vorne, ansonsten die Leitung auf 1 lassen.
Die Baudrate erzeugst du mit einem einfachen Zähler. Bei 2Mhz und
9600baud beispielsweise den Zähler von 0 bis 207 durchzählen lassen
(also 8bit Zähler), und immer bei einem bestimmten Wert, zB. 0, einen
neuen Wert auf den Ausgang legen.

Die Frage ist jetzt eher, wie deine externe Hardware aussieht, so dass
du das ganze direkt mit dem PC verbinden kannst. Du brauchst ja an zwei
Pins entweder einen RS232 Pegelkonverter, wie max232, um das dann an die
serielle Schnittstelle des PCs anzuschließen, oder einen ft232, ums an
usb anschließen zu können.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielleicht ist die Verifikation mit einem Logikanalyzer eine sehr
gute Alternative. Ich habe Testsignale aller relevanten Register
auf Testpins ausgeführt und mit einem LA aufgenommen. Somit kannst
Du Deine interne Signalverarbeitung 100%tig prüfen....

Gruß
Tom

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Chris,

wahrscheinlich kommt die Antwort etwas zu spät, aber mein Vorschlag
wäre folgender:
Wenn du nur Daten seriell ausgeben möchtest, braucht man nur einen
halben UART. Im einfachsten Fall reicht dazu ein n x 10 Bit langes
Schieberegister, welches mit einem passenden Bit-Takt getaktet wird.
D.h. man bräuchte nur noch den Bittakt aus den 2MHz erzeugen. Wenn der
UART des Debug-PCs nicht zu penibel ist, kann der Takt ruhig bis zu 10%
vom Soll abweichen.

Gruß,
Jürgen.

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.