综合课程设计模拟交通灯实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

标准实验报告学生姓名:指导教师:一、实验室名称:二、实验项目名称:综合课程设计1——模拟交通灯实验三、实验原理:1、交通信号灯基本转换原理本实验所模拟的交通信号灯的转换原理如下图:转移状态图默认的初始状态为红灯状态,做30秒减计时。当时间从30秒递减到0秒后,红灯状态变为绿灯状态;重新30秒减计时,递减到0秒后,绿灯状态变为黄灯状态;做5秒减计时,递减到0秒后,黄灯状态变为红灯状态。如此循环进行转换。2、自由按键电路KEY1对应P102,KEY2对应P101。3、八段数码管和动态显示原理八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED发光二极管的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型。共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮;共阳极就是将八个LED的阳极连在一起。其原理图如下:数码管电路原理图其中引脚图的两个COM端连在一起就是公共端。共阴极数码管要将其接地,共阳极数码管将其接+5V电源。一个八段数码管用来表示一位,多个数码管并列在一起即可构成多位数字,它们的段选线(即a,b,c,d,e,f,g,dp)都连在一起,而各自的公共端为位选线。显示时,数据都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段即对应一个字节(Byte)的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴极数码管的字符编码为00111111即0x3f;共阳极数码管的字符编码为11000000即0xc0。可以看出两个编码的各位正好相反。如下图所示:8段数码管的共阴共阳差异4、数码动态显示数码管动态显示即轮流向各位数码管送出字符编码和相应的位选信号,利用发光二极管的余辉和人眼的视觉暂留作用,使人感觉好像各位的数码管都同时在显示。相比于静态显示,动态显示的亮度要差一些,所以在选择限流电阻时应略小于静态显示电路中的。5、FPGA硬件管脚的配置在实现时首先要做的事是管脚的配置,根据程序的功能来配置管脚从而可以从实验板上观察到所需的状态。注意每一段的对应以及功能的设置。四、实验目的:1、进一步熟悉基于FPGA的硬件编程实现;2、掌握如何实效编程;3、熟悉程序基于ISE的仿真以及改错;4、掌握编程数码显示的方法;5、实现自主创新,编程实现自己的想法,并熟悉利用FPGA硬件实现编程;五、实验内容:编写VHDL代码、生成下载文件,下载设计到FPGA实现如下功能:模拟路口交通信号灯的红、黄、绿灯的变化过程,分别用三个LED灯表示,并在数码管上动态显示当前状态剩余时间。要求红灯持续时间为30秒,黄灯5秒,绿灯30秒。六、实验器材(设备、元器件):FPGA实验板一块、下载线一套、PC机一台七、实验步骤:1、打开桌面EDA文件夹中的ISE软件,并新建一个ADD_SUB工程;2、在“SourcesinProject”子窗口中右击,选择AddSource…,添加VHDL设计文件,编写程序;3、保存并进行语法检错,若有错误返回修改,直到没有错误提示为止;4、连接好FPGA和下载线套装;5、进行管脚配置,在“SourcesinProject”子窗口中右击,选择AddSource…,选择添加.ucf文件,打开所添加的.ucf文件在对应的地方输入管脚即可,或者是打开工程文件夹,找到ADD_SUB.ucf文件以文本文档方式打开,在里面编写形如:NETclkLOC=p18;(“”中的为信号名称,=后面的为对应管脚)的管脚配置参数,编写完成后保存。6、把程序进行仿真并载入到FPGA实验板上观察现象是否与理论一致;7、若不符合则,返回修改程序,直到现象符合。八、实验数据及结果分析:1、设计思路:根据实验要求发现,实验中首先需要1s的时钟来对三种灯进行计时,所用FPGA实验板的时钟为40MHz,所以在程序一开始需要对其进行处理。采用米利状态机来进行设计,并在状态中设置转换时间递减,当时间到零时触发状态转换。对于时间的显示利用数码管,由于有两位设置状态来实现转换显示。在最前方再加以复位设置,便可完成。2、实验程序:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityjtdisport(en:outstd_logic_vector(7downto0);dataout:outstd_logic_vector(7downto0);led0,led1,led2:outstd_logic;clk:instd_logic;rst:instd_logic);endjtd;architecturearchofjtdisconstantstate0:std_logic_vector(2downto0):=000;constantstate1:std_logic_vector(2downto0):=001;signalstate:std_logic_vector(2downto0);signalcount:std_logic_vector(18downto0);signalcnt:std_logic_vector(26downto0);signaltim:std_logic_vector(6downto0);signalnum:std_logic_vector(4downto0);signalnum1:std_logic_vector(3downto0);signalnum2:std_logic_vector(3downto0);signalwaittime0:std_logic_vector(4downto0):=11110;signalwaittime1:std_logic_vector(4downto0):=00101;signalwaittime2:std_logic_vector(4downto0):=11110;signaldataout_temp:std_logic_vector(3downto0);TYPEstate_typeIs(S0,S1,S2);SIGNALcurrent_state,next_state:state_type;beginprocess(clk,rst)beginif(rst='0')thenstate=state0;count=0000000000000000000;cnt=000000000000000000000000000;tim=1000001;elsif(clk'eventandclk='1')thencount=count+0000000000000000001;cnt=cnt+000000000000000000000000001;if(cnt=10011000100101101000000000)thencnt=000000000000000000000000000;tim=tim-0000001;if(tim=0000000)thentim=1000001;endif;endif;if(count=1111111111111111111)thencasestateiswhenstate0=state=state1;whenstate1=state=state0;whenothers=state=state0;endcase;endif;endif;endprocess;process(clk,rst,next_state)beginifclk'eventandclk='1'thenifrst='1'thencurrent_state=S0;waittime0=waittime0-00001;elsecurrent_state=next_state;endif;endif;endprocess;process(current_state,waittime0,waittime1,waittime2)begincasecurrent_stateiswhenS0=IFwaittime0=00000thennext_state=S1;waittime1=waittime1-00001;waittime2=11110;elsenext_state=S0;endif;whenS1=IFwaittime1=00000thennext_state=S2;waittime2=waittime2-00001;elsenext_state=S1;endif;whenS2=IFwaittime2=00000thennext_state=S0;waittime0=11110;waittime1=00101;elsenext_state=S2;endif;endcase;endprocess;process(current_state)begincasecurrent_stateiswhenS0=led0='0';led1='1';led2='1';num=waittime0;whenS1=led0='1';led1='0';led2='1';num=waittime1;whenS2=led0='1';led1='1';led2='0';num=waittime0;endcase;endprocess;process(num)beginif(num0011101)thennum1=0011;num2=num(3downto0)-1110;elsif(num0010011)thennum1=0010;num2=num(3downto0)-0100;elsif(num0001001)thennum1=0001;num2=num(3downto0)-1010;elsenum1=0000;num2=num(3downto0);endif;endprocess;process(state,tim)begincasestateiswhenstate0=en=11111110;dataout_temp=num1;whenstate1=en=11111101;dataout_temp=num2;whenothers=NULL;endcase;endprocess;process(dataout_temp)begincasedataout_tempisWHEN0000=dataout=00000011;WHEN0001=dataout=10011111;WHEN0010=dataout=00100101;WHEN0011=dataout=00001101;WHEN0100=dataout=10011001;WHEN0101=dataout=01001001;WHEN0110=dataout=01000001;WHEN0111=dataout=00011111;WHEN1000=dataout=00000001;WHEN1001=dataout=00011001;WHENOTHERS=NULL;endcase;endprocess;endarch;3、管脚配置NETclkLOC=p18;NETdataout0LOC=p140;NETdataout1LOC=p139;NETdataout2LOC=p141;NETdataout3LOC=p4;NETdataout4LOC=p5;NETdataout5LOC=p6;NETdataout6LOC=p7;NETdataout7LOC=p10;NETen0LOC=p21;NETen1LOC=p20;NETen2LOC=p19;NETen3LOC=p11;NETen4LOC=p12;NETen5LOC=p13;NETen6LOC=p22;NET

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功