VHDL.RAM.signed.singnal input.signal.

OP #2670855
Lesenswert?

Hallo zusammmen,


Ich habe ein einfache Frage,über ein -RAM-Projekt.
Anfang wir an.

Die RAM(FIFO) block habe ich mit VHDL geschrieben.Alles input und output 
sind stad_logic oder vector.


Jetzt habe ich eine 16-Bit-signed- mit Binary point 8 bit,(z.B 5.722) 
Input-Signal als Std_Logic_vector eingegeben und gespreichert.
aber wenn ich dieser DATA als 16-Bit-Std_logic_vector ausgebe,und durch 
ein  Convert-Block nach 16 Bit-signed mit Binary point 8 bit 
umwandelt,die Data ist falsch.





Könnten Sie mir helfen,um die richtig data auszu geben?
Moderator (Firma: Titel) Persönliche Seite #2670873
Lesenswert?

Ye X. schrieb:
> als Std_Logic_vector eingegeben und gespreichert.
> aber wenn ich dieser DATA als 16-Bit-Std_logic_vector ausgebe,
Kommt aus dem RAM das selbe raus, was du hineinschreibst?
Also musst du untersuchen:
1. Werden die Daten richtig ins RAM geschrieben und wieder ausgelesen?
2. Wie wird konvertiert?
> Könnten Sie mir helfen,um die richtig data auszu geben?
3. Wie sieht der Code aus?

> Jetzt habe ich eine 16-Bit-signed- mit Binary point 8 bit,(z.B 5.722)
> Input-Signal als Std_Logic_vector eingegeben und gespreichert.
> aber wenn ich dieser DATA als 16-Bit-Std_logic_vector ausgebe,und durch
> ein  Convert-Block nach 16 Bit-signed mit Binary point 8 bit
> umwandelt,die Data ist falsch.
Ich vermute sehr, dass da gar nichts umgewandelt wird. Sondern es wird 
einfach eine 16-Bit-Zahl gedanklich durch 256 geteilt.
Allerdings wird aus 5.722 dann 1464.832, was mich dazu verleitet, 
anzunehmen, dass du die Zahl 5.722 im 8.8-Format gar nicht genau 
darstellen kannst. Die nächste Zahl, die du genau darstellen könntest, 
wäre 5.72262625 = 1465/256 = x"05b9" ...

Mein Tipp: sieh dir die Darstellung von Festpunktzahlen nochmal genau 
an.
OP #2670908
Lesenswert?

Vielen Dank für die antwort.



Die Data ist dabei..

Ich benutze die Xilinx Gernerator Black box .
Ich meine ,dass wenn die Input ist 8.8 bit '1.0' ist,dann  in my code 
wird als 0000000100000000 gepeichert. Und wenn ich diese code direkt 
ausgebe,bekomme ich 256 ,und durch die convert-Block  gibt aus 0.



Vielen Dank
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #2670942
Lesenswert?

Ye X. schrieb:
> dann  in my code wird als 0000000100000000 gepeichert.
> Und wenn ich diese code direkt ausgebe,bekomme ich 256
Klar, weil 1.0*256 = 256...

> und durch die convert-Block  gibt aus 0.
Wie sieht dieser "Block" aus?


BTW:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_arith.all;
4
use ieee.std_logic_unsigned.all;
5

6
use IEEE.numeric_std.ALL;
Na toll...  :-o
Entweder
1
use ieee.std_logic_arith.all;
2
use ieee.std_logic_unsigned.all;
Oder
1
use IEEE.numeric_std.ALL;
Aber nie beide zusammen!
Siehe auch den Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

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