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

上传人:h**** 文档编号:126629 上传时间:2018-07-09 格式:DOC 页数:42 大小:2.18MB
下载 相关 举报
基于FPGA实现的交通灯控制器说明书.doc_第1页
第1页 / 共42页
基于FPGA实现的交通灯控制器说明书.doc_第2页
第2页 / 共42页
基于FPGA实现的交通灯控制器说明书.doc_第3页
第3页 / 共42页
基于FPGA实现的交通灯控制器说明书.doc_第4页
第4页 / 共42页
基于FPGA实现的交通灯控制器说明书.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

1、 基于 FPGA 实现的 交通灯控制器 一、实验室名称 通信实验室 (实训楼二楼 ) 二 、实 训 内容 本实验 为 Verilog HDL 的程序设计仿真 , 通过实验掌握状态机,时序 CLK 的控制模块,及时序同步的控制方式。 实验题目:基于 FPGA 实现的交通灯控制器 实验要求: 1.LED 灯显示交通灯状态。 2.7 段数码管显示当前状态剩余时间。 状态要求: 1.主干道绿灯亮 35s 支道绿灯亮 25s。 2.当主干道绿灯亮时,支道亮红灯。 3.由绿灯转红灯时,黄灯亮 5s。 三 、实 训 步骤 3.1 设计思路和原理 本次 设计是针对十字路口,进行南北和东西直行情况下交通灯控制。

2、设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续 35S 后,主干道和支干道上的黄灯都亮启,持续 5S 后,主干道上红灯亮启,支干道上绿灯亮启持续 25S,之后主干道和支干道上的黄灯都亮启 5s,一个循环完成。循环往复的直行这个过程。其过程如下图所示: 绿 灯 亮黄 灯 亮 红 灯 亮0 s3 5 s3 0 s6 5 s0 s绿 灯 亮红 灯 亮 黄 灯 亮6 0 s2 5 s6 5 s主 干 道 方 向支 干 道 方 向3.2 实现方法 本次采用文本编辑法,即利用 Verilog HDL 语言描述

3、交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿 LED 模拟两个方向上的交通灯,用 两 个 7 段数码管显示主干道 上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。 3.3 整体设计 交通灯控制的关键是各个状态之间的转换和进行适当的时间延时 ,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示: 说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态 00时主干道绿灯及支干道红灯亮起,进入状态 01后两路 黄灯亮起,状态 11时主干道红灯及支干道绿灯亮起。进入 10状态两路黄灯亮起。结束一个循环,从 00状

4、态重新开始循环。 为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示: 倒 倒 倒 倒倒 倒 倒 倒倒 倒 倒倒 倒 倒 倒倒 倒 倒倒 倒 倒 倒倒 倒 倒倒 倒 倒 倒 倒 倒 倒倒 倒 倒 倒倒 倒 倒倒 倒 倒 倒 倒 倒倒 倒 倒 倒 倒 倒r s tc lkh o ld1 K H z1 H z1 H z图 3.交通灯控制系统结构图 其中 rst为复位信号, clk为时钟信号, hold为特殊情况控制信号 ,输入 hold时两个方向红灯无条件亮起。 3.4 具体设计 根据整体设计要求,编写各个功能部分 V

5、erilog 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 为十位 cl

6、k1m; /计数 1 秒 cnt; /产生 1 秒 3.4.1 画出状态图 3.4.2 写出状态表 3.4.3 写出程序 3.4.3.1 输入输出及中间变量设置如下: 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 State0: g1=1;g2=0;r1=0;r2=1;y1=0;y2=0; smg1=4b0101;smg2=4b0011 State3: g

7、1=0;g2=0;r1=1;r2=0;y1=0;y2=1; smg1=4b0101;smg2=4b0000 State2: g1=0;g2=1;r1=1;r2=0;y1=0;y2=0; smg1=4b0101;smg2=4b0010 State1: g1=0;g2=0;r1=0;r2=1;y1=0;y2=0; smg1=4b0101;smg2=4b0000 smg1=b0000 smg2=b0000 smg1=b0000 smg2=b0000 smg1=b0000 smg2=b0000 smg1=b0000 smg2=b0000 CLK module qiuge80fen(clk,g1,g2,

8、r1,r2,y1,y2,smg,led); input clk; output reg g1,g2,r1,r2,y1,y2; /g、 r、 y 依次为绿、红、黄灯, 1 为主干道, 2 为支道 output reg7:0 smg; /smg 控制数码管输出数值 output reg1:0 led; /led 控制使用的数码管 reg1:0state,next_state; /状态控制 reg3:0 ctrl; /ctrl 为控制数码管显示 smg1 或 smg2 的值 reg a; /a 用来判断在当前状态下,是进行数值初始化,还是计时 reg3:0 smg1,smg2; /smg1 为个位,

9、 smg2 为十位 reg clk1m; /计数 1 秒 reg8:0 cnt; /产生 1 秒 parameter state0=2b00,state1=2b01,state2=2b10,state3=2b11;/定义状态机 3.4.3.2 状态转换控制以及状态: always (posedge clk1m) /在每秒的在上升沿运行, begin state=next_state; /记录当前状态 case(state) /通过 case 来选择当前状态 state0:begin if(!a) begin /a=0 时进行状态初始化 smg1=4b0101; /5 smg2=4b0011;

10、/3 a=1; g1=1; g2=0; r1=0; r2=1; y1=0; y2=0; end else begin /a 不为 0 时进行倒计时 if(!smg1 a=0; /重设 a 值 end else if(smg1=b0000) begin /当个位为 0 是,将个位重设为 9,十位减 1 smg1=4b1001; smg2=smg2-1; end else /当十位为 0 个位不为 0 时,个位减 1 smg1=smg1-1; end end state1:begin /状态 1 与状态 0 运行大致相同 if(!a) begin smg1=4b0101; /5 smg2=4b00

11、00; /0 a=1; g1=0; g2=0; r1=0; r2=1; y1=1; y2=0; end else begin if(smg1=b0000) begin next_state=state2; a=0; end else smg1=smg1-1; end end state2:begin /状态 2 与状态 0 运行大致相同 if(!a) begin smg1=4b0101; /5 smg2=4b0010; /2 a=1; g1=0; g2=1; r1=1; r2=0; y1=0; y2=0; end else begin if(!smg1 a=0; end else if(smg

12、1=b0000) begin smg1=4b1001; smg2=smg2-1; end else smg1=smg1-1; end end state3:begin /状态 3 与状态 0 运行大致相同 if(!a) begin smg1=4b0101; /5 smg2=4b0000; /0 a=1; g1=0; g2=0; r1=1; r2=0; y1=0; y2=1; end else begin if(smg1=b0000) begin next_state=state0; a=0; end else smg1=smg1-1; end end endcase 3.4.3.3 计时信号

13、/*产生 1 秒 */ always (posedge clk) begin if (cnt=500) begin cnt=0; clk1m=clk1m; end else cnt=cnt+1; end 3.4.3.4 数码 管的译码及扫描显示 always (posedge clk) /每当时钟脉冲上升沿到来时运行 begin if(led=2b00) begin /判断 led 位选信号的状态 led=led+1; /led=00 时, led+1 ctrl=smg1; /当 led=0 时,点亮第一个数码管 end else begin led=0; /当 led=01 时, led 清

14、零 ctrl=smg2;end /当 led=01 时,点亮第二个数码管 end always(ctrl) /每当 ctrl 变化时进行 begin case(ctrl) /通过 case 语句来判断数码管显示的数值 b0000: smg=b00111111; /显示 0 b0001: smg=b00000110; /显示 1 b0010: smg=b01011011; /显示 2 b0011: smg=b01001111; /显示 3 b0100: smg=b01100110; /显示 4 b0101: smg=b01101101; /显示 5 b0110: smg=b01101101; /

15、显示 6 b0111: smg=b00000111; /显示 7 b1000: smg=b01111111; /显示 8 b1001: smg=b01101111; /显示 9 endcase 3.5 导入程序 打开 Quartus II 8.1, 点击 File, New Project Waizard:Introdution,点击 Next 创建新的工程 给命名为 qiuge80fen, 点击 next, 选择 cyclone III 芯片,类型为 FPGA, 芯片型号 EP3C40F78C08,点击File NewDesign FileVerilog HDl File 建立 Verilo

16、g HDl 编译环境 。 将之前程序导入工程中, 点击工具栏中的 Start Compilation 进行编译。 3.6 管脚分配 在前面选择好一个合适的目标器件(在这个实验中选择为 EP3C40F780C8),完成设计的分析综合过程,得到工程的数据文件以后,需要对设计中的输入、输出引脚指定到具体的器件管脚号码,指定管脚号码 称为管脚分配或管脚锁定。点击 Assignments 菜单下面的 Assignment Editor,进入到引脚分配窗口,首先将要分配管脚的信号放置在 To 下方。双击 To 下方的 New,选择 Node Finder 进入如图 1-18所示的 Node Finder

17、对话框界面。 Filter 窗口选择 Pins: all,在 Named 窗口中输入“ *”,点击 List在 Nodes Found 窗口出现所有信号的名称,点击中间的 按钮点击 OK,再按分配管脚如下图 完成后 点击工具栏中的 Start Compilation 进行编译。 3.7 波形仿真 点击 File, new,选择 Verification/Debugging File 中的 Vector Waveform 来建立一个波形仿真工程,右键点击 Name,选择 InsertInsert Node or Bus。点击 Node Finder 选择 Pins: all 再点击List 并全

18、部导入,点击 clk,在编辑栏点击 overwrite clock,在 Period 选择 1.0 ms 点击 OK。在状态栏点击 EditEnd Time,选择 80 s。再点击 Processingsimulator Tool,点击 Generate Functional Simulator Netlist 建立波形网,再点击 start 进行仿真,等仿真结束,点击 Report 查看生成波形仿真。 3.8 烧录程序到 开发箱 点击 Quartus II 8.1 中的 Tool 选择 programmer, 点击 Hardware setup 选择 USB-Blaster 传输方式,点击 start 将程序烧入 LTE-SOPC-02FB EDA 开发箱中。查看开发箱的工作 状态 。 四 、实 训 数据及结果分析 通过以上实验得出以下数据: 1.波形仿真结果: 2.开发箱运行结果: 状态 0: 状态 1: 状态 2: 状态 3: 五 、思考与总结 在设计中采用 V erilog HDL语言设计交通灯控制系统 , 借助其功能强大的语言结构 , 简明的代码描述复杂控制逻辑设计 , 与工艺无关特性 , 在提高工作效率的同时达到求解目的 , 并可以通过 V erilog HDL 语言的综 合工具进行相应硬件电路生成 , 具有传统逻辑设计方法所无法比拟的优越性。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。