1. 程式人生 > 其它 >基於vhdl的流水燈

基於vhdl的流水燈

技術標籤:fpgavhdl

一 實驗原理
該流水燈的實驗是通過按鍵控制產生一個週期為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;

四 整機電路圖
整機電路圖
五 模擬結果
模擬結果