Frequency.vhd
上传用户:shenghui
上传日期:2022-08-09
资源大小:328k
文件大小:3k
源码类别:

VHDL/FPGA/Verilog

开发平台:

Others

  1. ---------------------------------------------------------------------------------------------------
  2. --*************************************************************************************************
  3. --  CreateDate  :  2007-07-12 
  4. --  ModifData   :  2007-07-12 
  5. --  Description :  Frequency 
  6. --  Author      :  Explorer01 
  7. --  Version     :  V1.0  
  8. --*************************************************************************************************
  9. ---------------------------------------------------------------------------------------------------
  10. -- VHDL library Declarations 
  11. LIBRARY IEEE;
  12. USE IEEE.std_logic_1164.ALL;
  13. USE IEEE.STD_LOGIC_ARITH.ALL;
  14. USE IEEE.std_logic_unsigned.ALL;
  15. ---------------------------------------------------------------------------------------------------
  16. ---------------------------------------------------------------------------------------------------
  17. -- The Entity Declarations 
  18. ENTITY Frequency IS
  19. PORT 
  20. (
  21. RESET:  IN STD_LOGIC; 
  22. GCLKP1:  IN STD_LOGIC; 
  23. GCLKP2:  IN STD_LOGIC; 
  24. ClockScan: OUT STD_LOGIC;
  25. KeyScan: OUT STD_LOGIC
  26. );
  27. END Frequency;
  28. ---------------------------------------------------------------------------------------------------
  29. ---------------------------------------------------------------------------------------------------
  30. -- The Architecture of Entity Declarations 
  31. ARCHITECTURE Frequency_arch OF Frequency IS
  32. --Clock: 
  33. SIGNAL Period1uS, Period1mS, Period1S: STD_LOGIC;
  34. SIGNAL Frequency62: STD_LOGIC;
  35. BEGIN
  36. -------------------------------------------------
  37. -- GCLK: 1MHz(1uS), 1KHz(1mS), 1Hz(1S) 
  38. CLK: PROCESS( RESET, GCLKP1, Period1uS, Period1mS, Period1S, Frequency62 )
  39. VARIABLE Count  : STD_LOGIC_VECTOR(3 DOWNTO 0);
  40. VARIABLE Count1 : STD_LOGIC_VECTOR(9 DOWNTO 0);
  41. VARIABLE Count2 : STD_LOGIC_VECTOR(9 DOWNTO 0);
  42. -- VARIABLE Count3 : integer RANGE 0 TO 263;
  43. BEGIN 
  44. ------------------------------------
  45. --Period: 1uS (Period1uS <= GCLKP1; )
  46. IF( GCLKP1'EVENT AND GCLKP1='1' ) THEN 
  47. IF( Count>"1000" ) THEN  Count := "0000";
  48. ELSE                   Count := Count + 1;
  49. END IF;
  50. Period1uS <= Count(3);
  51. -- 1MHz 
  52. END IF;
  53. KeyScan <= GCLKP1; 
  54. ------------------------------------
  55. --Period: 1mS 
  56. IF( Period1uS'EVENT AND Period1uS='1' ) THEN 
  57. IF( Count1>"1111100110" ) THEN  Count1 := "0000000000";
  58. ELSE                   Count1 := Count1 + 1;
  59. END IF;
  60. Period1mS <= Count1(9);
  61. END IF;
  62. ------------------------------------
  63. --Period: 1S (1111100110: 998)
  64. IF( Period1mS'EVENT AND Period1mS='1' ) THEN 
  65. IF( Count2>"1111100110" ) THEN  Count2 := "0000000000";
  66. ELSE                   Count2 := Count2 + 1;
  67. END IF;
  68. Period1S <= Count2(9); 
  69. ------------------------------------
  70. -- 62.5Hz 
  71. Frequency62 <= Count2(4);
  72. ------------------------------------
  73. ClockScan <= Count2(1); 
  74. END IF;
  75. END PROCESS;
  76. END Frequency_arch;