Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -------------------------------------------
- -- KHBO Dept.IW&T
- -- DS2 Ontdendercode
- -- Maxim Lambert
- -------------------------------------------
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use ieee.numeric_std.all;
- entity ontdenderCircuit is
- port ( knop : in STD_LOGIC;
- clock: in STD_LOGIC
- );
- end ontdenderCircuit;
- architecture Behavioral of ontdenderCircuit is
- process ontdenderCircuit(clock, knop)
- variable counter : INTEGER range 0 to 1000000;
- signal ontdenderen : std_logic;
- signal uitgang : std_logic;
- begin
- -- Knop gedrukt? begin met ontdenderen!
- if rising_edge(clock) then
- if (knop = '1') then
- ontdenderen <= '1';
- end if;
- end if;
- -- Terug op oorspronkelijke waarde plaatsen
- if (counter = "0") then
- counter := 1000000;
- ontdenderen <= '0';
- uitgang <= '0';
- end if;
- -- Aantal keren aftellen en signaal hoog zetten/houden
- if (ontdenderen = '1') then
- counter := counter - 1;
- uitgang <= '1';
- end if;
- -- Bovenstaande if's van plaats verwisselen zorgt ervoor dat niet telkens
- -- na 100000 clock pulsen uitgang 1 clockpuls op "0" komt wanneer de knop hoog blijft.
- -- Het "nadeel" nu is dat mogelijk 1 clockpuls later de uitgang op 1 komt,
- -- daar gecontrolleerd wordt op ontdenderen, die pas NA de cyclus te doorlopen hoog komt
- -- en dus de laatste if niet triggert. Dit is echter te verwaarlozen.
- -- Als maar 20ns op de knop gedrukt wordt zal de uitgang ook nooit hoog komen,
- -- de kans op die situatie is nihil en wordt dus ook verwaarloost.
- end process;
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment