《中国石油大学华东交通灯控制电路.doc》由会员分享,可在线阅读,更多相关《中国石油大学华东交通灯控制电路.doc(14页珍藏版)》请在三一文库上搜索。
1、20132014学年第三学期数字电子技术课程设计任务书(适用专业:电气12级、自动化12级、勘查(卓越)12级) 专业班级 姓 名 学 号 开课系室 设计日期 数字电子技术课程设计题目:交通灯控制电路设计一、设计任务及要求1、设计任务及原理:交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂。要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各四个。依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。其交通灯的燃灭
2、规律为:东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。在实验中使用4个七段码管中的任意两个数码管显示时间。东西路和南北路的通车时间均设定为20s(其中,绿灯亮时间为10s,绿灯闪烁时间为5s,黄灯闪烁时间为5s)。数码管的时间总是显示为20、19、18、172、1、0、20、19、18。在显示时
3、间小于等于5秒的时候,通车方向的黄灯闪烁。在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。2、扩展要求:a.利用一个开关将0-20s扩展为0-30s(30-10s之间绿灯亮,其他与基本要求相同);b.增加交警控制模块:用一个开关切换自动模式(上述情况属于自动模式)和人工模式(交警控制模式):用4个开关分别实现东西向通行(东西向绿灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯亮,东西向红灯亮,没有时间限制),实现东西向左转弯(东西向绿灯闪烁,东西向红灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯闪烁,南北向红灯亮,东西向红灯亮,没
4、有时间限制)。3、具体要求:本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。系统时钟选择时钟模块的50MHz时钟,黄灯和绿灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次。在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。显示方式:1秒显示一个汉字或者一个数字(汉字和数字均静止不动,即不循环),然后全暗1秒,然后再显示一个汉字或者一个数字,以此类推。二、输入输出资源说明:1、外部输入脉冲信号时钟源CP(50MHz),经适当分频后供计数器使用。2、输出2组显示译码信号(每组7个输
5、出端),分别接到外部的两个七段数码管M1、M2上,M1和M2分别显示倒计时的十位和个位。3、输出6个高低电平信号,分别接到外部的6个指示纵向、横向的LED灯。(输出高电平时,对应的LED灯亮)其具体框图如下:1Hz纵向指示灯LED1控制器计数器(倒计时;通车时间倒计时)七段LED数码管显示(2个)50MHz纵向指示灯LED3横停指示灯LED6纵向指示灯LED2横向指示灯LED5横向指示灯LED4CLK显示姓名或者学号图1 交通灯控制电路结构框图根据如上说明,本设计的主要任务和设计要求是:1、按照现代数字系统的Top-Down模块化设计方法,提出交通灯控制电路设计系统的整体设计方案,并进行正确的
6、功能划分,分别提出并实现控制器、计数器、输出译码、点阵显示等模块化子系统的设计方案。2、在Quartus的EDA设计环境中,完成系统的顶层设计、各子系统的模块化设计。分别完成各个基于Verilog语言实现的子模块(包括控制器电路、计数器电路、输出译码电路、点阵显示电路)的逻辑功能仿真。最后对顶层设计进行功能仿真。 3、在2步的基础上,用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致。三、电路子模块的设计与仿真 根据设计要求及原理,我所设计的交通灯控制电路主要包含四个子模块,分别是:分频器、倒计时计数器、点阵显示器、控制器。1、分频器1)Veril
7、og 源文件module fenpinqi(clk,clk1,clk2,clk1000);input clk;output clk1,clk2,clk1000;reg 31:0cnt1,cnt2,cnt3;reg clk1,clk2,clk1000;initialbegin clk1=0; clk2=0; clk1000=0; cnt1=0; cnt2=0; cnt3=0;endalways(posedge clk) begin if(cnt1=24999999)beginclk1=clk1;cnt1=0;endelse begin cnt1=cnt1+1; endif(cnt2=124999
8、99)beginclk2=clk2;cnt2=0;endelse begin cnt2=cnt2+1; endif(cnt3=24999)beginclk1000=clk1000;cnt3=0;endelse begin cnt3=cnt3+1; endendendmodule2)仿真文件3)功能仿真波形1hz和2hz的频率过低,无法仿真。2、倒计时计数器1)Verilog 源文件module daojishi(clk1,k,seq1,seq2,ji,out);/ji记录循环次数,out输出二进制秒数input clk1,k;output6:0 seq1,seq2;output ji;outp
9、ut4:0out;reg6:0 seq1,seq2;reg ji;reg4:0out;parameter Num1=20;parameter Num2=30;integer cnt;initial cnt=0;integer cnt1;initial cnt1=0;always(posedge clk1)begin if(k=0) begin if(cnt=0) begin cnt=20; cnt1=cnt1+1; end else begin cnt=cnt-1; end end else if(cnt=0) begin cnt=30; cnt1=cnt1+1; end else begin
10、cnt=cnt-1; endendalways(cnt)begincase(cnt%10)0:seq1=7b0000001;1:seq1=7b1001111;2:seq1=7b0010010;3:seq1=7b0000110;4:seq1=7b1001100;5:seq1=7b0100100;6:seq1=7b0100000;7:seq1=7b0001111;8:seq1=7b0000000;9:seq1=7b0000100;endcaseendalways(cnt)begincase(cnt-(cnt%10)/10)0:seq2=7b0000001;1:seq2=7b1001111;2:se
11、q2=7b0010010;3:seq2=7b0000110;4:seq2=7b1001100;5:seq2=7b0100100;6:seq2=7b0100000;7:seq2=7b0001111;8:seq2=7b0000000;9:seq2=7b0000100;endcaseendalways(cnt)beginout=cnt;/shuendalways(cnt1)begincase(cnt1%2)0:ji=0;/oushu1:ji=1;/jishuendcaseendendmodule2)仿真文件3)功能仿真波形3、点阵显示器1)Verilog源文件input clk1000,we,ns,
12、k;input4:0shu;output 15:0 r,c;reg15:0 r,c;integer cnt1;initial cnt1=0;always(posedge clk1000)begincnt1=cnt1+1;if(k=0)beginif(we=0)beginif(shu=20|shu=14)/史beginif (cnt1%16=0)beginc=16b0000000100000000; r=16b0111111111111111;end else if(cnt1%16=1) beginc=16b0000000100000000;r=16b1011111111111111; ende
13、lse if(cnt1%16=2) beginc=16b0011111111111000;r=16b1101111111111111;endelse if(cnt1%16=3)beginc=16b0010000100001000;r=16b1110111111111111;endelse if(cnt1%16=4)beginc=16b0010000100001000;r=16b1111011111111111;endelse if(cnt1%16=5)beginc=16b0010000100001000;r=16b1111101111111111;end else if(cnt1%16=6)b
14、eginc=16b0010000100001000;r=16b1111110111111111;end else if(cnt1%16=7)beginc=16b0011111111111000;r=16b1111111011111111;endelse if(cnt1%16=8)beginc=16b0000000100000000;r=16b1111111101111111;endelse if(cnt1%16=9)beginc=16b0001000100000000;r=16b1111111110111111;end else if(cnt1%16=10)beginc=16b00001010
15、00000000;r=16b1111111111011111;end else if(cnt1%16=11)beginc=16b0000011000000000;r=16b1111111111101111;end else if(cnt1%16=12)beginc=16b0000100110000000;r=16b1111111111110111;endelse if(cnt1%16=13)beginc=16b0001000001100000;r=16b1111111111111011;endelse if(cnt1%16=14)beginc=16b0010000000011000;r=16b
16、1111111111111101;endelsebeginc=16b1100000000000111;r=16b1111111111111110; end endelse if(shu=18|shu=12)/育beginif (cnt1%16=0) beginc=16b0000000100000000;r=16b011111111111111111; endelse if(cnt1%16=1)beginc=16b0000000010000000;r=16b1011111111111111;endelse if(cnt1%16=2)beginc=16b0111111111111111;r=16b
17、1101111111111111;endelse if(cnt1%16=3)begin module xianshi(shu,clk1000,we,ns,k,r,c);c=16b0000010000000000;r=16b1110111111111111;endelse if(cnt1%16=4)beginc=16b0000100000001000;r=16b1111011111111111;endelse if(cnt1%16=5)beginc=16b0001111111111100;r=16b1111101111111111;endelse if(cnt1%16=6)beginc=16b0
18、000000000000100;r=16b1111110111111111;endelse if(cnt1%16=7)beginc=16b0000111111111000;r=16b1111111011111111;endelse if(cnt1%16=8)beginc=16b0000100000001000;r=16b1111111101111111;endelse if(cnt1%16=9)beginc=16b0000111111111000;r=16b1111111110111111;endelse if(cnt1%16=10)beginc=16b0000100000001000;r=1
19、6b1111111111011111;endelse if(cnt1%16=11)beginc=16b0000111111111000;r=16b1111111111101111;endelse if(cnt1%16=12)beginc=16b0000100000001000;r=16b1111111111110111;endelse if(cnt1%16=13)beginc=16b0000100000001000;r=16b1111111111111011;endelse if(cnt1%16=14)beginc=16b0000100000101000;r=16b11111111111111
20、01;endelse beginc=16b0000100000010000;r=16b1111111111111110;endendelse if(shu=16)/铭beginif (cnt1%16=0)beginc=16b0000100000100000;r=16b0111111111111111; endelse if(cnt1%16=1)beginc=16b0000100000100000;r=16b1011111111111111;endelse if(cnt1%16=2)beginc=16b0001111001111110;r=16b1101111111111111;endelse
21、if(cnt1%16=3)beginc=16b0001000010000010;r=16b1110111111111111;endelse if(cnt1%16=4)beginc=16b0010000101000100;r=16b1111011111111111;endelse if(cnt1%16=5)beginc=16b0101111000101000;r=16b1111101111111111;endelse if(cnt1%16=6)beginc=16b0000100000010000;r=16b1111110111111111;endelse if(cnt1%16=7)beginc=
22、16b0000100000100000;r=16b1111111011111111;endelse if(cnt1%16=8)beginc=16b0111111001000000;r=16b1111111101111111;endelse if(cnt1%16=9)beginc=16b0000100011111110;r=16b1111111110111111;endelse if(cnt1%16=10)beginc=16b0000100101000010;r=16b1111111111011111;endelse if(cnt1%16=11)beginc=16b000010000100001
23、0;r=16b1111111111101111;endelse if(cnt1%16=12)beginc=16b0000101001000010;r=16b1111111111110111;endelse if(cnt1%16=13)beginc=16b0000110001000010;r=16b1111111111111011;endelse if(cnt1%16=14)beginc=16b0000100001111110;r=16b1111111111111101;endelsebeginc=16b0000000001000010;r=16b1111111111111110;end end
24、 else/暗 beginc=16b0000000000000000;r=16b1111111111111111;endendendif(ns=1)beginif(shu=20|shu=14)/4beginif (cnt1%16=0)beginc=16b0000000001100000;r=16b0111111111111111;endelseif(cnt1%16=1)beginc=16b0000000011100000;r=16b1011111111111111;endelse if(cnt1%16=2)beginc=16b0000000110110000;r=16b110111111111
25、1111;endelse if(cnt1%16=3)beginc=16b0000001100110000;r=16b1110111111111111;endelse if(cnt1%16=4)beginc=16b0000011000110000;r=16b1111011111111111;endelse if(cnt1%16=5)beginc=16b0000011000110000;r=16b1111101111111111;endelse if(cnt1%16=6)beginc=16b0000110000110000;r=16b1111110111111111;endelse if(cnt1
26、%16=7)beginc=16b0001100000110000;r=16b1111111011111111;endelse if(cnt1%16=8)beginc=16b0011100000110000;r=16b1111111101111111;endelse if(cnt1%16=9)beginc=16b0011000000110000;r=16b1111111110111111;endelse if(cnt1%16=10)beginc=16b0110000000110000;r=16b1111111111011111;endelse if(cnt1%16=11)beginc=16b01
27、11111111111110;r=16b1111111111101111;endelse if(cnt1%16=12)beginc=16b0111111111111110;r=16b1111111111110111;endelseif(cnt1%16=13)beginc=16b0000000000110000;r=16b1111111111111011;endelse if(cnt1%16=14)beginc=16b0000000000110000;r=16b1111111111111101;endelsebeginc=16b0000000011111000;r=16b111111111111
28、1110;endendelse if(shu=18|shu=12)/0beginif (cnt1%16=0)beginc=16b0000001111100000;r=16b0111111111111111;endelse if(cnt1%16=1)beginc=16b0000011111110000;r=16b1011111111111111;endelse if(cnt1%16=2)beginc=16b0000110000011000;r=16b1101111111111111;endelse if(cnt1%16=3)beginc=16b0001100000001100;r=16b1110
29、111111111111;endelse if(cnt1%16=4)beginc=16b0001100000001100;r=16b1111011111111111;endelse if(cnt1%16=5)beginc=16b0001100000001100;r=16b1111101111111111;endelse if(cnt1%16=6)beginc=16b0001100000001100;r=16b1111110111111111;endelse if(cnt1%16=7)beginc=16b0001100000001100;r=16b1111111011111111;endelse
30、 if(cnt1%16=8)beginc=16b0001100000001100;r=16b1111111101111111;endelse if(cnt1%16=9)beginc=16b0001100000001100;r=16b1111111110111111;endelse if(cnt1%16=10)beginc=16b0001100000001100;r=16b1111111111011111;endelse if(cnt1%16=11)beginc=16b0001100000001100;r=16b1111111111101111;endelse if(cnt1%16=12)beg
31、inc=16b0001100000001100;r=16b1111111111110111;endelse if(cnt1%16=13)beginc=16b0000110000011000;r=16b1111111111111011;endelse if(cnt1%16=14)beginc=16b0000011111110000;r=16b1111111111111101;endelsebeginc=16b0000001111100000;r=16b1111111111111110;endendelse if(shu=16)/4beginif (cnt1%16=0)beginc=16b0000
32、000001100000;r=16b0111111111111111;endelseif(cnt1%16=1)beginc=16b0000000011100000;r=16b1011111111111111;endelse if(cnt1%16=2)beginc=16b0000000110110000;r=16b1101111111111111;endelse if(cnt1%16=3)beginc=16b0000001100110000;r=16b1110111111111111;endelse if(cnt1%16=4)beginc=16b0000011000110000;r=16b111
33、1011111111111;endelse if(cnt1%16=5)beginc=16b0000011000110000;r=16b1111101111111111;endelse if(cnt1%16=6)beginc=16b0000110000110000;r=16b1111110111111111;endelse if(cnt1%16=7)beginc=16b0001100000110000;r=16b1111111011111111;endelse if(cnt1%16=8)beginc=16b0011100000110000;r=16b1111111101111111;endels
34、e if(cnt1%16=9)beginc=16b0011000000110000;r=16b1111111110111111;endelse if(cnt1%16=10)beginc=16b0110000000110000;r=16b1111111111011111;endelse if(cnt1%16=11)beginc=16b0111111111111110;r=16b1111111111101111;endelse if(cnt1%16=12)beginc=16b0111111111111110;r=16b1111111111110111;endelseif(cnt1%16=13)be
35、ginc=16b0000000000110000;r=16b1111111111111011;endelse if(cnt1%16=14)beginc=16b0000000000110000;r=16b1111111111111101;endelsebeginc=16b0000000011111000;r=16b1111111111111110;endendelse/暗beginc=16b000000000000000;r=16b1111111111111111;endendendendmodule2)仿真文件3)功能仿真波形由于仿真波形较长,只截取了其中一部分,可以看出这部分显示的是我的学号
36、404中的44、控制器1)Verilog源文件module kongzhiqi(clk,k,k1,k2,k3,k4,k5,shu,y1,y2,r1,r2,g1,g2,gs1,gs2);input clk,k,k1,k2,k3,k4,k5;input4:0shu;output y1,y2,r1,r2,g1,g2,gs1,gs2;reg y1,y2,r1,r2,g1,g2,gs1,gs2;nitial beginr1=1;r2=1;y1=0;y2=0;g1=0;g2=0;gs1=0;gs210)/东西方向通车beging1=1;g2=0;r1=0;r2=1;y1=0;y2=0;gs1=0;gs2=
37、0;endelse if(shu5)/东西向左转beginr1=1;r2=1;y1=0;y2=0;g1=0;g2=0;gs1=1;gs2=0; endelse if(shu=5)/东西向黄灯闪烁begin r1=0;r2=1;y1=1;y2=0;g1=0;g2=0;gs1=0;gs210)/南北向通车 begin r1=1;r2=0;y1=0;y2=0;g1=0;g2=1;gs1=0;gs2=0; end else if(shu5)/南北向转弯 begin r1=1;r2=1;y1=0;y2=0;g1=0;g2=0;gs1=0;gs2=1; end else if(shu=5)/南北向黄灯闪烁
38、 begin r1=1;r2=0;y1=0;y2=1;g1=0;g2=0;gs1=0;gs2=0; end end endelse/k=1是交警控制模式 begin if(k2=1&k3=0&k4=0&k5=0)/东西向通车 begin r1=0;r2=1;y1=0;y2=0;g1=1;g2=0;gs1=0;gs2=0; end else if(k2=0&k3=1&k4=0&k5=0)/南北向通车 begin r1=1;r2=0;y1=0;y2=0;g1=0;g2=1;gs1=0;gs2=0; end else if(k2=0&k3=0&k4=1&k5=0)/东西向转弯 begin r1=1;r2=1;y1=0;y2=0;g1=0;g2=0;gs1=1;gs2=0; end else if(k2=0&k3=0&k4=0&k5=1)/南北向转弯 begin r1=1;r2=1;y1=0;y2=0;g1=0;g2=0;gs1=0;gs2=1;/停止通车 end else begin r1=1;r2=1;y1=0;y2=0;g1=0;g2=0;gs1=0;gs2=0; end endendendmodule2)仿真文件3)功能仿真波形四、顶层设计与仿真1、顶层仿真文件2、功能仿真波形