系统与逻辑综合实验交通灯控制器

上传人:痛*** 文档编号:40920751 上传时间:2021-11-18 格式:DOC 页数:16 大小:588KB
收藏 版权申诉 举报 下载
系统与逻辑综合实验交通灯控制器_第1页
第1页 / 共16页
系统与逻辑综合实验交通灯控制器_第2页
第2页 / 共16页
系统与逻辑综合实验交通灯控制器_第3页
第3页 / 共16页
资源描述:

《系统与逻辑综合实验交通灯控制器》由会员分享,可在线阅读,更多相关《系统与逻辑综合实验交通灯控制器(16页珍藏版)》请在装配图网上搜索。

1、数字系统与逻辑综合实验 交通灯控制器 一 摘要随着机动车的不断增多,道路复杂化加强,突发事件频繁,对交通灯控制器的要求也越来越高,本实验基于VHDL编程实现了自动控制十字路口的智能交通灯和计时器,用来设立在十字路口指挥各种车辆和行人安全通行。对于交通等控制器的设计是分模块自顶向下的设计思想,软硬件结合来实现本设计。关键词:交通灯 计时器 VHDL 模块AbstractWith the development of social traffic system, and the increase number of vehicle, the capability of traffic lights

2、 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 fun

3、ction.Keywords: traffic lights count-down VHDL module 二 设计任务要求与完成任务基本要求1. 南北和东西方向各有一组绿、黄、红灯用于指挥交通,绿灯、黄灯和红灯的持续时间分别为20秒、5秒和25秒;2. 当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复原来状态,继续正常运行; 3. 用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间; 4. 选做:增加左、右转弯显示控制功能; 5. 选做:其它自拟功能。任务完成情况(1)基本功能实现: 程序开始南北绿,东西红;20秒后南北黄,东西红;

4、5秒后南北红,东西绿; 20秒后南北红,东西黄;5秒后南北绿,东西红。完成一次50秒计时循环,进入下一轮循环。(2)增加东西、南北双向左转功能:南北绿前五秒允许南北左转弯,转弯灯亮,5秒后灯灭;东西绿前五秒允许东西左转弯,转弯灯亮,5秒后灯灭(3)全部复位功能:按下复位键恢复初始状态,南北绿,东西红,重新开始计时循环三 总体框图时钟信号复位信号控 制 器 发光二极管的显示 (交通灯) 数码管的扫描 (选通输出)紧急情况信号 数码管的显示 (倒计时)四 分块电路设计本设计包括:一个顶层文件jiaotongdeng.vhd 3个底层文件:分频器fenpin.vhd; 控制模块traffic.vhd

5、; 显示模块display.vhd各个模块输入输出信号以及功能简介分频模块作用: 根据实验要求得出相应的频率输入:实验板给出1MHZ的时钟输出:1000 分频得出的1KHZ的CLK1K 用来为数码管做选通输出的扫描频率1000000 分频得出的1hz的CLK1 交通灯倒计时以1s为单位控制模块作用: 紧急情况实现,交通灯状态复位,交通灯状态转移,计数器,LED和数码管的显示输入:两个分频 CLK1K CLK1 RESET 按下后返回初始状态CHANGE 奇数次按下后进入紧急情况 偶数次按下后恢复输出:SEL 5 DOWNTO 0 数码管选通输出LIGHTS 7 DOWNTO 0 发光二极管显示

6、输出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=S30010001

7、0State=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

8、-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

9、(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 1h

10、z 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;componen

11、t 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_logi

12、c_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(c

13、lk) -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(cou

14、nt14)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 c

15、ase; 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 traf

16、fic;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(

17、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)th

18、en 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 cou

19、nt 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=

20、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=num

21、1;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再次按下紧急状况

22、键 恢复上一个状态数码管翻译成二进制数显示十一 元件清单EPM7128ls84-15 1 下载程序,实现功能稳压直流电源 4 提供下载所需环境 发光二极管 8 交通灯,红绿灯和左右转灯数码管 4 显示交通灯持续时间按键 2 紧急情况和复位十二 实验中遇到的困难与解决因为这是第一次做数字电路综合实验,以前只是用vhdl编过非常基本的小程序,只能实现某个单独的功能,所以当要独立完成一个比较大的而且代码也很长的程序时还是遇到了不少困难。1 刚开始编程的时候思路比较混乱,对分模块编程的思路并不清晰,在查阅了参考实例之后有了比较深刻的了解,领悟了实例中各模块功能不同被顶层文件调用来实现整体功能的概念2

23、RESET和CHANGE按钮的设计必须有标志位,特别是紧急状态按键CHANGE,否则程序无法判断是第几次按下,造成错误,3开始时七段数码管显示时间不对,出现乱码,经检查发现译码错误,修改译码后解决。4没有设置管脚的元件乱闪烁的现象,影响实验效果,后来发现是没有把不用的管脚设置为高阻态。经过设置之后,闪烁的现象就消失了。5 数码管显示不连续后来提高了扫面选通频率后因为频率过高,又出现了显示数字发虚不清楚的情况,最后选定用1KHz的频率使得数码管输出正常。6在用源程序做仿真时,红绿灯一直没有波形变化,最后得知是由于分频的内循环次数,即一次分频太高程序未予执行有关。所以修改了源程序使元件都尽量使用了

24、主时钟信号,之后仿真正常。紧急状态和复位键没有反映出来,原因是RESET和CHANGE时间太短,改正后仿真正常。在实验中遇到的问题不少但是通过仔细的检查还有与同学的讨论都可以比较轻松的把问题解决,只要认真最后实验一定会顺利完成的。十三 实验心得与体会 虽然这5周遇到了不少困难,但是还是通过努力完成了本学期的数字电路综合设计实验交通灯控制器。通过这次实验,我实现了设计交通灯控制器所要求的基本功能,并且有一些附加功能,独立的开发了交通灯的程序和扩展功能,并进行了仿真与下载的软硬件实现。在实验的过程中,经历了很多的困难,也遇到了一些麻烦,下面就自己所遇到的问题谈一些实验的心得与体会。前期准备:因为本

25、次实验是综合性实验,所以对上学期所学的VHDL语言的基本实验是 必须掌握的,相当于把以前的实验所实现的功能结合到了一个程序中,比如交通灯控制器就要用到LED发光管,数码管等器件,在实验之前应该把上学期的数字电路课本认真研读还有实验课本也要看。编程期间:1由于综合实验需要一个顶层文件和多个底层文件,光凭脑子想是不够的, 要把思路记录下来,状态转移图和每个底层文件的程序流程图画在纸上,以便于再相隔一周的时间后可以继续之前的思路编写程序,修改程序。2 去图书馆借一本实例变成的书籍,便于开拓思路和上手。因为从来没有编写过这种较大规模的程序所以始终的例子就是很好的借鉴。比如分频功能,数码管显示,计时器等

26、等这样很快就可以把各个底层模块编写完成,拼装后调试过程中再进行修改,事半功倍的效果。3 学会与他人合作,有时候自己怎么也找不出错误,或者思路很有局限性,这时候不妨和做通个实验题目的同学讨论,帮观者请,也许困难一会儿就可以解决了,你也可以从别人的错误中获得启发。调试阶段:1 程序基本完成,仿真和下载也是非常重要的一个环节,看似争取的程序往往在仿真过程中错误百出,有逻辑的有语言方面的,根据提示语言该错误距离成功已经不远了。2 下载的时候选用area,屏蔽不用的管角,以免有不必要的麻烦。有时候程序没错可是结果不对那就比较困难了,只能从头读程序有可能是逻辑错误这次综合设计实验培养了我的逻辑思维能力,以及一些变成思想,最主要的就是程序分成不同模块实现不同的功能,这样在检错的时候哪出了问题一目了然,不只是VHDL用模块编程其他很多程序也都适用,每次实验后的感慨都很多,感觉自己的能力又提升了一块。最后要感谢老师耐心的指导与解答帮助我顺利完成实验!附录:参考文献数字电路设计与数字系统 人民邮电出版社数字电路与逻辑设计实验教程 北京邮电大学电路实验中心 北京邮电大学电路实验中心网站 云超 2007-11-11

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!