流水灯VHDL.docx
《流水灯VHDL.docx》由会员分享,可在线阅读,更多相关《流水灯VHDL.docx(7页珍藏版)》请在冰豆网上搜索。
流水灯VHDL
基于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语言实现该功能.
三、系统框图
四、流水灯设计程序
libraryIEEE;
useIEEE.STD_LOGIC_1164.all;
useIEEE.STD_LOGIC_unsigned.all;
entityled1is
port(
sysclk:
instd_logic;
dout:
outstd_logic_vector(11downto0)
);
endled1;
architecturejgtofled1is
signalcnt:
std_logic_vector(7downto0);
--variablecount:
integerRANGE0TO7;
signalcount:
std_logic_vector(5DOWNTO0);
begin
process(sysclk)
begin
if(sysclk'eventandsysclk='1')then
cnt<=cnt+1;
if(cnt="11110111")then
cnt<="00000000";
count<=count+1;
endif;
endif;
endprocess;
process(count)
begin
casecountis
when"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<="010101010101";
when"110001"=>dout<="101010101010";
when"110010"=>dout<="010101010101";
when"110011"=>dout<="101010101010";
when"110100"=>dout<="010101010101";
when"110101"=>dout<="101010101010";
when"110110"=>dout<="010101010101";
when"110111"=>dout<="101010101010";
when"111000"=>dout<="010101010101";
when"111001"=>dout<="101010101010";
when"111010"=>dout<="010101010101";
when"111011"=>dout<="101010101010";
when"111100"=>dout<="010101010101";
when"111101"=>dout<="101010101010";
when"111110"=>dout<="010101010101";
when"111111"=>dout<="101010101010";
whenothers=>null;
endcase;
endprocess;
endjgt;
五、系统仿真与调试
1.仿真波形图
通过QuartusII软件,我们进行了仿真,其仿真波形如下图:
图一:
仿真波形图
由设计要求可知,本设计要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED灯能连续发出4种不同的流水显示形式。
彩灯控制器的第1种花样为彩灯按顺时针方向逐次点亮;第2种花样为彩灯按逆时针方向逐次点亮,然后全灭全亮;第3种花样为彩灯两边同时亮1、2、3、4、5、6个逐次向中间移动再散开;第4种花样为彩灯连续交叉闪烁。
多个花样自动变换,循环往复。
从仿真的波形可以看出,实现了相应的功能。
2.电路原理图
在QuartusII软件中利用硬件描述语言描述电路后,用RTLViewers生成的对应的电路图如下所示:
图二:
用RTLViewers生成的电路图
六、设计总结
通过本次设计明白了VHDL语言的实用性,同时对QuartusII有了进一步的了解。
虽然在设计过程种遇到了许多麻烦,比如语言编写的错误,思路想法的偏离...但通过问同学,老师,以及上网了解后最终还是纠正了这些错误。
不过通过不断的检查和咨询,最终还是编写成功了。
也通过本次彩灯设计让我知道了日常生活种各种花样灯的工作模式,希望能够通过接下来的学习,自己能够设计出生活中实用的样式灯。
通过这次课程设计,可以很好的把各个章节的模块融合到一起,对以后的学习,设计很有帮助,感觉自己在动手操作方面有质上的飞跃。
不仅掌握QuartusII软件的使用,与此同时,还对电子设计的思路有了更多的认识。
通过对EDA设计中的TOP-DOWN设计方式的运用,体会到了对于一个大型系统的设计方案选取应从顶向下的设计思路,这与传统的至底向上的设计方式有很大改进,且设计效率得到大大提高。
通过这次的实验,理解了电子技术设计的设计多种方法和流程,夯实了QuartusII的操作流程。
很显然,任何的实践活动,都不可能闭门造车,是必须去吸取前人的实践经验,这就要求在课程设计的过程中,从网络上,从图书馆,借寻相关资料书籍等,有力地指导课程设计。
这就要求在最后的大学时间里,要继续夯实相关的理论知识,继续多动手操作,提高具体的实践操作能力,为即将毕业的工作出路,做好充分的准备。
七、参考文献
[1]许飞.EDA技术与实践[M],北京:
清华大学出版社,2011
[2]黄智伟.全国大学生电子设计竞赛制作实训[M],北京:
北京航空航天大学出版社,2011
[3]王金明编著.数字系统与VerilogHDL[M].电子工业出版社.2011.1
[4]卢毅编著.VHDL与数字电路设计[M].科技大学出版.2001
[5]陈琼、潘礼.FPGA系统设计与实践[M].电子工业出版社.2005
[6]侯佰亨,顾新编著.VHDL硬件描述语言与实际应用[M].西安电子科社.2000