mikrocontroller.net

Forum: FPGA, VHDL & Co. RS232 Beispiel von L. Miller.


Autor: Clemens M. (panko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen Knotem im Kopf und hoffe ihr könnt mir beim entwirren 
helfen. Nachdem ich einige Zeit damit verbracht habe einen Uart von Null 
allein zu designen, hat sich mein Plan jetzt dahingehend geändert, das 
Beispiel auf L.Millers Homepage vollständig zu verstehen. Dann gewöhnt 
man sich nicht irgendwelchen Mist an denke ich mir.

Ich hänge aber leider:
Damit man sieht worum es geht, nur der relevante Empfangsteil.
 -- Empfangen
   process begin
      wait until rising_edge(CLK);
      prescaler <= prescaler+1;
      rxd_sr <= rxd_sr(2 downto 0) & RXD;
      if (rxd_sr = "1000" and rxbitcnt=9) then   -- fallende Flanke = Startbit
         start <= '1';                           -- 1 FF nötig wegen evtl. Glitches auf Kombinatorik
      end if; 
      if (rxbitcnt<9) then                       -- Empfang läuft
         if (prescaler="100") then               -- In der Bitmitte abtasten
            rxdat(rxbitcnt) <= rxd_sr(3);        -- Jedes Bit wird sofort nach Empfang ausgegeben --> kein Schieberegister nötig, MUX spart FFs
            rxbitcnt <= rxbitcnt+1;
         end if;
      else                                       -- warten auf Startbit
         if (start = '1') then                   -- fallende Flanke Startbit erkannt
            prescaler <= "001";                  -- erst mal nur halbe Bitzeit abwarten
            rxbitcnt  <= 0;
            start     <= '0';
         end if;
      end if;
   end process;
   dout <= rxdat(8 downto 1);  


Meine Frage ist, warum wird rxdat gerade so benutzt. Am Ende sollte in 
rxdat(0) das Startbit, also 0 stehen und in rxdat(8 downto 1) das Wort, 
stopbit wird nicht beharkt. Auf rxdat wird per "Array-Schreibweise" 
(Multiplexer?)zugegriffen, es ist kein Schieberegister. Habe ich das a) 
richtig interpretiert und b) hat das Vorteile gegenüber einem 
Schieberegister.
Außer ggf. der Bitreihenfolge, denn bei einem Schieberegister wäre das 
Ergebnis verdreht?

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

Bewertung
0 lesenswert
nicht lesenswert
Clemens M. schrieb:
> Auf rxdat wird per "Array-Schreibweise"
> (Multiplexer?)zugegriffen, es ist kein Schieberegister.
Diese Beispiel ist auf ein CPLD zugeschitten. Dort gibt es mächtige 
Logik (gut für kombinatorische Multiplexer) aber nur wenige FFs 
(schlecht für Schieberegister).

Die Bitreihenfolge ist tatsächlich verkehrt, das hat mich aber nicht 
gestört, weil die Bits einfach an CPLD-Pins ausgegeben werden... ;-)

Eine UART für ein FPGA mit Schieberegister findest du da:
http://www.lothar-miller.de/s9y/categories/42-RS232

Autor: Clemens M. (panko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso! Die Erklärung leuchtet ein danke!
So weit mir Gedanken über die wirklichen ressourcen zu machen scheine 
ich noch nicht zu sein. cpld hatte ich wohl bemerkt, aber in DER 
Richtung gar nicht gedacht.

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.