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 ; |