基于vhdl的流水灯

一 实验原理
该流水灯的实验是通过按键控制产生一个周期为20ms的脉冲,用于流水的频率。然后通过译码电路来控制流水的功能。

二 实验模块
该实验共有两个模块,流水频率电路模块和LED控制模块。
流水频率控制模块
流水控制模块
LED控制模块
LED控制模块
三 vhdl代码实现
delay

LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;

ENTITY delay IS
PORT (CLK,RST: IN std_logic;
PUL: OUT std_logic
);
END delay;

ARCHITECTURE behav OF delay IS
SIGNAL cnt:std_logic_vector(23 DOWNTO 0);

BEGIN

PROCESS(CLK,RST)
BEGIN
  if(RST='0') then
   cnt<="000000000000000000000000";
  elsif(CLK'event and CLK='1') then
    if(cnt="100110001001011001111111") then
       cnt<="100110001001011001111111";
       PUL<='0';
      else cnt<=cnt+'1';
           PUL<='1';
     end if;
   end if;
end process;
end behav;

light

USE IEEE.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;

ENTITY light IS
PORT (PUL,RST: IN std_logic;
LED: OUT std_logic_vector(5 downto 0)
);
END light;

ARCHITECTURE behav OF light IS
SIGNAL i:std_logic_vector(2 DOWNTO 0);

BEGIN

PROCESS(PUL,RST)
BEGIN
  if(RST='0') then
   LED<="000000";
   i<="000";
  elsif(PUL'event and PUL='1') then
    if(i=5) then
       i<="000";
      else 
           i<=i+'1';
     end if;
   case i is
      when "000"=>LED<="111110";
      when "001"=>LED<="111101";
      when "010"=>LED<="111011";
      when "011"=>LED<="110111";
      when "100"=>LED<="101111";
      when others=>LED<="011111";
      end case;
  end if;
 end process;
end behav;

四 整机电路图
整机电路图
五 仿真结果
仿真结果

猜你喜欢

转载自blog.csdn.net/weixin_43789635/article/details/112977777