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


von Clemens M. (panko)


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.
1
 -- Empfangen
2
   process begin
3
      wait until rising_edge(CLK);
4
      prescaler <= prescaler+1;
5
      rxd_sr <= rxd_sr(2 downto 0) & RXD;
6
      if (rxd_sr = "1000" and rxbitcnt=9) then   -- fallende Flanke = Startbit
7
         start <= '1';                           -- 1 FF nötig wegen evtl. Glitches auf Kombinatorik
8
      end if; 
9
      if (rxbitcnt<9) then                       -- Empfang läuft
10
         if (prescaler="100") then               -- In der Bitmitte abtasten
11
            rxdat(rxbitcnt) <= rxd_sr(3);        -- Jedes Bit wird sofort nach Empfang ausgegeben --> kein Schieberegister nötig, MUX spart FFs
12
            rxbitcnt <= rxbitcnt+1;
13
         end if;
14
      else                                       -- warten auf Startbit
15
         if (start = '1') then                   -- fallende Flanke Startbit erkannt
16
            prescaler <= "001";                  -- erst mal nur halbe Bitzeit abwarten
17
            rxbitcnt  <= 0;
18
            start     <= '0';
19
         end if;
20
      end if;
21
   end process;
22
   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?

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


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

von Clemens M. (panko)


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.

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.