数字电路课程设计:基于FPGA和VHDL语言的交通灯控制系统的设计_第1页
数字电路课程设计:基于FPGA和VHDL语言的交通灯控制系统的设计_第2页
数字电路课程设计:基于FPGA和VHDL语言的交通灯控制系统的设计_第3页
数字电路课程设计:基于FPGA和VHDL语言的交通灯控制系统的设计_第4页
数字电路课程设计:基于FPGA和VHDL语言的交通灯控制系统的设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字电路课程设计交通灯控制数字电路课程设计课题:基于FPGA和VHDL语言的交通灯控制系统设计设计者:包佳斌 20080711201小组其他成员:胡家顺、彭剑飞 日期:2010年12月16日 交通灯控制器功能描述:通过两组交通灯来模拟控制十字路口东西、南北两条道路上的车辆通行,所有功能在FPGA实验操作平台上模拟通过,其主要功能如下:1. 根据要求显示模拟路口东西、南北两个方向上的红灯、黄灯和绿灯的指示状态。2. 在LED指示的同时,实现正常的倒计时功能。3. 控制实现一种特殊状态并用交通灯加以显示。4. 能实现系统总清零。5. 具有一定的扩展功能。设计任务:1.用红、黄、绿三色发光二极管做信号灯,主干道A为东西向,设红、黄、绿三色灯为AR、AG、AY;支干道B为南北向,三色灯为BR、BG、BY。2.主干道上车辆较多,所以亮绿灯的时间设为70s;支干道亮绿灯的时间设为40s。当主干道允许通行亮绿灯时则支干道亮红灯;相反,支干道允许通行亮绿灯时则主干道亮红灯。每次由绿灯转变为红灯时,期间要亮3s的黄灯作为过渡,以便行驶中的车辆有时间停到禁止线以内。3.交通灯正常运行时,在LCD 显示屏上显示主干道和支道的倒计时时间,ES主干道在当前状态的剩余时间,SN显示支干道在当前状态的剩余时间。4.能实现系统清0,清0后计数器由初始状态开始计数,指示灯指示主干道亮绿灯。5.能实现特殊状态的显示,用开关S作为特殊信号传感器,S为1时进入特殊状态并实现以下功能:(1)东西、南北方向的交通灯全显示黄色状态。 (2)特殊状态解除后能继续返回正常工作状态。设计要求1.分析设计任务,拟定多种设计方案,根据当时的制作条件,选定适合的方案绘制框图和设计流程。2.设计各部分单元电路或编写VHDL描述程序。3.对制作的电路进行功能测试,分析各项技术指标;或对设计的电路进行功能仿真,分析仿真波形。4.总结设计资料,但因包括原理电路、VHDL描述、仿真波形的设计报告,校验并演示电路装置。状态顺序与灯亮对应表态序(S1 S0)主干道(A)支干道(B)亮灯时间1 (0 0)黄灯亮红灯亮3S2 (0 1)红灯亮绿灯亮40S3 (1 0)红灯亮黄灯亮3S4 (1 1)绿灯亮红灯亮70S译码器真值表 S S1 S0 AG AR AY BG BR BY 1 X X 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 1 1 1 0 0 0 1 0EWSNR42RG40N0123456789ABCDEF在LCD上显示的格式3S未到,保持原状态3S到,转到下一状态交通灯控制状态图00状态YA,RB40S未到,保持原状态40S到,转到下一状态70S未到,保持原状态70S到,转到下一状态01状态RA,GB11状态GA,RB10状态RA,YB3S未到,保持原状态3S到,转到下一状态系统设计输入: 本实验采用VHDL硬件语言输入,其交通灯控制模块VHDL源文件与LCD接口模块VHDL语言描述如下,其中“S0”“S1”“S2”“S3”为事先设定的四种状态交通灯控制模块VHDL源文件-File name: Traffic_Light-目的: 实现十字路口交通灯的控制-编程 包佳斌 2010年12月-输入:CP RS SPECP-时钟信号(0.6HZ) RS-复位信号 SPE-特殊状态控制信号-输出:EWRYG2.0、SNRYG2.0东西南北的红绿灯信号,顺序为红黄绿-EW7.0 SN7.0东西南北的交通灯倒计时信号library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Traffic_Lights is port (CP,RS,SPE: IN STD_LOGIC; - -输入端口 CP-时钟信号 RS-复位信号 SPE-特殊状态控制信号 E_RYG,S_RYG,W_RYG,N_RYG:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -东西、南北方向上的交通灯颜色显示 EW,SN: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) -ASCII码LCD显示(倒计时) );end Traffic_Lights ;architecture JGT of Traffic_Lights ISTYPE STATES IS(S0,S1,S2,S3); -定义交通灯的4个状态SIGNAL S:STATES;SIGNAL A1,A2,B2: STD_LOGIC_VECTOR(7 DOWNTO 0); -BCD转换输入信号SIGNAL A1RYG,A2RYG,B1RYG,B2RYG:STD_LOGIC_VECTOR(2 DOWNTO 0); - -BCD码显示在LCD上的信息FUNCTION CHG (BIN:STD_LOGIC_VECTOR(7 DOWNTO 0) -2位16进制转2位BCD码函数RETURN STD_LOGIC_VECTOR ISVARIABLE S_BCD,ADD_BCD :STD_LOGIC_VECTOR(7 DOWNTO 0); -定义BCD转换码中间变量VARIABLE N:INTEGER RANGE 0 TO 8; -N表示输入BIN的位数BEGINN:=0;S_BCD:=00000000;IF BIN ADD_BCD:=00000001; WHEN 1= ADD_BCD:=00000010; WHEN 2= ADD_BCD:=00000100; WHEN 3= ADD_BCD:=00001000; WHEN 4= ADD_BCD:=00010110; WHEN 5= ADD_BCD:=00110010; WHEN 6= ADD_BCD:=01100100; WHEN OTHERS= ADD_BCD:=00000000; END CASE; S_BCD:=S_BCD+ADD_BCD; IF S_BCD(3 DOWNTO 0)1001 THEN -进行BCD码加法调整 S_BCD:=S_BCD+0110; END IF;END IF;N:=N+1;EXIT WHEN N=8; -当N=8时从当前循环中推退出END LOOP; -结束循环RETURN S_BCD;ELSE RETURN 00000000;END IF;END FUNCTION CHG;BEGINPROCESS(CP,RS,SPE)BEGINIF RS=1 THEN S=S0; -复位后进入S0状态 A1=X00; A1RYG=001;B1RYG=100; A2RYG=001;B2RYG=100;A2=X00; B2=X00;-颜色及倒计时赋值ELSIF CP=1 AND CP EVENT THEN -时钟上升沿到来 IF SPE=1 THEN -进入深夜状态 A1=X00;A1RYG=010;B1RYG=010;A2RYG=010;B2RYG=010; A2=X00;B2 IF A10 THEN A1=A1-1; A1RYG=A2RYG;B1RYG=B2RYG;A2=A2-1;B2=B2-1; ELSE A1=X27; S=S1; A1RYG=100;B1RYG=001;A2RYG=100;B2RYG=001;A2=X2A; B2 IF A10 THEN A1=A1-1; A1RYG=A2RYG;B1RYG=B2RYG; A2=A2-1; B2=B2-1; ELSE A1=X02; S=S2; A1RYG=100;B1RYG=010;A2RYG=100;B2RYG=010;A2=X02;B2 IF A10 THEN A1=A1-1; A1RYG=A2RYG;B1RYG=B2RYG;A2=A2-1;B2=B2-1; ELSE A1=X45; S=S3; A1RYG=001;B1RYG=100; A2RYG=001;B2RYG=100;A2=X45; B2 IF A10 THEN A1=A1-1; A1RYG=A2RYG;B1RYG=B2RYG;A2=A2-1; B2=B2-1; ELSE A1=X02; S=S0; A1RYG=010;B1RYG=100; A2RYG=010;B2RYG=100;A2=X02;B2=X02; -转次态S0,主黄支红倒计时3s END IF; END CASE; END IF; END IF;END PROCESS;PROCESS(A2,B2)BEGINEW=CHG(A2);SN=CHG(B2);END PROCESS;PROCESS(A1RYG,A2RYG,B1RYG,B2RYG)BEGINE_RYG=A1RYG;W_RYG=A2RYG;S_RYG=B1RYG;N_RYG=B2RYG;END PROCESS;END JGT;LCD接口模块-File name JTDLCD- 目的:在LCD上按格式显示交通灯的2个2位BCD码,红绿黄灯-编程 周冰航 2008年11月 修改:包佳斌 -输入:EW7.0、SN7.0 东西、南北向的2个2位BCD码-EWRYG2.0、SNRYG2.0东西南北的红绿灯信号,顺序为红黄绿-CPIN 时钟脉冲输入 按10MHz设计 ;复位R-注意:每个总线形式的输入均为LOGIC_VECTOR形式,因此,相应电路的输出要定义为LOGIC-VECTOR 形式,整型形式不能使用。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity JTDLCD is port (CPIN,R,BUSY :IN STD_LOGIC; EW,SN :IN STD_LOGIC_VECTOR(7 DOWNTO 0); E_RYG,W_RYG,S_RYG,N_RYG:IN STD_LOGIC_VECTOR(2 DOWNTO 0); CLK,RST,STROBE,OUTLINE : OUT STD_LOGIC; DATA : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); ADDR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );end entity ;architecture JGT of JTDLCD is TYPE STATES IS (S0,S1,S2,S3,S4); -定义了5个状态变量 SIGNAL S: STATES; SIGNAL LCDPT : INTEGER RANGE 0 TO 12; -定义一个LCDPT指针,共13个,1-12对应LCD屏的12个显示 SIGNAL CPCT : INTEGER RANGE 0 TO 65535; SIGNAL CP: STD_LOGIC; SIGNAL ASCE,ASCS,ASCW,ASCN : STD_LOGIC_VECTOR(7 DOWNTO 0);beginPROCESS(CPIN,R)BEGINCLK=CPIN;IF R=1 THEN CPCT=65535;ELSIF CPIN=1 AND CPIN EVENT THEN IF CPCT=0 THEN CPCT=65535;CP=NOT CP; ELSE CPCTS2 - :Y: 转S3- ;N; NULL-S2:给出STROBE信号。转S1-S1,S2完成初始化固定显示的功能PROCESS(CP,R)BEGINIF R=1 THEN S=S0;LCDPT=0;RST S=S1;LCDPT=0;RST RST=0;STROBE=0; IF BUSY=0 THEN LCDPT=LCDPT+1; IF LCDPT=5 THEN S=S3; ELSE S S=S1;STROBE STROBE=0; IF BUSY=0 THEN IF LCDPT=12 THEN LCDPT=5; ELSE LCDPT=LCDPT+1; END IF; S STROBE=1;S NULL; END CASE;END IF; END PROCESS;-选择输出进程(LCDPT)-LCDPT=0,NULL- =14 显示EW SN E 45H,5 W57H,6 S53H,9 N4EH,10PROCESS(LCDPT)BEGINCASE LCDPT ISWHEN 0 = NULL;WHEN 1= DATA=01000101;ADDR=0011;OUTLINE DATA=01010111;ADDR=0110;OUTLINE DATA=01010011;ADDR=1000;OUTLINE DATA=01001110;ADDR=1011;OUTLINEDATA=0011&EW(7 DOWNTO 4);ADDR=0100;OUTLINEDATA=0011&EW(3 DOWNTO 0);ADDR=0101;OUTLINEDATA=ASCE;ADDR=0011;OUTLINEDATA=ASCW;ADDR=0110;OUTLINEDATA=0011&SN(7 DOWNTO 4);ADDR=1001;OUTLINEDATA=0011&SN(3 DOWNTO 0);ADDR=1010;OUTLINEDATA=ASCS;ADDR=1000;OUTLINEDATA=ASCN;ADDR=1011;OUTLINE NULL;END CASE;END PROCESS;PROCESS(E_RYG)BEGINCASE E_RYG ISWHEN 100 = ASCE ASCE ASCE NULL;END CASE;END PROCESS;PROCESS(W_RYG)BEGINCASE W_RYG ISWHEN 100 = ASCW ASCW ASCW NULL;END CASE;END PROCESS;PROCESS(S_RYG)BEGINCASE S_RYG ISWHEN 100 = ASCS ASCS ASCS NULL;END CASE;END PROCESS;PROCESS(N_RYG)BEGINCASE N_RYG ISWHEN 100 = ASCN ASCN ASCN NULL;END CASE;END PROCESS; end architecture JGT;仿真时所加的测试程序STIMULUS0:process begin - insert stimulus here RS=1;WAIT FOR 2 NS; RS=0;SPE=0;WAIT FOR 1 NS; RS=0;SPE=1;WAIT FOR 10 NS; RS=0;SPE=0;WAIT; END PROCESS; PROCESS BEGIN CP=0;WAIT FOR 5 NS; CP=1;WAIT FOR 5 NS; end process; WRITE_RESULTS( CP, EW, EWRYG, RS, SN,仿真图形 SNRYG, SPE );end architecture; 原理图心得体会在整个设计过程中,我们先是提出了交通灯所要实现的各项功能,接着通过老师所讲的状态法,设定了4个状态,然后试着编写VHDL程序以实现这些功能,在不断地修改和完善后,终于在Altium这个软件上通过了仿真。通过仿真后我们开始画原理图,加上各种外围器件,最后把完成的原理图加上约束文件下载到FPGA实验台上,成功的实现了交通灯的控制。这中间,我们经常会遇到这样那样的情况,尤其是在编写交通灯控制模块这一环节,由于是第一次学习VHDL语言,对此并不熟悉,因此过程称得上是一波三折,不是这里多了个儿分号,就是那里少了个括号。最后终于在小组3个人的不懈努力下,完成了VHDL的编写。这次课程设计,加强了我思考、动手和解决问题的能力。 做课程设计的同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论