DU_Code.vhd


1
----------------------------------------------------------------------------------
2
-- Company: 
3
-- Engineer: 
4
-- 
5
-- Create Date:    12:50:24 01/04/2015 
6
-- Design Name: 
7
-- Module Name:    DU_Code - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
use IEEE.STD_LOGIC_unsigned.ALL;
23
24
-- Uncomment the following library declaration if using
25
-- arithmetic functions with Signed or Unsigned values
26
  use IEEE.NUMERIC_STD.ALL;
27
28
-- Uncomment the following library declaration if instantiating
29
-- any Xilinx primitives in this code.
30
--library UNISIM;
31
--use UNISIM.VComponents.all;
32
33
entity DU_Code is
34
    Port ( clk : in  STD_LOGIC;
35
           set_time : in  STD_LOGIC;
36
           stunde : in  STD_LOGIC;
37
           mode : in      STD_LOGIC_VECTOR (1 downto 0);
38
           o_std_z : out  STD_LOGIC_VECTOR (3 downto 0);
39
           o_std_e : out  STD_LOGIC_VECTOR (3 downto 0);
40
           o_min_z : out  STD_LOGIC_VECTOR (3 downto 0);
41
           o_min_e : out  STD_LOGIC_VECTOR (3 downto 0);
42
           o_sec_z : out  STD_LOGIC_VECTOR (3 downto 0);
43
           o_sec_e : out  STD_LOGIC_VECTOR (3 downto 0);
44
           i_std_z : in  STD_LOGIC_VECTOR (3 downto 0);
45
           i_std_e : in  STD_LOGIC_VECTOR (3 downto 0);
46
           i_min_z : in  STD_LOGIC_VECTOR (3 downto 0);
47
           i_min_e : in  STD_LOGIC_VECTOR (3 downto 0);
48
           i_sec_z : in  STD_LOGIC_VECTOR (3 downto 0);
49
           i_sec_e : in  STD_LOGIC_VECTOR (3 downto 0));
50
end DU_Code;
51
52
architecture Behavioral of DU_Code is
53
54
     signal s_std_z :  STD_LOGIC_VECTOR (3 downto 0):= "0000";
55
     signal s_std_e :  STD_LOGIC_VECTOR (3 downto 0):= "0000";
56
     signal s_min_z :  STD_LOGIC_VECTOR (3 downto 0):= "0000";
57
     signal s_min_e :  STD_LOGIC_VECTOR (3 downto 0):= "0000";
58
     signal s_sec_z :  STD_LOGIC_VECTOR (3 downto 0):= "0000";
59
     signal s_sec_e :  STD_LOGIC_VECTOR (3 downto 0):= "0000";
60
61
begin
62
63
modul: process begin
64
 wait until rising_edge(clk);
65
66
67
  if(mode = "00") then
68
    s_sec_e <= STD_LOGIC_VECTOR(unsigned(s_sec_e)+1);
69
    if(s_sec_e =9) then
70
      s_sec_e <= "0000";
71
      s_sec_z <= STD_LOGIC_VECTOR(unsigned(s_sec_z)+1);
72
    end if;
73
    if(s_sec_z = 5 and s_sec_e = 9 ) then
74
      s_sec_e <= "0000";
75
      s_sec_z <= "0000";
76
      s_min_e <= STD_LOGIC_VECTOR(unsigned(s_min_e)+1);
77
    end if;
78
    if(s_min_e = 9 and s_sec_z =5 and s_sec_e = 9) then
79
      s_sec_e <= "0000";
80
      s_sec_z <= "0000";
81
      s_min_e <= "0000";
82
      s_min_z <= STD_LOGIC_VECTOR(unsigned(s_min_z)+1);
83
    end if;
84
    if(s_min_z = 5 and s_min_e = 9 and s_sec_z =5 and s_sec_e = 9) then
85
      s_sec_e <= "0000";
86
      s_sec_z <= "0000";
87
      s_min_e <= "0000";
88
      s_min_z <= "0000";
89
      s_std_e <= STD_LOGIC_VECTOR(unsigned(s_std_e)+1);
90
    end if;
91
    if(s_std_e = 9 and s_min_z = 5 and s_min_e = 9 and s_sec_z = 5 and s_sec_e = 9) then
92
      s_sec_e <= "0000";
93
      s_sec_z <= "0000";
94
      s_min_e <= "0000";
95
      s_min_z <= "0000";
96
      s_std_e <= "0000";
97
      s_std_z <= STD_LOGIC_VECTOR(unsigned(s_std_z)+1);
98
    end if;
99
    if(stunde = '0') then
100
      if(s_std_z = 1 and s_std_e = 2 and s_min_z = 5 and s_min_e = 9 and s_sec_z = 5 and s_sec_e = 9) then
101
        s_sec_e <= "0000";
102
        s_sec_z <= "0000";
103
        s_min_e <= "0000";
104
        s_min_z <= "0000";
105
        s_std_e <= "0000";
106
        s_std_z <= "0000";
107
      end if;
108
    end if;
109
    if(stunde = '1') then
110
      if(s_std_z = 2 and s_std_e = 4 and s_min_z = 5 and s_min_e = 9 and s_sec_z = 5 and s_sec_e = 9) then
111
        s_sec_e <= "0000";
112
        s_sec_z <= "0000";
113
        s_min_e <= "0000";
114
        s_min_z <= "0000";
115
        s_std_e <= "0000";
116
        s_std_z <= "0000";
117
      end if;
118
    
119
    end if;
120
  end if;
121
122
  if(mode = "01") then
123
124
    s_sec_e <= STD_LOGIC_VECTOR(unsigned(s_sec_e)+1);
125
    if(s_sec_e = 9) then
126
      s_sec_e <= "0000";
127
      s_sec_z <= STD_LOGIC_VECTOR(unsigned(s_sec_z)+1);
128
    end if;
129
    if(s_sec_z = 5 and s_sec_e = 9 ) then
130
      s_sec_e <= "0000";
131
      s_sec_z <= "0000";
132
      s_min_e <= STD_LOGIC_VECTOR(unsigned(s_min_e)+1);
133
    end if;
134
    if(s_min_e = 9 and s_sec_z = 5 and s_sec_e = 9) then
135
      s_sec_e <= "0000";
136
      s_sec_z <= "0000";
137
      s_min_e <= "0000";
138
      s_min_z <= STD_LOGIC_VECTOR(unsigned(s_min_z)+1);
139
    end if;
140
    if(s_min_z = 5 and s_min_e = 9 and s_sec_z = 5 and s_sec_e = 9) then
141
      s_sec_e <= "0000";
142
      s_sec_z <= "0000";
143
      s_min_e <= "0000";
144
      s_min_z <= "0000";
145
      s_std_e <= STD_LOGIC_VECTOR(unsigned(s_std_e)+1);
146
    end if;
147
    if(s_std_e = 9 and s_min_z = 5 and s_min_e = 9 and s_sec_z = 5 and s_sec_e = 9) then
148
      s_sec_e <= "0000";
149
      s_sec_z <= "0000";
150
      s_min_e <= "0000";
151
      s_min_z <= "0000";
152
      s_std_e <= "0000";
153
      s_std_z <= STD_LOGIC_VECTOR(unsigned(s_std_z)+1);
154
    end if;
155
156
  end if;
157
158
159
  if(mode = "10") then
160
    if( s_std_z > 0 or s_std_e > 0 or s_min_z > 0 or s_min_e > 0 or s_sec_z > 0 or s_sec_e > 0) then
161
      s_sec_e <= STD_LOGIC_VECTOR(unsigned(s_sec_e)-1);
162
    end if;
163
    
164
    if(s_std_z > 0) then
165
      if(s_sec_e =0 and s_sec_z = 0 and s_min_e = 0 and s_min_z = 0 and s_std_e = 0) then
166
        s_sec_e <= "1001";
167
        s_sec_z <= "0101";
168
        s_min_e <= "1001";
169
        s_min_z <= "0101";
170
        s_std_e <= "1001";
171
        s_std_z <= STD_LOGIC_VECTOR(unsigned(s_std_z)-1);
172
      end if;
173
    end if;
174
    
175
    if(s_std_e > 0) then
176
        if(s_sec_e =0 and s_sec_z = 0 and s_min_e = 0 and s_min_z = 0) then
177
          s_sec_e <= "1001";
178
          s_sec_z <= "0101";
179
          s_min_e <= "1001";
180
          s_min_z <= "0101";
181
          s_std_e <= STD_LOGIC_VECTOR(unsigned(s_std_e)-1);
182
        end if;
183
    end if;
184
    
185
    if(s_min_z > 0) then
186
      if(s_sec_e =0 and s_sec_z = 0 and s_min_e = 0) then
187
        s_sec_e <= "1001";
188
        s_sec_z <= "0101";
189
        s_min_e <= "1001";
190
        s_min_z <= STD_LOGIC_VECTOR(unsigned(s_min_z)-1);
191
      end if;
192
    end if;
193
    
194
    if(s_min_e >0) then
195
      if(s_sec_e =0 and s_sec_z = 0) then
196
        s_sec_e <= "1001";
197
        s_sec_z <= "0101";
198
        s_min_e <= STD_LOGIC_VECTOR(unsigned(s_min_e)-1);
199
      end if;
200
    end if;
201
    
202
    if(s_sec_z >0) then
203
      if(s_sec_e =0) then
204
        s_sec_e <= "1001";
205
        s_sec_z <= STD_LOGIC_VECTOR(unsigned(s_sec_z)-1);
206
      end if;
207
    end if;
208
  
209
  end if;
210
  
211
  if (set_time='1') then
212
      s_sec_e <= i_sec_e;
213
      s_sec_z <= i_sec_z;
214
      s_min_e <= i_min_e;
215
      s_min_z <= i_min_z;
216
      s_std_e <= i_std_e;
217
      s_std_z <= i_std_z;
218
    end if;
219
220
221
end process modul;
222
223
o_sec_e <= s_sec_e;
224
o_sec_z <= s_sec_z;
225
o_min_e <= s_min_e;
226
o_min_z <= s_min_z;
227
o_std_e <= s_std_e;
228
o_std_z <= s_std_z;
229
230
231
end Behavioral;