您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于VerilogHDL的彩灯
基于Verilog的课程设计多路彩灯控制器指导老师:瓮嘉民李小魁班级:0941电子科学与技术成员:周俊冉200910711103李静200910711108马庆蒙200910711110目录1.EDA简介2.彩灯控制器的设计方案3.程序设计和源程序4.波形仿真分析5.硬件测试引脚锁定图6.电路模块图7.实物图8.心得体会9.扩展思路10.参考文献1.EDA简介EDA技术(即ElectronicDesignAutomation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。他在硬件实现方面融合了大规模集成电路制造技术、IC版图设计、ASIC测试和封装、FPGA(FieldProgrammeGateArray)CPLD(ComplexProgrammeLogicDevice)编程下载和自动测试等技术:在计算机辅助工程方面融合了计算机辅助设计(CAD),计算机辅助制造(CAM),计算机辅助测试(CAT),计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等。硬件描述语言HDL是EDA技术的重要组成部分,常见的HDL主要有VHDL、VerilogHDL、ABEL、AHDL、SystemVerilog和SystemC。其中VHDL、VerilogHDL和现在的EDA设计中使用最多,并且我们学习的是Verilog的编程方法及实用技术。2.彩灯控制器的设计方案彩灯控制器的核心设计部分是分频器的使用,显示部分相对比较容易。分频器的设计方法多种多样,我们设计的是比较常见的一种。外接clk为始终输入基准信号,彩灯节奏的快慢用选择开关select[1..0],共有q[13:0]十四个输出信号控制彩灯的输出以及display[15:0]输出信号控制数码管的显示。彩灯由流水灯和交通灯两部分显示彩灯的各种状态,数码管显示选择开关的四种状态。彩灯共有32个状态,流水灯显示部分可以做成7种花样,一种花样完成后,自动进入下一种状态。交通灯作为辅助部分显示。第一种花样为彩灯从右到左,依次点亮,从左往右依次点亮,然后全亮。11111110011111到00000000101010;第二种花样两边同时亮一个,逐次向中间移动,再散开,全灭。01111110111111到11111111111110;第三种左边四个灯亮,然后右边四个灯亮,再反过来。00001111111100和11110000111000第四种奇数灯亮,再偶数灯亮,然后反过来。01010101110000和01010101110000第五种右边七个亮,然后左边七个亮。10000000和00000001第六种全亮00000000101101第七种全灭111111111101103.程序设计和源程序整个控制器的实现流程如下:初始化分频选择状态显示结束经分析,彩灯控制器设计可以分为四部分:时钟分频,数码管显示,彩灯显示电路。其中时钟分频又包括四选一数据选择和分频和状态选择两部分系统程序框图如下:Count[6:0]State[5:0]输入时钟clkSelect[1:0]Num[6:0]四选一数据选择模块分频状态选择分频和状态选择嵌套模块count计满了状态加一,count清零重新计数;计数时状态保持clkclkSelect[1:0]Display[15:0]一位数码管显示彩灯显示State[5:0]Q[13:0]确定彩灯亮暗状态彩灯显示控制模块数码管显示控制模块分频数Clk彩灯控制器系统框图各部分电路模块框图功能:分频值选择框图此部四选一数据选择器:试验箱上的时钟进行四种分频,该模块对四个时钟进行选择,配合按键的控制选择亮灯之间的时间间隔。确定频率和状态部分:该部分实现了两个功能:一个是分频计数,对四种分频(12,25,50,100)计数,达到分频数时清零;另一个是实现状态的改变,在每次计数满时(达到分频的数时)状态改变一次,同时清零重新计数;未满时,状态保持。显示部分:该部分由流水灯和交通灯两部分组成。显示当前彩灯的状态。共32个状态,进行自动循环转换。该部分控制的是彩灯当前的分频状态,共有四种分频12,25,50,100对应的显示1,2,3,4。由输入信号和按键决定。主要源程序:moduleled(select,clk,q,display);input[1:0]select;inputclk;outputreg[13:0]q;reg[2:0]seg;output[15:0]display;reg[15:0]display;wire[6:0]num;assignnum=(select==0)?12:(select==1)?25:(select==2)?50:100;//计数分类reg[5:0]state;reg[6:0]count;initialbeginstate=0;count=0;end////////////////////always@(posedgeclk)begindisplay={8'b1111_1110,1'b1,led7(seg)};case(select)2'b00:seg=1;2'b01:seg=3;2'b10:seg=2;2'b11:seg=4;default:seg=0;endcaseend/////////////////////////always@(posedgeclk)beginif(count==(num-1))begincount=0;if(state32)state=state+1;elsestate=0;endelsebegincount=count+1;state=state;endend////////////////////////always@(posedgeclk)begincase(state)0:q=14'b11111110011111;1:q=14'b11111101101111;2:q=14'b11111011110111;3:q=14'b11110111111011;4:q=14'b11101111111101;5:q=14'b11011111111110;6:q=14'b10111111111101;7:q=14'b01111111111011;8:q=14'b10111111110111;9:q=14'b11011111101111;10:q=14'b11011111011111;11:q=14'b11101111000111;12:q=14'b11110111111000;13:q=14'b11111011000000;14:q=14'b11111101011101;15:q=14'b11111110010101;16:q=14'b00000000101010;17:q=14'b01111110111111;18:q=14'b10111101110101;19:q=14'b11011011001001;20:q=14'b11100111000000;21:q=14'b11011011000111;22:q=14'b10111101111000;23:q=14'b01111110111111;24:q=14'b11111111111110;25:q=14'b00001111111100;26:q=14'b11110000111000;27:q=14'b01010101110000;28:q=14'b10101010100000;29:q=14'b10000000000000;30:q=14'b01111111011011;31:q=14'b00000000101101;32:q=14'b11111111110110;default:q=14'b00000000000000;endcaseend/////////////function[6:0]led7;/*数码管段码表,供阳数码管[6:0]=gfedcba*/input[3:0]dis_input;begincase(dis_input)0:led7=7'b100_0000;1:led7=7'b111_1001;2:led7=7'b010_0100;3:led7=7'b011_0000;4:led7=7'b001_1001;5:led7=7'b001_0010;6:led7=7'b000_0010;7:led7=7'b111_1000;8:led7=7'b000_0000;9:led7=7'b001_1000;default:led7=7'b111_1111;endcaseendendfunctionendmodule4.波形仿真分析输入一个时钟,select[1:0]选择的事是00,即12分频时候的波形。输出引脚q显示每个灯的高低电平,低电平灯亮。5引脚锁定图波形仿真完之后即可进行引脚的分配,并进行编译下载至硬件进行测试。在生成的.qsf文件中给引脚配对。在quarter中生成的引脚分配图如下所示:6电路原理图7实物图8实训心得李静:实训虽然进行了两周,但由于请了三天假就像只参加了一周一样,没有参与所有的编程,有点遗憾。不过后来我还是认真琢磨了我们的程序。我们组做到是多路彩灯控制器,实际上很简单,生活上很常见,和花样流水灯可以说是异曲同工。不过在期间做好让老师检查时,老师觉得这个课题有些简单,又建议加上数码管或是增加彩灯数目,以增加点难度。当然,我们对实验又进行了修整。不过在实验中还是遇到了以下几个问题。例如:分频的时候,可以用一个两位的输入变量作为分频的选择,使用选择语句付给中间变量num,简化程序。在.数码管控制分频的选择,因为数码管码和断码有固定函数,可以调用此函数用以显示对应数据。还有交通灯闪烁的问题,试验箱上有12个交通灯,交通等和流水灯不一样,只有6个引脚红黄蓝分别公用一个引脚。当然期间遇到的问题不止这几个,在遇到问题解决不了时,也有请教了老师以及其他同学,最终在我们组成员的共同努力下,完成了我们的实验科目。在这次实验中,我也学到了新的知识,对于verilog有了更深的了解。马庆蒙:经过为期两周的实训,多多少少还是学到点东西的。很庆幸,从开始选材到程序到仿真出来我都参与进来了。我们组做的是多路彩灯控制器。实际上就是花样的流水灯。我们的课题相对来说不是很难。很多的超市都挂有流水灯,不过他们的花样比较多,由于试验箱上的灯颜色比较单一,做不出那种效果,只能根据自己的能力设计出像流水灯一样的花型。由于实验箱上有交通灯部分,第一次把流水灯的部分设计完之后,让老师检查,又布置下来新的任务,要求用上数码管或交通灯部分。初次设计的过程中无从下手,首先是方案的选择,花型的变换,节奏变化的快慢等问题。后来的加上数码管和交通灯部分,怎么在数码管上显示四种分频,交通等花型变换。在设计过程中遇到的问题及解决方案:1.怎么分频几个选择变量可以用一个条件赋值语句付各一个变量,这样可以简化程序。于是我们用一个两位的输入变量作为分频的选择,使用选择语句付给中间变量num。2.怎么把用数码管控制分频的选择因数码管位码和断码有固定的函数,调用此函数用以显示对应的数字。12分频显示1,25分频显示2,50分频显示3,100分频显示4。3.交通灯怎么闪烁试验箱上交通灯有12个彩灯,开始时以为交通和流水灯一样,每一个灯对应一个引脚,于是在程序中直接把交通灯的12位付给输出变量q。,但到了引脚锁定时发现交通灯的引脚只有六位。思考一番知道了,在现实生活中交通灯的东西(或)南北方向的灯显示的事一样的。于是把12位的引脚改成6位的,红的黄的绿的每一种颜色共用一个引脚,程序的12位也改为
本文标题:基于VerilogHDL的彩灯
链接地址:https://www.777doc.com/doc-4569093 .html