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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Rza D. (Firma: rza-inc) (reza)


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


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


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


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


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


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


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


Bewertung
0 lesenswert
nicht lesenswert
Ok thanks. Das zieh ich mir sofort rein

von Lothar M. (lkmiller) (Moderator) Benutzerseite


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


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


Bewertung
0 lesenswert
nicht lesenswert
Sehr schön. Hier scheint auch die Sonne. VG jibi

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]
  • [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.

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