1、基于VerilogHDL的交通灯控制器设计报告交通灯控制器设计第一章设计原理1.1设计要求设计一个交通控制器,用LED显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s,支干道每次放行25s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s。能进展特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LED灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开场计数,对应状态的显示灯亮。能实现特殊状态的功能显示,1.2设计思路和原理本次设计是针对十字路口,进展南北和东西直行情况下交通灯控制
2、。设定东西方向为主干道方向,根据交通灯的亮的规那么,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。循环往复的直行这个过程。其过程如下列图所示:图1.交通灯点亮时间控制说明1.3实现方法本次采用文本编辑法,即利用Verilog HDL语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩
3、余时间,控制时钟由试验箱上频率信号提供。第二章 Verilog HDL程序设计2.1整体设计根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进展适当的时间延时,根据状态机的设计规X,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:图2.交通灯控制状态转化说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。完毕一个循环,从00状态重新开场循环。为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码
4、管显示扫描程序,其系统构造图如下所示:图3.交通灯控制系统构造图其中rst为复位信号,clk为时钟信号,hold为特殊情况控制信号,输入hold时两个方向红灯无条件亮起。2.2 具体设计根据整体设计要求,编写各个功能局部Verilog HDL程序,设置各输入输出变量说明如下clk:为计数时钟;qclk:为扫描显示时钟;en:使能信号,为1 的话,那么控制器开场工作;rst:复位信号,为1的话,控制及技术回到初始状态;hoid:特殊情况控制信号,为1的话,那么两个方向无条件显示为红灯;light1:控制主干道方向四盏灯的亮灭;其中,light10light2,分别控制主干道方向的绿灯、黄灯和红灯
5、;light2:控制支干道方向四盏灯的亮灭;其中,light20 light22,分别控制支干道方向的绿灯、黄灯和红灯;num1:用于主干道方向灯的时间显示,8 位,可驱动两个数码管;num2:用于支干道方向灯的时间显示,8 位,可驱动两个数码管;counter:用于数码管的译码输出;st1,st2:数码管扫描信号。输入输出及中间变量设置如下:module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st
6、2;output7:0 num1,num2;output6:0counter;output2:0 light1,light2;reg tim1,tim2,st1,st2;reg1:0state1,state2,ste;reg2:0light1,light2;reg3:0num;reg6:0counter;reg7:0 num1,num2;reg7:0 red1,red2,green1,green2,yellow1,yellow2;1.二极管点亮控制该局部程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。此外,当检测到特殊情况hold=1发生时,无条
7、件点亮红灯的二极管,当检测到复位信号,两个方向计数与控制回复到00状态。因为主、支干道两个方向二极管点亮的顺序与延迟时间不同,顾编写两个独立的局部来控制,具体程序如下:1主干道方向always (posedge clk )begin if(rst) /复位与特殊情况控制 begin light1=3b001; num1=green1; end else if(hold) begin light1=3b100; num1=green1; end else if(en) begin /使能有效开场控制计数 if(!tim1) / begin /主干道交通灯点亮控制 tim1=1; case(sta
8、te1) 2b00:begin num1=green1;light1=3b001;state1=2b01;end 2b01:begin num1=yellow1;light1=3b010;state1=2b11;end 2b11:begin num1=red1;light1=3b100;state1=2b10;end 2b10:begin num1=yellow1;light1=3b010;state1=2b00;end default:light1=3b100; endcase end2支干道方向always (posedge clk )begin if(rst) /复位与特殊情况控制 be
9、gin light2=3b100; num2=red2; end else if(hold) begin light2=3b100; num2=red2; end else if(en) begin if(!tim2) begin tim2=1; case(state1) 2b00:begin num2=red2;light2=3b100;state2=2b01;end 2b01:begin num2=yellow1;light2=3b010;state2=2b11;end 2b11:begin num2=green2;light2=3b001;state2=2b10;end 2b10:beg
10、in num2=yellow2;light2=3b010;state2=2b00;end default:light20) if(num13:0=0) beginnum13:0=4b1001; num17:4=num17:4-1; end else num13:0=num13:0-1; if(num1=1) tim1=0; end end else begin light1=3b010; num1=2b00; tim1=0; end end3.数码管的译码及扫描显示该段程序主要完成4个7段数码管的译码显示及扫描,使系统能正常显示主、支干道两个方向上的剩余时间。译码的时钟频率要低,为Hz级。扫描
11、的时钟频率要高,最低不得小于人眼分辨频率50Hz,具体程序如下所示:always (posedge qclk)begin /数码管扫描 if(rst1) begin st1=0; st2=0; end else begin case(st2,st1) 2b00:begin num=num13:0;st2,st1=2b01; end 2b01:begin num=num17:4;st2,st1=2b10; end 2b10:begin num=num23:0;st2,st1=2b11; end 2b11:begin num=num27:4;st2,st1=2b00; end endcase en
12、dendalways (posedge qclk)begin /数码管译码显示case(num)4b0000: counter=7b0111111; /04b0001: counter=7b0000110; /14b0010: counter=7b1011011; /24b0011: counter=7b1001111; /34b0100: counter=7b1100110; /44b0101: counter=7b1101101; /54b0110: counter=7b1111101; /64b0111: counter=7b0000111; /74b1000: counter=7b11
13、11111; /84b1001: counter=7b1101111; /9default: counter=7b0111111; /0endcaseendendmodule总体程序见程序清单所示第三章仿真与硬件调试3.1 波形仿真在Quarturs软件下创立工程,新建编辑设计文件,将程序输入,整体编译后,新建波形仿真文件。设置仿真时间,时钟周期,输入输出端口,进展波形仿真。具体仿真波形图及说明如下所示:仿真截止时间:100us;时钟:clk 1us,qclk 0.1us1. 正常工作时波形仿真图图4. 正常工作时波形仿真图图形说明波形仿真主要完成了控制与计数以及数码管显示的波形图。en为低电
14、品时,计数器置初值,高电平时开场正常控制与计数。控制发光二极管首次输出为“light1=001,light2=100,表示主干道路绿灯亮,支杆道路红灯亮,计数器num1和num2从“00110101开场递减计数,计数至“00000000时,进入下一个状态,控制输出量为light=010,light2=010,表示主、支干道黄灯均亮起,计数器num1和num2从“00000101开场计数递减,计数至00000000时进入下一个状态,light=100,light2=001,表示主干道路红灯亮,支杆道路绿灯亮。Counter根据num1,num2变化随时钟上升沿输出译码后的数据。由于屏幕显示大小有
15、限,未仿真出一个完整周期。2. 特殊情况仿真波形图5. 特殊情况仿真波形图形说明当hold输入高电平时,在时钟上升沿的控制下,light 1与light2被强制置位为100,表示两路红灯均亮起3. 复位情况仿真波形图6. 复位情况仿真波形图形说明当rst输入高电平时,在时钟上升沿控制下,计数与控制都回到00状态,即light1=001,light2=100,计数器num1和num2从“00110101开场递减计数。3.2 硬件调试完成时序仿真确认无误后,进展实验箱管脚设置,注意设置完成后一定要再进展一次全局仿真,使程序真正对应于硬件输出输出。具体连接说明如下所示输入变量:rst、clk、qcl
16、k、hold、en其中en,hold,rst接0-1拨码开关,以稳定的输出可变化的电平。计数时钟clk接实验箱上1Hz时钟,扫描显示时钟qclk接125Khz时钟。输出变量:light12:0、light22:0、counter6:0、st1、st2其中light10 、light20分别接绿色的发光二极管;light11、light21 分别接黄色的发光二极管;light12、light22分别接红色的发光二极管。counter0counter6,分别接七段数码管的af,st1、st2分别接试验箱上4-16译码器的低两位。完成接线后将程序烧写到芯片上,开场功能调试。分辨改变使能信号,复位信号
17、以及特殊情况信号,观察数码管以及发光二级管情况,实物照片如下所示:图7. 硬件实物图第四章设计总结在设计中采用V erilog HDL语言设计交通灯控制系统, 借助其功能强大的语言构造, 简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率的同时到达求解目的, 并可以通过V erilog HDL 语言的综合工具进展相应硬件电路生成, 具有传统逻辑设计方法所无法比较的优越性。在设计过程中,觉得最难的局部是波形仿真局部,虽然程序编译通过但仿真出不了正确的波形,不是计数器无法正常计数,就是控制输出无法进入到下一个状态,每次出现问题就必须返回重新修改程序。实践证明,在编写一个较复杂的程序
18、时,一开场一定要画流程图,弄清楚各个功能及实现它们的逻辑算法,做到心中有数后在开场下笔写编写程序。在编写的时候要尤其要注意语言的规X,如本次设计中编写的V erilog在Quartus7.0中可以正常生成时序图,而在低版本的软件中却无法生成,原因就是语言使用不规X,在解决这个问题时我总结了一些经历,首先程序要逻辑清晰,简洁明了,防止不必要的嵌套与条用,其次要适当地给程序加上注解文字,提高可读性,以方便之后的程序出错时进展查找,最后充分利用仿真软件提供的各项编译工具与报错消息,按图索骥,有方向的完成程序调试。完成仿真后进展,进展试验箱上的硬件调试,该步骤主要是要求细心,按照引脚清单,逐一完成连线
19、,本次设计用到两个时钟输入,注意一定要选择适宜频率的时钟,以便到达期望的效果。注意观察实物的现象,看是否满足设计要求,不满足时检查是硬件问题还是程序问题,如果是程序问题,在修改完之后必须要重新编译,重新烧入。不断排查错误,直至到达满意的效果。通过这次课程设计,熟悉了简单EDA设计的整个流程,加深了对Verilog HDL硬件描述语言的理解,提高了动手能力,并且锻炼了自己的耐心,收获颇丰,我会把在本次课程设计中学到的东西应用到今后的工作学习中。最后感谢同学及教师提供的帮助与指导。程序清单module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,ligh
20、t1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output7:0 num1,num2;output6:0counter;output2:0 light1,light2;reg tim1,tim2,st1,st2;reg1:0state1,state2,ste;reg2:0light1,light2;reg3:0num;reg6:0counter;reg7:0 num1,num2;reg7:0 red1,red2,green1,green2,yellow1,yellow2;always (en
21、)if(!en)begin /设置计数初值green1=8b00110101;red1=8b00100101;yellow1=8b00000101;green2=8b00100101;red2=8b00110101;yellow2=8b00000101;endalways (posedge clk )begin if(rst) /复位与特殊情况控制 begin light1=3b001; num1=green1; end else if(hold) begin light1=3b100; num1=green1; end else if(en) begin /使能有效开场控制计数 if(!ti
22、m1) /开场控制 begin /主干道交通灯点亮控制 tim1=1; case(state1) 2b00:begin num1=green1;light1=3b001;state1=2b01;end 2b01:begin num1=yellow1;light1=3b010;state1=2b11;end 2b11:begin num1=red1;light1=3b100;state1=2b10;end 2b10:begin num1=yellow1;light1=3b010;state1=2b00;end default:light10) if(num13:0=0) begin num13:
23、0=4b1001; num17:4=num17:4-1; end else num13:0=num13:0-1; if(num1=1) tim1=0; end end else begin light1=3b010; num1=2b00; tim1=0; end endalways (posedge clk )begin if(rst) /复位与特殊情况控制 begin light2=3b100; num2=red2; end else if(hold) begin light2=3b100; num2=red2; end else if(en) begin if(!tim2) begin t
24、im2=1; case(state1) 2b00:begin num2=red2;light2=3b100;state2=2b01;end 2b01:begin num2=yellow1;light2=3b010;state2=2b11;end 2b11:begin num2=green2;light2=3b001;state2=2b10;end 2b10:begin num2=yellow2;light2=3b010;state2=2b00;end default:light20) if(num23:0=0) begin num23:0=4b1001; num27:4=num27:4-1;
25、end else num23:0=num23:0-1; if(num2=1) tim2=0; end end else begin tim2=0; state2=2b00; light2=3b010; end end always (posedge qclk)begin /数码管扫描 if(rst1) begin st1=0; st2=0; end else begin case(st2,st1) 2b00:begin num=num13:0;st2,st1=2b01; end 2b01:begin num=num17:4;st2,st1=2b10; end 2b10:begin num=nu
26、m23:0;st2,st1=2b11; end 2b11:begin num=num27:4;st2,st1=2b00; end endcase endendalways (posedge qclk)begin /数码管译码显示case(num)4b0000: counter=7b0111111; /04b0001: counter=7b0000110; /14b0010: counter=7b1011011; /24b0011: counter=7b1001111; /34b0100: counter=7b1100110; /44b0101: counter=7b1101101; /54b0
27、110: counter=7b1111101; /64b0111: counter=7b0000111; /74b1000: counter=7b1111111; /84b1001: counter=7b1101111; /9default: counter=7b0111111; /0endcaseendendmodule参考资料1 夏宇闻. 复杂数字电路与系统的V erilog HDL设计技术 M .: 航空航天大学, 19982 郭梯云. 移动通信M . XX: XX电子科技大学, 19953 法M ichelMouly, M arie Bernadet te Pautet1GSM 数字移
28、动通信系统M . 骆健霞, 顾龙信, 徐云霄译. : 电子工业, 19964 X毅刚, 乔立岩. 虚拟仪器软件开发环境L abW indow sCV I 610 编程指南M . : 机械工业, 20025 X国权.GSM 手机的测试J .中国无线电管理, 20036 俞定玖, X湘慧. GSM 数字蜂窝移动交换系统测试J . 电信科学, 20007 X明. V erilog HDL 实用教程M . XX: 电子科技大学, 19998 Hyde D C. Bucknell Handbook on V erilog HDL 1puter Science Department, Bucknell U niversity L ew is burg, 19959 康华光. 电子技术根底(数字局部)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1