Aha, vielen Dank. Auf die Idee, den resize auf Minuend und Subtrahend
anzuwenden statt auf das Ergebnis, bin ich nicht gekommen.
1 | entity subtraktion is
|
2 | end entity subtraktion;
|
3 |
|
4 | library std;
|
5 | use std.textio.all;
|
6 |
|
7 | library ieee;
|
8 | use ieee.std_logic_1164.all;
|
9 | use ieee.std_logic_textio.all;
|
10 | use ieee.numeric_std.all;
|
11 |
|
12 | architecture test of subtraktion is
|
13 |
|
14 | signal a : std_logic_vector (9 downto 0) := ("0000000000"); -- 0
|
15 | signal b : std_logic_vector (9 downto 0) := ("1111111111"); -- 1023
|
16 | signal y : signed (10 downto 0);
|
17 |
|
18 | begin
|
19 |
|
20 | y <= signed(resize(unsigned(a), y'length)) - signed(resize(unsigned(b), y'length));
|
21 |
|
22 | process (y)
|
23 | variable my_line : line;
|
24 | begin
|
25 | write(my_line, std_logic_vector(y));
|
26 | writeline(output, my_line);
|
27 | end process;
|
28 |
|
29 | end architecture;
|
1 | $ ghdl -a --ieee=synopsys subtraktion.vhdl && ghdl -r --ieee=synopsys subtraktion
|
2 | UUUUUUUUUUU
|
3 | 10000000001
|
>> process (y)
> BTW: in diese Sensitivliste gehören a und b statt y, wenn es schon
> unbedingt ein Prozess sein muss...
Da hatte das Synthese-tool auch schon gewarnt, hatte aber andere Sorgen,
zumal es trotzdem funktioniert hat. Ohnehin: Nein, sollte nicht
unbedingt ein Prozess sein.