You are on page 1of 3

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Contador is
port ( CLK: in std_logic;
RESET: in std_logic;
SENSOR: in std_logic;
-LED: out std_logic_vector(7 downto 0);
DISPLAY:out std_logic_vector (3 downto 0);
SEGMENTO: out std_logic_vector (7 downto 0));
end Contador;
architecture Behavioral of Contador is
--signal COUNTER: std_logic_vector(7 downto 0); --CONTADOR LED
signal COUNTER1: std_logic_vector(7 downto 0):="00000000"; --CONTADOR UNIDAD
signal COUNTER2: std_logic_vector(7 downto 0);--CONTADOR DECENA
signal COUNTER3: std_logic_vector(7 downto 0);--CONTADOR CENTENA
signal COUNTER4: std_logic_vector(7 downto 0);--CONTADOR DISPLAY
signal PRESCALER: std_logic_vector(26 downto 0);--original 25
signal TIEMPO: std_logic_vector(26 downto 0);--CONTADOR TIEMPO
signal PNP:std_logic_vector(3 downto 0);
begin
CounterProcess: process(RESET, CLK,SENSOR)
begin
if rising_edge (CLK) then
if RESET = '1' then
PRESCALER <= (others => '0');
--COUNTER <= (others => '0');
COUNTER1 <= (others => '0');
COUNTER2 <= (others => '0');
COUNTER3 <= (others => '0');
COUNTER4 <= (others => '0');
else
if PRESCALER < "10111110101111000010000000" then --50MHz
PRESCALER <= PRESCALER + 1;
TIEMPO <= TIEMPO + 1;
if TIEMPO < "11000011010100000" then--CONTEO DE
0 A 100K
COUNTER4 <=COUNTER1;
PNP <= "1110";
else
if TIEMPO < "110000110101000000" then--C
ONTEO DE 100K A 200K
COUNTER4 <=COUNTER2;
PNP <= "1101";
else
if TIEMPO < "1001001001111100000" then-CONTEO DE 200K A 300K
COUNTER4 <=COUNTER3;
PNP <= "1011";
else
TIEMPO <= "000000000000000000000
000000";
end if;

end if;
end if;
else
---

PRESCALER <= (others => '0');


COUNTER <= COUNTER + 1;
COUNTER1 <= COUNTER1 + 1;
if COUNTER1 = "00001001" then
COUNTER2<= COUNTER2 + 1;
COUNTER1 <= "00000000";
end if;
if COUNTER2 = "00001001" AND COUNTER1 =

"00001001" then
COUNTER3 <= COUNTER3 + 1;
COUNTER2 <= "00000000";
end if;
if COUNTER3 = "00000010" AND COUNTER1 =
"00000101" AND COUNTER2 = "00000101" then
COUNTER3 <= "00000000";
COUNTER2 <= "00000000";
COUNTER1 <= "00000000";
end if;
end if;
end if;
end if;
end process;
--LED <= COUNTER;
DISPLAY <= PNP;
SEGMENTO <= "11000000" when COUNTER4 = "00000000" else -- 0
"11111001" when COUNTER4 = "00000001" else -- 1
"10100100" when COUNTER4 = "00000010" else -- 2
"10110000" when COUNTER4= "00000011"

else -- 3

"10011001" when COUNTER4 = "00000100" else -- 4


"10010010" when COUNTER4 = "00000101" else -- 5
"10000010" when COUNTER4 = "00000110" else -- 6
"11111000" when COUNTER4 = "00000111" else -- 7
"10000000" when COUNTER4= "00001000" else -- 8
"10010000" when COUNTER4 = "00001001" else-- 9
"11000000" when COUNTER4 >= "00001010"; --apagad
o
end Behavioral;

//ENTRADAS
NET
NET
NET
NET

"CLK" LOC = V10;


"RESET" LOC = C4;
"SENSOR" LOC = T12;
"SENSOR" CLOCK_DEDICATED_ROUTE = FALSE;

//SALIDAS
NET
NET
NET
NET
NET
NET
NET

"SEGMENTO(0)"
"SEGMENTO(1)"
"SEGMENTO(2)"
"SEGMENTO(3)"
"SEGMENTO(4)"
"SEGMENTO(5)"
"SEGMENTO(6)"

NET
NET
NET
NET

"DISPLAY(0)"
"DISPLAY(1)"
"DISPLAY(2)"
"DISPLAY(3)"

LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC

=
=
=
=
=
=
=
=
=
=
=

T17 ;
T18;
U17;
U18;
M14;
N14;
L14;
N16;
N15;
P18;
P17;

You might also like