Addition, Subtraktion mit unsigned

OP #3549826
Lesenswert?

Hallo. Ich arbeite mit Quartus 2 mit einem Cyclone IV.

Ich habe jetzt zwei Zahlen im Format Unsigned, die ich addieren oder 
subtrahieren möchte.

Die Bitbreite beträgt je 16 Bit. 2^15 ist gerade die Mitte und gleich 
die Null.

Zahl1: +84 --> 2^15 + 84 = 32852 = 1000000001010100
Zahl2: -18 --> 2^15 - 18 = 32750 = 0111111111101110

Eigentlich erwarte ich jetzt dass es 84+(-18) rechnet und dann
66 = 32834 = 1000000001000010

Es kommt aber 65470 raus.
Die std_logic_vectoren lass ich mir dann am Rechner anzeigen.




Möchte ich diese jetzt addieren habe ich hier folgenden Code:
1
LIBRARY ieee ;
2
USE IEEE.std_logic_1164.all;
3
USE ieee.numeric_std.all;
4

5
ENTITY testblock IS
6
  PORT 
7
  (
8
  clk    : in std_logic;
9
  data_in_1   : in std_logic_vector(15 downto 0);
10
  data_in_2   : in std_logic_vector(15 downto 0);
11
  data_out_1  : out std_logic_vector(15 downto 0)
12
    );
13
END testblock;
14

15
ARCHITECTURE Verhalten OF testblock IS
16
  signal x : unsigned (15 downto 0);
17
BEGIN
18
  p: PROCESS (clk)
19
    BEGIN
20
      IF rising_edge(clk) THEN
21
      x <= unsigned(data_in_1) + unsigned(data_in_2);
22
      data_out_1 <= std_logic_vector(x);
23
      
24
      END IF;
25
  END PROCESS ;
26
END Verhalten ;
Gast #3549868
Lesenswert?

Ben Charmin schrieb:
>
> Ich habe jetzt zwei Zahlen im Format Unsigned, die ich addieren oder
> subtrahieren möchte.
>
> Die Bitbreite beträgt je 16 Bit. 2^15 ist gerade die Mitte und gleich
> die Null.
>
Das ist nicht unsigned, sondern signed in Offsetcodierung. Im 
Gegensatz zur 2er Komplementcodierung ist das nicht einfach per cast als 
unsigned addieren bzw subtrahieheren.

Hint: MSB des Ergebnisses invertieren, dann stimmt es wieder.
Gast #3550047
Lesenswert?

Es gibt genau eine interpretative und operationale Deutung von 
unsigned (im Zshg. mit ieee.numeric_std). Der Compiler kann ja nicht 
wissen, dass Du ieee.numeric_std schreibst, aber biased signed "denkst". 
Es ist also nicht sein Fehler.
Wie fast immer sitzt das Problem vor dem Monitor. :-)

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