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

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. ClockScan: OUT STD_LOGIC;
  24. KeyScan: OUT STD_LOGIC
  25. );
  26. END Frequency;
  27. ---------------------------------------------------------------------------------------------------
  28. ---------------------------------------------------------------------------------------------------
  29. -- The Architecture of Entity Declarations 
  30. ARCHITECTURE Frequency_arch OF Frequency IS
  31. --Clock: 
  32. SIGNAL Period1uS, Period1mS, Period1S: STD_LOGIC;
  33. SIGNAL Frequency62: STD_LOGIC;
  34. BEGIN
  35. -------------------------------------------------
  36. -- GCLK: 1MHz(1uS), 1KHz(1mS), 1Hz(1S) 
  37. CLK: PROCESS( RESET, GCLKP1, Period1uS, Period1mS, Period1S, Frequency62 )
  38. VARIABLE Count  : STD_LOGIC_VECTOR(3 DOWNTO 0);
  39. VARIABLE Count1 : STD_LOGIC_VECTOR(9 DOWNTO 0);
  40. VARIABLE Count2 : STD_LOGIC_VECTOR(9 DOWNTO 0);
  41. -- VARIABLE Count3 : integer RANGE 0 TO 263;
  42. BEGIN 
  43. ------------------------------------
  44. --Period: 1uS (Period1uS <= GCLKP1; )
  45. IF( GCLKP1'EVENT AND GCLKP1='1' ) THEN 
  46. -- IF( Count>8 ) THEN Count := 0;
  47. -- ELSE               Count := Count + 1;
  48. -- END IF;
  49. --
  50. -- IF( Count<5 ) THEN Period1uS <= '1';
  51. -- ELSE               Period1uS <= '0';
  52. -- END IF;
  53. --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  54. -- IF( RESET='0' )    THEN  Count := "0000";
  55. IF( Count>"1000" ) THEN  Count := "0000";
  56. ELSE                   Count := Count + 1;
  57. END IF;
  58. Period1uS <= Count(3);
  59. -- 1MHz 
  60. KeyScan <= Period1uS; 
  61. ------------------------------------
  62. --37.9KHz 
  63. -- IF( Count3 > 262 ) THEN Count3 := 0;
  64. -- ELSE                    Count3 := Count3 + 1;
  65. -- END IF;
  66. --
  67. -- IF( Count3 < 132 ) THEN Frequency37_9K <= '1';  
  68. -- ELSE                    Frequency37_9K <= '0';  
  69. -- END IF;
  70. END IF;
  71. ------------------------------------
  72. --Period: 1mS 
  73. IF( Period1uS'EVENT AND Period1uS='1' ) THEN 
  74. -- IF( Count1>998 ) THEN Count1 := 0;
  75. -- ELSE                  Count1 := Count1 + 1;
  76. -- END IF;
  77. --
  78. -- IF( Count1<500 ) THEN Period1mS <= '1';
  79. -- ELSE                  Period1mS <= '0';
  80. -- END IF;
  81. --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  82. IF( Count1>"1111100110" ) THEN  Count1 := "0000000000";
  83. ELSE                   Count1 := Count1 + 1;
  84. END IF;
  85. Period1mS <= Count1(9);
  86. END IF;
  87. ------------------------------------
  88. --Period: 1S (1111100110: 998)
  89. IF( Period1mS'EVENT AND Period1mS='1' ) THEN 
  90. -- IF( Count2>998 ) THEN Count2 := 0;
  91. -- ELSE                  Count2 := Count2 + 1;
  92. -- END IF;
  93. --
  94. -- IF( Count2<500 ) THEN Period1S <= '1';
  95. -- ELSE                  Period1S <= '0';
  96. -- END IF;
  97. --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  98. IF( Count2>"1111100110" ) THEN  Count2 := "0000000000";
  99. ELSE                   Count2 := Count2 + 1;
  100. END IF;
  101. Period1S <= Count2(9); 
  102. ------------------------------------
  103. -- 62.5Hz 
  104. Frequency62 <= Count2(4);
  105. ------------------------------------
  106. ClockScan <= Frequency62; 
  107. END IF;
  108. END PROCESS;
  109. END Frequency_arch;