基于FPGA实现多功能数字钟和交通灯的设计.docx
- 文档编号:12759149
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:22
- 大小:147.42KB
基于FPGA实现多功能数字钟和交通灯的设计.docx
《基于FPGA实现多功能数字钟和交通灯的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA实现多功能数字钟和交通灯的设计.docx(22页珍藏版)》请在冰点文库上搜索。
基于FPGA实现多功能数字钟和交通灯的设计
目录
1设计任务与要求……………………………………………………………..……..3
2系统设计总体方案………………………………………………………….....…3
3数字时钟各模块电路具体实现……………………………………………..3
3.1时钟分频模块………………………………………………...…………....3
3.2模式选择模块…………………………………….…………………………..4
3.3时钟模块……………………………………………………………....……...5
3.4显示模块……………………………………………………………….…...10
3.5电子时钟原理图……………………………………………………..……12
4交通灯各模块电路具体实现………………………………………………13
4.1交通灯原理图………………………………………………………………..13
4.2主干道控制(time1)…………………………………………………………13
4.3次干道控制(time2)…………………………………………………………14
4.4灯显控制(light)……………………………………………………………….15
5总结……………………………………………………………………..………………15
参考文献…………………………………………………………………………………..16
1设计任务与要求
数字电子时钟:
(1)基本的要求:
实现时、分、秒的显示
(2)具有校时校分功能
(3)具有整点报时功能(选做)
(4)具有闹铃功能(选做)
交通灯:
(1)主干道:
45秒绿灯,5秒黄灯,25秒红灯
(2)次干道:
50秒红灯,20秒绿灯,5秒红灯
(3)时间可调(选做)
2系统设计总体方案
2.1数字时钟总体设计
2.2交通灯总体设计
3数字时钟各模块电路具体实现
3.1分频模块
由50MHz的输入频率分离10Hz(用于时钟脉冲)、1KHz(数码管扫描脉冲)、gaoyin_1KHz(整点报时高音频率)、diyin_500Hz(整点报时低音频率)的不同频率。
代码:
modulefenpin(clk,clk_1Hz,
clk_2Hz,clk_4Hz,
clk_10Hz,clk_1KHz,
clk_6MHz,
clk_gaoyin_1KHz,
clk_diyin_500Hz);
inputclk;
outputclk_4Hz,clk_6MHz,clk_gaoyin_1KHz,clk_diyin_500Hz,clk_1Hz,clk_2Hz,clk_10Hz,clk_1KHz;
regclk_4Hz,clk_6MHz,clk_gaoyin_1KHz,clk_diyin_500Hz,clk_1Hz,clk_2Hz,clk_10Hz,clk_1KHz;
reg[27:
0]count1,count2,count3,count4,count5,count6,count7,count8;
always@(posedgeclk)
begin
count1=count1+1'b1;
if(count1==24999999)beginclk_1Hz=~clk_1Hz;count1=0;end
count2=count2+1'b1;
if(count2==12499999)beginclk_2Hz=~clk_2Hz;count2=0;end
count3=count3+1'b1;
if(count3==2499999)beginclk_10Hz=~clk_10Hz;count3=0;end
count4=count4+1'b1;
if(count4==24999)beginclk_1KHz=~clk_1KHz;count4=0;end
count5=count5+1'b1;
if(count5==6249000)beginclk_4Hz=~clk_4Hz;count5=0;end
count6=count6+1'b1;
if(count6==4)beginclk_6MHz=~clk_6MHz;count6=0;end
count7=count7+1'b1;
if(count7==24999)beginclk_gaoyin_1KHz=~clk_gaoyin_1KHz;count7=0;end
count8=count8+1'b1;
if(count5==50000)beginclk_diyin_500Hz=~clk_diyin_500Hz;count8=0;end
end
endmodule
3.2模式选择模块
输入高电平有效,未接受信号时输出M=0;接受到第一个高电平信号时M=1;接受到第二个高电平信号时M=2;接受到第三个高电平信号时M=3;接受到第四个高电平信号时M=4;
代码:
modulemoshi(Clk,M);
inputClk;
//inputres;
output[2:
0]M;
reg[2:
0]M;
always@(posedgeClk)
begin
M=M+1;
if(M==5)
M=0;
end
endmodule
该模块仿真图
图一模式选择仿真图
3.3时钟模块
该模块包括:
时钟、校时、闹钟、整点报时四部分。
代码:
moduleshizhong(CLK,M,N,T,B,C,gap,dip,gao,di);
inputCLK;//输入频率10Hz;
input[2:
0]M;//输入模式M
inputB,C,gap,dip;
output[23:
0]T;
outputN,gao,di;
reg[23:
0]D=1202501;//设置初始时间:
12:
59:
45
reg[23:
0]T;
reg[23:
0]Q=1245184;//时钟初始闹铃:
13:
00:
00
regN,gao,di;
reg[3:
0]i;
//regC;
always@(posedgeCLK)
begin
i=i+1;
if(M==0)//模式0时正常显示时间
begin
T=D;
if(i>9)
begin
i=0;
D[3:
0]=D[3:
0]+1;
end
if(D[3:
0]==10)//miao
begin
D[3:
0]=0;
D[7:
4]=D[7:
4]+1;
if(D[7:
4]==6)
D[7:
4]=0;
if(D[7:
0]==0)//fen
D[11:
8]=D[11:
8]+1;
if(D[11:
8]==10)
begin
D[11:
8]=0;
D[15:
12]=D[15:
12]+1;
if(D[15:
12]==6)
D[15:
12]=0;
end
if(D[15:
0]==0)//shi
D[19:
16]=D[19:
16]+1;
if(D[19:
16]==10)
begin
D[19:
16]=0;
D[23:
20]=D[23:
20]+1;
end
end
if(D[23:
16]==36)
D[23:
0]=0;
if(D[15:
8]==89)//当分针为59时
begin
if(D[7:
0]==85||D[7:
0]==86||D[7:
0]==87||D[7:
0]==88)
//在55、56、57、58秒时di输出500Hz
di=dip;
else
begin
if(D[7:
0]==89)gao=gap;//在59秒时gao输出1KHz
end
end
else
begin
di=0;
gao=0;
end
end
if(M==1)//校时
begin
T=D;
if(B)//B为高电平时时针累加
begin
D[19:
16]=D[19:
16]+1;
if(D[19:
16]==10)
begin
D[19:
16]=0;
D[23:
20]=D[23:
20]+1;
end
if(D[23:
16]==36)
D[23:
16]=0;
end
if(C)//C为高电平时时针累减
begin
D[19:
16]=D[19:
16]-1;
if(D[19:
16]==15)
begin
D[19:
16]=9;
D[23:
20]=D[23:
20]-1;
end
if(D[23:
16]==249)
D[23:
16]=35;
end
end
if(M==2)//校分
begin
T=D;
if(B)//B为高电平时时针累加
begin
D[11:
8]=D[11:
8]+1;
if(D[11:
8]==10)
begin
D[11:
8]=0;
D[15:
12]=D[15:
12]+1;
end
if(D[15:
12]==6)
D[15:
12]=0;
end
if(C)//C为高电平时时针累减
begin
D[11:
8]=D[11:
8]-1;
if(D[11:
8]==15)
begin
D[11:
8]=9;
D[15:
12]=D[15:
12]-1;
end
if(D[15:
12]==15)
D[15:
12]=5;
end
end
if(M==3)//调节闹铃时
begin
T=Q;
if(B)
begin
Q[19:
16]=Q[19:
16]+1;
if(Q[19:
16]==10)
begin
Q[19:
16]=0;
Q[23:
20]=Q[23:
20]+1;
end
if(Q[23:
16]==36)
Q[23:
16]=0;
end
if(C)
begin
Q[19:
16]=Q[19:
16]-1;
if(Q[19:
16]==15)
begin
Q[19:
16]=9;
Q[23:
20]=Q[23:
20]-1;
end
if(Q[23:
16]==249)
Q[23:
16]=35;
end
end
if(M==4)//调节闹铃时
begin
T=Q;
if(B)
begin
Q[11:
8]=Q[11:
8]+1;
if(Q[11:
8]==10)
begin
Q[11:
8]=0;
Q[15:
12]=Q[15:
12]+1;
end
if(Q[15:
12]==6)
Q[15:
12]=0;
end
if(C)
begin
Q[11:
8]=Q[11:
8]-1;
if(Q[11:
8]==15)
begin
Q[11:
8]=9;
Q[15:
12]=D[15:
12]-1;
end
if(Q[15:
12]==15)
Q[15:
12]=5;
end
end
if(D[23:
8]==Q[23:
8]&&D[7:
0]<48)//闹铃控制输出端
N=1;
elseN=0;
end
endmodule
图二正常显示仿真
图三校时仿真
图四闹铃调节仿真
3.4显示模块
功能:
动态八位数码管扫描
输入参数:
扫描时钟clk_1k,待显示的数据d
输出参数:
数码管段选输出sm_seg,数码管位选输出sm_bit
备注:
待显示的数据为16进制格式,例如输入0x12345678,显示12345678
代码:
moduleled_drive3(clk_1k,D,sm_seg,sm_bit);//模块名suan_led
inputclk_1k;//输入时钟
input[23:
0]D;
output[7:
0]sm_seg;//数码管段选输出sm_seg
output[7:
0]sm_bit;//数码管位选输出sm_bit
reg[7:
0]sm_seg_r;//数码管段选输出寄存器
reg[7:
0]sm_bit_r;//数码管位选输出寄存器
reg[3:
0]disp_dat;//定义显示数码寄存器
reg[2:
0]count;//定义计数寄存器
assignsm_seg=sm_seg_r;//输出数码管译码结果
assignsm_bit=sm_bit_r;//输出数码管选择
always@(posedgeclk_1k)//定义上升沿触发进程
begin
count<=count+1'b1;
end
always@(posedgeclk_1k)
begin
case(count)//选择扫描显示数据
//3'd0:
disp_dat={d7,d6,d5,d4};//第一个数码管
//3'd1:
disp_dat={d3,d2,d1,d0};//第二个数码管
3'd2:
disp_dat=D[23:
20];//第三个数码管
3'd3:
disp_dat=D[19:
16];//第四个数码管
3'd4:
disp_dat=D[15:
12];//第五个数码管
3'd5:
disp_dat=D[11:
8];//第六个数码管
3'd6:
disp_dat=D[7:
4];//3'd6:
disp_dat={d7,d6,d5,d4};//第七个数码管
3'd7:
disp_dat=D[3:
0];//3'd7:
disp_dat={d3,d2,d1,d0};//第八个数码管
default:
disp_dat=0;
endcase
case(count)//选择数码管显示位
3'd0:
sm_bit_r=8'b1111_1111;//选择第一个数码管显示
3'd1:
sm_bit_r=8'b1111_1111;//选择第二个数码管显示
3'd2:
beginsm_bit_r=8'b1111_1011;end//选择第三个数码管显示
3'd3:
beginsm_bit_r=8'b1111_0111;end//选择第四个数码管显示
3'd4:
beginsm_bit_r=8'b1110_1111;end//选择第五个数码管显示
3'd5:
beginsm_bit_r=8'b1101_1111;end//选择第六个数码管显示
3'd6:
beginsm_bit_r=8'b1011_1111;end//选择第七个数码管显示
3'd7:
beginsm_bit_r=8'b0111_1111;end//选择第八个数码管显示
default:
sm_bit_r=8'b1111_1111;
endcase
end
always@(disp_dat)
begin
case(disp_dat)//七段译码
4'h0:
sm_seg_r=8'hc0;//显示"0"
4'h1:
sm_seg_r=8'hf9;//显示"1"
4'h2:
sm_seg_r=8'ha4;//显示"2"
4'h3:
sm_seg_r=8'hb0;//显示"3"
4'h4:
sm_seg_r=8'h99;//显示"4"
4'h5:
sm_seg_r=8'h92;//显示"5"
4'h6:
sm_seg_r=8'h82;//显示"6"
4'h7:
sm_seg_r=8'hf8;//显示"7"
4'h8:
sm_seg_r=8'h80;//显示"8"
4'h9:
sm_seg_r=8'h90;//显示"9"
4'ha:
sm_seg_r=8'h88;//显示"a"
4'hb:
sm_seg_r=8'h83;//显示"b"
4'hc:
sm_seg_r=8'hc6;//显示"c"
4'hd:
sm_seg_r=8'ha1;//显示"d"
4'he:
sm_seg_r=8'h86;//显示"e"
4'hf:
sm_seg_r=8'h8e;//显示"f"
default:
sm_seg_r=8'hff;//不显示
endcase
end
endmodule
3.5电子时钟原理图
图五时钟原理图
4数字时钟各模块电路具体实现
4.1交通灯原理图
包含模块:
分频(同时钟)、主干道控制(time1)、次干道控制(time2)、灯显控制(light)、数码管显示(同时钟)
输入引脚:
clk(50MHz)
输出引脚:
主干道红灯(R)绿灯(G)黄灯(Y)、次干道红灯(R1)绿灯(G1)黄灯(Y1)
数码管显示(seg[23..0],bit[7..0])
图六交通灯原理图
4.2主干道控制(time1)
绿灯45秒后,变为黄灯5秒后,变为红灯25秒后,变为红灯,以此顺序循环。
代码:
moduletime1(clk_1Hz,M,Q);
inputclk_1Hz;
output[1:
0]M;//主干道灯控
output[23:
0]Q;//主干道数码管控制
reg[1:
0]M;
reg[7:
0]t;
reg[7:
0]T;
reg[23:
0]Q;
always@(posedgeclk_1Hz)
begin
if(t==0)
//T=45;
t=75;
t=t-1;
if(t<26)//green
begin
M=2;
T=t;
end
if(t>25&&t<31)//yellow
begin
M=1;
T=t-25;
end
if(t>30)//red
begin
M=0;
T=t-30;
end
Q=T/10;//十进制T转换为16进制Q
Q=Q*16;
Q=Q+(T%10);
end
endmodule
仿真图:
图七主干道仿真图
4.3次干道控制(time2)
红灯50秒后,变为绿灯20秒后,变为黄灯5秒后,变为红灯,以此顺序循环。
代码:
moduletime2(clk_1Hz,N,P);
inputclk_1Hz;
output[1:
0]N;//次干道灯控
output[23:
0]P;//次干道数码管控制
reg[1:
0]N;
reg[7:
0]t;
reg[7:
0]T;
reg[23:
0]P;
always@(posedgeclk_1Hz)
begin
if(t==0)
//T=45;
t=75;
t=t-1;
if(t<21)//red
begin
N=2;
T=t;
end
if(t>20&&t<26)//yellow
begin
N=1;
T=t-20;
end
if(t>25)//green
begin
N=0;
T=t-25;
end
P=T/10;//十进制T转换为16进制Q
P=P*16;
P=P+(T%10);
end
endmodule
仿真图:
图八次干道仿真图
4.4灯显控制(light)
代码:
modulelight(J,K,M,N,R,O,G,R1,O1,G1,Q);
input[1:
0]M;//主干道灯控输入
input[1:
0]N;//次干道灯控输入
input[23:
0]J;//主干道数码管控制
input[23:
0]K;//次干道数码管控制
outputR,O,G;//主干道红黄绿灯控制输出
outputR1,O1,G1;//次干道红黄绿灯控制输出
output[23:
0]Q;//数码管显示输出
regG,O,R;
regG1,O1,R1;
reg[23:
0]Q;
always@(MorNorJorK)
begin
case(M)
2'd0:
beginR=1;O=0;G=0;end
2'd1:
beginR=0;O=1;G=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 实现 多功能 数字 交通灯 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)