基于FPGA实现的交通灯控制器.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于FPGA实现的交通灯控制器

基于FPGA实现的交通灯控制器 一、实验室名称 通信实验室(实训楼二楼) 二、实训内容 本实验为Verilog HDL的程序设计仿真,通过实验掌握状态机,时序CLK的控制模块,及时序同步的控制方式。 实验题目:基于FPGA实现的交通灯控制器 实验要求:1.LED灯显示交通灯状态。 2.7段数码管显示当前状态剩余时间。 状态要求:1.主干道绿灯亮35s支道绿灯亮25s。 2.当主干道绿灯亮时,支道亮红灯。 3.由绿灯转红灯时,黄灯亮5s。 三、实训步骤 3.1设计思路和原理 本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。循环往复的直行这个过程。其过程如下图所示: 3.2实现方法 本次采用文本编辑法,即利用Verilog HDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED模拟两个方向上的交通灯,用两个7段数码管显示主干道上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。 3.3整体设计 交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示: 说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束一个循环,从00状态重新开始循环。 为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示: 图3.交通灯控制系统结构图 其中rst为复位信号,clk为时钟信号,hold为特殊情况控制信号,输入hold时两个方向红灯无条件亮起。 3.4具体设计 根据整体设计要求,编写各个功能部分Verilog HDL程序,设置各输入输出变量说明如下 clk //实验箱 1K Hz的时钟计时 g1,g2,r1,r2,y1,y2; //g、r、y依次为绿green红red黄灯yellow,1为主干道,2为支道 smg; //定义一个smg,用于控制数码管输出数值 led; //led控制使用的数码管 state,next_state; //状态控制 ctrl; //定义一个ctrl,用于控制数码管显示smg1或smg2的值 a; //定义一个a,用于判断在当前状态下,是进行数值初始化,还是计时 smg1,smg2; //smg1为个位,smg2为十位 clk1m; //计数1秒 cnt; //产生1秒 3.4.1画出状态图 3.4.2写出状态表 g1 g2 r1 r2 y1 y2 smg1 smg2 State0 1 0 0 1 0 0 0101 0011 State1 0 0 0 1 1 0 0101 0000 State2 0 1 1 0 0 0 0101 0010 State3 0 0 1 0 0 1 0101 0000 3.4.3写出程序 3.4.3.1输入输出及中间变量设置如下: module qiuge80fen(clk,g1,g2,r1,r2,y1,y2,smg,led); input clk; output reg g1,g2,r1,r2,y1,y2; //g、r、y依次为绿、红、黄灯,1为主干道,2为支道 output reg[7:0] smg; //smg控制数码管输出数值 output reg[1:0] led; //led控制使用的数码管 reg[1:0]state,next_state; //状态控制 reg[3:0] ctrl; //ctrl为控制数码管显示smg1或smg2的值 reg a; //a用来判断在当前状态下,是进行数值初始化,还是计时 reg[3:0] smg1,smg2; //smg1为个位,smg2为十位 reg clk1m; //计数1秒 reg[8:0] cnt; //产生1秒 parameter state0=2b00,state1=2b01,state2=2b10,state3=2b11;//定义状态机 3.4.3.2

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档