mikrocontroller.net

Forum: FPGA, VHDL & Co. Entprellen RX Signal bei UART


Autor: Klaus S. (profi_sa)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe ein Beispiel für die Entprellung vom RX-Eingangssignal einer Uart 
gefunden.Beispiel ist als Anhang dabei. Kann die Konstruktion
RX_status(3 downto 0) & RX nicht verstehen.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Konkatenation", RX_status(3 downto 0) und RX werden aneinandergehängt 
und es kommt ein längerer Vektor dabei raus.

Autor: Klaus S. (profi_sa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Hinweis.

Bisher verstand ich unter Konkatenation die Verschmelzung zweier Felder 
zu einem größerem Feld.
In VHDL muß diese Operation anders definiert sein.
Wo finde ich eine nähere Beschreibung zur Konkatenation,die genau dieses 
Verhalten der Bitverschiebung nach links erläutert?

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bisher verstand ich unter Konkatenation die Verschmelzung zweier Felder
>zu einem größerem Feld.

Das ist auch in VHDL so.
signal test : std_ulogic_vector(length-1 downto 0);
...
test <= test(length-2 downto 0) & test(length-1);
rotiert das ganze nach links.

Autor: Klaus S. (profi_sa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Frank dein Beispiel ist zunächt nicht weiterhelfend zum 
Verständnis der Rotation im Hautpfeld.

In dem Beispiel UART werden 2 Signale miteinader verbunden.Beide Signale 
haben eine vorgegebene Bitbreite von 4 und 1 Bit.
Erfolgt die Verschiebung nach links durch Angabe einer reduzierten 
Bitbreite von 0 bis 2 vom Hauptfeld ? Das höchtswertigste Bit wird 
vergessen. Damit die Siggnaldefinition wieder erfüllt ist wid ein Bit 
von links hinzugefügt.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RX_SR wird als 4 bit Vektor definiert: (3 downto 0)

In der Signalzuweisung werden die untersten 3 Bits (LSBs) selektiert:

RX_SR(2 downto 0)

nun wird an diesen 3-bit-Vektor rechts ein zus. Bit angefügt:

RX_SR <= RX_SR(2 downto 0) & RX

damit erhält man wieder einen 4 bit breiten Vektor, der RX_SR zugewiesen 
wird. Die 3 LSBs landen dabei eine Bitposition weiter links und als LSB 
wird RX eingefügt. Damit erhält man ein Schieberegister.
Alles klar?

Um die Lesbarkeit zu verbessern könnte man auch schreiben:

RX_SR(3 downto 0) <= RX_SR(2 downto 0) & RX;

oder

RX_SR <= RX_SR(RX_SR'LEFT-1 downto 0) & RX;

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.