Forum: FPGA, VHDL & Co. 257 Werte 1 byte


von zu Besuch (Gast)


Lesenswert?

moin!

ich habe einen relativ langen Vektor (u_tmp) der unterschiedlich weit 
benutzt wird. Dessen Wert möchte ich entwicklungsbegleitend auf einer 
8bit Schnittestelle ausgeben. Dafüt gibt es einen 8 bit Vektor 
oslv_byte.
1
signal u_tmp  : unsigned(24 downto 0);
2
oslv_byte   : out  STD_LOGIC_VECTOR (7 downto 0);
Die Länge von u_tmp habe ich in einer Konstanten i_width.


Jetzt kann ich ja die oberen 8bits ab der msb-Stelle einfach auf den 8 
bit Vektor ausschneiden. Also so zuweisen:
1
oslv_byte <=  std_logic_vector(u_tmp( (i_width-1) downto (i_width-8)))
Mein Problem ist aber der Wertebereich. u_tmp ist das Ergebnis eines 
sinc3 Filters und geht z.B. von 0..512. Also ist am oberen Ende nur das 
MSB besetzt. Schneide ich nur die höchsten 8 bits aus, dann habe reicht 
der 8bit Wertebereich halt nur von 0..128.

257 Werte in ein Byte.

Habe das dann so gemacht:
1
oslv_byte <=  std_logic_vector(u_tmp( (i_width-2) downto (i_width-9))) when u_tmp(i_width-1) = '0' else (others=>'1');
Dadurch ist oben natürlich das ganze nichtlinear, was sich ja auch nicht 
vermeiden lässt es wird ja irgendwie auch der Wertebereich gestaucht.

Meine Frage:

wie würdet ihr das Problem lösen? Obere 8 bit abschneiden und halben 
Wertebereich in der 8bit-Welt in Kauf nehmen? Oder gibt es eine runde 
Lösung

herzlichen Dank!

Beitrag #4983396 wurde vom Autor gelöscht.
von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

zu Besuch schrieb:
> Mein Problem ist aber der Wertebereich. u_tmp ist das Ergebnis eines
> sinc3 Filters und geht z.B. von 0..512. Also ist am oberen Ende nur das
> MSB besetzt. Schneide ich nur die höchsten 8 bits aus, dann habe reicht
> der 8bit Wertebereich halt nur von 0..128.
>
> 257 Werte in ein Byte.

bist du dir sicher mit den Wertebereichen?

ich hätte eher 0..127 bzw. 0..255 angenommen. durch was /wann entsteht 
der zusätzliche MSB-Wert ?


zu Besuch schrieb:
> 257 Werte in ein Byte.

aha. oha.

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

Wegstaben V. schrieb:
> ich hätte eher 0..127 bzw. 0..255 angenommen. durch was /wann entsteht
> der zusätzliche MSB-Wert ?

Vermutlich durch ein Vorzeichen

Bei AD-Wandlern wie dem MCP3301 irgendwas machen sie es auch so ... Das 
Ding digitalisiert 12Bit + 1 Signbit

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

zu Besuch schrieb:
> wie würdet ihr das Problem lösen

Erst mal Grundlagen der Mathematik im 2er System erlernen.

von zu Besuch (Gast)


Lesenswert?

"
ich hätte eher 0..127 bzw. 0..255 angenommen. durch was /wann entsteht
der zusätzliche MSB-Wert ?"

Wenn ich in mein sinc3 Filter ein Signal gebe, was konstant 1 ist, also 
maximal groß, dann ist dies das Ergebnis.
Also wenn ich nach 
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=sbaa094 
eine Dezimierung von z.B. 8mache, dann ist der Ausgangsvektor 10bit 
breit mit nur dem MSB gesetzt. Als Wert dann 512.

Vorzeichen sehe ich dabei eigentlich nicht denn ich verstehe ie Funktion 
so, dass ja eben unsigned arithmetik mit Überlauf ausgenutzt wird.

Wenn MaWin da etwas konkreter helfen kann, wäre das natürlich sehr 
hilfreich.

Danke

von Der Andere (Gast)


Lesenswert?

zu Besuch schrieb:
> Wenn MaWin da etwas konkreter helfen kann

Da brauchts kein MaWin

zu Besuch schrieb:
> 257 Werte in ein Byte.

geht nicht.

von zu Besuch (Gast)


Lesenswert?

Das war auch ein humoristischer Kommentar zu dem Problem. Ich dachte 
eigentlich, dass die Ironie sofort klar ist. :-( Tut mir leid.

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


Lesenswert?

zu Besuch schrieb:
> 257 Werte in ein Byte.
Das geht nur mit einer dreiwertigen Logik.

von Joachim B. (jar)


Lesenswert?

Lothar M. schrieb:
> Das geht nur mit einer dreiwertigen Logik.

geht das nicht mit winzip, rar oder 7zip? (scnr)

von Michael K. (aemkai)


Lesenswert?

Lothar M. schrieb:
>> 257 Werte in ein Byte.
> Das geht nur mit einer dreiwertigen Logik.
oder wenn man ein Byte mit >= 9 Bit hat...

: Bearbeitet durch User
von Mr Tannnoy (Gast)


Lesenswert?

Ein Byte, das sind 8 Bit. Zwei Byte sind 16 Bit, also ungefähr 1 Meter 
köstliches Bier!

Wenn Du also 2 Bytes getrunken hast, verschwindet Dein Problem von 
allein.

Prost!

von Martin K. (maart)


Lesenswert?

In mein Byte passen 20 Megabit oder alternativ 24 Mikrobit.

Hach, schön. Heute ist Freitag.

von Wolfgang (Gast)


Lesenswert?

zu Besuch schrieb:
> Mein Problem ist aber der Wertebereich. u_tmp ist das Ergebnis eines
> sinc3 Filters und geht z.B. von 0..512. Also ist am oberen Ende nur das
> MSB besetzt. Schneide ich nur die höchsten 8 bits aus, dann habe reicht
> der 8bit Wertebereich halt nur von 0..128.

Das Ausgangssignal von deinem Filter ist hoffentlich stetig. Wenn du 
also das oberste Bit weg lässt, wird jede Änderung des (ehemaligen) 
obersten Bit als harter Sprung in den Wert, der sich aus den unteren 
8Bit ergibt, sichtbar. Bis auf eine Uneindeutigkeit lässt sich das also 
gut rekonstruieren, wenn die Werte sich stetig ändern.

von zu Besuch (Gast)


Lesenswert?

Ich Danke Wolfang für Deinen ernstgemeinten Kommentar!

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.