Vulpes

microwave_vhd

Nov 2nd, 2011
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.66 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use ieee.std_logic_unsigned.all;
  4.  
  5.  
  6. entity microwave is
  7.     port(
  8.         b15, b30, b60, b90: in std_logic;
  9.         clk: in std_logic;
  10.         digits: out std_logic_vector (6 downto 0);
  11.         switcha: out std_logic_vector (1 downto 0);
  12.         lon: out std_logic_vector (1 downto 0);
  13.         cooking: out std_logic
  14.     );
  15. end microwave;
  16.  
  17.  
  18. architecture Behavioral of microwave is
  19.     signal is_cooking: std_logic:='0';
  20.     signal doswitch: std_logic:='0';
  21.     begin
  22.     process(clk,b15,b30,b60,b90)
  23.         variable digit01dec: integer range 0 to 15;
  24.         variable digit10dec: integer range 0 to 15;
  25.         variable count:integer range 0 to 25000000;
  26.         variable segswitcha: integer range 0 to 100000;
  27.         begin
  28.         lon<="11";
  29.  
  30.         if (clk'event and clk='1') then
  31.         if (segswitcha=100000) then
  32.             segswitcha:=0;
  33.             doswitch <= not doswitch;
  34.         else
  35.             segswitcha:=segswitcha+1;
  36.         end if;
  37.             if (digit10dec>0) then
  38.                 if (count=25000000) then
  39.                     count:=0;
  40.                     if (digit01dec=0) then
  41.                         digit10dec:=digit10dec-1;
  42.                         digit01dec:=9;
  43.                     else
  44.                         digit01dec:=digit01dec-1;
  45.                     end if;
  46.                 else
  47.                     count:=count+1;
  48.                 end if;
  49.             end if;
  50.         end if;
  51.         if (digit10dec=0) then
  52.             is_cooking<='0';
  53.             digit01dec:=0;
  54.         else
  55.             --nothing
  56.         end if;
  57.        
  58.         if (doswitch='1') then
  59.             case digit01dec is     
  60.                             --     -0  
  61.                             --   |5  |1
  62.                             --     -6  
  63.                             --   |4  |2
  64.                             --     -3  
  65.                 when 00 => digits <= "1000000"; --0
  66.                 when 01 => digits <= "1111001"; --1
  67.                 when 02 => digits <= "0100100"; --2
  68.                 when 03 => digits <= "0110000"; --3
  69.                 when 04 => digits <= "0011001"; --4
  70.                 when 05 => digits <= "0010010"; --5
  71.                 when 06 => digits <= "0000010"; --6
  72.                 when 07 => digits <= "1111000"; --7
  73.                 when 08 => digits <= "0000000"; --8
  74.                 when 09 => digits <= "0010000"; --9
  75.                 --when 10 => digits <= "0001000";   --A
  76.                 --when 11 => digits <= "0000011";   --B
  77.                 --when 12 => digits <= "1000110";   --C
  78.                 --when 13 => digits <= "0100001";   --D
  79.                 --when 14 => digits <= "0000110";   --E
  80.                 --when 15 => digits <= "0001110";   --F
  81.                 when others => digits <= "1111111";         --turns off all lights when invalid input
  82.             end case;
  83.         else
  84.             case digit10dec is
  85.                             --     -0  
  86.                             --   |5  |1
  87.                             --     -6  
  88.                             --   |4  |2
  89.                             --     -3  
  90.                 when 01 => digits <= "1000000"; --0
  91.                 when 02 => digits <= "1111001"; --1
  92.                 when 03 => digits <= "0100100"; --2
  93.                 when 04 => digits <= "0110000"; --3
  94.                 when 05 => digits <= "0011001"; --4
  95.                 when 06 => digits <= "0010010"; --5
  96.                 when 07 => digits <= "0000010"; --6
  97.                 when 08 => digits <= "1111000"; --7
  98.                 when 09 => digits <= "0000000"; --8
  99.                 when 10 => digits <= "0010000"; --9
  100.                 --when 11 => digits <= "0001000";   --A
  101.                 --when 12 => digits <= "0000011";   --B
  102.                 --when 13 => digits <= "1000110";   --C
  103.                 --when 14 => digits <= "0100001";   --D
  104.                 --when 15 => digits <= "0000110";   --E
  105.                 when 00 => digits <= "1000000"; --F
  106.                 when others => digits <= "1111111";         --turns off all lights when invalid input
  107.             end case;
  108.         end if;
  109.        
  110.         if (b90 = '1') then
  111.             count := 0;
  112.             is_cooking<='1';
  113.             digit10dec:=10;
  114.             digit01dec:=0;
  115.         elsif (b60='1') then
  116.             count := 0;
  117.             is_cooking<='1';
  118.             digit10dec:=7;
  119.             digit01dec:=0;
  120.         elsif (b30='1') then
  121.             count := 0;
  122.             is_cooking<='1';
  123.             digit10dec:=4;
  124.             digit01dec:=0;
  125.         elsif (b15='1') then
  126.             count := 0;
  127.             is_cooking<='1';
  128.             digit10dec:=2;
  129.             digit01dec:=5;
  130.         else
  131.         --nothing
  132.         end if;
  133.     end process;
  134.    
  135.    
  136.     process (doswitch)
  137.     begin
  138.         if (doswitch='1') then
  139.             switcha<="10";
  140.         else
  141.             switcha<="01";
  142.         end if;
  143.     end process;
  144.    
  145.     cooking<=is_cooking;
  146.    
  147.  
  148. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment