aboutsummaryrefslogtreecommitdiff
path: root/src/top_hex.vhd
blob: 2047e84bc159a9c28d0d85c1997e09a9c1dc8371 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity top_hex is 
port ( SW   : in      std_ulogic_vector(9 downto 0);
       HEX0 : out     std_ulogic_vector(6 downto 0);
       HEX1 : out     std_ulogic_vector(6 downto 0);
       HEX2 : out     std_ulogic_vector(6 downto 0);
       HEX3 : out     std_ulogic_vector(6 downto 0);
       LEDR : out     std_ulogic_vector(9 downto 0));
end entity;

architecture rtl of top_hex is
  signal sa : signed(4 downto 0);
  signal sb : signed(4 downto 0);
  signal sum : signed(4 downto 0);
  signal betrag : signed(4 downto 0);
begin

LEDR <= SW;

sa <= signed(SW(4 downto 0));
sb <= signed(SW(9 downto 5));
sum <= sa + sb;
betrag <= abs(sum);

bin2seg_i0: entity work.bin2seg
 port map(
    bin_i => std_ulogic_vector(betrag(3 downto 0)),
    seg_o => HEX0
);

bin2seg_i3: entity work.bin2seg
 port map(
    bin_i => "000" & std_ulogic(sum(4)),
    seg_o => HEX3
);

bin2seg_i2: entity work.bin2seg
 port map(
    bin_i => std_ulogic_vector(sum(3 downto 0)),
    seg_o => HEX2
);

HEX1 <= "0001110" when sum = -16 else
        "0111111" when sa < 0 else "1111111";

end architecture rtl;