1、基于FPGA的智能交通灯控制器数字逻辑课程设计报告题目:基于FPGA的智能交通灯控制器课程名称: 数字逻辑课程设计专业班级: 学 号: 姓 名: 报告日期: 计算机科学与技术学院1.实验目的通过 Verilog 的编程,深入了解并掌握可编程芯片的使用技术,完成规定的设计 任务,加强对数字逻辑 课程所学知识的理解, 培养学生创造性思维能力和独 立解决实际问题的能力。2.实验内容用 Verilog 代码 实现智能交通灯信号控制器设计,具体内容及要求如下:( 1) 在主干道与次干道公路十字交叉路口, 为确保人员、 车辆安全、 迅速地通 过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。红灯禁止通
2、行;绿 灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。(2) 主干道和次干道公路十字交叉路口都安装了车辆检测传感器( C),要求如 下:(A) 在每日的早、晚高峰时段,双边 “ CN”主干道通行时间是次干道 通行时间的 2 倍;(B) 全天主、次干道有车一方有优先通行权;(3) 主干道公路路口安装有人员通过请求按钮( PQ), 旦有请求信息,控制 器应给与放行。(4) Online控制信号由交通控制中心发出,(Online=1) 一旦它有效,则主干道 放行,十字交叉路口控制器 “失效 ”, Online=0 十字交叉路口控制器恢复控制权。(6)在每次由绿灯亮变成红灯亮的转换过程中间
3、, 要亮5s时间的黄灯作为过渡。( 7)用“开关 ”代替传感器 作为人员通过请求和车辆是否到来的信号。 用红、绿、 黄三种颜色的发光二极管作交通灯。( 8)要求显示时间,倒计时。3.实验环境PC个人计算机、ISE14.2软件、Adept软件、开发板Basys2、USB下载线4.实验设计方案4.1输入输出与引脚分配说明4.1.1输入信号:PQ,人员请求信号一一接板子“ E2”开关ONLINE,控制中心接管信号接“ N3”SET,控制器开关一一接“ P11”RST,复位开关一一接“ L3”RUSH,高峰判断开关接“ F3”CM,主道车辆传感器一一接“ G3”CC,支道车辆传感器一一接“ B4”CL
4、K,系统时钟一一接“ B8”4.1.2输出信号:2:0 ML, ML02 主道绿、黄、红灯分别接“ G1、P4、N4”2:0 CL , CL01 支道绿、黄、红灯一一分别接“ P7、M11、M5”6:0 a_to_g,七段数码管接口 a_to_g06分别接 “M12、L13、P12、N11、N14、H12、L14 ”3:0 an,四选一控制接口 an04分别接“ F12、J12、M13、K144.2模块图4.2.1模块层级图顶层模块422模块1 时钟生成模块423模块2.控制模块【1】输入信号in put wire clkls,近似1s的时钟信号in put wire PQ,人员请求信号in
5、put wire ONLINE,控制中心请求信号in put wire SET,控制器开关信号in put wire RST,复位信号in put wire RUSH,高峰信号in put wire CM,主道车辆检测信号in put wire CC,支道车辆检测信号【2】输出信号output reg 2:0 ML,主道信号灯接口output reg 2:0 CL,支道信号灯接口output 7:0 ACOUNT,存放主道两个时间数字的 8421码output 7:0 BCOUNT,存放支道两个时间数字的 8421码(ACOUNT、BCOUNT整合到顶层文件 b15:0中,方便调用七段显示模块
6、)3】 模块内部流程图424模块3.七段显示模块【1】显示原理使用同步扫描电路,对4位数码管的控制端口进行扫描,每一个时刻只有一 个数码管亮,只要设置足够快的频率扫描,由于眼睛的视觉停留效应,就会使得 显示结果达到4位同时亮的效果。【2】输入信号in put wire 15:0 x,存放了主、支道时间数字的 4*4位8421码in put wire RST,复位信号in put wire CLK,扫描时钟信号(传入的是 clk_scar)【3】输出信号output reg6:0 a_to_g,接七段数码管引脚output reg3:0 a n, 接选择显示引脚【4】流程图5.实验步骤与观察记录
7、找到相关资料, 确认大致结构为自顶向下式设计, 开始编写 verilog 代码。语 法错误检查无错误之后进行引脚分配, 然后下载到板子上进行测试。 开始结果不 符合预期,就回到 verilog 代码进行修改调试,再重复上面步骤,直到实现某个 模块功能。然后逐步增加功能,调试、修改、测试,渐渐趋于完整。6.实验过程分析、处理和讨论6.1 时钟的生成由于系统时钟周期过短,不利于实际红绿灯的控制,所以必须生成另外的时 钟。采用系统时钟驱动某个寄存器变量自增,然后取该变量某一位的变化作为 新的时钟。而新的时钟又分为“红绿灯控制时钟(clkl)”和“扫描时钟(clk_scan, 用于七段数码管显示) ”
8、。6.2 绿黄红灯循环亮和 RUSH (高峰)的实现方法经借鉴,采用的方法是: 先把主道和支道的红、黄、绿灯亮的“秒数”分别存在 6 个寄存器变量中, 以方便后面的调用,即预置秒数。加上判断 RUSH 请求信号分别预置秒数。按 钮红、黄、绿灯点亮与否各用1个bit位控制。循环亮的方法就是用一个 case语 句和有关判断来实现。6.3控制器开关按钮(SET)、复位按钮(RST)的设定用一个变量en的值对应以上两开关打开与否,然后用 case语句处理不同按 钮工作的情况。6.4人员请求(PQ)、控制中心请求(ONLINE )、主(支)道优先通行的简 单实现思路这些功能的实现开始也是用变量 en 的
9、值控制,这样的话一旦出现 PQ 或 ONLINE 请求灯会突变,不符合实际要求。所以改放在“主干道(支道)控制系 统”这一 always过程中,用if语句进行判断。7.实验方案的改进意见在 PQ 请求和 ONLINE 请求的理解上,开始出现了偏差,所以在后面修改起 来有点不顺,思路显得略微混乱。而且最后发现有个bug,就是当PQ和ONLINE 同时按下又复位后不会按正常情况倒计时。 方案自顶向下的设计使得模块之间的 功能清晰明了, 但是第二个主模块中还容纳了各种请求判断, 它们中的有些放到 另外模块中也许更好。8.心得体会最主要的是对 verilog 语言的理解的深入。 为了做实验不得不查阅有关的教 程。在这个过程中,起码知道了什么是“阻塞赋值”个“非阻塞赋值”和它们的 区别,以及case语句的运用,能使功能很方便地实现,代码也易读。verilog语言是硬件设计语言,所以不像 C语言,对算法精妙性探索要求更 高。 Verilog 语言设计中,更主要的是逻辑上的合理性和连贯性,以及变量和硬 件之间的联系,有时候小小地修改一个变量的属性可能就让 warning全部消失了。 不知道如此表达是否合适,这是我的理解。交通灯贴近生活,特别是在这个学车潮席卷的时代,所以设计交通灯控制 系统感到很亲切。估计以后看到马路上的交通灯就会心潮澎湃。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1