数电设计报告.docx
《数电设计报告.docx》由会员分享,可在线阅读,更多相关《数电设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
数电设计报告
2013—2014学年第三学期
《数字电子技术课程设计》报告
(适用专业:
电气12级)
专业班级
姓名
学号
开课系室电工电子学教学中心
设计日期2014年7月4日~8日
目录
1、设计任务与要求
2、系统设计总体方案
3、各子模块设计
3.1时钟分频模块
3.2倒计时模块
3.3交通灯控制模块
3.4点阵显示模块
4、总体设计
5、实习总结与讨论
6、附录
一、设计任务与要求
1、数字电子技术课程设计题目:
交通灯控制电路设计
2、设计任务及原理:
交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,而如果车子可以左右转弯的通行就比较复杂。
要完成本实验,首先必须了解交通路灯的燃灭规律。
本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各四个。
依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。
其交通灯的燃灭规律为:
东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯闪烁,红灯亮(表示左转弯),再延时一段时间后,黄灯开始闪烁。
闪烁若干次后,再切换到东西路口方向,重复上述过程。
在实验中使用4个七段码管中的任意两个数码管显示时间。
东西路和南北路的通车时间均设定为20s(其中,绿灯亮时间为10s,绿灯闪烁时间为5s,黄灯闪烁时间为5s)。
数码管的时间总是显示为20、19、18、17……2、1、0、20、19、18……。
在显示时间小于等于5秒的时候,通车方向的黄灯闪烁。
在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。
扩展要求:
1、利用一个开关将0-20s扩展为0-30s(30-10s之间绿灯亮,其他与基本要求相同);
2、增加交警控制模块:
用一个开关切换自动模式(上述情况属于自动模式)和人工模式(交警控制模式):
用4个开关分别实现东西向通行(东西向绿灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯亮,东西向红灯亮,没有时间限制),实现东西向左转弯(东西向绿灯闪烁,东西向红灯亮,南北向红灯亮,没有时间限制),实现南北向通行(南北向绿灯闪烁,南北向红灯亮,东西向红灯亮,没有时间限制)。
3、具体要求:
本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的交通灯模块和七段码管中的任意两个来显示。
系统时钟选择时钟模块的50MHz时钟,黄灯和绿灯闪烁时钟要求为2Hz,七段码管的时间显示为1Hz脉冲,即每1s中递减一次。
在东西向绿灯期间,点阵显示自己的姓名;在南北向绿灯期间,点阵显示自己的学号后3位。
显示方式:
1秒显示一个汉字或者一个数字(汉字和数字均静止不动,即不循环),然后全暗1秒,然后再显示一个汉字或者一个数字,以此类推。
二、系统设计总体方案
1、外部输入脉冲信号时钟源CP(50MHz),经适当分频后供计数器使用。
2、输出2组显示译码信号(每组7个输出端),分别接到外部的两个七段数码管M1、M2上,M1和M2分别显示倒计时的十位和个位。
3、输出6个高低电平信号,分别接到外部的6个指示纵向、横向的LED灯。
(输出高电平时,对应的LED灯亮)
其具体框图如下:
图1交通灯控制电路结构框图
根据如上说明,本设计的主要任务和设计要求是:
1、按照现代数字系统的Top-Down模块化设计方法,提出交通灯控制电路设计系统的整体设计方案,并进行正确的功能划分,分别提出并实现控制器、计数器、输出译码、点阵显示等模块化子系统的设计方案。
2、在QuartusⅡ的EDA设计环境中,完成系统的顶层设计、各子系统的模块化设计。
分别完成各个基于Verilog语言实现的子模块(包括控制器电路、计数器电路、输出译码电路、点阵显示电路)的逻辑功能仿真。
最后对顶层设计进行功能仿真。
3、在2步的基础上,用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
观察实验结果是否与自己的编程思想一致。
三、各子模块设计
1、时钟分频模块
(1)、源代码
modulefenpin(clk50,clk1,clk2,clk1k);
inputclk;
outputclk1,clk2,clk1k;
reg[31:
0]cnt1,cnt2,cnt3;
regclk1,clk2,clk1k;
initial
begin
clk1=0;
clk2=0;
clk1k=0;
cnt1=0;
cnt2=0;
cnt3=0;
end
always@(posedgeclk50)
begin
if(cnt1==24999999)
begin
clk1<=~clk1;
cnt1<=0;
end
else
begin
cnt1<=cnt1+1;
end
if(cnt2==12499999)
begin
clk2<=~clk2;
cnt2<=0;
end
else
begin
cnt2<=cnt2+1;
end
if(cnt3==24999)
begin
clk1k<=~clk1k;
cnt3<=0;
end
else
begin
cnt3<=cnt3+1;
end
end
endmodule
(2)元件
(3)仿真波形
因把50MHZ分成1HZ波形显示不出来,所以把分频倍数减小1000倍,用于检验。
2、倒计时模块
(1)、源代码
moduledaojishi(clk1,k1,seg1,seg2,out,z);
inputclk1,k1;
output[6:
0]seg1,seg2;
outputout,z;
reg[6:
0]seg1,seg2;
regz;
initialz=1;
reg[4:
0]out;
integercnt,a,b;
initialcnt=0;
always@(posedgeclk1)
begin
if(k1==0)
begin
if(cnt>0)
cnt=cnt-1;
elseif(cnt==0)
begin
cnt=20;
z=~z;
end
out=cnt;
end
else
begin
if(cnt>0)
begin
cnt=cnt-1;
end
elseif(cnt==0)
begin
cnt=30;
z=~z;
end
out=cnt;
end
a=cnt%10;
case(a)
0:
seg1=7'b0000001;
1:
seg1=7'b1001111;
2:
seg1=7'b0010010;
3:
seg1=7'b0000110;
4:
seg1=7'b1001100;
5:
seg1=7'b0100100;
6:
seg1=7'b1100000;
7:
seg1=7'b0001111;
8:
seg1=7'b0000000;
9:
seg1=7'b0001100;
endcase
b=(cnt-cnt%10)/10;
case(b)
0:
seg2=7'b0000001;
1:
seg2=7'b1001111;
2:
seg2=7'b0010010;
3:
seg2=7'b0000110;
endcase
end
endmodule
(2)元件
(3)仿真波形
3、交通灯控制模块
(1)源代码
modulekongzhi(in,z,clk2,r1,y1,g1,r2,y2,g2,k2,k3,k4,k5,k6);
inputclk2,z,k2,k3,k4,k5,k6;
input[4:
0]in;
outputr1,y1,g1,r2,y2,g2;
regr1,y1,g1,r2,y2,g2;
integercnt;
initialcnt=0;
always@(in)
begin
if(k2==0)
begin
cnt=in;
if(z==0)
begin
if(cnt>=10)//we
begin
g1=1;r1=0;y1=0;g2=0;r2=1;y2=0;
end
elseif(cnt>=5&&cnt<10)//weg1shine
begin
g1=clk2;r1=1;y1=0;g2=0;r2=1;y2=0;
end
elseif(cnt>=0&&cnt<5)//wey1shine
begin
g1=0;r1=0;y1=clk2;g2=0;r2=1;y2=0;
end
end
elseif(z==1)
begin
if(cnt>=10)//ns
begin
g1=0;r1=1;y1=0;g2=1;r2=0;y2=0;
end
elseif(cnt>=5&&cnt<10)//nsg2shine
begin
g1=0;r1=1;y1=0;g2=clk2;r2=1;y2=0;
end
elseif(cnt>=0&&cnt<5)//nsy2shine
begin
g1=0;r1=1;y1=0;g2=0;r2=0;y2=clk2;
end
end
end
else
if(k3==1)
begin
g1=1;r1=0;y1=0;g2=0;r2=1;y2=0;
end
elseif(k4==1)
begin
g1=clk2;r1=1;y1=0;g2=0;r2=1;y2=0;
end
elseif(k5==1)
begin
g1=0;r1=1;y1=0;g2=1;r2=0;y2=0;
end
elseif(k6==1)
begin
g1=0;r1=1;y1=0;g2=clk2;r2=1;y2=0;
end
end
endmodule
(2)元件
(3)波形仿真
4、点阵显示模块
(1)源代码
moduledianzhen(clk1,clk1k,h,l,z);
inputclk1,clk1k,z;
//input[4:
0]in1;
output[15:
0]h,l;
reg[15:
0]h,l;
integercnt,cnt1;//jishubianliang
integera,b,c,d,e,f;//fuzhibianliang
initialcnt=0;
initialcnt1=0;
always@(posedgeclk1)
begin
if(cnt<6)
cnt=cnt+1;
else
cnt=0;
end
always@(posedgeclk1k)
begin
if(cnt<16)
cnt1=cnt1+1;
else
cnt1=0;
if(z==0)
begin
if(cnt%6==0)
begin
a=cnt1%16;
case(a)//
0:
beginl=16'b0000_0000_0100_0000;h=16'b0111_1111_1111_1111;end
1:
beginl=16'b0000_0000_1010_0000;h=16'b1011_1111_1111_1111;end
2:
beginl=16'b0111_1001_0001_0000;h=16'b1101_1111_1111_1111;end
3:
beginl=16'b0100_1010_0000_1000;h=16'b1110_1111_1111_1111;end
4:
beginl=16'b0100_1101_1111_0100;h=16'b1111_0111_1111_1111;end
5:
beginl=16'b0100_1000_0000_0000;h=16'b1111_1011_1111_1111;end
6:
beginl=16'b0100_1011_1100_0100;h=16'b1111_1101_1111_1111;end
7:
beginl=16'b0100_1010_0101_0100;h=16'b1111_1110_1111_1111;end
8:
beginl=16'b0111_1011_1101_0100;h=16'b1111_1111_0111_1111;end
9:
beginl=16'b0111_1010_0101_0100;h=16'b1111_1111_1011_1111;end
10:
beginl=16'b0000_0011_1101_0100;h=16'b1111_1111_1101_1111;end
11:
beginl=16'b0000_0010_0101_0100;h=16'b1111_1111_1110_1111;end
12:
beginl=16'b0000_0010_0100_0100;h=16'b1111_1111_1111_0111;end
13:
beginl=16'b0000_0010_1101_1100;h=16'b1111_1111_1111_1011;end
14:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1101;end
15:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1110;end
endcase
end
elseif(cnt%6==2)//
begin
b=cnt1%16;
case(b)
0:
beginl=16'b0000_0001_0001_0000;h=16'b0111_1111_1111_1111;end
1:
beginl=16'b0010_0001_0001_0000;h=16'b1011_1111_1111_1111;end
2:
beginl=16'b0001_0001_0001_0000;h=16'b1101_1111_1111_1111;end
3:
beginl=16'b0001_0001_0001_0000;h=16'b1110_1111_1111_1111;end
4:
beginl=16'b0000_0001_0001_0000;h=16'b1111_0111_1111_1111;end
5:
beginl=16'b0000_0001_0001_0000;h=16'b1111_1011_1111_1111;end
6:
beginl=16'b0111_0001_0001_0000;h=16'b1111_1101_1111_1111;end
7:
beginl=16'b0001_0001_0001_0000;h=16'b1111_1110_1111_1111;end
8:
beginl=16'b0001_0001_0001_0000;h=16'b1111_1111_0111_1111;end
9:
beginl=16'b0001_0001_0001_0000;h=16'b1111_1111_1011_1111;end
10:
beginl=16'b0001_0001_0001_0000;h=16'b1111_1111_1101_1111;end
11:
beginl=16'b0001_0001_0001_0000;h=16'b1111_1111_1110_1111;end
12:
beginl=16'b0010_1000_0000_0000;h=16'b1111_1111_1111_0111;end
13:
beginl=16'b0100_0111_1111_1100;h=16'b1111_1111_1111_1011;end
14:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1101;end
15:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1110;end
endcase
end
elseif(cnt%6==4)//
begin
c=cnt1%16;
case(c)
0:
beginl=16'b0000_0010_0000_0000;h=16'b0111_1111_1111_1111;end
1:
beginl=16'b0000_0010_0000_0000;h=16'b1011_1111_1111_1111;end
2:
beginl=16'b0011_1111_1111_1000;h=16'b1101_1111_1111_1111;end
3:
beginl=16'b0000_0100_0000_0000;h=16'b1110_1111_1111_1111;end
4:
beginl=16'b0000_1001_0000_0000;h=16'b1111_0111_1111_1111;end
5:
beginl=16'b0001_0001_0000_0000;h=16'b1111_1011_1111_1111;end
6:
beginl=16'b0001_1111_1111_0000;h=16'b1111_1101_1111_1111;end
7:
beginl=16'b0000_0001_0000_0000;h=16'b1111_1110_1111_1111;end
8:
beginl=16'b0000_0001_0000_0000;h=16'b1111_1111_0111_1111;end
9:
beginl=16'b0001_0001_0100_0000;h=16'b1111_1111_1011_1111;end
10:
beginl=16'b0001_0001_0010_0000;h=16'b1111_1111_1101_1111;end
11:
beginl=16'b0010_0001_0001_0000;h=16'b1111_1111_1110_1111;end
12:
beginl=16'b0100_0001_0001_0000;h=16'b1111_1111_1111_0111;end
13:
beginl=16'b0000_0111_0000_0000;h=16'b1111_1111_1111_1011;end
14:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1101;end
15:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1110;end
endcase
end
elseif(cnt%6==1||cnt%6==3||cnt%6==5)//black
begin
l=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;
end
end
elseif(z==1)
begin
if(cnt%6==0)//shuzi4
begin
d=cnt1%16;
case(d)
0:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
1:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
2:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
3:
beginl=16'b0000_1000_0000_0000;h=16'b1110_1111_1111_1111;end
4:
beginl=16'b0000_1000_0000_0000;h=16'b1111_0111_1111_1111;end
5:
beginl=16'b0001_1000_0000_0000;h=16'b1111_1011_1111_1111;end
6:
beginl=16'b0010_1000_0000_0000;h=16'b1111_1101_1111_1111;end
7:
beginl=16'b0100_1000_0000_0000;h=16'b1111_1110_1111_1111;end
8:
beginl=16'b0100_1000_0000_0000;h=16'b1111_1111_0111_1111;end
9:
beginl=16'b0111_1110_0000_0000;h=16'b1111_1111_1011_1111;end
10:
beginl=16'b0000_1000_0000_0000;h=16'b1111_1111_1101_1111;end
11:
beginl=16'b0000_1000_0000_0000;h=16'b1111_1111_1110_1111;end
12:
beginl=16'b0001_1110_0000_0000;h=16'b1111_1111_1111_0111;end
13:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
14:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
15:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
endcase
end
elseif(cnt%6==2)//shuzi2
begin
e=cnt1%16;
case(e)
0:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
1:
beginl=16'b0000_0000_0000_0000;h=16'b1111_1111_1111_1111;end
2:
beginl=16'b0000_0000_0000_0000;h=16'b111