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


von pcb (Gast)


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.

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


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

von Tobi (Gast)


Lesenswert?

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

von pcb (Gast)


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.

von pcb (Gast)


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.

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.