- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
eda课程设计交通灯带左拐
目 录
1 设计任务和要求 2
1.1 设计任务 2
1.2 交通灯控制器的基本要求 2
2 工作原理及方案设计 3
2.1 交通灯控制器的设计原理 3
2.2交通灯控制器的基本方案 3
3 系统设计 4
3.1 计数器的设计 4
3.2 控制器的设计 4
3.3 分位器的设计 5
3.4 交通灯控制器的顶层原理 5
4 参考程序 6
4.1 计数器的程序 6
4.2 控制器的程序 7
4.3 分位电路程序 11
4.4. 七段译码电路的程序 12
5系统调试与性能分析 13
5.1 交通灯计数器波形图 13
5.2控制器的波形图 13
5.3 分位的波形图 14
5.4 七段译码电路的波形图 14
1 设计任务和要求
1.1 设计任务
用FPGA实现一个智能交通灯系统,根据设计要求分析智能交通灯系统的基本原理,设计系统框图,设计完成后给出FPGA占用资源分析。
1.2 交通灯控制器的基本要求
(1)道路足够宽,有双向六通道。车辆直行不允许车辆左拐,允许右拐。须另设左拐时间。针对上述通行规则,车辆控制灯有直行(↑)、左拐(←)和右拐(→)三个绿色指示灯、黄灯以及一个红色指示灯。红色指示灯亮,代表禁止车辆通行、一个方向灯亮的顺序为绿灯、黄灯、左拐灯、红灯,前三种灯亮时间等于另一侧的红灯亮时间。
(2)车辆正常通行时间为40秒,黄灯为5秒,左拐为10秒,由各方向设置的倒计时显示器显示时间,向司机提剩余时间。当一个方向车流量加大时,自动调节。
(3)行人过马路需提出申请,且只在车辆直行时才能响应行人的请求,行人在申请得到响应后方可穿越,穿越时间为60秒。
(4)交通警察有权随时指定系统停在某个状态,确保某个方向的车辆流通。
2 工作原理及方案设计
2.1 交通灯控制器的设计原理
交通灯控制器的核心范围是一个计数范围为0~59共(60秒)的计数器和一个根据计数值做出规定反映的控制器。另外,还需要输入CLK时钟信号。最后,要驱动七段数码管,显然还需要一个译码电路。
图2.1交通灯控制器原理图
2.2 交通灯控制器的基本方案
交通灯控制器的核心范围是一个计数范围为0~59共(60秒)的计数器和一个根据计数值做出规定反映的控制器。另外,作者所用的实验仪配备的晶振为50MHZ,因此还需要一个分频电路。最后,要驱动七段数码管,显然还需要一个译码电路。
图2.2 交通灯控制器系统框图
3 系统设计
3.1 计数器的设计
这里需要的计数器的计数范围为0~59。计到59后,下一个时钟沿恢复到0,开始下一轮计数。此外,当检测到特殊情况(hold=1)发生时,计数器暂停计数,而系统恢复信号则使计数器异步清0。
3.2 控制器的设计
控制器的作用是根据计数器控制发光二极管的亮、灭,以及输出倒计时数值给七段数译管的分位译码电路。此外,当检测到特殊情况时,无条件点亮红色的发光二极管。
由于控制器要对于数值进行判断,很容易想到用IF语句来实现。本设计采用利用时钟沿的下降沿读取前级计数器的计数植,然后做出反应。
图3.2控制器符号框图
3.3 分位器的设计
因为控制器输出的倒计时数值可能是1位或2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数。(如25分为2和?5,7分为0和7)
与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。控制器中,引入了寄存器。为了让读者开拓眼界,分位电路就用组合逻辑电路实现。
3.4 交通灯控制器的顶层原理
交通灯控制器的核心范围是一个计数范围为0~59共(60秒)的计数器和一个根据计数值做出规定反映的控制器。另外,还需要输入CLK时钟信号。最后,要驱动七段数码管,显然还需要一个译码电路来完成交通灯控制器的设计。
图3.4交通灯控制器的顶层原理图
4 参考程序
4.1 计数器的程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt120 is
port(clk,rst,hold :in std_logic;
cq :out std_logic_vector(6 downto 0));
end cnt120;
architecture behav of cnt120 is
begin
process(clk,rst,hold)
variable cqi:std_logic_vector(6 downto 0);
begin
if rst=1 then cqi:=(ot
文档评论(0)