library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity Digital_Clock_Display is port( clk1: in std_logic; enable: in std_logic; --reset: in std_logic; ones_second: out std_logic_vector (6 downto 0); ones_tens: out std_logic_vector (6 downto 0); minutes_second: out std_logic_vector (6 downto 0); minutes_tens: out std_logic_vector (6 downto 0); first_hour: out std_logic_vector (6 downto 0); second_hour: out std_logic_vector (6 downto 0) ); end Digital_Clock_Display; architecture implementation of Digital_Clock_Display is signal sec_ones, sec_tens, min_ones, min_tens, hour_ones, hour_tens: integer range 0 to 9:= 0; signal count: integer:= 1; signal clock: std_logic:= '0'; begin --clk generation.For 100 MHz clock this generates 1 Hz clock. process(clk1) begin if(clk1'event and clk1='1' and enable = '1') then count <= count+1; if(count = 250000) then --50,000,000 Hz clock cycle clock <= not clock; count <=1; end if; end if; end process; process(clock) --period of clk is 1 second. begin if(clock'event and clock='1') then sec_ones <= sec_ones+ 1;-- increment seconds after each 50MHz cycle if(sec_ones = 9) then sec_ones <=0; sec_tens <= sec_tens + 1; --once ones(second) place reaches 9, increment tens(seconds) place and reset ones place to 0 if(sec_tens = 9) then sec_tens <= 0; min_ones <= min_ones +1;--once tens(second) place reaches 5, increment (ones)minutes place and reset tens place to 0 if(min_ones = 9) then min_ones <=0; min_tens <= min_tens + 1; --once ones(minutes) place reaches 9, increment (tens)minutes place and reset ones place to 0 if(min_tens = 5) then min_tens <= 0; hour_ones <= hour_ones +1; --once minute(tens) place reaches 5, increment (ones)hour place and reset tens place to 0 if(hour_ones = 9) then hour_ones <= 0; hour_tens <= hour_tens +1;----once ones(hour) place reaches 9, increment tens(hour) place and reset ones place to 0 if((hour_tens = 5) AND (hour_ones = 9)) then hour_tens <= 0; hour_ones <= 0; end if; end if; end if; end if; end if; end if; end if; end process; process(sec_ones) begin if sec_ones = 0 then ones_second <= "1000000"; -- displays 0 elsif sec_ones = 1 then ones_second <= "1111001"; -- displays 1 elsif sec_ones = 2 then ones_second <= "0100100"; -- displays 2 elsif sec_ones = 3 then ones_second <= "0110000"; -- displays 3 elsif sec_ones = 4 then ones_second <= "0011001"; -- displays 4 elsif sec_ones = 5 then ones_second <= "0010010"; -- displays 5 elsif sec_ones = 6 then ones_second <= "0000010"; -- displays 6 elsif sec_ones = 7 then ones_second <= "1111000"; -- displays 7 elsif sec_ones = 8 then ones_second <= "0000000"; -- displays 8 elsif sec_ones = 9 then ones_second <= "0010000"; -- displays 9 else ones_second <= "0111111"; --displays error end if; end process; process(sec_tens) begin if sec_tens = 0 then ones_tens <= "1000000"; -- displays 0 elsif sec_tens = 1 then ones_tens <= "1111001"; -- displays 1 elsif sec_tens = 2 then ones_tens <= "0100100"; -- displays 2 elsif sec_tens = 3 then ones_tens <= "0110000"; -- displays 3 elsif sec_tens = 4 then ones_tens <= "0011001"; -- displays 4 elsif sec_tens = 5 then ones_tens <= "0010010"; -- displays 5 elsif sec_tens = 6 then ones_tens <= "0000010"; -- displays 6 elsif sec_tens = 7 then ones_tens <= "1111000"; -- displays 7 elsif sec_tens = 8 then ones_tens <= "0000000"; -- displays 8 elsif sec_tens = 9 then ones_tens <= "0010000"; -- displays 9 else ones_tens <= "0111111"; --displays error end if; end process; process(min_ones) begin if min_ones = 0 then minutes_second <= "1000000"; -- displays 0 elsif min_ones = 1 then minutes_second <= "1111001"; -- displays 1 elsif min_ones = 2 then minutes_second <= "0100100"; -- displays 2 elsif min_ones = 3 then minutes_second <= "0110000"; -- displays 3 elsif min_ones = 4 then minutes_second <= "0011001"; -- displays 4 elsif min_ones = 5 then minutes_second <= "0010010"; -- displays 5 elsif min_ones = 6 then minutes_second <= "0000010"; -- displays 6 elsif min_ones = 7 then minutes_second <= "1111000"; -- displays 7 elsif min_ones = 8 then minutes_second <= "0000000"; -- displays 8 elsif min_ones = 9 then minutes_second <= "0010000"; -- displays 9 else minutes_second <= "0111111"; --displays error end if; end process; process(min_tens) begin if min_tens = 0 then minutes_tens <= "1000000"; -- displays 0 elsif min_tens = 1 then minutes_tens <= "1111001"; -- displays 1 elsif min_tens = 2 then minutes_tens <= "0100100"; -- displays 2 elsif min_tens = 3 then minutes_tens <= "0110000"; -- displays 3 elsif min_tens = 4 then minutes_tens <= "0011001"; -- displays 4 elsif min_tens = 5 then minutes_tens <= "0010010"; -- displays 5 else minutes_tens <= "0111111"; --displays error end if; end process; process(hour_ones) begin if hour_ones = 0 then first_hour <= "1000000"; -- displays 0 elsif hour_ones = 1 then first_hour <= "1111001"; -- displays 1 elsif hour_ones = 2 then first_hour <= "0100100"; -- displays 2 elsif hour_ones = 3 then first_hour <= "0110000"; -- displays 3 elsif hour_ones = 4 then first_hour <= "0011001"; -- displays 4 elsif hour_ones = 5 then first_hour <= "0010010"; -- displays 5 elsif hour_ones = 6 then first_hour <= "0000010"; -- displays 6 elsif hour_ones = 7 then first_hour <= "1111000"; -- displays 7 elsif hour_ones = 8 then first_hour <= "0000000"; -- displays 8 elsif hour_ones = 9 then first_hour <= "0010000"; -- displays 9 else first_hour <= "0111111"; --displays error end if; end process; process(hour_tens) begin if hour_tens = 0 then second_hour <= "1000000"; -- displays 0 elsif hour_tens = 1 then second_hour <= "1111001"; -- displays 1 elsif hour_tens = 2 then second_hour <= "0100100"; -- displays 2 elsif hour_tens = 3 then second_hour <= "0110000"; -- displays 3 elsif hour_tens = 4 then second_hour <= "0011001"; -- displays 4 elsif hour_tens = 5 then second_hour <= "0010010"; -- displays 5 else second_hour <= "0111111"; --displays error end if; end process; end implementation;