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.
> 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
schau doch mal wie eine einfache cpu funktioniert. Die macht nichts anderes, wie Befehle dekodieren und dann irgendwas aufrufen.
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.
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.