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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
ENTITY clk_div IS
PORT
(
clock_27Mhz : IN STD_LOGIC;
reset : IN STD_LOGIC;
clock_1MHz : OUT STD_LOGIC;
clock_100KHz : OUT STD_LOGIC;
clock_10KHz : OUT STD_LOGIC;
clock_1KHz : OUT STD_LOGIC;
clock_100Hz : OUT STD_LOGIC;
clock_10Hz : OUT STD_LOGIC;
clock_1Hz : OUT STD_LOGIC);
END clk_div;
ARCHITECTURE a OF clk_div IS
SIGNAL count_1Mhz: STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL count_100Khz, count_10Khz, count_1Khz,count_100hz, count_10hz, count_1hz : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clock_27Mhz,reset)
BEGIN
-- Divise par 27
IF reset = '0' THEN
count_1Mhz <= (others => '0');
count_100Khz <= (others => '0');
count_10Khz <= (others => '0');
count_1Khz <= (others => '0');
count_100hz <= (others => '0');
count_10hz <= (others => '0');
count_1hz <= (others => '0');
ELSIF rising_edge (clock_27Mhz) THEN
IF count_1Mhz < 26 THEN
count_1Mhz <= count_1Mhz + 1;
ELSE
count_1Mhz <= (others => '0');
IF count_100khz < 9 THEN
count_100khz <= count_100khz + 1;
ELSE
count_100khz <= (others => '0') ;
IF count_10khz < 9 THEN
count_10khz <= count_10khz + 1;
ELSE
count_10khz <= (others => '0') ;
IF count_1khz < 9 THEN
count_1khz <= count_1khz + 1;
ELSE
count_1khz <= (others => '0') ;
IF count_100hz < 9 THEN
count_100hz <= count_100hz + 1;
ELSE
count_100hz <= (others => '0') ;
IF count_10hz < 9 THEN
count_10hz <= count_10hz + 1;
ELSE
count_10hz <= (others => '0') ;
IF count_1hz < 9 THEN
count_1hz <= count_1hz + 1;
ELSE
count_1hz <= (others => '0') ;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
IF count_1Mhz < 13 THEN
clock_1Mhz <= '0';
ELSE
clock_1Mhz <= '1' ;
END IF;
IF count_100khz < 5 THEN
clock_100Khz <= '0';
ELSE
clock_100Khz <= '1' ;
END IF;
IF count_10khz < 5 THEN
clock_10Khz <= '0';
ELSE
clock_10Khz <= '1' ;
END IF;
IF count_1khz < 5 THEN
clock_1Khz <= '0';
ELSE
clock_1Khz <= '1' ;
END IF;
IF count_100hz < 5 THEN
clock_100hz <= '0';
ELSE
clock_100hz <= '1' ;
END IF;
IF count_10hz < 5 THEN
clock_10hz <= '0';
ELSE
clock_10hz <= '1' ;
END IF;
IF count_1hz < 5 THEN
clock_1hz <= '0';
ELSE
clock_1Khz <= '1' ;
END IF;
END IF;
END PROCESS;
END a; |