没有合适的资源?快使用搜索试试~ 我知道了~
首页EDA课程设计(交通灯)
EDA课程设计(交通灯)
5星 · 超过95%的资源 需积分: 9 14 下载量 156 浏览量
更新于2023-03-16
评论
收藏 1.98MB DOC 举报
EDA课程设计(交通灯),VHDL语言,有详细的工作原理和代码,仿真及实物图,答辩优秀,非常可靠。主干道和支干道构成的十字路口上有车辆交替运行,主干道每次直行通行时间为30s,左转通行时间为25s,支干道每次直行通行时间为20s,左转通行时间为15s。
资源详情
资源评论
资源推荐
目录
1.绪论..................................................................................................................................... 0
2.方案论证............................................................................................................................. 1
2.1 程序设计的任务要求............................................................................................... 1
2.2 方案选择................................................................................................................... 1
3.单元模块............................................................................................................................. 4
3.1 程序中使用的信号介绍:....................................................................................... 4
3.2 子模块功能介绍:................................................................................................... 4
4.整体电路........................................................................................................................... 10
5.仿真及实物图................................................................................................................... 11
5.2 实物图.................................................................................................................... 12
参考文献.............................................................................................................................. 14
附录...................................................................................................................................... 14
源程序.......................................................................................................................... 14
1.绪论
经过上学期的数电学习,我们已经对数字电路有了一些了解。数电课程设
计我们也亲手搭了一些数字电路,有一些实践的经验。我们感受到采用纯硬件
搭建功能模块常常比较难或者麻烦,尤其当系统很庞大时尤其确定设计的难度
很大。于是这学期我们开始学习一种新的设计方法。
虽然这个题目对于我来说比较简单,但是我并没有急着写完程序草草了事。
而是在完全实现题目要求的同时新加一些功能,并且更加关注人机界面等设计
要素,以使自己的设计不是仅仅完成功能,而是更加成熟,能使使用者体会到
人机界面的良好。
2.方案论证
2.1 程序设计的任务要求
2.1.1 初始条件:
设计一个交通灯控制器,有一条主干道和一条支干道汇合成十字路口,在
每个入口处设置红、黄、绿三色箭头信号灯,红灯亮禁止通行,绿灯亮允许通
行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
2.1.2 要求完成的主要任务:
2.1.2.1 主干道和支干道构成的十字路口上有车辆交替运行,主干道每次直行
通行时间为 30s,左转通行时间为 25s,支干道每次直行通行时间为
20s,左转通行时间为 15s。
2.1.2.2 每次绿灯变红灯时,黄灯先亮 5s,才能变换运行车道。上述时间设置
可修改。
2.2 方案选择
2.2.1 方案一
只使用一个计时器完成所有计时工作,通过计数到不同的数值时发出不同的
脉冲信号告诉系统相应的计时值已到。该方案的优势在于占用资源少,只用使
用一个计时器就可完成 5 种不同的计时。但不管是在哪一个状态都会调用该计
时器,一旦该计时器出错,整个系统都会受影响,不利于系统的维护和模块化
编程的思想。
1
2.2.2 方案二
使用 5 个计时器进行计时。在某个状态时,系统会调用相应的计时器开始计
时,并且只检测相应计时器的计时完成脉冲信号。该方案的缺点在于占用
FPGA 资源多,但由于 FPGA 上资源足够,这个缺陷不影响系统工作。但它的
优势是很明显的,它采用模块化编程设计,单个计时器的复杂度远远小于方案
一中的计时器,并且 5 个计时器完全类似,只要完成一个计时器的设计就能轻
易完成整个计时模块的设计。
因此,我选择方案二进行设计。
2.2.3 设计思路
整个程序设计可以分为 4 个部分,灯的显示部分、数码管的显示部分、计
时部分和按键对倒计数时间的调整部分。
灯的显示部分可用状态机实现。由于交通灯的显示状况是有限的几个状态,
于是可以用状态机让灯在固定的几个状态中顺次切换。对于这个题目,我将灯
的显示分了 8 个状态:
首先,所有交通灯有 12 个:主干道直行的红黄绿灯,主干道左转的红黄绿
灯,次干道直行的红黄绿灯,次干道左转的红黄绿灯。
主干道直行绿灯亮、主干道左转红灯亮、次干道直行和左转红灯亮;
主干道直行黄灯亮、主干道左转红灯亮、次干道直行和左转红灯亮;
主干道直行红灯亮、主干道左转绿灯亮、次干道直行和左转红灯亮;
主干道直行红灯亮、主干道左转黄灯亮、次干道直行和左转红灯亮;
主干道直行红灯亮、主干道左转红灯亮、次干道直行绿灯亮,次干道左转红灯
亮;
主干道直行红灯亮、主干道左转红灯亮、次干道直行黄灯亮,次干道左转红灯
亮;
主干道直行红灯亮、主干道左转红灯亮、次干道直行红灯亮,次干道左转绿灯
亮;
主干道直行红灯亮、主干道左转红灯亮、次干道直行绿灯亮,次干道左转黄灯
亮;
于是我定义了一个信号 STATE 用于存储状态机的状态:
TYPE STATE_TYPE IS(A,B,C,D,E,F,G,H);
SIGNAL STATE:STATE_TYPE:=A;--状态初始化为 A
数码管的显示部分。设置了 5 个计时器,分别是 30s 计时器、25s 计时器、
20s 计时器、15s 计时器和 5s 计时器。每个计时器都有一个使能 EN 信号,每
个状态下只允许一个 EN 有效,当检测的计时器的 EN 信号有效时,就会将它的
计数数值送到数码管显示。
我定义了一个常量数组:LED。代码如下:
2
constant
LED:data:=("11000000","11111001","10100100","10110000","1001
1001","10010010","10000010","11111000","10000000","10010000
");--储存 0~9 的数码管显示字符
将 2 位十进制数转化为 2 个 8 位二进制数显示的代码为:
hh:=current_30s/10;
ll:=current_30s rem 10;
LED2<=LED(hh);
LED1<=LED(ll);
计时部分使用 5 个计时器,每个计时器由使能信号 EN 控制启动。由计时完
成信号 SIN 告知系统计时完成。
5 个计时器结构类似,下面是计时器 30S 的程序代码:
SANs:process(time_1s,stop,pause,en_30s)
begin
if stop='1' then
current_30s<=set_30s;
elsif pause='1' then
elsif en_30s='0' then
current_30s<=set_30s;
sin_30s<='0';
elsif time_1s'event and time_1s='1' then
current_30s<=current_30s-1;
if sin_30s='1' then
sin_30s<='0';
end if;
if current_30s=0 then
sin_30s<='1';
current_30s<=set_30s;
end if;
end if;
end process SANs;
按键对倒计数时间的调整部分。设置了四个键用于计数时间的调整:stop
键用于从正常运行模式跳转到调整模式,change 键用于选择调整 5 个计数器
中哪一个的值,plus 和 minus 键用于加或减相应计数器的值。由于要用一个
change 键控制 5 个状态的转化,于是在这儿又用了一个状态机。
状态信号 set_LED 定义如下:
TYPE set_typeIS(A,B,C,D,E);
SIGNAL set_LED:set_type;
状态变换部分代码:
3
IF change='0' THEN
case SET_LED is
when A=>
set_LED<=B;
when B=>
set_LED<=C;
when C=>
set_LED<=D;
when D=>
set_LED<=E;
when E=>
set_LED<=A;
end case;
END IF;
3.单元模块
3.1 程序中使用的信号介绍:
signal time_1s,time_ms:std_logic;
signal sin_30s,sin_25s,sin_20s,sin_5s,sin_15s :std_logic;--定义
30s,25s,15s,5s 计时模块的信号线,计满相应秒数后输出,高有效
signal en_30s,en_25s,en_20s,en_5s,en_15s :std_logic;--定义
30s,25s,15s,5s 计时模块的使能端,高有效
signal set_30s,set_25s,set_20s,set_5s,set_15s :integer range 0
to 100;--设定计时初始值
signal
current_30s,current_25s,current_20s,current_5s,current_15s:
integer range 0 to 99;
3.2 子模块功能介绍:
3.2.1 分频器
将学习板上 50MHZ 的晶振信号分频为 1HZ 和 0.2HZ,tex 为测试信号,
频率为 1HZ 用于观测分频器是否工作正常。如下图所示:
4
剩余33页未读,继续阅读
renzhenxuexi121
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1