交通灯控制器的设计

  • 格式:docx
  • 大小:13.93 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA实验报告

一、课程设计题目及要求

题目:十字路口交通灯

具体要求:

设计一个十字路口的交通灯控制器,能显示十字路口东西、南北两个方向红、黄、绿灯的指示状态。用两组红、黄、绿三种颜色的灯分别作为东西、南北两个方向红、黄、绿等。变化规律为:东西绿灯亮,南北红灯亮——东西黄灯亮,南北红灯亮——东西红灯亮,南北绿灯亮——东西红灯亮,南北黄灯亮——东西绿灯亮,南北红灯亮······,这样循环下去。南北方向每次通行时间为45秒,东西方向每次通行时间为45秒,要求两条交叉道路上的车辆交替运行,时间可设置修改。绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道。并要求所有交通灯的状态变化在时钟脉冲上升沿处。

二、实验编程环境

三、课程设计的详细设计方案

(一)、总体设计方案的描述

、根据交通灯系统设计要求,可以用一个有限状态机来实现这个交通灯控制器。首先根据功能要求,明确两组交通灯的状态,这两组交通灯总共共有四种状态,我们用ST0,ST1,ST2,ST3来表示:

St0表示东西路绿灯亮,南北路红灯亮;

St1表示东西路黄灯亮,南北路红灯亮;

St2表示东西路红灯亮,南北路绿灯亮;

St3表示东西路红灯亮,南北路黄灯亮;

、根据上述四种状态描述列出的状态转换表

交通灯控制器的状态转移图 (二)各个模块设计

、控制器模块

控制器模块示意图

其中,clk 为时钟信号,时钟上升沿有效。hold 为紧急制动信号,低电平有效。ared,agreen,ayellow 分别表示东西方向的红灯,黄灯,绿灯显示信号,高电平有效。bred,bgreen,byellow 分别表示南北方向的红灯,黄灯,绿灯显示信号,高电平有效。 用于控制红绿黄灯的亮暗情况。 、45秒倒计时计数器模块

45秒倒计时计数器模块示意图

其中,CLK 为时钟信号,时钟上升沿有效。EN 为使能端,高电平有效。CR 为紧急制动信号低电平有效。QL{3..0}是计数低位。QH{3..0}是计数高位。

用于45秒的倒计时计数。

、7位译码器模块

7位译码器模块示意图

其中dat{3..0}为要译码的信号。a,b,c,d,e,f,g 为译码后的信号。

用于将45秒倒计时计数的信号译码成数码管可以识别的信号。

、50MHZ 分频器模块

50MHZ 分频器模块示意图

其中clk 为50MHZ 时钟信号,时钟上升沿有效。输出clk_out 为1HZ 时钟信号,时钟上升沿有效。

用于将50MHZ 的时钟信号转变成1HZ 的时钟信号。

(三)结构图设计

CLK EN CR QL[3..0] QH[3..0]

OC m45 inst2

(四)仿真电路

时序仿真图

从图中可看到首先进入st0状态,此时东西路绿灯亮,南北路红灯亮;计数器计数到40秒时,交通灯控制器进入st1状态,此时东西路黄灯亮,南北路红灯亮;在st1状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st2,此时东西路红灯亮,南北路绿灯亮;在st2状态计数器又开始计数,计数器计数到40秒后,交通灯控制器状进入st3状态,此时东西路红灯亮,南北路绿灯亮;在st3状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st0状态,此时东西路绿灯亮,南北路红灯亮,如些循环反复,完成十字交通路口的红绿灯控制。

A0-G0,A1-G1分别为45到0的译码。

(五)分配引脚

为了对此工程进行硬件测试,应将编译成功后的程序下载到目标芯片上,并指定输入输出信号的管脚,以便添加激励信号和测试输出信号。

在下载编译成功的文件之前,需要制定器件的管脚,选择Assignments|Pins命令,在随后出现的下拉列表框中选择对应端口信号名的器件引脚号,如下图:

四、设计总结和心得

通过此次EDA设计,我系统性的学习了课本上相关的知识,对课堂上的知识更加了解。通过认真研究课本,使我对EDA程序设计有了一定思路;通过实验课的学习,在程序的设计,程序的调试方面都学到了很多东西,在这几天时间里,实验室的氛围对我们的影响很大,大家一起努力,这也是我们能完成课设的动力。其中在编程中也出现了很多的问题,但通过老师和同学的帮助下,把问题一一解决。其实只要我们自己认真看书,仔细分析,仔细调试,就一定会发下错误,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习EDA更是如此,程序只有经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

五、源代码

控制器模块:

libraryieee;

'eventandclk='1';

ifhold='0'then

counter<=counter;

else

ifcounter<89then

counter<=counter+1;

else

counter<=(others=>'0');

endif;

endif;

endprocess;

process

waituntilclk'eventandclk='1'; current_state<=next_state; endprocess;

state_trans:process(current_state) begin

casecurrent_stateis

whens0=>

ifhold='0'then

next_state<=s4;

else

ifcounter<39then

next_state<=s0;

else

next_state<=s1;

endif;

endif;

whens1=>

ifhold='0'then

next_state<=s4;

else

ifcounter<44then

next_state<=s1;

else

next_state<=s2;

endif;

endif;

whens2=>

ifhold='0'then

next_state<=s4;

else

ifcounter<84then

next_state<=s2;

else

next_state<=s3;

endif;

endif;

whens3=>

ifhold='0'then

next_state<=s4;

else

ifcounter<89then

next_state<=s3;

else

next_state<=s0;

endif;

endif;

whens4=>

ifhold='0'then

next_state<=s4;

else

ifcounter<39then

next_state<=s0;

elsifcounter<44then

next_state<=s1;

elsifcounter<84then

next_state<=s2;

elsifcounter<89then

next_state<=s3;

endif;

endif;

endcase;

endprocess;

output:process(current_state) begin

casecurrent_stateis

whens0=>

ared<='0';

agreen<='1';

ayellow<='0';

bred<='1';

bgreen<='0';

byellow<='0';