交通灯设计(EDA课程设计)说课.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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)

阿里山的姑娘 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档