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.
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
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
Im downloadpacket des Picoblaze von Xilinx ist auch eine sehr platzsparende Version einer UART-Schnittstelle mit gute Doku enthalten. Ausserdem ist sie for free.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.