- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EDA课程设计报告
题 目:基于FPGA的十字路口交通灯控制器
专 业:电子信息工程
班 级:一班
姓 名:
学 号:
报告日期:2014/1/5
目录
EDA课程设计报告 1
目录 2
系统设计要求 2
1.系统设计方案 3
系统设计思路 3
系统设计方案分析 4
2.交通控制灯各模块电路设计 5
2.1 控制模块 controller 5
2.2 时钟分频模块frequency10Hz和frequency 9
2.3 分位电路模块fenwei 12
2.4 带闪烁功能的七段数码驱动显示模块display 13
3.交通控制灯顶层电路设计 15
3.1 原理说明 15
3.2 端口设计说明 16
3.3 Quartus ii 仿真与结果分析 17
4.仿真结果分析 19
5.心得体会 19
系统设计要求
在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一个方向是(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间。其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯,倒计时停止,且显示数字在闪烁。当特殊运行状态结束时,控制器恢复原来状态,继续正常运行。
1.系统设计方案
系统设计思路
本系统设计中均采用混合设计的方法,将整体方案划分成若干个模块进行设计。采用VHDL硬件描述语言和原理图描述相结合的方式,对多种应用电路进行设计,其中底层电路(即模块电路)采用VHDL硬件描述语言方式实现,顶层电路采用原理图描述方式实现。
系统设计流程
图1 系统设计流程
系统设计方案分析
根据任务要求,计数器的值和交通灯亮灭关系如图1所示。
显然,此任务设计的核心是一个技术范围为0~50s的计数器和一个根据计数值作出规定反应的控制器。假设现有晶振为20MHz,因此还需要分频电路来得到10Hz和1Hz的时钟,最后要驱动七段数码管,还需要一个译码电路。
图2 计数值和交通灯亮灭关系
根据上面的分析,交通控制灯系统框图如图3所示;
图3 交通控制等系统框图
2.交通控制灯各模块电路设计
2.1 控制模块 controller
(1)控制模块的作用是根据计数器的数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。计数范围为0~50。计数到50后,下一个时钟沿回复到0,开始下一计数。此外当检测到特殊情况(hold=”1”)发生时,计数器暂停计数,无条件点亮红色的发光二极管。而系统复位信号reset则使计数器异步清零。控制模块controller外部端口如图4所示。
图4控制模块controller外部端口
(2)控制模块的VHDL程序
程序说明:控制模块描述了功能键hold和reset的功能;同时对频率为1Hz的时钟进行计数,通过计数值,对各个时间段内交通灯信号进行描述;此外,模块还给出了下一步用于倒计时的信号numa[4..0]和numb[4..0]。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity controller is
port(clock:in std_logic;
reset:in std_logic;
hold:in std_logic;
flash:out std_logic;
numa,numb:out integer range 0 to 25;
reda,greena,yellowa:out std_logic;
redb,greenb,yellowb:out std_logic );
end;
architecture control of controller is
signal countnum:integer range 0 to 50;
begin
process(clock)
begin
if reset=1 then
countnum=0;
elsif rising_edge(clock) then
if hold=1 then
flash=1;
else
flash=0;
if countnum=47 then
countnum=0;
else
countnum=countnum+1;
end if;
en
文档评论(0)