第一篇:数字系统课程设计交通灯控制器
东南大学
《数字系统课程设计》
设计报告
项目名称: 交通灯控制器
姓
名:
学
号:
专
业:
实 验 室: 电工电子实验中心
组
别:
无
同组人员:
无
设计时间: 2016 年月 26 日
——
2016 年 9 月 20日 评定成绩:
审阅教师:
目录
一.设计方案及论证……………………………………………… 3 二.模块设计……………………………………………………… 5 三.总体设计与仿真……………………………………………… 10 四.总结…………………………………………………………… 12 一.设计方案及论证
1.设计使用环境
本交通灯控制系统设计利用Verilog HDL语言进行设计编程,利用Cyclone EP1C6Q240C8芯片和一些外围器件组成硬件电路,利用Quartus II软件将编写好的程序进行编译和仿真,并将调试完成的程序下载到Cyclone EP1C6Q240C8芯片上,通过观测电路板上的红绿信号灯以及数码管显示来分析系统的性能。
2.设计任务分析
主干道与乡村公路十字交叉路口在现代化的农村星罗棋布,为确保车辆安全、迅速地通过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。红灯禁止通行;绿灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。主干道和乡村公路都安装了传感器,检测车辆通行情况,用于主干道的优先权控制。
设计要求:
1)当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。2)当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。主干道最短通车时间为25s。
3)当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。4)不论主干道情况如何,乡村公路通车最长时间为16s。
5)在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。6)用开关代替传感器作为检测车辆是否到来的信号。用红、绿、黄三种颜色的发光二极管作交通灯。7)数码管倒计时显示
3.测量控制原理
1)通过乒乓开关来控制FPGA输入信号的电平,从而控制交通灯工作。
2)利用FPGA输出的电平信号去驱动静态数码管及三色小灯来模拟交通灯。
4.顶层设计方案框图及说明
1)交通灯控制器框图
C表示乡村道路是否有车到来,1表示有,0表示无;SET用来控制系统的开始及停止;RST是复位信号,高电平有效,当RST为1时,恢复到初始设置;CLK是外加时钟信号;MR、MY、MG分别表示主干道的红灯、黄灯和绿灯;CR、CY、CG分别表示乡村道路的红灯、黄灯和绿灯,1表示亮,0表示灭。
2)流程图
MGCR表示主干道绿灯,乡村道路红灯;MYCR表示主干道黄灯,乡村道路红灯;MRCG表示主干道红灯,乡村道路绿灯;MRCY表示主干道红灯,乡村道路黄灯;T0=1表示主干道最短通车时间到,T1=1表示5秒黄灯时间到,T2=1表示乡村道路最长通车时间到。二.模块设计
1.模块功能及端口说明
1)分频模块
输入端为clk_in,即实验箱自带脉冲输入信号,输出端为clk,即想得到的频率。2)主控制模块
输入端为CLK、RST、C。其中c为乡村道路开关,为1时表示乡村道路有车;rst为初始化开关,为1时表示初始化为主干道绿灯,乡村道路红灯的状态。
输出端为MG、MY、MR、CG、CY、CR分别表示主干道和乡村道路的红黄绿灯,与LED灯相连;mh、ml、ch、cl分别表示主干道和乡村道路倒计时显示的高低位,与数码管相连。
3)数码管显示模块
输入端为clk和count,输出端为LED。
2.主要功能的设计方法
1)分频模块
试验箱可选晶振有2M和50M,选择使用2M后,设置分频系数为2000000,每计数到1000000,则输出取反,最终可得到1HZ的时钟信号。
2)主控制模块
设置两个外部控制条件:初始化(RST);乡村干道是否有车(C);
设置一个内部计数变量:NUM,通过相关运算取余取整得到数码管显示高低位;
通过有限状态机实现四个状态的循环切换。
3.Verilog设计程序及说明
1)分频模块
module fre(clk_in,clk);input clk_in;output clk;reg clk;reg [31:0]k;always @(negedge clk_in)begin
if(k>=1000000)//1000000分频 begin clk<=~clk;//取反
k<=0;end else
k<=k+1;//计数
end endmodule 2)主控制模块
module traffic(CLK,RST,C,MG,MY,MR,CG,CY,CR,mh,ml,ch,cl);input CLK,RST,C;output [3:0]mh,ml,ch,cl;output MG,MY,MR,CG,CY,CR;reg [3:0] mh,ml,ch,cl;reg MG,MY,MR,CG,CY,CR;reg [31:0] COUNT;reg [5:0]state;parameter s1=6'b100001,s2=6'b010001,s3=6'b001100,s4=6'b001010;always @(posedge CLK)if(RST)//初始化
begin
state = s1;//最初状态,主通行,乡村不通行 MG=1;MY=0;MR=0;CG=0;CY=0;CR=1;COUNT = 0;
mh=2;//主干道绿灯25s,乡村道路红灯5s
ml=5;
ch=3;
cl=0;
end else case(state)s1: begin COUNT = COUNT+1;
if((COUNT>=25)&&(C==1))//25s已计完且乡村道路来车,跳转到s2状态
begin
state = s2;//主干道黄灯,乡村道路红灯
MG=0;MY=1;MR=0;CG=0;CY=0;CR=1;COUNT = 0;mh=0;ml=5;ch=0;cl=5;end else if(COUNT<25)//25s没有计完,保持s1状态
begin
state = s1;
MG=1;MY=0;MR=0;CG=0;CY=0;CR=1;
mh=(25-COUNT)/10;//取整取余换算,倒计时显示
ml=(25-COUNT)%10;ch=(30-COUNT)/10;cl=(30-COUNT)%10;end else if(COUNT >= 25 && C == 0)//25s计完,乡村道路仍然没有车
begin
state = s1;//保持s1 MG=1;MY=0;MR=0;CG=0;CY=0;CR=1;mh=0;//数码管显示0
ml=0;
ch=0;
cl=0;
end
end s2: begin COUNT = COUNT+1;
if(COUNT==5)//5s黄灯已计完
begin
state = s3;//主干道红灯,乡村道路绿灯 MG=0;MY=0;MR=1;CG=1;CY=0;CR=0;COUNT = 0;
mh=2;//主干道21s红灯,乡村道路16s绿灯
ml=1;
ch=1;
cl=6;
end else
begin
state = s2;//5s黄灯未计完时,保持s2状态
MG=0;MY=1;MR=0;CG=0;CY=0;CR=1;
mh=0;
ml=5-COUNT;
ch=0;
cl=5-COUNT;
end end s3: begin COUNT = COUNT+1;
if(((COUNT>=16)&&(C==1))||(C==0))//乡村道路16s通行时间已结束,不管有无来车,均跳转s4状态
begin
state = s4;//主干道红灯,乡村道路黄灯
MG=0;MY=0;MR=1;CG=0;CY=1;CR=0;
COUNT = 0;
mh=0;
ml=5;
ch=0;
cl=5;
end else
begin
state = s3;//16s未结束,仍保持s3状态
MG=0;MY=0;MR=1;CG=1;CY=0;CR=0;
mh=(21-COUNT)/10;
ml=(21-COUNT)%10;
ch=(16-COUNT)/10;
cl=(16-COUNT)%10;
end end s4: begin COUNT = COUNT+1;if(COUNT==5)//5s黄灯时间结束
begin
state = s1;//回到s1状态
MG=1;MY=0;MR=0;CG=0;CY=0;CR=1;
COUNT = 0;
mh=2;
ml=5;
ch=3;
cl=0;
end else
begin
state = s4;//否则保持s4状态
MG=0;MY=0;MR=1;CG=0;CY=1;CR=0;
mh=0;
ml=5-COUNT;
ch=0;
cl=5-COUNT;
end end default:
begin
state = s1;
MG=1;MY=0;MR=0;CG=0;CY=0;CR=1;
COUNT = 0;
mh=0;
ml=5-COUNT;
ch=0;
cl=5-COUNT;
end endcase endmodule 3)数码管显示模块 module led(clk,count,LED);input clk;input [3:0]count;output [7:0]LED;reg [7:0]LED;always @(posedge clk)begin case(count)
4'b0000:LED=8'b00000011;
4'b0001:LED=8'b10011111;
4'b0010:LED=8'b00100101;
4'b0011:LED=8'b00001101;
4'b0100:LED=8'b10011001;
4'b0101:LED=8'b01001001;
4'b0110:LED=8'b01000001;
4'b0111:LED=8'b00011111;
4'b1000:LED=8'b00000001;
4'b1001:LED=8'b00001001;
default:LED=8'b00000001;endcase end endmodule 4.仿真图及说明
(1)分频模块
由于实际应用中分频较大,仿真时为方便观察,将分频频数设置为20。输入为clk_in,周期为10ns;输出为clk,其周期为200ns,与理论值相符。(2)主控制模块
与总体仿真相同,在此不再赘述。
三.总体设计与仿真
1.顶层设计图及说明
fre为分频模块,traffic为主控制模块,led为数码管显示模块。输入端有clk_in、c和rst,输出端有MG、MY、MR、CG、CY、CR和mh、ml、ch、cl。
2.仿真图及说明
输入有:C、CLK和RST 输出有:CG、CR、CY、MG、MR、MY、ch、cl、mh和ml C为乡村道路是否来车,1表示来车,0表示无车;CLK为时钟信号;RST为初始化功能,1有效;CG、CR、CY、MG、MR、MY分别表示乡村道路绿灯、红灯、黄灯,主干道绿灯、红灯、黄灯;ch、cl、mh、ml分别表示乡村道路和主干道红绿灯倒数显示高低位。
3.实验结果
(1)乡村道路无车时
乡村道路无车时,主干道25s倒数,乡村道路30s倒数结束后,保持0,且主干道绿灯亮,乡村道路红灯亮。(2)乡村道路有车时
若乡村道路一直有车,主干道25s(即S1状态)倒计时结束后,主干道切换黄灯,乡村道路保持红灯(即S2状态);5s黄灯倒计时结束后,主干道切换红灯,时间21s,乡村道路切换绿灯,时间16s(即S3状态);乡村道路16s绿灯结束后,切换黄灯,主干道保持红灯(即S4状态),5s黄灯结束后,回到S1状态,即主干道25s绿灯,乡村道路30s红灯,若一直有车,则循环进行。
四.总结
1.实验结果分析
(1)输入与输出
两个开关:一个初始化控制开关,一个乡村道路开关。初始化开关打开后复位,交通灯开始工作,乡村道路打开表示乡村公路上有车。
输出:四个数码管,两个显示主干道交通灯时间,两个显示乡村道路时间;六个led灯,两红两黄两绿分别表示主干道和乡村公路的红黄绿灯。(2)运行过程
1)初始状态(S1)
左侧为主干道倒计时,右侧为乡村道路倒计时;主干道绿灯亮,乡村道路红灯亮。K1为初始化按键,K2为乡村道路有无来车。
2)主干道25s绿灯结束后切换黄灯,乡村道路红灯(S2)
3)主干道5s黄灯结束,切换红灯21s,乡村道路切换绿灯16s(S3)
4)乡村道路16s绿灯结束,切换黄灯,主干道红灯(S4)
5s黄灯倒计时结束,回到S1状态,若一直有车,则循环S1-S2-S3-S4-S1。
2.问题解决方法
问题1:数码管显示与红绿灯切换不同时。
解决方法:红绿灯输出后面增加一延时模块,延时一个CLK,使其与数码管显示同步。问题2:理解错题意,在S3状态(即主干道红灯,乡村道路绿灯)时,此时若乡村道 路无车通过,应立即切换为S4状态(即主干道红灯,乡村道路黄灯),而不是等当前计数结束再切换。
解决方法:将代码修改为if(((COUNT>=16)&&(C==1))||(C==0)),修改后符合要求,解决了问题。
3.心得体会
通过此次系统设计,我对verilog HDL语言有了初步了解,并对利用quartus来进行系统设计有了更加深入的理解,操作也更加熟练。在设计过程中应该先设计好总体架构,再进行模块的具体设计,通过分析每个模块要实现的功能来写代码,并注意编写注释,便于以后的理解修改。编译时要注意设置顶层文件,先进行仿真观察结果是否正确,对代码进行修改,仿真结果正确后再下载到硬件,测试系统功能。
参考书目: [1] 夏宇闻,《Verilog数字系统设计教程》,北京,北京航空航天大学出版社,2013年 [2] 王金明,《数字系统设计与Verilog HDL》,北京,电子工业出版社,2011年
第二篇:上海大学数字电子技术课程设计交通灯
电子技术课程设计报告
——交通灯控制电路
XX大学机自学院自动化系
自动化
专业
姓名:
学号:
指导老师:
2018年X月X日
一、主要用途:
交通信号灯使交通得以有效管制,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。
在十字交叉路口,为保证交通秩序和行人安全,一般在每条道路上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道路禁止通行;黄灯亮表示该条道路上未过停车线的车辆停止通行,已过停车线的车辆继续通行;绿灯亮表示该条道路允许通行。交通灯控制电路自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行,实现十字路口交通管理的自动化。
二、设计任务及要求:
设计一个主干道和支干道十字路口的交通灯控制电路,其要求如下:
1.一般情况下,保持主干道畅通,主干道路灯亮、支干道红灯亮,并且主干灯亮的时间不少于60
S;
2.当主干道绿灯亮超过60
S,且支干道有车时,主干道红灯亮,支干道绿灯亮,但支干道绿灯亮的时间不得超过30S;
3.每次主干道或支干道绿灯亮变红灯时,黄灯先亮5S。
三、设计思路步骤及仿真调试
设计分析
分析可知,所需的交通灯有以下四个状态:
a.主干道绿灯亮,支干道红灯亮,此时主干道允许车辆通行,支干道禁止车辆通行。当主干道绿灯亮够60秒后,控制器发出状态转换信号,系统进入下一个状态。
b.主干道黄灯亮,支干道红灯亮,此时主干道允许超过停车线的车辆继续通行,而未超过停车线的车辆禁止通行,支干道禁止车辆通行。当主干道黄灯亮够5秒后,控制器发出状态转换信号,系统进入下一个状态。
c.主干道红灯亮,支干道绿灯亮。此时主干道禁止车辆通行,支干道允许车辆通行,当支干道绿灯亮够30秒后,控制器发出状态转换信号,系统进入下一个状态。
d.主干道红灯亮,支干道黄灯亮。此时主干道禁止车辆通行,支干道允许超过停车线的车辆通行,而未超过停车线的车辆禁止通行。当支干道红灯亮够5秒后,控制器发出状态转换信号,系统进入下一个状态。
以上a,b,c,d四种状态依次交替循环,达到指挥交通的功能。
分析得出,交通灯系统共由脉冲信号模块,交通灯模块,控制模块,倒计时模块四部分组成,如下图1所示。
主干道
A1
A2
A3
控制
模块
倒计时
模块
脉冲信号模块
发生器
T0
支干道
B1
B2
B3
图1
交通灯控制系统原理框图
整个系统的核心是利用能够进行60进制、30进制以及5进制并切换的减法计数器,在译码器及与非门的配合下实现交通灯信号灯的切换。
1.脉冲信号模块
信号的产生采用555定时器构成的多谐振荡器。取R1=10kΩ,C2=10uF,通过
f=1tpL+tph≈1.43R1+2R2C2=1
设计计算得R2≈66kΩ,此处采用100kΩ滑动变阻器。
设计如下图2所示的多谐振荡器,产生1Hz的方波周期信号。
图2
多谐振荡器
2.交通灯模块
设主干道红灯、黄灯、绿灯分别为A1、A2、A3;支干道红灯,黄灯、绿灯分别为B1、B2、B3,如下图3所示。
图3
交通灯模块
3.控制模块
使用74LS163N十进制计数器构成三进制的加法计数器,同时用与非门控制三个颜色交通灯的亮与灭。
74LS163N的CP信号由倒计时模块高位74LS192N的BO控制。即每当倒计时的高位产生借位信号时通过BO传给74LS163N一个信号使之变灯。
令前述的a,b,c,d四种交通灯状态依次为00,01,10,11,以74163N的QA,QB输出。
主干道红灯、黄灯、绿灯分别为A1、A2、A3;支干道红灯,黄灯、绿灯分别为B1、B2、B3。可得真值表如下。
QB
QA
A1
A2
A3
B1
B2
B3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
由真值表化简可得各信号灯的逻辑表达式:
A1=QB,A2=QBQA,A3=QBQA,B1=QB,B2=QBQA,B3=QBQA
故采用与非门控制连接交通灯和74LS163N如下图4:
图4
74163N和与非门构成的交通灯控制模块
4.倒计时模块
倒计时模块由减法计数器和7段数码管显示器组成。
十字路口的交通灯要有数字显示,且是倒计时,以便人们能够更好的把握好时间。具体的工作方式为:当主干道的绿灯亮时,将显示器置为60s,然后每秒减1,计数方式工作,直至减到数为00,此时变灯并置05s,再执行每秒减1,减到00后变灯并置30s,递减。一次工作循环结束,而进入下一工作循环。
倒计时模块选用两片74LS192级联,通过将低位的借位端BO与高位的减数计数控制端DOWN连接,构成减法计数器。CP由多谐振荡器的输出端接到低位74LS192的减数计数控制端DOWN控制。
预置端LOAD接高电平时计数,接低电平时预置数。因此,工作开始时,LOAD为0,计数器预置数,置数后,LOAD变为1,计数器开始倒计时,当倒计时减到数00时,LOAD又变为0,计数器又预置数,之后又倒计时,如此循环下去。
这可以借助两片74190的借位端BO来实现,用或门将两个BO连起来,再接在预置数端LOAD上。当倒计时减到数00时,两个BO均产生一低电平信号,通过或门使两片74190的LOAD端置数。
由于四种状态的置数各不相同,设高位74LS192N的置数端依次为DH,CH,BH,AH,低位的置数端依次为DL,CL,BL,AL,由前述的真值表和8位置数端在各状态下的取值,分析可得,DH=0,CH=A3,BH=QA,AH=B3
DL=0,CL=QA,BL=0,AL=QA
故可利用信号灯和74163N输出端的信号结合与非门控制置数端在不同状态下的取值。设计如下图5
图5
减法计数器和7段数码管显示器构成的倒计时模块
三、电路的测试与仿真
状态a:
符合设计要求1:一般情况下,保持主干道畅通,主干道路绿灯亮、支干道红灯亮,并且主干灯亮的时间不少于60
S;
状态b:
符合设计要求3:每次主干道或支干道绿灯亮变红灯时,黄灯先亮5S。
状态c:
符合设计要求2:当主干道绿灯亮超过60
S,且支干道有车时,主干道红灯亮,支干道绿灯亮,但支干道绿灯亮的时间不得超过30S;
状态d:
符合设计要求3:每次主干道或支干道绿灯亮变红灯时,黄灯先亮5S。
综上所述:该交通灯符合设计要求。
四、总结
这次数电设计对我是一个很大的挑战。一开始时我完全没有思路,后来通过在网上查阅了一些文献,理清了设计过程,明白了无论多复杂的功能结构,都要先分析要设计哪些模块,再将各个模块分别设计,最后汇总。
还有在设计时一定要了解清楚芯片各个针脚的功能,否则会遇到很多麻烦。在设计时我用到74LS192芯片,但由于网上资料不够详细,我对于BO端口的功能不是很清楚,导致起初我一直以为只要减法计数器减到0时BO就一直为低电平输出,使我无法设计置位端LOAD。后来我才了解到BO端口是在计数器为0时再减1的瞬间产生一个短暂的负向脉冲,正是利用这个原理才使我的设计得以完成。
同时由于我采用的multisim14版本有些原因不明的bug,也为我的调试带来了许多问题。在我的设计图中,我在倒计数模块的或门输出端接了一个开关,是因为如果去掉这个开关,直接用导线连接,就会导致通电时计数器只从60跳到59就卡住,不再工作。加一个开关也是我调试了好久才发现的解决办法。
总之这次数电项目设计使我对上课时学到的知识有了更深入的认识,更使我体会到了设计的流程和思路,也了解到了设计时常遇到的一些问题和解决方法。
第三篇:北邮数字逻辑小学期交通灯控制器
实验一交通灯控制器
一、实验目的
a)熟练掌握 VHDL语言和QuartusII软件的使用。b)用VHDL进行较复杂逻辑电路的设计和调试。c)熟练掌握isp期间的下载方法。d)理解状态机的工作原理和设计方法。
二、实验所用设备和环境
a)实验设备:TEC-8实验箱一个、EPM7128SLC84-15芯片一个
b)实验环境:WinXP+QuartusII
三、实验任务及功能介绍
在十字路口,每条道路各有一组红、黄、绿灯,用以指挥车辆和行人有序的通行。其中红灯亮表示禁止通行,黄灯亮表示停车,绿灯亮表示可以通行。设计一交通灯控制器用于自动控制十字路口的交通灯,指挥各种车辆和行人安全通行。a)东西和南北方向各有一组绿、黄、红等用于指挥交通,绿灯、黄灯和红灯的持续时间分别为5s,1s和6s。其中初始状态为东西南北四个方向红黄绿灯全亮,持续1秒。后东西方向绿灯,南北方向红灯,持5秒。后东西方向黄灯闪烁,南北方向持续红灯,维持1秒。后东西、南北方向交换。b)有紧急状况时,如有消防车、救护车或者其他需要优先放行的车辆时,各方向上均是红灯亮。当紧急状况解除时,回复原来的状态,继续正常运行。
c)当复位开关置1时,切换到初始状态,即四个方向红黄绿灯全亮。
四、课题分析及流程图:
一共六个状态:S0, S1, S2, S3, S4, 紧急状态。
五、设计思路
a)本题主要是红黄绿灯时间的计时(即分频),和状态的切换。由于外部时钟信号CLK信号为1kHz,而我们需要1Hz,因此需要分频。
b)对于计时,采用计数器方式,根据外部时钟信号CLK,在上升沿时,将计数器加一,分别定义T1,T1,T3,T4的整型数,范围分别是0~999,0~1999,0~4999和0~199,分别表示1秒、2秒、5秒和0.2秒,其中0.2秒用于黄灯闪烁。引入TIMER数组来表示该进行何种时间的计数,每一位依次表示红黄绿灯,为分频后信号。
c)设计六个状态:S0, S1, S2, S3, S4和紧急状态。对于状态切换,引入currentSTATE和nextSTATE两个状态变量,取值在STATE中选择:TYPE STATE IS(S0, S1, S2, S3, S4);d)东西南北方向灯的表示:有三个4位二进制数,RED、YELLOW和GREEN进行输出,从高位到地位依次表示东西南北四个方向的灯的状态,1亮,0灭。
e)为了得知什么时候切换状态,需引入数组SWITCH,4位二进制数,每一位依次表示红黄绿灯计时器是否计时结束,若结束则置1,各位相或,得到CTRL信号若有效,则需要切换状态,反之则不用。
f)对于紧急状态信号URGENT和复位信号CLR,则由开关控制,若置1,则有效,立即切换到紧急状态或初始状态S0。
六、详细设计
a)交通灯控制器实体
b)arc中信号
c)分频进程,以计数器形式得出T1,T2,T3,T4四种时间。
d)判断何时切换状态
e)控制黄灯闪烁进程,每0.2s闪烁一次
f)六种状态的表现形式及紧急状态的切换
七、心得体会
这次虽然小学期有两周,但时间仍然是非常紧张。我由于身体原因在上学期期末申请了缓考,所以在小学期的同时还要准备6门缓考考试,显得非常忙碌,能够分给小学期的时间也不多。所以在第一天老师布置课题后,我们小组经过讨论,让我选择了简单一些的交通灯控制器。
在最开始的时候,显得无从下手。虽然我们编写过LED灯显示和各种译码器,但都只是很简单的一个进程,如今要自己设计整个控制器,觉得有点不知所措。后来用编写C++等程序的经验,我仔细分析题目,将它分解成更小的模块,来分别实现,最后再整合在一起。
状态切换和显示部分的编码还比较简单,但是分频部分又有点不知所云,查阅了网上的例子和书籍后,感觉看不太懂他们的分频方式,询问同学,同学们也还不太清楚。后来借到第一天老师课上说的参考书,发现上面的分频方式是以计数器的形式,利用外部时钟,来一个上升沿计数器加一,简单容易理解,所以采用了。
每一次编写大作业的时候我都喜欢全部编写完毕后再编译、测试,但是这样就造成错误过多而引起不知道从何下手。因此我这一次采取的是逐部分编译、测试的方式。但是由于对VHDL已经一个多学期没有碰过,生疏了很多,语法错误非常多。而且编译通过后还经常不能运行。再反复完善代码却不能运行的时候,询问下同学,发现自己的管脚接的大有问题。是我自己忽略了有特殊指向的管脚,导致我的外部时钟CLK没有输入进去,程序无法继续进行。并且也发生了没有改代码,但是换了个实验箱就运行不了的情况,检查了很久发现是模式控制没有打到硬布线模式,影响了整体程序的运行,这些都是不通过自己调试、检验无法学习到的。
这两周的时间,我将自己的效率放大到最大,但是仍然因时间问题无法完成交通灯倒计时显示部分,也是小学期的一个遗憾。不过这两周,我不但又一次加深理解了自己动手操作的重要性,也对于芯片的设计思路有了更好的理解。由于交通灯控制器是一个简单一些的程序,因此我没有分模块实现,没有用到原理图,也没有遇到芯片的逻辑块溢出的问题,但是在每天的最后,小组讨论时,我们都会讨论解决这些问题,也让我从中学到了很多。总体来说,这一次的小学期算是收获颇丰。附件一:VHDL源代码 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY trafficLight IS
PORT(CLR, CLK, URGENT : IN STD_LOGIC;GREEN : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);YELLOW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);RED : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
--CLOCK : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END trafficLight;ARCHITECTURE lightARC OF trafficLight IS TYPE STATE IS(S0, S1, S2, S3, S4);SIGNAL currentSTATE, nextSTATE : STATE;SIGNAL CTRL : STD_LOGIC;SIGNAL SWITCH : STD_LOGIC_VECTOR(3 DOWNTO 0);
--切换状态
SIGNAL TIMER : STD_LOGIC_VECTOR(3 DOWNTO 0);
--时钟计时 SIGNAL T1 : INTEGER RANGE 0 TO 999;
--1s SIGNAL T2 : INTEGER RANGE 0 TO 1999;
--2s SIGNAL T3 : INTEGER RANGE 0 TO 4999;
--5s SIGNAL T4 : INTEGER RANGE 0 TO 199;
--0.2s
--SIGNAL T5 : INTEGER RANGE 0 TO 999;
BEGIN PROCESS(CLK, SWITCH)
BEGIN
IF(CLK'event AND CLK = '1')THEN
IF(SWITCH(0)= '0')THEN TIMER(0)<= '0';
T1 <= 0;
ELSE IF(T1 = 999 AND URGENT = '0')THEN
T1 <= 0;
TIMER(0)<= '1';
ELSE IF(URGENT = '0')THEN
T1 <= T1 + 1;TIMER(0)<= '0';
END IF;END IF;END IF;
IF(SWITCH(1)= '0')THEN TIMER(1)<= '0';
T2 <= 0;
ELSE IF(T2 = 1999 AND URGENT = '0')THEN
T2 <= 0;
TIMER(1)<= '1';
ELSE IF(URGENT = '0')THEN
T2 <= T2 + 1;
TIMER(1)<= '0';
END IF;
END IF;
END IF;
IF(SWITCH(2)= '0')THEN
T3 <= 0;TIMER(2)<= '0';
ELSE IF(T3 = 4999 AND URGENT = '0')THEN
T3 <= 0;TIMER(2)<= '1';
ELSE IF(URGENT = '0')THEN
T3 <= T3 + 1;
TIMER(2)<= '0';
END IF;
END IF;
END IF;
END IF;END PROCESS;
CTRL <= TIMER(0)OR TIMER(1)OR TIMER(2);切换状态
PROCESS(CLK, SWITCH(3))
BEGIN
IF(CLK'event AND CLK = '1')THEN
IF(T4 = 199 AND SWITCH(3)= '1')THEN
T4 <= 0;
TIMER(3)<= NOT TIMER(3);
ELSIF(SWITCH(3)= '1')THEN
T4 <= T4 + 1;
END IF;
END IF;
END PROCESS;
PROCESS(CTRL, CLR)
BEGIN
--倒计时完成IF(CLR = '1')THEN currentSTATE<= s0;
ELSIF(CTRL'event AND CTRL = '0')THEN currentSTATE<= nextSTATE;
END IF;
END PROCESS;
PROCESS(currentSTATE, URGENT)
BEGIN
IF(URGENT = '1')THEN
--紧急状态,所有方向点亮红灯
GREEN <= “0000”;YELLOW <= “0000”;RED <= “1111”;
ELSE
CASE currentSTATE IS
WHEN s0 => SWITCH <= “0001”;
GREEN <= “1111”;
YELLOW <= “1111”;
RED <= “1111”;
--CLOCK <= “0000”;nextSTATE<= s1;
WHEN s1 => SWITCH <= “0100”;
GREEN <= “1100”;
YELLOW <= “0000”;
RED <= “0011”;
--CLOCK <= “0110”;nextSTATE<= s2;WHEN s2 => SWITCH <= “1010”;
GREEN <= “0000”;
YELLOW(3)<= TIMER(3);--闪烁 YELLOW(2)<= TIMER(3);YELLOW(1 DOWNTO 0)<= “00”;nextSTATE<= s3;WHEN s3 => SWITCH <= “0100”;
GREEN <= “0011”;
YELLOW <= “0000”;
RED <= “1100”;
--CLOCK <= “0110”;nextSTATE<= s4;
WHEN s4 => SWITCH <= “1010”;
GREEN <= “0000”;
YELLOW(3 DOWNTO 2)<= “00”;
YELLOW(1)<= TIMER(3);--闪烁 YELLOW(0)<= TIMER(3);
RED <= “1100”;nextSTATE<= s1;
END CASE;
END IF;
END PROCESS;
--
PROCESS(CLK, CLOCK)
--
BEGIN----------IF(CLK'event AND CLK = '1')THEN
IF(CLOCK = “0000”)THEN CLOCK <= “0110”;ELSE CLOCK <= CLOCK-1;END IF;IF(T5 = 999)THEN T5 <= 0;--
ELSE T5 <= T5 + 1;--
END IF;--
END IF;
--
END PROCESS;END lightARC;
附件二:调试日志 2015/9/8周二:
复习VHDL基础知识及语法,了解交通灯大致编写思路。2015/9/9周三:
分解交通灯控制器:分频部分,状态切换部分,显示部分
今日计划:初步完成分频部分,考虑程序流程和各个进程间的配合。学习时钟分频的方式:途径:去图书馆借书查阅《VHDL数字电路设计与应用实践教程》,采用计数器的方式,针对外部时钟所给的1kHz分成1Hz,从而得到想要的5s、1s、0.2s等时间。
遇到问题:能够得到时间,但不知道该怎么将时间运用到状态切换中。解决方案:上网查阅资料。2015/9/10周四:
今日计划:完成状态切换部分和显示部分,考虑如何将分频好的时钟信号用在状态切换部分。
遇到问题:切换状态部分和显示部分比较简单,只是需要注意if-else语句使用,因为VHDL语法不熟悉导致语法报错很多。定义的状态太多,重复性大。
解决方案:开始在状态切换时,没想好要几个状态,零零散散分了很多个,导致很多状态其实根本是重合的,删减后得到最精简的6个状态。对于分频时钟,引入TIMER数组记录时钟是否计时完毕,若完毕则需要切换状态,将分频部分与其他部分串接在一起。2015/9/11周五:
今日计划:完成程序,在TEC-8上进行初步调试。
遇到问题:忘记如何下载芯片,询问同学后解决。成功下载芯片后发现不能运行,灯的显示也是乱的。
解决方案:回头看代码,发现在TIMER信号表示出计时完毕后,并没有给激励进行状态切换,引入CTRL信号给予激励,当CTRL有效时切换状态,为了方便观察CTRL信号的变化,将其连接到灯上。遇到问题:下载芯片后仍旧不能继续运行,但CTRL信号有改变。2015/9/14周一:
今日计划:完善程序,在TEC-8上运行成功。
遇到问题:下载芯片后仍旧不能继续运行,但CTRL信号有改变。解决方案:能够判断计时结束,能够给激励改变状态,却没有改变状态。发现没有信号表示红黄绿灯的切换,用S0~S4来判断状态并切换,但发现红黄绿灯有对称,而S2和S4、S1和S3对于计时器来说没有任何区别,不需要重复判断,因此引入SWITCH数组,每一位代表一种灯,使得能够判断计时结束后切换到何种状态,减少重复。修改编译报错。2015/9/15周二:
今日计划:完成程序,并在TEC-8上正确运行。
遇到问题:下载芯片后仍旧不能运行。发现管脚配置有问题。解决方案:按照老师给的ppt上的管脚配置,CLK接57管脚,CLR、URGENT分别接81,80开关上。RED,YELLOW,GREEN按顺序接到20到34的红黄绿灯上。(开始将CLR接到1号管脚上,发现必须一直按着CLR才可以运行程序,后将CLR改接开关上。)
遇到问题:在上午运行成功后,下午换了一台电脑,发现下载芯片后程序不动了。
解决方案:在完全没有改代码的情况下只能检查实验箱是否有误碰情况。排除灯显示问题后,确定是外部时钟没有走,发现开关置于独立而非硬布线模式,导致程序无法运行。拨回独立后运行正常。2015/9/16周三:
完成交通灯控制器,改正红绿灯显示不合理的地方,在考虑加入倒计时模块未果后,接受验收。
第四篇:交通灯控制器设计实验报告
设计性实验项目名称
交通灯控制器设计
实验项目学时:3学时
实验要求:■ 必修
□ 选修
一、实验目的
1、学习与日常生活相关且较复杂数字系统设计;
2、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;
3、学习二进制码到BCD码的转换;
4、学习有限状态机的设计应用。
二、实验原理
交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又 有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很 简单,而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北 和东西直行的情况。
要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的燃灭规律为:初始态是两个路口的红灯全亮之后,主干道的绿灯亮,乡间道路的红灯亮,主干道方向通车,延时一段时间后,乡间公路来车,主干道绿灯灭,黄灯开始闪烁。闪烁若干次后,主干道红灯亮,而同时乡间公路的绿灯亮,延时一段时间后,乡间公路的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到主干道方向,重复上述过程。
三、设计要求
完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一个由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器功能,具体要求如下:
1、有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;
2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;
3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出请求信号S=1,其余时间S=0;
4、平时系统停留在主干道通行(MGCR)状态,一旦S信号有效,经主道黄灯4秒(MYCR)状态后转入乡间公路通行(MRCG)状态,但要保证主干道通行大于一分钟后才能转换;
5、一旦S信号消失,系统脱离MRCG状态,即经乡道黄灯4秒(MRCY)状态进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟;
6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。
四、主要仪器设备
1、微机
1台
1套 1套
2、QuartusII集成开发软件
3、EDA实验装置
五、实验步骤
源程序:
0module traffic1(clk,s,rst,light,sel,SG);input clk,s,rst;output[5:0] light;
output [2:0]sel;output [7:0]SG;reg [5:0] light;reg clk1;reg [3:0] sc;
reg [7:0] count;reg [7:0] cnt,SG;reg [2:0] sel;reg [3:0]a;parameter s0=0,s1=1,s2=2,s3=3,s4=4;initial
begin
count<=8'b01100000;
light<=6'b001100;
sc=s0;
end
always @(posedge clk)begin
begin cnt=cnt+1;
if(cnt==100)begin clk1=1'b1;cnt=0;end
else clk1=1'b0;//100分频,CLK为数码管扫描频率,CLK1为计数频率
if(sel<7)sel=sel+1;else sel=6;
end //sel为数码管选择
begin
case(sel)
7: a=count[3:0];//0数码管为个位
6: a=count[7:4];//1数码管为十位
default: a=0;
endcase
case(a)
0:SG<=8'b00111111;1:SG<=8'b00000110;
2:SG<=8'b01011011;3:SG<=8'b01001111;
4:SG<=8'b01100110;5:SG<=8'b01101101;
6:SG<=8'b01111101;7:SG<=8'b00000111;
8:SG<=8'b01111111;9:SG<=8'b01101111;//8段译码值
default: SG=8'b11111111;
endcase
end end
always @(posedge clk1 or negedge rst)
begin
if(!rst)begin count = 0;sc=s3;end // count set nothing but else 0
else if(count == 0)
begin
case(sc)
s0: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc=s4;count = 8'b01100000;end end
s1: begin count = 8'b00100000;sc=s2;light=6'b100001;end
s2: begin count = 8'b00000100;sc=s3;light=6'b100010;end
s3: begin count = 8'b01100000;sc=s0;light=6'b001100;end
s4: begin if(s)begin sc=s1;count = 8'b00000100;light=6'b010100;end else begin sc = s4;count = 8'b01100000;light<=6'b001100;end end
default begin sc=s0;count =8'h60;end
endcase
end
else
if((sc==s2)&(s==0))begin sc=s3;count = 8'b00000100;light=6'b100010;end
else
if((sc==s4)&(s==1))begin sc=s1;count = 8'b00000100;light=6'b010100;end
else if(count[3:0] == 4'b0000)
begin count = count-7;end
else
begin count = count-1;end
end endmodule
管脚锁定
六、波形仿真
主干道60s倒计时
s信号为1时
七、实验心得
通过本次实验,让我进一步掌握了软件quartus的使用流程,一开始实验时波形仿真是正确的,但在电路上实现时主干道亮黄灯时,乡间道路亮的是绿灯,这显然是不对的,后面发现是管脚锁定时出现了问题,改回来之后就没问题了。管脚锁定时不能粗心,不然很容易出现问题。
曹军
生医121班
第五篇:交通灯控制电路设计自动化 数字电子技术课程设计
综 述
本次设计主要分为四个部分,第一部分:信号产生电路;第二部分:电子示电路;第三部分:倒计时设计,第四部分:交通灯及交通灯控制电路
在本次设计中采用555定时器产生CP=1Hz的脉冲信号,经过用741192设计的预置状态为59的60进制加计数器和预置状态为29的30进制计数器。并使进位位作为脉冲输出,实现5分频,然后用芯片74161和74139实现南北干道和支东西干道红,绿,黄色灯亮的时间控制,最后一部分的减计数器选用74193进行级联计数,译码器选用cc4511,本人主要设计减计数器及数码管显示倒计时部分
一、设计任务与要求
1.东西方向绿灯亮,南北方向红灯亮,时间30。2.东西方向与南北方向黄灯亮,时间5s。3.南北方向绿灯亮,东西方向红灯亮,时间60。
二、方案设计与论证
根据设计任务与要求,我们可以知道这个交通灯的设计是分南北干道和东西干道的,两个方面的时间是不同的,东西方向通行30s,南北方向60s,这就要求我们要有两个计数器,根据我自己的经验,东西方向通行30s完,倒计时数字显示器会显示到0,然后切换到南北方向通行60s完之后, 倒计时数字显示器也会显示到0之后然后切换到南北方向,这样如此循环,由于黄灯是当两个计数器倒计时到5时开始闪,我们就可以在这时发出一个脉冲然后一直保持到0,或者是接收0~5这段时间的脉冲都可以控黄灯只在到了这段时间才亮;方案:
交通灯控制原理图:
2.a 交通灯原理框图
首先由555定时器产生1s的信号脉冲,通过由一些1k电阻和三片74LS245,两片74LS192处理构成定时电路处理,产生时间输出信号作用电子显示器,另一部分的1s的信号脉冲通过由两片74LS112的JK触发器组成的路灯控制电路的对1s的信号处理,产生对交通路灯有控制作用的电子逻辑信号,从而实现按要求的对路灯的正常控制。
2三、单元电路设计
3.1时间脉冲产生电路
由 555 定时器和外接元件 R1、R2、C 构成多谐振荡器,脚 2 与脚 6 直接相连。电路没有稳态,仅存在两个暂稳态,电路亦不需要外接 触发信号,利用电源通过 R1、R2 向 C 充电,以及 C 通过 R2 向放电端 放电,使电路产生振荡。电容 C 在 和 之间充电和放电,从而在输出端得到一系列的矩形波,且通过调节参数,使得产生的矩形波为1hz的也就是周期为1s的脉冲发生电路。
3.1a 1s脉冲信号产生电路
3.2电子显示电路
一个LED数码管可用来显示一位0~9十进制数和一个小数点。小型数码管(0.5寸和0.36寸)每段发光二极管的正向压降,随显示光(通常为红、绿、黄、橙色)的颜色不同略有差别,通常约为2~2.5V,每个发光二极管的点亮电流在5~10mA。LED数码管要显示BCD码所表示的十进制数字就需要有一个专门的译码器,该译码器不但要完成译码功能,还要有相当的驱动能力。
3.2a BCD码显示电路
3.3计时器电路
计数器
倒计时计数电路主要由计数器构成,它在整个系统设计中的作用是实现计时计数,在此我们选用减法计数器,因为本设计说明时间可预置,所以需要可预置数的减计数器。目前,在实际工程应用中,我们已经很少使用小规模的触发器去拼接成各种计数器,而是直接选用集成计数器产品。3.3a 74LS192 74LS193引脚图
本次课程设计需要50进制和30进制减计数器各一个,所以采用两个74193级联计数,将表示个位的计数芯片借位端BO连接后一级的CPD即可进行级联计数,后一级输出为十位位。以下为设计中用到的50和30进制减计数器。以下为计数器的逻辑电路图:
3.3b 范围为49~0的50进制减计数器
3.3c计数范围为29~0的30进减制计数器
3.4交通灯控制电路与交通灯
3.4,1交通灯控制电路
交通信号灯转换器其实就是由计数进制转换器来实现,即一个JK触发器,其中J、K端都同时接高电平,即构成了一个T’触发器,目的就是实现翻转功能,其时钟输入端是由倒计时计数器中的两片74192的八个输出端经过一个或门然后经过一个非门接入。
3.4.1a 交通灯控制电路
3.4,2交通灯模拟电路
S0:没有打开电源的状态。S1:东西方向绿灯亮,南北方向红灯亮,时间30s。S0,S1,S2,S3中任一状态下打开电源会进入S1状态,数码管初始值为60。数码管最大显示为60,出现“0”的瞬间进入下一状态。(S2)S2:东西方向与南北方向黄灯亮,时间5s。
数码管最大显示为30,出现“0”的瞬间进入下一状态。S3:南北方向绿灯亮,东西 方向红灯亮,时间60s。数码管最大显示为60,出现“0”的瞬间进入下一状态。
3.4.2a 交通灯模拟电路
心得体会
经过一周的努力,我终于完成关于交通灯控制电路的电子课程设计,通过一周不断的查资料让我积累了许多实际操作经验,已初步掌握了数电的应用技术,以及数字电路的知识和有关器件的应用,我深刻体会到了数子电路技术对当今现代社会的重要作用。经过这次设计,我学会了许多东西,学会了严密的思考,构想及怎样把计划付诸于实际行动之中。同时与社会的不断高速发展的步伐相比,我认识到自己所学的知识和技能还远远不足,有些实际性的问题还不能够解决,缺少很多有实际运用价值的知识储备,缺乏应有的动手解决实际问题的能力,缺乏些高效利用及筛选大量资料的能力,缺乏资源共享及应有的团队合作精神,有待进一步提高,我应当学好自己的专业知识以适应不断发展的社会。
在这次课程设计中,我学会了如何有效的利用网络资源及图书馆的藏书,找到了几个很不错的专业网站,为以后的查阅专业方面的信息和相互之间的交流打下了坚实的基础,学会了如何看电路图,识别电路图,提高了自己的专业技能,同时也培养了自己独立解决实际问题的能力,也培养了自己认真和严谨的科学态度,收到了很大的启发,为以后的工作积累了些宝贵的经验。
参考文献
[1]高吉祥.数字电子技术.北京:电子工业出版社
[2]梁宗善.电子技术基础课程设计[M].武汉:华中理工大学出版社 [3]李玲远,范绿蓉,陈小宇.电子技术基础实验.北京:科学出版社 [4]彭介华.电子技术课程设计指导[M].北京:高等教育出版社 [5]康光华
电子技术基础(数电部分)华中理工大学电子学教研室