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


von Chris (Gast)


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.

von Kest (Gast)


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

von T.M. (Gast)


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

von Axel (Gast)


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.

von Matthias (Gast)


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.

von Tom (Gast)


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

von Jürgen (Gast)


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.

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.