Forum: FPGA, VHDL & Co. VHDL.RAM.signed.singnal input.signal.


von Ye X. (ye_x)


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?

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


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.

von Klaus (Gast)


Lesenswert?

Ohne den Code zu sehen kann dir leider niemand helfen.

von Ye X. (ye_x)


Angehängte Dateien:

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

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


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"

von Ye X. (ye_x)


Lesenswert?

Vielen Dank für die antwort.


Ich habe das Prolbem gelöscht.



Muss man ein Schifte brauchen,vor dem Convert-Block.



Die simunlink ist immer dummer.oder.



Dank noch mal.

von Aua (Gast)


Lesenswert?

Lern erstmal dich vernünftig auszudrücken. Das ist ja schrecklich ...

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.