www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Vektor 2er / zweier Komplement


Autor: graf zahl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

VHDL ist nicht mein Lieblingsgebiet, daher bräuchte ich einen Ratschlag.

Ich habe einen Filter (MATLAB HDL Coder) der einen 14bit signed Eingang 
(std_logic_vector) und einen 12Bit signed Ausgang (std_logic_vector) 
hat. Der ADC liefert tatsächlich Daten im 2er Komplement. Der DAC 
erwartet jedoch kein 2er Komplement sondern quasi unsigned. Nun die 
Frage: Wie gestaltet man am geschicktesten die Umwandlung? Wünschenswert 
wäre (aus verschiedenen Gründen), wenn dies hinter dem Filter geschieht 
(also nicht intern).

Habe selber schon hier und da geschaut, aber irgendwie habe ich das 
Gefühl dass ich zu verquer denke...reicht etwa eine to_unsigned 
Wandlung? Oder doch "händisch" mit 'invertieren + 1'?

  http://www.synthworks.com/papers/vhdl_math_tricks_...

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

welches Format erwartet denn Dein DAC? Oder gib gleich den Typ an.
Ich nehme an, Du musst einfach nur einen Offset addieren,
dann sollte es passen, aber ohne Datenblatt kann man vieles
annehmen...

Autor: graf zahl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Statt des 2er Komplements die 'lineare'. Habe es nun händisch gemacht, 
nachdem ich ein wenig mit to_unsigned etc. rumgespielt habe (hat alles 
nicht das gewünschte Ergebnis gebracht - es scheint mir als wären es nur 
Synthese"direktiven").

  signal Wert:       std_logic_vector(11 downto 0);
  signal tempSIGNAL: std_logic_vector(11 downto 0);
  
  tempSIGNAL <= (  Wert(11) & not( Wert(10 downto 0) )  ) + 1;

Autor: Morin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus! Ich kann hier nur einen Denkanstoß geben, da ich mir beim besten 
Willen nicht vorstellen kann, wieso ein Wandler jemals mit signed-Werten 
arbeiten würde. Deshalb mache ich folgende Annahme, die du unbedingt 
verifizieren solltest:

- ADC (signed): das Bitmuster 100..0 stellt die "negativste", d.h. 
kleinste Zahl dar und entspricht der min. Eingangsspannung des ADC. Das 
Bitmuster 011...1 stellt die "positivste", d.h. größte Zahl dar und 
entspricht der max. Eingangsspannung des ADC.

- DAC (unsigned): Das Bitmuster 000...0 stellt die kleinste Zahl dar und 
entspricht der min. Ausgangsspannung des DAC. Das Bitmuster 111...1 
stellt die größte Zahl dar und entspricht der max. Ausgangsspannung des 
DAC.

Nochmals: Das ist eine VERMUTUNG! da ich mir beim besten Willen nix 
anderes vorstellen kann. Falls diese Vermutung stimmt, hilft folgender 
Trick (wobei die unterschiedlichen Bit-zahlen jetzt mal ignoriert werden 
und nur die Umwandlung nach dem Filter von signed->unsigned in 12 Bit 
beschrieben wird):

Eingang des Zahlenkonverters: Die Folge 1000...0, 1000...1, ..., 
011...10, 011...11 entspricht steigenden Spannungen
Ausgang des Zahlenkonverters: Die Folge 000...0, 000...1, ..., 111...10, 
111...11 entspricht steigenden Spannungen

Also reicht es, das oberste Bit zu negieren:

ausgang (11 downto 0) <= (not eingang (11)) & (eingang (10 downto 0));

Autor: graf zahl (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nun arbeitet der Wandler leider mit signed Werten (siehe Anhang). Ist 
natürlich alles nur eine reine Interpretationssache. Danke für die 
Denkanstöße, es läuft jedoch bereits  ;)

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.