Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 5.61 KB | None | 0 0
  1. --------------------------------------------------------part4-------------------------------------------------------
  2. ---------------------------------------------FLASHES DIGITS ON SEVEN SEG--------------------------------------------
  3. library ieee;
  4. use ieee.std_logic_1164.all;
  5. use ieee.std_logic_arith.all;
  6. use ieee.std_logic_unsigned.all;
  7. entity part4 is
  8.     port (  SW   : in std_logic_vector( 17 downto 0 ); --0=T 1=CLEAR
  9.         CLOCK_50 : in std_logic;
  10.         KEY  : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- 0=BIGHTER 1=DIMMER
  11.         LEDR :  out std_logic_vector( 17 downto 0 ); -- SET TO THE RESPECTIVE SWITCH STATE
  12.         HEX0 :  out std_logic_vector( 0 to 6 ) );
  13. end part4;
  14.  
  15. architecture STRUCTURAL of part4 is
  16.  
  17.     component counter is
  18.         port (  Enable : in std_logic;
  19.                 Reset   : in std_logic;
  20.                 CLK     : in std_logic; -- CLK <= CLOCK_50
  21.                 DIMVAL  : IN STD_LOGIC_VECTOR(20 DOWNTO 0);
  22.                 HEX0    :  out std_logic_vector( 0 to 6 ) );
  23.     end component counter;
  24.  
  25.     component SevenSeg is
  26.         port (  c   : in std_logic_vector(3 downto 0);
  27.             HEX : out std_logic_vector(0 to 6) );  -- HEX0 7-segment display
  28.     end component SevenSeg;
  29.  
  30.     SIGNAL BRITE : BUFFER STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000";
  31. begin
  32.  
  33.  
  34.                 DIMMER: PROCESS (KEY,)
  35.                     IF ( KEY(0) = '0' ) THEN
  36.                     BRITE <= BRITE + 1;
  37.                     ELSIF ( KEY(1) = '0') THEN
  38.                     BRITE <= BRITE - 1;
  39.                
  40.                 BEGIN
  41.                     CASE BRITE IS
  42.                         WHEN "0001" => DIMVAL <= "00011000011010100000";  --100K
  43.                         WHEN "0010" => DIMVAL <= "00110000110101000000";  --200K
  44.                         WHEN "0011" => DIMVAL <= "01001001001111100000";  --300K
  45.                         WHEN "0100" => DIMVAL <= "01100001101010000000";  --400K
  46.                         WHEN "0101" => DIMVAL <= "01111010000100100000";  --500K
  47.                         WHEN "0110" => DIMVAL <= "10010010011111000000";  --600K
  48.                         WHEN "0111" => DIMVAL <= "10101010111001100000";  --700K
  49.                         WHEN "1000" => DIMVAL <= "11000011010100000000";  --800K
  50.                         WHEN "1001" => DIMVAL <= "11011011101110100000";  --900K
  51.                         WHEN OTHERS => DIMVAL <= "11111111111111111111"; --MISTAKE
  52.                     END CASE;
  53.                 END PROCESS DECODE;
  54.     LEDR <= SW; --STATE OF SWITCHES
  55.     ----DEFINES THE COUNTER COMPONENT
  56.     COUNT: counter port map ( Enable => SW(0), Reset => SW(1), DIMVAL => DIMVAL, HEX0 => HEX0 );
  57.  
  58. end STRUCTURAL;
  59.  
  60. ---------------------------------------------------------------part2-----------------------------------------------------------------
  61. ---------------------------------------------16-BIT SYNCHRONUS COUNTER WITHOUT FLIP FLOPS--------------------------------------------
  62. library ieee;
  63. use ieee.std_logic_1164.all;
  64. use ieee.std_logic_arith.all;
  65. use ieee.std_logic_unsigned.all;
  66.  
  67. entity counter is
  68.     port (  Enable : in std_logic;
  69.             Reset   : in std_logic;
  70.             CLK     : in std_logic; -- 0=CLK
  71.             DIMVAL  : IN STD_LOGIC_VECTOR(20 DOWNTO 0);
  72.             HEX0    :  out std_logic_vector( 0 to 6 ) );
  73. end counter;
  74.  
  75. architecture STRUCTURAL of counter is
  76.  
  77.     component SevenSeg is
  78.         port (  c   : in std_logic_vector(3 downto 0);
  79.             HEX : out std_logic_vector(0 to 6) );  -- HEX0 7-segment display
  80.     end component SevenSeg;
  81.  
  82.     signal  QOUT : std_logic_vector( 3 downto 0 ) :="0000"; --- FOUR BITS
  83.     signal  COUNT : std_logic_vector( 25 downto 0 ) :="00000000000000000000000000"; --- 26 BIT COUNTER - COUNTS TO 50MIL
  84.     signal  COUNT2 : std_logic_vector( 20 downto 0 ) :="00000000000000000000"; --- 20 BIT COUNTER - COUNTS TO 1MIL
  85.     SIGNAL  PMW : STD_LOGIC := '0';
  86. begin
  87.     MIL_50 : process( Reset, CLK )
  88.     begin
  89.         if (Reset = '1') then
  90.             QOUT <= "0000";
  91.             COUNT <= (OTHERS => '0');
  92.         elsif (CLK'EVENT) and (CLK ='1') then
  93.             IF ( COUNT = "10111110101111000001111111") THEN
  94.               COUNT <= (OTHERS => '0');
  95.               if Enable = '1' then
  96.                     IF ( QOUT = "1001") THEN
  97.                         QOUT <= "0000";
  98.                     ELSE QOUT <= QOUT + 1;
  99.                     END IF;
  100.                 ELSE QOUT <= QOUT;
  101.                 end if;
  102.             ELSE COUNT <= COUNT + 1;
  103.             END IF;
  104.         end if;
  105.     end process MIL_50;
  106.    
  107.     MIL_1 : process( Reset, CLK )
  108.     begin
  109.         if (Reset = '1') then
  110.             COUNT2 <= (OTHERS => '0');
  111.         elsif (CLK'EVENT) and (CLK ='1') then
  112.             IF ( COUNT2 = "11110100001001000000") THEN --1 MIL COUNT
  113.                 COUNT2 <= (OTHERS => '0');
  114.                 PWM = '1';
  115.             ELSIF (COUNT2 = DIMVAL) THEN
  116.                     PWM = '0';
  117.                     COUNT2 <= COUNT2  + 1;
  118.             ELSE COUNT2 <= COUNT2 +1;
  119.                
  120.  
  121.             ELSE ;
  122.             END IF;
  123.         end if;
  124.     end process MIL_1;
  125.  
  126.     ----------------------------------------OUTPUT THE 16 BIT OUTPUT TO THE SEVEN SEGMENTS DISPLAYS--------------------------------------
  127.     SS0: SevenSeg port map ( c => QOUT, HEX => HEX0 );
  128.  
  129. end STRUCTURAL ;
  130.  
  131.  
  132. -------------------------------------------------7 SEGMENT DECODER----------------------------------------------------------------------------
  133. library ieee;
  134. use ieee.std_logic_1164.all;
  135.  
  136. entity SevenSeg is
  137.     port (  c   : in std_logic_vector(3 downto 0);
  138.         HEX : out std_logic_vector(0 to 6) );  -- HEX0 7-segment display
  139. end SevenSeg;
  140.  
  141. architecture Behavior of SevenSeg is
  142. begin
  143.     SEG_PROCESS: process (c)
  144.     begin
  145.         case c is
  146.         when "0000"  => HEX <= "0000001"; --0
  147.         when "0001"  => HEX <= "1001111"; --1
  148.         when "0010"  => HEX <= "0010010"; --2
  149.         when "0011"  => HEX <= "0000110"; --3
  150.         when "0100"  => HEX <= "1001100"; --4
  151.         when "0101"  => HEX <= "0100100"; --5
  152.         when "0110"  => HEX <= "0100000"; --6
  153.         when "0111"  => HEX <= "0001111"; --7
  154.         when "1000"  => HEX <= "0000000"; --8
  155.         when "1001"  => HEX <= "0001100"; --9
  156.         -- when "1010"  => HEX <= "0001000"; --A
  157.         -- when "1011"  => HEX <= "1100000"; --B
  158.         -- when "1100"  => HEX <= "0110001"; --C
  159.         -- when "1101"  => HEX <= "1000010"; --D
  160.         -- when "1110"  => HEX <= "0110000"; --E
  161.         -- when "1111"  => HEX <= "0111000"; --F
  162.         when others => HEX <= "1111111"; --ELSE
  163.         end case;
  164.     end process SEG_PROCESS;
  165.  
  166. end Behavior;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement