Light.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 Light IS
  19. PORT(
  20. GCLKP1: IN std_logic;
  21. GCLKP2: IN std_logic;
  22. light: BUFFER std_logic_vector(7 DOWNTO 0)
  23. );
  24. END Light;
  25. ---------------------------------------------------------------------------------------------------
  26. ---------------------------------------------------------------------------------------------------
  27. -- The Architecture of Entity Declarations 
  28. ARCHITECTURE behv OF light IS
  29. CONSTANT  len: integer:=7;
  30. SIGNAL banner: std_logic:='0';
  31. SIGNAL clk,clk2: std_logic;
  32. SIGNAL Period1uS, Period1mS, clk1: STD_LOGIC;
  33. BEGIN
  34. clk<=(clk1 AND banner) OR (clk2 AND NOT banner);
  35. ------------------------------------------------------------------------------
  36. -- Clock 
  37. PROCESS( GCLKP1, Period1uS, Period1mS )
  38. VARIABLE Count  : STD_LOGIC_VECTOR(3 DOWNTO 0);
  39. VARIABLE Count1 : STD_LOGIC_VECTOR(9 DOWNTO 0);
  40. VARIABLE Count2 : STD_LOGIC_VECTOR(7 DOWNTO 0);
  41. BEGIN
  42. ------------------------------------
  43. --Period: 1uS 
  44. IF( GCLKP1'EVENT AND GCLKP1='1' ) THEN 
  45. IF( Count>"1000" ) THEN  Count := "0000";
  46. ELSE                   Count := Count + 1;
  47. END IF;
  48. Period1uS <= Count(3);
  49. END IF;
  50. ------------------------------------
  51. --Period: 1mS 
  52. IF( Period1uS'EVENT AND Period1uS='1' ) THEN 
  53. IF( Count1>"1111100110" ) THEN  Count1 := "0000000000";
  54. ELSE                   Count1 := Count1 + 1;
  55. END IF;
  56. Period1mS <= Count1(9);
  57. END IF;
  58. ------------------------------------
  59. --Period: 1/4S (11111001: 249)
  60. IF( Period1mS'EVENT AND Period1mS='1' ) THEN 
  61. IF( Count2>"11111001" ) THEN  Count2 := "00000000";
  62. ELSE                   Count2 := Count2 + 1;
  63. END IF;
  64. clk1 <= Count2(7); 
  65. END IF; 
  66. END PROCESS;
  67. ------------------------------------------------------------------------------
  68. -- 
  69. PROCESS(clk1)
  70. BEGIN
  71. IF clk1'event AND clk1='1' THEN
  72. clk2<=NOT clk2;
  73. END IF;
  74. END PROCESS;
  75. ------------------------------------------------------------------------------
  76. -- 
  77. PROCESS(clk)
  78. VARIABLE flag: bit_vector(2 downto 0):="000";
  79. BEGIN
  80. if clk'event and clk='1' then
  81. if flag="000" then
  82. light<='1' & light(len downto 1);
  83. if light(1)='1' then
  84. flag:="001";
  85. end if;
  86. elsif flag="001" then
  87. light<=light(len-1 downto 0) & '0';
  88. if light(6)='0' then
  89. flag:="010";
  90. end if;
  91. elsif flag="010" then
  92. light(len downto 4)<=light(len-1 downto 4)&'1';
  93. light(len-4 downto 0)<='1'&light(len-4 downto 1);
  94. if light(1)='1' then
  95. flag:="011";
  96. end if;
  97. elsif flag="011" then
  98. light(len downto 4)<='0'&light(len downto 5);
  99. light(len-4 downto 0)<=light(len-5 downto 0)&'0';
  100. if light(2)='0' then
  101. flag:="100";
  102. end if;
  103. elsif flag="100" then
  104. light(len downto 4)<='1'&light(len downto 5);
  105. light(len-4 downto 0)<='1'&light(len-4 downto 1);
  106. if light(1)='1' then
  107. flag:="101";
  108. end if;
  109. elsif flag="101" then
  110. light<="00000000";
  111. flag:="110";
  112. elsif flag="110" then
  113. banner<=not banner;
  114. flag:="000";
  115. end if;
  116. end if;
  117. end process;
  118. end behv;