Datum:
Hallo, ich beschäftige mich zur Zeit mit VHDL und FPGAs und habe eine Verständnisfrage zu einem Code von Lother Miller http://www.lothar-miller.de/s9y/archives/57-Sinusa... Die zeile verstehe ich noch nicht:
sinusplusoffset <= std_logic_vector(unsigned(sinus)+to_unsigned(128,8)); |
warum macht man dort unsigned(sinus) ? das + to_unsigned(128,8) erstellt mir ein 8 Bit Signal welches den dezimal wert 128 hat, oder? gruß
Datum:
Der Operator "+" ist für unsigned definiert, nicht aber für std_logic-vector. Wenn Du das Casten nicht willst, einfach generell unsigned benutzen.
Datum:
Marc K. schrieb: > warum macht man dort unsigned(sinus) ? "Man" macht das dort, weil "man" mit uneingeschränkten Vektoren wie std_logic_vect nicht rechnet! Und weil sinus als std_logic_vector definiert ist, muss der für die Addition erst mal nach unsigend umgewandelt werden. > das + to_unsigned(128,8) erstellt mir ein 8 Bit Signal welches den > dezimal wert 128 hat, oder? Das '+' addiert einen 8-Bit unsigned Wert, der aus einem integer (128) erzeugt wurde, zum sinus dazu. Sieh dir das mal an: http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html
Datum:
Aus der entity DDFS kommt der Sinus Wert als std_logic_vektor, der aber einen signed Repräsentiert. Für die pwm wird das Ganze in den positiven Bereich verschoben. Also entsprechend der halben Amplitude, nämlich 128. Macht ja sonst auch keinen Sinn. Ist das vielleicht die Frage? und eine Antwort ;-)
Datum:
vielen dank für die schnellen antworten :-) jetzt hab ich es auch verstanden ist eigentlich logisch :-)
