1 | library IEEE;
|
2 | use ieee.std_logic_1164.all;
|
3 |
|
4 | package package_Uhr is
|
5 | function BCD_Decode(value: integer range 9 downto 0) return std_logic_vector;
|
6 | procedure Count(min:integer; sec1: integer; sec0: integer; milsec: integer);
|
7 | end package_Uhr;
|
8 |
|
9 | PACKAGE BODY package_Uhr is
|
10 |
|
11 | function BCD_Decode(value: integer range 9 downto 0) return std_logic_vector is
|
12 | variable result : std_logic_vector(6 downto 0);
|
13 | begin
|
14 | case value is
|
15 | when 0 => result:="1000000";
|
16 | when 1 => result:="1111001";
|
17 |
|
18 | when 2 => result:="0100100";
|
19 | when 3 => result:="0110000";
|
20 |
|
21 | when 4 => result:="0011001";
|
22 | when 5 => result:="0010010";
|
23 |
|
24 | when 6 => result:="0000010";
|
25 | when 7 => result:="1111000";
|
26 |
|
27 | when 8 => result:="0000000";
|
28 | when 9 => result:="0010000";
|
29 | end case;
|
30 | return result;
|
31 | end BCD_Decode;
|
32 |
|
33 | procedure Count(min:integer; sec1: integer; sec0: integer; milsec: integer) is
|
34 | begin
|
35 | --Hier Code zum zählen von 1/10Sekunden, Sekunden und Minuten
|
36 | end Count;
|
37 | end package_Uhr;
|
38 |
|
39 |
|
40 | library IEEE;
|
41 | use ieee.std_logic_1164.all;
|
42 | use work.package_Uhr.all;
|
43 |
|
44 | entity stoppuhr is
|
45 | port (
|
46 | sw_start : in std_logic;
|
47 | sw_stop : in std_logic;
|
48 | bcd_digit_min : out std_logic_vector(6 downto 0);
|
49 | bcd_digit_sec1 : out std_logic_vector(6 downto 0);
|
50 | bcd_digit_sec0 : out std_logic_vector(6 downto 0);
|
51 | bcd_digit_milsec : out std_logic_vector(6 downto 0)
|
52 | );
|
53 | end stoppuhr;
|
54 |
|
55 | architecture uhr of stoppuhr is
|
56 | begin process
|
57 | variable v_milsec : integer range 9 downto 0 := 0;
|
58 | variable v_sec0 : integer range 9 downto 0 := 0;
|
59 | variable v_sec1 : integer range 9 downto 0 := 0;
|
60 | variable v_min : integer range 9 downto 0 := 0;
|
61 | variable v_run : integer :=0;
|
62 | variable v_count : integer :=0;
|
63 | variable v_show : integer := 1;
|
64 | begin
|
65 | bcd_digit_min <= BCD_Decode(v_min);
|
66 | bcd_digit_sec1 <= BCD_Decode(v_sec1);
|
67 | bcd_digit_sec0 <= BCD_Decode(v_sec0);
|
68 | bcd_digit_milsec <= BCD_Decode(v_milsec);
|
69 | wait until sw_start='1';
|
70 | v_run:=1;
|
71 | v_count:=1;
|
72 | while v_run=1 loop
|
73 | if v_show=1 then
|
74 | bcd_digit_min <= BCD_Decode(v_min);
|
75 | bcd_digit_sec1 <= BCD_Decode(v_sec1);
|
76 | bcd_digit_sec0 <= BCD_Decode(v_sec0);
|
77 | bcd_digit_milsec <= BCD_Decode(v_milsec);
|
78 | end if;
|
79 | if sw_stop='1' then
|
80 | v_count:=0;
|
81 | end if;
|
82 | if v_count=1 then
|
83 | Count(v_min, v_sec1, v_sec0, v_milsec);
|
84 | end if;
|
85 | end loop;
|
86 | end process;
|
87 | end uhr;
|