基于VHDL流水灯的设计电子信息科学与技术刘敏何磊成江波一、设计内容流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。
流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。
要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED灯能连续发出4种不同的流水显示形式。
彩灯控制器的第1种花样为彩灯按顺时针方向逐次点亮;第2种花样为彩灯按逆时针方向逐次点亮,然后全灭全亮;第3种花样为彩灯两边同时亮1、2、3、4、5、6个逐次向中间移动再散开;第4种花样为彩灯连续交叉闪烁。
多个花样自动变换,循环往复。
二、设计方案彩灯是由FPGA板上的LED灯代替,有以下4种闪烁效果1.彩灯按顺时针方向逐次点亮。
2.彩灯按逆时针方向逐次点亮,然后全灭全亮。
3.彩灯两边同时亮1、2、3、4、5、6个逐次向中间移动再散开。
4.彩灯连续交叉闪烁。
本控制电路采用VHDL语言设计。
运用自顶而下的设计思想,按功能逐层分割实现层次化设计。
根据多路彩灯控制器的设计原理,分别对应彩灯的四种变化模式、利用VHDL语言实现该功能.三、系统框图四、流水灯设计程序library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_unsigned.all;entity led1 isport(sysclk: in std_logic;dout: out std_logic_vector(11 downto 0) );end led1;architecture jgt of led1 issignal cnt : std_logic_vector ( 7 downto 0);--variable count:integer RANGE 0 TO 7;signal count : std_logic_vector(5 DOWNTO 0);beginprocess(sysclk)beginif ( sysclk'event and sysclk = '1') thencnt <= cnt + 1;if (cnt = "11110111") thencnt <= "00000000" ;count <=count+1;end if ;end if;end process;process (count)begincase count iswhen "000000" =>dout <= "111111111110";when "000001" =>dout <= "111111111101";when "000010" =>dout <= "111111111011";when "000011" =>dout <= "111111110111";when "000100" =>dout <= "111111101111";when "000101" =>dout <= "111111011111";when "000110" =>dout <= "111110111111";when "000111" =>dout <= "111101111111";when "001000" =>dout <= "111011111111";when "001001" =>dout <= "110111111111";when "001010" =>dout <= "101111111111";when "001011" =>dout <= "011111111111";when "001100" =>dout <= "101111111111";when "001101" =>dout <= "110111111111";when "001110" =>dout <= "111011111111";when "001111" =>dout <= "111101111111";when "010000" =>dout <= "111110111111";when "010001" =>dout <= "111111011111";when "010010" =>dout <= "111111101111";when "010011" =>dout <= "111111110111";when "010100" =>dout <= "111111111011";when "010101" =>dout <= "111111111101";when "010110" =>dout <= "111111111110";when "010111" =>dout <= "111111111111";when "011000" =>dout <= "000000000000";when "011001" =>dout <= "011111111110";when "011010" =>dout <= "101111111101";when "011011" =>dout <= "110111111011";when "011100" =>dout <= "111011110111";when "011101" =>dout <= "111101101111";when "011110" =>dout <= "111110011111";when "011111" =>dout <= "111101101111";when "100000" =>dout <= "111011110111";when "100001" =>dout <= "110111111011";when "100010" =>dout <= "101111111101";when "100011" =>dout <= "011111111110";when "100100" =>dout <= "001111111100";when "100101" =>dout <= "110011110011";when "100110" =>dout <= "111100001111";when "100111" =>dout <= "110011110011";when "101000" =>dout <= "001111111100";when "101001" =>dout <= "000111111000";when "101010" =>dout <= "111000000111";when "101011" =>dout <= "000111111000";when "101100" =>dout <= "000011110000";when "101101" =>dout <= "111100001111";when "101110" =>dout <= "000001100000";when "101111" =>dout <= "000000111111";when "110000" =>dout <= "010*********";when "110001" =>dout <= "101010101010";when "110010" =>dout <= "010*********"; when "110011" =>dout <= "101010101010"; when "110100" =>dout <= "010*********"; when "110101" =>dout <= "101010101010"; when "110110" =>dout <= "010*********";when "110111" =>dout <= "101010101010";when "111000" =>dout <= "010*********"; when "111001" =>dout <= "101010101010"; when "111010" =>dout <= "010*********";when "111011" =>dout <= "101010101010";when "111100" =>dout <= "010*********";when "111101" =>dout <= "101010101010";when "111110" =>dout <= "010*********";when "111111" =>dout <= "101010101010";when others=>null;end case;end process;end jgt;五、系统仿真与调试1.仿真波形图通过QuartusII软件,我们进行了仿真,其仿真波形如下图:图一:仿真波形图由设计要求可知,本设计要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED 灯能连续发出4种不同的流水显示形式。