Forum: FPGA, VHDL & Co. Baudrate berechnen XYLINX NEXYS4 DDR - OV7670 camera UART


von Rza D. (Firma: rza-inc) (reza)


Lesenswert?

Hallo Liebe Gemeinde,

nach Jahren stillen mitlesen, brauch ich nun eure Hilfe bei einem 
Projekt wo ich selbst nur helfen möchte. :)

Für die Uni wird gefragt: wie man die Baudrate des UART berechnet.

Board: XYLINX NEXYS4 DDR, hat wohl eine Baudrate von 12Mbaud

das Bild von der Kamera ist downscaled auf 640x480/4 = 76800bytes

stimmt dann diese Rechnung: [(12M/10)/(640*480/4)] ?
                            1200000bit/S  / 76800bytes
                            1200000bit/s  / 614400bit


kann mir da jemand weiterhelfen? Vielen Dank im voraus!

von Jonas B. (jibi)


Lesenswert?

Wieviel Start und Stopbits? Wenn du von einem Start- und einem Stopbit 
ausgehst, stimmt deine Rechnung. Von einem UART mit 12MBaud hab ich 
allerdings noch nie was gehört, das muss aber nichts heißen.

von Gustl B. (-gb-)


Lesenswert?

Die Rechnung verstehe ich nicht ganz. Warum 12M/10?

Edit:
Ja, man kann durch 10 teilen, dann sollte beim Ergebnis aber Byte stehen 
und nicht Bit.
/Edit

Auf dem Board ist ein FT(2)232H, der kann maximal 12 MBaud. Was wirklich 
gemacht wird hängt davon ab was du einstellst und was dein UART im FPGA 
kann.
Ja, Achtung: Viele IP UARTs (auch die von Xilinx mit AXI) können ohne 
Modifikationen keine 12 MBaud. Du müsstest also einen UART schreiben 
oder suchen und verwenden.
Zusätzlich musst du auf den Takt achten. Bei 12 MBaud ist ein Bit 83.333 
ns lang. Wenn du einen 100 MHz Takt verwendest und ein Bit 8 Takte lang 
machst, dann ist jedes Bit um 3.333 ns zu kurz. Bei 9 Bits (Start+Daten) 
sind das dann schon 30 ns. Das könnte grenzwertig oder fehlerhaft 
werden. Also mit einer PLL einen geeigneteren Takt erzeugen, z. B. 120 
MHz oder 96 MHz.

Dann zur Rechnung:
Die Baudrate ist noch nicht die Nutzdatenrate. Von den 12 MBaud können 
im Idealfall 8/10 genutzt werden.
Datenrate = 12 MBaud*8/10 = 9,6 MBit/s.
Datenmenge = 640*480/4 Bytes = 76800 Bytes.

Zeitdauer = Datenmenge/Datenrate = 76800 Bytes / 9,6 MBit/s = 64  ms.

https://www.wolframalpha.com/input/?i=%28640*480%2F4%29Bytes%2F%2812*8%2F10%29MBit%2Fs

: Bearbeitet durch User
von Rza D. (Firma: rza-inc) (reza)


Lesenswert?

Vielen Dank für die schnellen Antworten, das hilft mir sehr.

mir ist leider ein Fehler unterlaufen, Datenmenge ist bit nicht byte:

Datenmenge = 76800bit

und konkret weiß ich, dass

Takt = 25MHz

kann ich so sagen wie ich die baudrate für das board berechne? diese 
12Mbaud sind ja weit hergeholt, ich brauch ja nichtmal 9,6Mbaud...es 
geht halt schon darum wie man den UART selbst schreibt und was die 
Rechnung dahinter ist.

Würde mich über weitere Antworten sehr freuen :)

von Gustl B. (-gb-)


Lesenswert?

Rza D. schrieb:
> Datenmenge = 76800bit

Schreib doch einfach welche Auflösung dein Bild und wie viel Bit jedes 
seiner Pixel hat.

Rza D. schrieb:
> Takt = 25MHz

Das ist recht egal, da du im FPGA eine andere Frequenz erzeugen kannst 
und bei 25 MHz vermutlich auch machen musst wenn du mit höheren 
Baudraten arbeiten willst.

Rza D. schrieb:
> kann ich so sagen wie ich die baudrate für das board berechne?

Nein.

Rza D. schrieb:
> ich brauch ja nichtmal 9,6Mbaud

Wie kommst du auf den Wert?

Die Information die fehlt ist:
In welcher Zeit soll die Datenmenge übertragen werden?
Wenn du da eine Sekunde Zeit hast, dann kommt eine deutlich geringere 
minimale Baudrate raus wie wenn du nur wenige Millisekunden Zeit hast 
für die Übertragung.

Rza D. schrieb:
> es geht halt schon darum wie man den UART selbst schreibt
> und was die Rechnung dahinter ist.

OK, du willst also den UART selber schreiben. Dann guck dir an wie 
generell UART funktioniert.
https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter

Um deinen UART zu schreiben und zu testen brauchst du auch keine 
Bilddaten oder so, du kannst dir einfach einzelne Bytes hin und her 
schicken. Sinnvoll ist ein Loopback.

PC schickt zum UART, der empfängt, gibt Byte aus, das gleiche Byte wird 
wieder dem UART gegeben, der sendet es zum PC und der vergleicht.

Du kannst auch noch eine Logik dahintersetzen die im empfangenen Byte 
alle Bits invertiert und das dann sendet oder um 1 hochzählt und sendet, 
...

Viel Spaß, einen UART zu schreiben ist eine schöne und sinnvolle 
Übungsaufgabe.

von Rza D. (Firma: rza-inc) (reza)


Lesenswert?

Hallo,

also das Bild hat 640*480 pixel wird aber durch 4 geteilt (downscale)

1pixel entspricht 1bit

Ich hab mir schon gedacht, dass das ein anspruchsvolles Projekt ist. 
Aber egal ich will das jetzt lernen.

Das Problem ist das ich bits und bytes etwas verdrehe.

Gustl B. schrieb:
> Wie kommst du auf den Wert?

Ich dachte Mbaud = Mbit, deshalb habe ich deine Rechnung mit 8/10 
angenommen

Gustl B. schrieb:
> im Idealfall 8/10 genutzt werden.
> Datenrate = 12 MBaud*8/10 = 9,6 MBit/s.

So wie du mir das jetzt erklärt hast, habe ich verstanden
Maximale Baudrate/Bild Größe = Bilder pro sekunde

bloß woher bekomme ich die Maximale Baudrate

Wirklich vielen Dank bis hier hin.
Grüße

von Jonas B. (jibi)


Lesenswert?

Der Meister hat es doch schon vorgekaut:

http://www.lothar-miller.de/s9y/categories/42-RS232

Die Takterzeugung kannst du auch per ip-Generator erstellen.

von Rza D. (Firma: rza-inc) (reza)


Lesenswert?

Ok thanks. Das zieh ich mir sofort rein

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


Lesenswert?

Rza D. schrieb:
> bloß woher bekomme ich die Maximale Baudrate
Du siehst den Schaltplan deiner Baugruppe an, und dann die Datenblätter 
der im Signalpfad verwendeten Komponenten, und dann nimmst du den 
niedrigsten Wert, den du dort an Datenrate findest. Das wars. Und dann 
teilst du diese "Bruttomaximaldatenrate" noch durch 2, wenns 
unkompliziert sein soll.

Rza D. schrieb:
> diese 12Mbaud sind ja weit hergeholt, ich brauch ja nichtmal 9,6Mbaud...
Das ist im Grunde das selbe. Denn die 12MBd ist der Wert, wenn kein 
Teilnehmer irgendeinen Schluckauf bekommt und zwischendurch "ein wenig 
bremst". Erst wenn du mal einen Faktor von 2 oder gar eine Zehnerpotenz 
drüber oder drunter bist, dann kannst du von "nichtmal" reden.

Jonas B. schrieb:
> Der Meister hat es doch schon vorgekaut
Vermutlich könnte das hier sogar noch wesentlich einfacher ausfallen, 
weil ja nur gesendet werden muss. Dafür ist das Timing viel leichter 
herzustellen, weil ja kein Oversampling zur Erkennung der Bitmitte nötig 
ist.

von Rza D. (Firma: rza-inc) (reza)


Lesenswert?

Alles klar! Top!

Das und der Blog konnten meine Fragen abschließend klären...

Merci! und sonnige Grüße aus Karlsruhe

von Jonas B. (jibi)


Lesenswert?

Sehr schön. Hier scheint auch die Sonne. VG jibi

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.