257 Werte 1 byte

Gast #4983372
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 von einem Moderator gelöscht.
#4983406
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.
Gast #4983663
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
Gast #4984354
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren