基於vhdl的流水燈
阿新 • • 發佈:2021-01-24
一 實驗原理
該流水燈的實驗是通過按鍵控制產生一個週期為20ms的脈衝,用於流水的頻率。然後通過譯碼電路來控制流水的功能。
二 實驗模組
該實驗共有兩個模組,流水頻率電路模組和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;
四 整機電路圖
五 模擬結果