智能交通灯--VHDL_第1页
智能交通灯--VHDL_第2页
智能交通灯--VHDL_第3页
智能交通灯--VHDL_第4页
智能交通灯--VHDL_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、设 计 报 告课程名称 在系统编程技术 任课教师 设计题目 交通信号灯 班级 姓名 学号 日期 一、 项目分析及设计要求(一) 项目分析本项目设计一个智能交通灯控制系统,使其能模仿城市“十字”路口交通灯的功能,并能满足特殊的控制要求(如按键m的使用),该系统的具体功能如下: (1) 该控制系统能控制东、西、南、北四个路口的红、黄、绿信号灯正常工作。 (2) 当东西方向准行,南北方向禁行时,东西方向亮绿灯,南北方向亮红灯。 (3) 当南北方向准行,东西方向禁行时,南北方向亮绿灯,东西方向亮红灯。  (4) 绿灯亮完后,加亮一盏黄灯,以警告车辆及行

2、人,准行方向即将改变(即准行变为禁行)。 (5) 四个道口各用一组由十位和个位组成的数码管显示准行(或禁行)的剩余时间。 (6) 在交通情况比较特殊的情况下,可以通过按键对交通灯进行紧急控制。(二) 设计要求本系统有两种工作状态:正常工作状态、紧急工作状态,可利用按键进行改变工作状态。1. 正常工作时:(1) 十字路口的4个路口信号灯(红、黄、绿)显示各路口的各条通道的状态; (2) 每个路口都有两位数码管显示当前信号灯的倒计时。表1 信号灯状态转换表 红 黄 绿(南北) 红 黄 绿(东西)状态(S)1 0 00 0 1001 0 00 1 0010 0 11 0

3、 0100 1 01 0 0112. 紧急情况:(1) 四个路口的红灯全亮,禁止车辆通行;(2) 四个路口的数码管显示全0,停止倒计时;(3) 扬声器报警,警告车辆及行人。图1 系统总体方框图二、 系统设计及方案论证基于项目分析及设计要求,本系统采用“自顶向下”的设计思想,将整个交通灯控制系统分为四个子模块,即分频模块、倒计时控制模块、信号灯控制模块、报警模块。本项目使用Quartus II软件进行设计,四个子模块(底层模块)分别采用VHDL语言设计,并进行元件打包,以供顶层文件使用。设计好四个子模块后即可进行顶层文件的搭建,即交通灯控制系统,顶层文件采用图形设计方法,利用打包好的底层元件进行

4、原理图绘制以实现项目功能。图2 系统设计方框图根据GW48 EDA/SOPC系统使用说明,输入时钟信号采用CLOCK5的1024Hz,紧急情况按键输入使用高低电平发生器。因为东西方向为同一条道路,所以交通灯状态相同,信号灯输出采用一组LED灯(红黄绿),倒计时输出也采用一组数码管(十、个位),南北方向同理。三、 系统各模块仿真与分析(一) 分频模块分频模块用来对输入的时钟频率进行分频以获得需要的工作频率,本项目的输入时钟频率clk=1024Hz,经过1024分频后得到1Hz的时钟频率,即1s,通过clk_1s输出给倒计时控制模块,进行秒倒计时;经过512分频后得到2Hz的时钟频率,即0.5s,

5、通过clk_05s输出给报警控制模块,进行扬声器发声控制。图3 分频模块通过观察波形图易知,当输入信号clk=1024Hz时,输出信号clk_1s=1Hz、clk_05s=2Hz,且clk_1s为clk_05s的二分频,满足该模块的功能需求。图4 分频模块仿真波形(二) 倒计时控制模块倒计时控制模块是整个系统的核心模块,它起着控制信号灯状态和倒计时显示计数的作用,通过对程序内部东西南北方向的绿灯、黄灯的时长预置,可实现对交通灯的智能控制。clk作为时钟输入端,接收来自分频模块的clk_1s的时钟信号(1s),实现秒倒计时计数和信号灯的状态转换。ent为紧急情况信号的输入端,当紧急情况按键被按下

6、,ent为高电平,此时停止倒计时计数,数码管控制信号输出为全0。图5 倒计时控制模块s1.0为信号灯状态输出端,给信号灯控制模块提供状态信息,状态信号s根据倒计时时间进行状态转换,即s=00à01à10à11à00à01如此循环。data_a7.0为东西方向的数码管显示信号输出端,将倒计时时间送显至数码管(其中高4位是十位,低4位是个位)。data_b7.0为南北方向的数码管显示信号输出端,将倒计时时间送显至数码管(其中高4位是十位,低4位是个位)。图6 倒计时控制模块仿真波形设置东西方向绿灯时间为15s,南北方向绿灯时间为12s,黄灯时间为3

7、s时,通过观察波形图易知:当ent=0时,每来一次时钟上升沿,计数值就会减1,每当东西或南北方向减至0时,状态输出发生改变,即信号灯发生跳转;当ent=1 时,data_a、data_b、s输出全为零,即东西南北方向数码管显示全为0,满足该模块的功能需求。 (三) 信号灯控制模块信号灯控制模块用来控制信号灯的状态,实现交通管制,控制车辆通行。s1.0用来接收倒计时控制模块送来的状态信号,本模块再根据状态信号送显相应状态至信号灯。ent为紧急情况信号的输入端,当紧急情况按键被按下,ent为高电平,四个路口信号灯全显示红灯,禁止车辆通行。led5.0为信号灯驱动信号(其中高3位为南北方向信号灯控制

8、信号,低3位为东西方向信号灯控制信号)。图7 信号灯控制模块通过观察波形图易知:当ent=0时,随着输入状态s的改变,输出led也发生改变,即信号灯发生跳转;当ent=1 时,无论s处于何种状态led输出”100100”,即东西南北方向红灯全亮,禁止车辆通行,满足该模块的功能需求。图8 信号灯控制模块仿真波形(四) 报警控制模块报警模块是当紧急状况时控制扬声器进行每秒钟的响灭,实现报警,警告车辆及行人。clk_05s作为时钟输入端,接收来自分频模块的clk_05s的时钟信号(0.5s),实现控制扬声器每秒响灭一次。clk作为时钟信号输入端,当扬声器需要发声时,直接送至信号输出端bibo以驱动扬

9、声器工作。ent为紧急情况信号的输入端,当紧急情况按键被按下,ent为高电平,报警控制模块开始控制扬声器工作。bibo为扬声器工作的驱动信号。图9 报警控制模块通过观察波形图易知,当ent=0时,输出信号bibo始终为低电平,即扬声器不工作,无警告;当ent=1 时,输出信号bibo每隔0.5s输出一次时钟信号clk(1024Hz),即扬声器每秒钟响灭一次,实现报警,满足该模块的功能需求。图10 报警控制模块仿真波形四、 全系统联调系统顶层原理图如下:图11 系统电路原理图通过观察波形图易知:当m键未按下时,系统正常工作,随着秒脉冲的到来,东西南北方向的数码管会倒计时计数,每当东西南北方向的数

10、码管倒计时至0时,信号灯发生跳转,以控制各路口车辆通行;当m键按下时,系统工作于紧急情况,东西南北方向的数码管显示全为零,信号灯全亮红灯,扬声器报警。满足项目设计要求。图12 系统仿真波形五、 硬件测试及说明图13 交通灯控制系统目标器件:CycloneEP1C6Q240C8模式选择:NO.7引脚锁定:见表2经试验箱测试,满足设计要求。表2 引脚功能及锁定功能输入/出信号实验电路接口引脚时钟输入(1024Hz)clkCLOCK5PIN_152紧急情况(按键输入)m键8D16PIO7PIN_240东西方向交通灯绿led0PIO40PIN_161黄led1PIO41PIN_162红led2PIO4

11、2PIN_163南北方向交通灯绿led3PIO45PIN_166黄led4PIO46PIN_167红led5PIO47PIN_168东西方向数码管显示计数个位shuma10PIO16PIN_13shuma11PIO17PIN_14shuma12PIO18PIN_15shuma13PIO19PIN_16十位shuma14PIO20PIN_17shuma15PIO21PIN_18shuma16PIO22PIN_19shuma17PIO23PIN_20南北方向数码管显示计数个位shuma20PIO32PIN_137shuma21PIO33PIN_138shuma22PIO34PIN_139shuma

12、23PIO35PIN_140十位shuma24PIO36PIN_141shuma25PIO37PIN_158shuma26PIO38PIN_159shuma27PIO39PIN_160报警输出(扬声器)biSPEAKERPIN_174六、 结论···· 七、 课程总结····参考文献:1潘松,黄继业.EDA技术实用教程VHDL版(第五版),北京:科学出版社,2013。2康华光.电子技术基础.数字部分(第五版),北京:高等教育出版社,2006.1。3王锁萍.电子设计自动化(EDA)教程,成都:成都电子科技大学出版社,

13、2000。附录A 源程序:1. 分频模块VHDL:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dvf ISPORT(clk:IN STD_LOGIC;-时钟信号,1024Hzclk_1s:OUT STD_LOGIC;-时钟输出,1Hzclk_05s:OUT STD_LOGIC);-时钟输出,2HzEND dvf;ARCHITECTURE one OF dvf ISBEGINclk1s:PROCESS(clk)-进程1:进行1024分频CONSTANT m:INTEGER:=1024; -m=1024,即进行1024分频VARIABLE cou

14、t:INTEGER RANGE 0 TO 50000:=0; -用来计数时钟输入信号 BEGINIF clk'EVENT AND clk='1' THEN cout:=cout+1;IF cout<=m/2 THEN clk_1s<='1' -计数小于512,clk_1s输出高电平ELSIF cout<m THEN clk_1s<='0' -计数大于512小于1024,clk_1s输出低电平ELSE cout:=0; -计数至1024,清零END IF;END IF; END PROCESS clk1s;clk05

15、s:PROCESS(clk) -进程2:进行512分频CONSTANT m:INTEGER:=512; - m=512,即进行512分频VARIABLE cout:INTEGER RANGE 0 TO 50000:=0; -用来计数时钟输入信号 BEGINIF clk'EVENT AND clk='1' THEN cout:=cout+1; -IF cout<=m/2 THEN clk_05s<='1' -计数小于256,clk_05s输出高电平ELSIF cout<m THEN clk_05s<='0' -计数大

16、于256小于512,clk_05s输出低电平ELSE cout:=0; -计数至512,清零END IF;END IF; END PROCESS clk05s;END one;2. 倒计时控制模块VHDL:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY counter ISPORT(clk:IN STD_LOGIC;-时钟输入信号1Hz ent:IN STD_LOGIC;-紧急情况使能信号 s:OUT STD_LOGIC_VE

17、CTOR(1 DOWNTO 0);-信号灯状态输出data_a:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-东西方向数码管数据输出data_b:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);- 南北方向数码管数据输出END counter;ARCHITECTURE one OF counter ISBEGINPROCESS (clk, e n t)VARIABLE temp: INTEGER RANGE 0 TO 60:=49;VARIABLE data_s1:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE data_s2

18、:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF ent ='1' THEN data_s1:="00000000"data_s2:="00000000"temp:=49;s<="00" ELSE IF c l k 'EVENT AND c l k='1' THENIF temp>=30 AND temp<50 THEN s<="00"data_s1(7 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(tem

19、p-30) / 10),4);data_s1(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp-30) REM 10),4);data_s2(7 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(temp-25) / 10),4);data_s2(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp-25) REM 10),4);temp:=temp-1;ELSIF temp>=25 AND temp<30 THEN s<="01"data_s1(7 DOWNTO 4):=CONV_S

20、TD_LOGIC_VECTOR(temp-25) / 10),4);data_s1(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp-25) REM 10),4);data_s2(7 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(temp-25) / 10),4);data_s2(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp-25) REM 10),4);temp:=temp-1;ELSIF temp>=5 AND temp<25 THEN s<="10"data_s1(7

21、 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(temp / 10),4);data_s1(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp REM 10),4);data_s2(7 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(temp-5) / 10),4);data_s2(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp-5) REM 10),4);temp:=temp-1;ELSIF temp>=0 AND temp<5 THEN s<="11"da

22、ta_s1(7 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(temp / 10),4);data_s1(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp REM 10),4);data_s2(7 DOWNTO 4):=CONV_STD_LOGIC_VECTOR(temp / 10),4);data_s2(3 DOWNTO 0):=CONV_STD_LOGIC_VECTOR(temp REM 10),4);IF temp=0 THEN temp:=49;ELSE temp:=temp-1;END IF;END IF; END IF;END IF

23、;data_a<=data_s1;data_b<=data_s2;END PROCESS;END one;3. 信号灯控制模块VHDLLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY control ISPORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0);-信号灯状态输入ent:IN STD_LOGIC;-紧急情况使能信号 led:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);-信号灯控制信号END control;ARCHITECTURE one OF control ISBEGINPROCESS(s) BEGINIF ent='1' THEN led<="100100"-紧急情况,红灯全亮ELSE CASE (s) ISWHEN "00" => led <="100001" -00,东西绿灯亮,南北红灯亮WHEN "01" => led <="100010"-01,东西黄灯亮,南北红灯亮

温馨提示

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

评论

0/150

提交评论