Gast
#3295625
Nachdem ich mich fürs Rechnen in VHDL schon vor Jahren an die "moderne" Arbeitsweise mit integer und der numeric gewöhnt habe, darf ich nun wieder mal SV mit std_logic machen (der Verwedung der alten Bibs in existentem Code wegen). So muss ich z.B. einen unsigned16 (von 0 ... 65535) auf einen signed16 verwandeln und habe deshalb einfach 32768 abgezogen. Stimmt das so: 1) out16 <= std_logic_vector (unsigned(in) - 32768) oder muss ich über den Umweg das signed gehen? 2) out16 <= std_logic_vector (signed(in) - 32768) Ich bin mir wegen der Spiegelung der Werte bei unsigend nicht sicher. Bei einer reinen Negation mache ich das nämlich immer mit "not". Von daher ist das meines Erachtens falsch und ich brauche ein Bit mehr? 3) out17 <= std_logic_vector (signed('0' & in) - 32768) Das müsste in jedem Fall funktionieren. Diesbezüglich bin ich mir nur nicht sicher, welche Bits ich beim Übergang von 17Bit zu 16Bit weglassen soll. 3a) out16 <= out17 (15 downto 0) schneidet ja das 17. (Negativ-) Bit weg. Deshalb würde ich es so machen wollen: 3b) out16 <= out17 (16) & out17 (14 downto 0) Oder ist das falsch gedacht? ???