《大三上-数电实验-VHDL-彩灯控制.docx》由会员分享,可在线阅读,更多相关《大三上-数电实验-VHDL-彩灯控制.docx(7页珍藏版)》请在第壹文秘上搜索。
1、北京邮电大学数字电路与逻辑设计实验报告班级:2023211113学号:班内序号:姓名:XXXXXX专业:通信工程二零一零年六月工程名称:彩灯控制电路设计与实验一、实验目的1 .进一步了解时序电路设计方法2 .熟悉状态机的设计方法二、实验所用仪器及元器件1. .计算机2. .直流稳压电源3. .数字系统与逻辑设计开发板三、实验任务及要求用VHDL语言设计并实现一个彩灯控制8个发光二极管电路仿真并下载验证其功能,彩灯有两种工作模式,可通过拨码开关或按键进行切换:(1)单点移动模式:一个点在8个发光二极管上来回的亮(2)幕布式:从中间有两个点,同时向两边依次点亮直至全亮,然后再向中间点灭,依次点亮直
2、至全亮,然后再向中间点灭。四、设计思路和过程1 .设计流程(1)明确设计对象的外部特征输入信号有:-控制信号Ctrl一时钟信号elk输出信号有:-LED驱动电压信号IamP(2)根据设计对象的操作控制步来确定有限状态机的状态当控制信号Ctrl为1时,自定义Statel有s,si,s2,s3,s4,s5,s6,s7,s8,s9,sl,sll,sl2,sl3这14种状态(初始为s).当控制信号Ctrl为0时,State2有s,sl,s2,s3,s4,s5,s6,s7这8种状态(初始为SO)(3)根据设计对象的工作过程画出有限状态机的状态转移图当控制信号Ctrl为1时(此时灯为单点移动模式)当控制信
3、号Ctrl为O时(此时灯为幕布模式)2. VHDL程序代码仿真所用代码(未加50M分频器)libraryieee;useieee.std_logic_l164.all;useieee.std_logic_unsigned.all;entitypaomadengisport(clk:instd_logic;时钟信号ctrl:instd_logic;模式控制信号Iampioutstd_logic_vector(7downto0);endpaomadeng;architecturecaidengofpaomadengistypeALL_statesis(s,s1,s2,s3,s4,s5,s6,s7,
4、s8,s9,s10,sll,sl2,s13);-自定义枚举类型signalstate1,state2:ALL_states:=sO;beginprocess(clk,ctr)beginif(c)k,eventandclk=,lr)then续前页(代码)if(ctrl=1r)then控制信号为单点移动模式casestate1iswhens=statel=sl;lampstatel=s2;lampstate13;lampsute1=s4;IamPstate1=s5;lampstate1=s6;lampstate1=s7;lampstate1=s8;lampstatel=s9;IamPstateK=
5、sl0;lampstatel=sl1;lampstate1=s12jlampstatel=s13;IamPstatel=s0;lampstate1state2=sl;lampstate2=s2Jampstate2=s3Uampstate2=s4lampstate2=s5lampstate2=s6;lampstate2=s7Uampstate2=s;1ampstate2=sljlamp=,l00011000,;endcase;endif;endif;endprocess;endcaideng;下载时所用代码(参加5011分频器)续前页(代码)libraryieee;useieee.std_log
6、ic_l164.all;useieee.std_logic_unsigned.all;entitypaomadengisPort(CIk:instd_logic;ctrkinstd_logic;Iampioutstd_lOgiC_vectur(7downto0);endpaomadeng;architecturecaidengofpaomadengissignalent:integerrangeOto24999999;signalclk_tmp:std_logic;typeALL_statesis(s,sljs2,s3,s4ss51s6,s7,s8,s9,s10,sl1,s12,si3,sl4
7、);signalstate1state2:ALL_states:=s14;Beginprocess(clk)50M分频器进程beginif(clkeventandelk-)thenifcnt=24999999thencnt=O;CIk_tmp=notClk_tmp;elsecntstatel=s1;IHnIPstatel=s2;lampstate1=s3;lampstate1=s4lampstatel=s5jlampstatel=s6;lampstate1statel=s8;lampstate1=s9;IanlPstate1=s10;lampstatel=slI;lampstate1=s12;
8、lampstatel=s13Janpstatel=s0;lampstatel=s0;lampstate2=slUampstate2=s2lampstate2=s3Jampstate2=s4;lampstate2=s5Uampstate2=s6Uampstate2=s7Jampstate2=sOUampstate2=slJamp=,00011000,;endcase;endif;endif;endprocess;endcaideng;五、仿真波形图及分析1、波形(见下页)2.波形分析单点移动模式从图中可看出其状态10000000,01000000,00100000,00010000,000010
9、00,00000100,00000010,00000001,00000010,00000100,00001000,00010000,00100000,01000000,到达一个点在8个彩灯中来回的亮的效果。幕布式8个灯的状态依次为OOonOo0,00111100,01111110,11111111,01111110,00111100,00011000,00000000o使彩灯到达从中间两个亮,同时向两边依次点亮直至全亮,然后再向中间点灭的效果。Endtime设置为125us,elk设置为2.5us,Ctrl采用置1置0设置单点移动模式幕布式单点移动模式(波形图)六、故障及问题分析1 .在编写程
10、序时,发现这个程序有很强的重复性,一下子就想到了for循环和IooP循环,编完程序后,进行编译,将所有程序中出现的语法错误都-一改正后,发现还是无法通过运行.无奈之下,我靖教广许多同学,但他们也说不出一个所以然来。正当我踌躇不前时,突然看见同学的程序中的type类型的自定义枚举类型,顿时豁然开朗,果然就用CaSe语句将程序写了出来。2 .在程序编译时,出现了个错误,是关于时钟沿的。后来才发现,原来是我把if(clk,eventandclk=1,)then设置在if(ctrl=,r)then的内部,导致编译出错,经过我反复得核对,和同学之间讨论后,发现问题的所在,时钟信号应设置在最外部,随着Ct
11、rl的变化,彩灯模式变化。七、总结和结论经过这四次课的数字电路与逻辑设计实验课的学习,第一次实验,我熟悉了数字电路实验板,通过示波器的显示,了解了电压传输特性曲线,同时,对冒险的产生和消除有了新的认识。通过第二次实验我了解了QUartUS2的使用方法,并掌握了如何原理图编程的方法和如何下载程序。在第三次课上,我学习了VHDL语言。通过实验课的学习,增加了我对数字电路与逻辑设计的兴趣,同时我发现自己有太多的缺乏,虽然课程结束了,但我以后会利用课余时间继续学习,也相信这学习的过程会让我收获更多。刚开始实验时,刚刚接触数字电路实验吧,做完实验后不知道自己在干啥,后来写报告才明白其中的各实验步骤的原理。第二次做实验,鉴于第一次的仓促,于是提前预习,并在自己的电脑中将程序编好之后才有备而战。但是到了实验室后