基于FPGA的多功能数字钟课程设计.docx
《基于FPGA的多功能数字钟课程设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的多功能数字钟课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
基于FPGA的多功能数字钟课程设计
FPGA课程设计报告
(实现多功能数字钟)
一、标题:
设计多功能数字钟控制电路
二、任务书:
用MAX+PLUSⅡ软件及VerilogHDL语言设计
一个多功能的数字钟,包括有时、分、秒的计
时,以及校时(对小时、分钟和秒能手动调整以校准时间)、正点报时(每逢整点,产生“嘀嘀嘀嘀-嘟”,4短一长的报时音)等附加功能。
三、关键词:
24进制、60进制、正点报时、校时、数字钟
四、总体方案:
多功能数字钟控制电路框图是由三部分组成的,即秒分时控制电路、整点报时控制电路、时段控制电路。
用VerilogHDL硬件描述语言完成编译和仿真。
五、原理框图如下:
建立设计工程项目名和顶层图形文件。
↓
↓
↓
六、VerilogHDL硬件描述语言编写的功能模块:
/*秒计数器m60*/
modulem60(M,CP60M,CPM,RD);
output[7:
0]M;
outputCP60M;
inputCPM;
inputRD;
reg[7:
0]M;
wireCP60M;
always@(negedgeRDorposedgeCPM)
begin
if(!
RD)
beginM[7:
0]<=0;
end
else
begin
if((M[7:
4]==5)&&(M[3:
0]==9))
begin
M[7:
0]<=0;
end
else
begin
if(M[3:
0]==9)
begin
M[3:
0]<=0;
if(M[7:
4]==5)
beginM[7:
4]<=0;end
elseM[7:
4]<=M[7:
4]+1;
end
elseM[3:
0]<=M[3:
0]+1;
end
end
end
assignCP60M=~(M[6]&M[4]&M[3]&M[0]);
endmodule
/*分计数器m60*/
modulem60(M,CP60M,CPM,RD);
output[7:
0]M;
outputCP60M;
inputCPM;
inputRD;
reg[7:
0]M;
wireCP60M;
always@(negedgeRDorposedgeCPM)
begin
if(!
RD)
beginM[7:
0]<=0;
end
else
begin
if((M[7:
4]==5)&&(M[3:
0]==9))
begin
M[7:
0]<=0;
end
else
begin
if(M[3:
0]==9)
begin
M[3:
0]<=0;
if(M[7:
4]==5)
beginM[7:
4]<=0;end
elseM[7:
4]<=M[7:
4]+1;
end
elseM[3:
0]<=M[3:
0]+1;
end
end
end
assignCP60M=~(M[6]&M[4]&M[3]&M[0]);
endmodule
/*小时计数器m24*/
modulem24(H,CPH,RD);
output[7:
0]H;
inputCPH,RD;
reg[7:
0]H;
always@(negedgeRDorposedgeCPH)
begin
if(!
RD)H[7:
0]<=0;
else
begin
if((H[7:
4]==2)&&(H[3:
0]==3))
begin
H[7:
0]<=0;
end
else
begin
if(H[3:
0]==9)
beginH[3:
0]<=0;
H[7:
4]<=H[7:
4]+1;
end
elseH[3:
0]<=H[3:
0]+1;
end
end
end
endmodule
/*秒分时控制计数器xiaoshi2*/
modulexiaoshi2(CPM,CPH,CPS,CP60M,CP60S,SWM,SWH);
outputCPM,CPH;
inputSWM,SWH;
inputCPS,CP60S,CP60M;
regCPM,CPH;
always@(SWMorSWHorCPSorCP60SorCP60M)
begin
case({SWM,SWH})
2'b01:
beginCPM<=CPS;CPH<=CP60M;end
2'b10:
beginCPM<=CP60S;CPH<=CPS;end
default:
beginCPM<=CP60S;CPH<=CP60M;end
endcase
end
endmodule
/*时段控制器sdkz*/
modulesdkz(h,sk);
input[7:
0]h;
outputsk;
regsk;
always@(h)
begin
if((h<=5)||(h>=19))
sk<=1;
else
sk<=0;
end
endmodule
/*报时计数器baoshi*/
modulebaoshi(m6,m4,m3,m0,s6,s4,s3,s0,dy,gy,bshi);
inputm6,m4,m3,m0,s6,s4,s3,s0,dy,gy;
outputbshi;
wirebm;
regbshi;
assignbm=m6&m4&m3&m3&m0&s6&s4&s0;
always@(bmors3ordyorgy)
begin
if(bm&s3)
bshi<=gy;
elseif(bm)
bshi<=dy;
else
bshi<=0;
end
endmodule
七:
各模块原理图及仿真波形:
24进制原理图:
60进制原理图:
电路原理图:
时段控制:
报时:
1、秒计数器仿真波形
2、分计数器的仿真波形
3、小时计数器的仿真波形
4、秒分时控制电路的仿真波形
5、时段控制的仿真波形
6、报时器的仿真波形
八、顶层文件及仿真波形
顶层文件的仿真波形:
九:
选用ACEX1K芯片中的EP1K30TC144-3型号,对芯片管脚号的分配如下:
十:
课程设计结论:
此次课程设计通过最终下载及编译可实现以上功能,在七段显示器上可实现秒、分计数器60进制,时计数器24进制显示,以及调节CLK1、CLK2的频率可使计数器上数字延时显示。
在正点报时中,当秒计数器进入56秒时,就会听到“嘀嘀嘀嘀-嘟”的声音。
十一:
心得体会:
两天的课程设计已经结束了,虽然开始的时候为此感到焦头烂额,但总算在同学和老师的帮助下坚持了下来,圆满的完成了此次FPGA课程设计。
通过这两天的学习,让我们更加熟练地掌握了MAXPLUS软件的使用以及VerilogHDL语言的逻辑编写。
特别锻炼了我们的团队合作,如在最后编译的时候,实现正点报时时怎么也出现不了声音,当时我仔细研究重新分析了一遍仍然找不到问题出在哪,最后在同学的帮助下才发现78号管脚忘了分配,修正后如愿听到了正点报时“嘀嘀嘀嘀-嘟”的声音。
总之,此次课程设计让我感受颇丰,学到了很多东西。
为我以后从事这方面的工作做了一个好的开始。
十二:
参考文献:
数字系统设计与VerilogHDL(第2版)王金明电子工业出版社
《FPGA原理及应用》赵雅兴天津大学出版社
《VHDL硬件描述语言与数字逻辑设计》侯伯亨西安电子科技大学出版社
FPGA设计网论坛