基于FPGA实现多功能数字钟和交通灯的实习报告Word文档下载推荐.docx
- 文档编号:4777013
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:23
- 大小:147.68KB
基于FPGA实现多功能数字钟和交通灯的实习报告Word文档下载推荐.docx
《基于FPGA实现多功能数字钟和交通灯的实习报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于FPGA实现多功能数字钟和交通灯的实习报告Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。
代码:
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'
if(count2==12499999)beginclk_2Hz=~clk_2Hz;
count2=0;
count3=count3+1'
if(count3==2499999)beginclk_10Hz=~clk_10Hz;
count3=0;
count4=count4+1'
if(count4==24999)beginclk_1KHz=~clk_1KHz;
count4=0;
count5=count5+1'
if(count5==6249000)beginclk_4Hz=~clk_4Hz;
count5=0;
count6=count6+1'
if(count6==4)beginclk_6MHz=~clk_6MHz;
count6=0;
count7=count7+1'
if(count7==24999)beginclk_gaoyin_1KHz=~clk_gaoyin_1KHz;
count7=0;
count8=count8+1'
if(count5==50000)beginclk_diyin_500Hz=~clk_diyin_500Hz;
count8=0;
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:
always@(posedgeClk)
begin
M=M+1;
if(M==5)
M=0;
该模块仿真图
图一模式选择仿真图
3.3时钟模块
该模块包括:
时钟、校时、闹钟、整点报时四部分。
moduleshizhong(CLK,M,N,T,B,C,gap,dip,gao,di);
inputCLK;
//输入频率10Hz;
input[2:
//输入模式M
inputB,C,gap,dip;
output[23:
0]T;
outputN,gao,di;
reg[23:
0]D=1202501;
//设置初始时间:
12:
59:
45
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
D[3:
0]=0;
D[7:
4]=D[7:
4]+1;
if(D[7:
4]==6)
D[7:
4]=0;
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)
D[19:
16]=0;
D[23:
20]=D[23:
20]+1;
end
end
if(D[23:
16]==36)
D[23:
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
0]==89)gao=gap;
//在59秒时gao输出1KHz
end
else
begin
di=0;
gao=0;
end
if(M==1)//校时
T=D;
if(B)//B为高电平时时针累加
D[19:
if(D[19:
begin
D[23:
end
if(D[23:
D[23:
if(C)//C为高电平时时针累减
16]-1;
16]==15)
16]=9;
20]-1;
16]==249)
16]=35;
end
if(M==2)//校分
begin
D[11:
if(D[11:
D[11:
D[15:
if(D[15:
8]-1;
8]==15)
8]=9;
12]-1;
12]==15)
12]=5;
if(M==3)//调节闹铃时
T=Q;
if(B)
Q[19:
16]=Q[19:
if(Q[19:
Q[19:
Q[23:
20]=Q[23:
if(Q[23:
Q[23:
if(C)
if(M==4)//调节闹铃时
if(B)
Q[11:
8]=Q[11:
if(Q[11:
Q[11:
Q[15:
12]=Q[15:
if(Q[15:
if(D[23:
8]==Q[23:
8]&
&
D[7:
0]<
48)//闹铃控制输出端
N=1;
elseN=0;
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
0]sm_bit;
//数码管位选输出sm_bit
reg[7:
0]sm_seg_r;
//数码管段选输出寄存器
0]sm_bit_r;
//数码管位选输出寄存器
reg[3:
0]disp_dat;
//定义显示数码寄存器
0]count;
//定义计数寄存器
assignsm_seg=sm_seg_r;
//输出数码管译码结果
assignsm_bit=sm_bit_r;
//输出数码管选择
always@(posedgeclk_1k)//定义上升沿触发进程
count<
=count+1'
end
always@(posedgeclk_1k)
case(count)//选择扫描显示数据
//3'
d0:
disp_dat={d7,d6,d5,d4};
//第一个数码管
d1:
disp_dat={d3,d2,d1,d0};
//第二个数码管
3'
d2:
disp_dat=D[23:
20];
//第三个数码管
d3:
disp_dat=D[19:
16];
//第四个数码管
d4:
disp_dat=D[15:
12];
//第五个数码管
d5:
disp_dat=D[11:
8];
//第六个数码管
d6:
disp_dat=D[7:
4];
//3'
//第七个数码管
d7:
disp_dat=D[3:
0];
//第八个数码管
default:
disp_dat=0;
endcase
case(count)//选择数码管显示位
sm_bit_r=8'
b1111_1111;
//选择第一个数码管显示
//选择第二个数码管显示
beginsm_bit_r=8'
b1111_1011;
end//选择第三个数码管显示
b1111_0111;
end//选择第四个数码管显示
b1110_1111;
end//选择第五个数码管显示
b1101_1111;
end//选择第六个数码管显示
b1011_1111;
end//选择第七个数码管显示
b0111_1111;
end//选择第八个数码管显示
always@(disp_dat)
case(disp_dat)//七段译码
4'
h0:
sm_seg_r=8'
hc0;
//显示"
0"
h1:
hf9;
1"
h2:
ha4;
2"
h3:
hb0;
3"
h4:
h99;
4"
h5:
h92;
5"
h6:
h82;
6"
h7:
hf8;
7"
h8:
h80;
8"
h9:
h90;
9"
ha:
h88;
a"
hb:
h83;
b"
hc:
hc6;
c"
hd:
ha1;
d"
he:
h86;
e"
hf:
h8e;
f"
default:
hff;
//不显示
endcase
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]Q;
//主干道数码管控制
reg[1:
reg[7:
0]t;
always@(posedgeclk_1Hz)
if(t==0)
//T=45;
t=75;
t=t-1;
if(t<
26)//green
M=2;
T=t;
if(t>
25&
t<
31)//yellow
M=1;
T=t-25;
30)//red
M=0;
T=t-30;
end
Q=T/10;
//十进制T转换为16进制Q
Q=Q*16;
Q=Q+(T%10);
end
仿真图:
图七主干道仿真图
4.3次干道控制(time2)
红灯50秒后,变为绿灯20秒后,变为黄灯5秒后,变为红灯,以此顺序循环。
moduletime2(clk_1Hz,N,P);
0]N;
//次干道灯控
0]P;
//次干道数码管控制
21)//red
N=2;
20&
26)//yellow
N=1;
T=t-20;
25)//green
N=0;
P=T/10;
//十进制T转换为16进制Q
P=P*16;
P=P+(T%10);
图八次干道仿真图
4.4灯显控制(light)
modulelight(J,K,M,N,R,O,G,R1,O1,G1,Q);
input[1:
//主干道灯控输入
//次干道灯控输入
input[23:
0]J;
//主干道数码管控制
0]K;
//次干道数码管控制
outputR,O,G;
//主干道红黄绿灯控制输出
outputR1,O1,G1;
//次干道红黄绿灯控制输出
//数码管显示输出
regG,O,R;
regG1,O1,R1;
reg[23
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 实现 多功能 数字 交通灯 实习 报告