CLK_GEN.VHD
上传用户:dgjihui88
上传日期:2013-07-23
资源大小:43k
文件大小:2k
源码类别:

VHDL/FPGA/Verilog

开发平台:

MultiPlatform

  1. --library declaration
  2. library IEEE;
  3. use IEEE.std_logic_1164.all;
  4. use IEEE.std_logic_arith.all;
  5. use IEEE.std_logic_unsigned.all;
  6. --input and output pins declaraction
  7. entity clk_gen is
  8.     port(reset: in std_logic;
  9.          clk:in std_logic;
  10.          ena_scan:out std_logic;
  11.          ena_1Hz:out std_logic;
  12.          flash_1Hz: out std_logic);
  13. end;   
  14. architecture BEHAVIOR of clk_gen is   
  15. CONSTANT scan_bit: positive := 2;
  16. CONSTANT scan_val: positive := 4;
  17. CONSTANT two_Hz_bit: positive := 7;
  18. CONSTANT two_Hz_val: positive := 125;
  19. signal clk_scan_ff:std_logic_vector(scan_bit-1 downto 0); 
  20. signal clk_2Hz_ff:std_logic_vector(two_Hz_bit-1 downto 0); 
  21. signal ena_s,ena_one,ena_two:std_logic;
  22. begin
  23. --to generate 250Hz ena_s via dividing 1KHz clock by 4
  24.    scan:process(reset,clk)
  25.    begin
  26.        if reset='1' then
  27.           clk_scan_ff<="00";
  28.           ena_s<='0';
  29.        elsif (clk'event and clk='1') then
  30.           if clk_scan_ff>=scan_val-1 then
  31.              clk_scan_ff<="00";
  32.              ena_s <= '1';
  33.           else
  34.              clk_scan_ff<=clk_scan_ff+1;  
  35.              ena_s <= '0';
  36.           end if;
  37.        end if;
  38.    end process;  
  39. ena_scan <= ena_s;
  40. --to generate 1Hz ena_1Hz and flash_1Hz via dividing 1KHz clock by
  41.    two_Hz:process(reset,clk,ena_s)
  42.    begin
  43.        if reset='1' then
  44.           ena_one<='0';
  45.           ena_two<='0';
  46.           clk_2Hz_ff<="0000000";
  47.        elsif (clk'event and clk='1') then
  48.           if ena_s='1' then
  49.             if clk_2Hz_ff>=two_Hz_val-1 then
  50.                clk_2Hz_ff<="0000000";
  51.                ena_two <= '1';
  52.                ena_one <= not ena_one;
  53.             else
  54.                clk_2Hz_ff<=clk_2Hz_ff+1;  
  55.                ena_two <= '0';
  56.                ena_one <= ena_one;
  57.             end if;
  58.           end if;
  59.        end if;
  60.    end process; 
  61. ena_1Hz <= ena_one and ena_two and ena_s;
  62. flash_1Hz <= ena_one;
  63. end BEHAVIOR;