www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Protokoll für serielle Komm. in VHDL implementieren


Autor: pcb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe im FPGA meine Applikation realisiert.
Nun möchte ich über RS232 eine Kommunikation mit PC realisieren.
(UART in VHDL funktioniert bereits sehr gut.)

Nun möchte ich meine Kommunikation mit einem einfachen Protokoll 
realisieren:
|Startbyte|Befehl|Länge des Pakets|NutztDaten|CRC-1Bytelang|
Wie würdet ihr das in VHDL(also FPGA Seite) realisieren?

Ich möchte keinen Code haben, nur allgemeine grobe Hinweise, Abläufe.

Ich habe mir das Ganze als einen großen Zustandsautomat vorgestellt, der 
den ganzen Paket Byte für Byte empfängt und parallel die CRC berechnet 
und am Ende, wenn das ganze Paket empfangen wurde, wird der 
entsprechender Register beschrieben\gelesen oder der Befehl sonst wie 
ausgeführt.

Gibt es irgendwo schon solche Prinzip Beschreibungen, 
Beispielimplimentierungen?
Ich möchte halt nicht das Rad neuerfinden. Wie gesagt ich würde mich auf 
ein paar Ratschläge, Links, Hinweise u.s.w freuen.
Danke im Voraus.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich habe mir das Ganze als einen großen Zustandsautomat vorgestellt
Das ist sinnvollerweise nicht ein großer Zustandsautomat, sondern 
mehrere kleine...

Einer empfängt ein Zeichen, der nächste speichert es ab und prüft die 
Checksumme. Wenn das alles korrekt abgelaufen ist, wertet der dritte das 
Kommando aus.

Einzelne Zeichen kannst du z.B. so empfangen:
http://www.lothar-miller.de/s9y/categories/42-RS232

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau doch mal wie eine einfache cpu funktioniert. Die macht nichts 
anderes, wie Befehle dekodieren und dann irgendwas aufrufen.

Autor: pcb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.
>Das ist sinnvollerweise nicht ein großer Zustandsautomat, sondern
>mehrere kleine...

>Einer empfängt ein Zeichen, der nächste speichert es ab und prüft die
>Checksumme. Wenn das alles korrekt abgelaufen ist, wertet der dritte das
>Kommando aus.

Ich möchte mich präzisieren:
Mein UART Modul empfängt ja einen Byte seriel Bit für Bit und stellt es 
dann fertig in einem Register zu Verfügung bereit.

Mit "einem" großem Automat meinte ich einen Automaten, der neben dem 
UART Modul existiert und Byte für Byte das Paket empfängt. Er soll auf 
das Feld "Länge des Pakets" achten und am Ende des Pakets die dazu 
bereits parallel berechnete CRC vergleichen. Wenn alles in Ordnung ist, 
dann dachte ich, dass er das Befehl ausführen soll.

>Wenn das alles korrekt abgelaufen ist, wertet der dritte das
>Kommando aus.

Könntest du bitte das etwas enauer skizzieren?
Ich soll also einen Buffer von größe eines maximal großen Pakets 
bereitstellen, soweit klar.
Was passiert aber wenn es einen Fehler im Feld "Länge des Pakets" 
auftritt? Wie kann man dann meinen 1. FSM wieder auf Pakette 
synchronisieren?
>wertet der dritte das Kommando aus.
Wie soll ich das verstehen? Was soll dein dritter (mein zweiter) FSM 
machen. Soll ich die verschieden Befehle als Zustände programmieren?
Danke.

Autor: pcb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Tobi:
>schau doch mal wie eine einfache cpu funktioniert. Die macht nichts
>anderes, wie Befehle dekodieren und dann irgendwas aufrufen.
Ja, die CPUs hatten wir mal, aber Befehleabarbeiten ist doch etwas 
unterschiedlich zu den Paketen mit variabler Länge, die zudem noch mit 
Fehlern versehen sein könnten.

Ansonsten war doch das Prinzip so:
Adressebuss hochzählen-> Wort vom Datenbuss lesen(CPU weiß, dass es um 
dieses Wort um einen Befehl handelt)-> Befehl decodieren(=Adresse im ROM 
des Microprogrammspeichers bestimmen)-> Microprogramm abarbeiten(Könte 
beinhalten weitere daten nachladen, unmenge von Mux'en einstellen, 
Unmengen von Enable Leitungen der Register setzen, u.s.w) Wenn das 
Microprogramm fertig ist, wird das nechste Befehl gelesen u.s.w
Heißt das, dass du vorschagen würdest solch ein Microprogramm anzulegen, 
in welchem es Steht, wie man einzelne Befehle abrbeiten soll?
Klingt sehr universell und leich auf weitere Befehle erweiterbar, aber 
auch kompliziert.
Habe ich dich richtig verstanden?
Danke.

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.