系统与逻辑综合实验-交通灯控制器.doc_第1页
系统与逻辑综合实验-交通灯控制器.doc_第2页
系统与逻辑综合实验-交通灯控制器.doc_第3页
系统与逻辑综合实验-交通灯控制器.doc_第4页
系统与逻辑综合实验-交通灯控制器.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

数字系统与逻辑综合实验 交通灯控制器 一 摘要随着机动车的不断增多,道路复杂化加强,突发事件频繁,对交通灯控制器的要求也越来越高,本实验基于vhdl编程实现了自动控制十字路口的智能交通灯和计时器,用来设立在十字路口指挥各种车辆和行人安全通行。对于交通等控制器的设计是分模块自顶向下的设计思想,软硬件结合来实现本设计。关键词:交通灯 计时器 vhdl 模块abstractwith the development of social traffic system, and the increase number of vehicle, the capability of traffic lights controller is more and more demanding. this experiment on basis of vhdl completes an auto traffic lights and a count-down-display to conduct vehicles and passerby safely. the design of this program is top-to-bottom and separated in three modules. software cooperates with hardware to achieve the function.keywords: traffic lights count-down vhdl module 二 设计任务要求与完成任务基本要求1. 南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5秒和25秒;2. 当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行; 3. 用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间; 4. 选做:增加左、右转弯显示控制功能; 5. 选做:其它自拟功能。任务完成情况(1)基本功能实现: 程序开始南北绿,东西红;20秒后南北黄,东西红;5秒后南北红,东西绿; 20秒后南北红,东西黄;5秒后南北绿,东西红。完成一次50秒计时循环,进入下一轮循环。(2)增加东西、南北双向左转功能:南北绿前五秒允许南北左转弯,转弯灯亮,5秒后灯灭;东西绿前五秒允许东西左转弯,转弯灯亮,5秒后灯灭(3)全部复位功能:按下复位键恢复初始状态,南北绿,东西红,重新开始计时循环三 总体框图时钟信号复位信号控 制 器 发光二极管的显示 (交通灯) 数码管的扫描 (选通输出)紧急情况信号 数码管的显示 (倒计时)四 分块电路设计本设计包括:一个顶层文件jiaotongdeng.vhd 3个底层文件:分频器fenpin.vhd; 控制模块traffic.vhd; 显示模块display.vhd各个模块输入输出信号以及功能简介分频模块作用: 根据实验要求得出相应的频率输入:实验板给出1mhz的时钟输出:1000 分频得出的1khz的clk1k 用来为数码管做选通输出的扫描频率1000000 分频得出的1hz的clk1 交通灯倒计时以1s为单位控制模块作用: 紧急情况实现,交通灯状态复位,交通灯状态转移,计数器,led和数码管的显示输入:两个分频 clk1k clk1 reset 按下后返回初始状态change 奇数次按下后进入紧急情况 偶数次按下后恢复输出:sel 5 downto 0 数码管选通输出lights 7 downto 0 发光二极管显示输出num 9 downto 0 倒计时计数输出到显示模块 显示模块作用: 7段数码管显示出东西南北两路交通灯的倒计时数值输入:num 9 downto 0 倒计时计数输出到显示模块输出: seg 6 downto 0 把0到9是个数字转换成二进制数送显state=s1初始状态10100001state=s500001100state=s600010100五 状态转移图reset=1reset=1state=s200100001change=1change=1change=1change=1change=1state=s7 特殊情况00100100change=1state=s300100010state=s401001100六 程序流程图count=50 state=s1东西红,南北绿南北可左转count=45 state=s2东西红,南北绿南北不可左转count=30 state=s3东西红,南北黄count=25 state=s4东西绿,南北红东西可左转beginchange=1 ch=1 紧急情况count=count东西红,南北红change=1 ch=0 紧急情况结束reset=1count=count-1reset=1noyescount=20 state=s5东西绿,南北红东西不可左转count=5 state=s6东西黄,南北红count=0count=count-1count=count-1count=count-1count=count-1count=count-1count=count-1恢复原来状态检测紧急状况count=count-1检测紧急状况检测紧急状况检测紧急状况检测紧急状况检测紧急状况检测紧急状况七 交通灯控制起源程序-顶层文件-library ieee; use ieee.std_logic_1164.all;entity jiaotongdeng isport(clk:in std_logic; -时钟信号 change,reset:in std_logic; -复位和紧急情况信号 seg:out std_logic_vector(6 downto 0); -7段数码管显示 sel:out std_logic_vector(5 downto 0); -选通输出 lights:out std_logic_vector(7 downto 0);-led发光管输出 clkout:out std_logic);end jiaotongdeng;architecture a of jiaotongdeng is -分别调用各个模块signal cp1k,cp100,cp1:std_logic;signal number:integer range 0 to 9;component fenpin -分频模块 1k 100hz 1hz port(clk:in std_logic; clk1k,clk100,clk1:out std_logic);end component;component traffic -交通灯控制模块 紧急情况 状态清零 左右转 port(clk1,clk1k:in std_logic; change,reset:in std_logic; num:out integer range 0 to 9; lights:out std_logic_vector(7 downto 0); sel:out std_logic_vector(5 downto 0);end component;component display -led发光管 8段数码管显示 port(num:in integer range 0 to 9; seg:out std_logic_vector(6 downto 0);end component;begin -三个不同模块u1:fenpin port map(clk,cp1k,cp100,cp1);u2:traffic port map(cp1,cp1k,change,reset,number,lights,sel);u3:display port map(number,seg);end;-分频模块-library ieee;-分频器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin is port(clk:in std_logic; clk1k,clk100,clk1:out std_logic);end fenpin;architecture a of fenpin issignal count:integer range 0 to 999;signal count1:integer range 0 to 9;signal count2:integer range 0 to 99;signal m,n:std_logic;beginp1: process(clk) -1khz分频 数码管选通输出使用 begin if(clkevent and clk=1)then if(count=999) then count=0; else count=count+1; end if; if(count499) then m=1; else m=0; end if; end if; end process;p2:process(m) -100hz分频 扩展功能使用 m来驱动 begin if(mevent and m=1) then if(count1=9)then count1=0; else count1=count1+1; end if; if(count14)then n=1; else n=0; end if; end if; end process;p3:process(n) -1hz分频 倒计时使用 n来驱动 begin if(nevent and n=1)then if(count2=99)then count2=0; else count2=count2+1; end if; if(count249)then clk1=1; else clk1=0; end if; end if;end process;clk1k=m; clk100segsegsegsegsegsegsegsegsegsegseg=xxxxxxx; end case; end process;end;-控制主模块-library ieee; -交通灯控制use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity traffic is port(clk1,clk1k:in std_logic; change,reset:in std_logic; num:out integer range 0 to 9; lights:out std_logic_vector(7 downto 0); sel:out std_logic_vector(5 downto 0); end traffic;architecture a of traffic istype states is(s1,s2,s3,s4,s5,s6,s7);signal state:states;signal num1,num2,num3,num4:integer range 0 to 9;signal ch:std_logic:=0;signal count:integer range 1 to 50 :=1;beginu1:process(change)-紧急状态按键 begin if(change=1)then -标志位 ch=not ch; end if; end process;u2:process(clk1,ch,reset)-计时器清零 恢复初始状态 begin if(clk1event and clk1=1)then if (reset=1) then count=50; else if(ch=1)then count=count; elsif(count=1)then count=50; else count=count-1; end if; end if; end if; end process;u3:process(ch,count)-根据时间来选择交通灯状态begin if(ch=1)then state=45)then state=s1; elsif(count=30)then state=s6; elsif(count=25)then state=s2; elsif(count=20) then state=s3; elsif(count=5) then state=s7; else statelightslightslightslightslightslightslights=00100100; 南北红,东西红 紧急状态 end case; end process;u4:process(ch,count)-倒计时技计数 beginif count = 50 then 从50开始计数 递减num1=2;num2=5;num3=2;num4=45 and count 50 then num1=2;num2=count-45;num3=1;num4=count-40;elsif (count=40) then num1=1;num2=count-35;num3=1;num4=count-40;elsif (count=35) then num1=1;num2=count-35;num3=0;num4=count-30;elsif (count=30) then num1=0;num2=count-25;num3=0;num4=count-30;elsif (count=25) then num1=0;num2=count-25;num3=0;num4=count-25;elsif (count=20) then num1=1;num2=count-15;num3=2;num4=count-20;elsif (count=15) then num1=1;num2=count-15;num3=1;num4=count-10;elsif (count=10) then num1=0;num2=count-5;num3=1;num4=count-10;elsif (count=5) then num1=0;num2=count-5;num3=0;num4=count;else num1=0;num2=count;num3=0;num4num=num1;temp:=1;selnum=num2;temp:=2;selnum=num3;temp:=3;selnum=num4;temp:=0;sel=111011; end case; end if; end process;end;八 总体电路图及管角分布quartus实体图管角分布九 资源利用率十 仿真波形交通灯正常运行 红绿灯从状态s1:00100001开始 双向左转弯从01开始 无复位 reset=0无紧急情况 change=0复位键按下 reset=1恢复成初始状态s1:00100001 南北绿 东西红紧急状态键按下 change=1进入紧急情况 s7:00100100再次按下紧急状况键 恢复上一个状态数码管翻译成二进制数显示十一 元件清单epm7128ls84-15 1 下载程序,实现功能稳压直流电源 4 提供下载所需环境 发光二极管 8 交通灯,红绿灯和左右转灯数码管 4 显示交通灯持续时间按键 2 紧急情况和复位十二 实验中遇到的困难与解决因为这是第一次做数字电路综合实验,以前只是用vhdl编过非常基本的小程序,只能实现某个单独的功能,所以当要独立完成一个比较大的而且代码也很长的程序时还是遇到了不少困难。1 刚开始编程的时候思路比较混乱,对分模块编程的思路并不清晰,在查阅了参考实例之后有了比较深刻的了解,领悟了实例中各模块功能不同被顶层文件调用来实现整体功能的概念2 reset和change按钮的设计必须有标志位,特别是紧急状态按键change,否则程序无法判断是第几次按下,造成错误,3开始时七段数码管显示时间不对,出现乱码,经检查发现译码错误,修改译码后解决。4没有设置管脚的元件乱闪烁的现象,影响实验效果,后来发现是没有把不用的管脚设置为高阻态。经过设置之后,闪烁的现象就消失了。5 数码管显示不连续后来提高了扫面选通频率后因为频率过高,又出现了显示数字发虚不清楚的情况,最后选定用1khz的频率使得数码管输出正常。6在用源程序做仿真时,红绿灯一直没有波形变化,最后得知是由于分频的内循环次数,即一次分频太高程序未予执行有关。所以修改了源程序使元件都尽量使用了主时钟信号,之后仿真正常。紧急状态和复位键没有反映出来,原因是reset和change时间太短,改正后仿真正常。在实验中遇到的问题不少但是通过仔细的检查还有与同学的讨论都可以比较轻松的把问题解决,只要认真最后实验一定会顺利完成的。十三 实验心得与体会 虽然这5周遇到了不少困难,但是还是通过努力完成了本学期的数字电路综合设计实验交通灯控制器。通过这次实验,我实现了设计交通灯控制器所要求的基本功能,并且有一些附加功能,独立的开发了交通灯的程序和扩展功能,并进行了仿真与下载的软硬件实现。在实验的过程中,经历了很多的困难,也遇到了一些麻烦,下面就自己所遇到的问题谈一些实验的心得与体会。前期准备:因为本次实验是综合性实验,所以对上学期所学的vhdl语言

温馨提示

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

评论

0/150

提交评论