1、 学校:五邑大学学院:信息工程学院 姓名:梁杰帆实验:数字时钟一、实验目的:1.了解VHDL的程序设计,学会编写,调试,运行和仿真。 2.掌握数字顶层原理图的设计与仿真。3.掌握多位计数器相连的设计方法。 4.掌握十二进制,六十进制计数器的设计方法。 二、设计要求使用顶层原理图与Verilog语言设计一个数字时钟,要求可以显示时,分,秒。三、顶层原理图设计 3.1、模六十计数器 模六十计数器由一个模六与模十的lpm计数器组合而成。 3.2、模十二计数器模十二计数器有两个模十的74160计数器组合而成。整体结构图:功能描述:电路时钟由FPBA内部50MHZ脉冲提供,经由50M_100HZ_fen
2、pin模块分频为100HZ的脉冲。输入mod60的计数器,当作秒计时。mod60计数器计数值达到59时自动清零,并输出一个脉冲给第二个mod60计数器,当作分计时。当第二个mod60计数器计数值达到59时,自动清零,输出一个脉冲给mod12计数器,当mod12计数器计数值达到12自动清零。完成了十二小时的计时,并重新开始计时。由于计数器输出为四位的BCD码,故需要将BCD码转换成七位二进制才能显示相应数字。四、Verilog语言设计 module mod60(clk,clr,HL,HH,ML,MH,SL,SH,); input clk,clr; output reg6:0 HL,HH,ML,M
3、H,SL,SH; reg7:0 count_outS,count_outM, count_outH; wire countS,countM; /秒计数部分 always (posedge clk or posedge clr) begin if(clr) count_outS=0; /同步清零else begin if(count_outS3:0=9) begin count_outS3:0=0; /低四位满九即清零if(count_outS7:4=5) count_outS7:4=0; /低四位满九且高四位满五时高四位清零else count_outS7:4=count_outS7:4+1;
4、 /低四位满九且高四位不满五时高四位加一endelse count_outS3:0=count_outS3:0+1; /低四位不满九时低四位加一 endendassign countS=(count_outS=59)?1:0; /当秒计数值达到59是countS产生一个脉冲always (*) /47译码显示 begin case (count_outS7:4) /高四位显示 4d0:SH=7b1111110;4d1:SH=7b0110000;4d2:SH=7b1101101;4d3:SH=7b1111001;4d4:SH=7b0110011;4d5:SH=7b1011011;default:
5、SH=7b1111110;endcase case (count_outS3:0) /低四位显示 4d0:SL=7b1111110;4d1:SL=7b0110000;4d2:SL=7b1101101;4d3:SL=7b1111001;4d4:SL=7b0110011;4d5:SL=7b1011011;4d6:SL=7b1011111;4d7:SL=7b1110000;4d8:SL=7b1111111;4d9:SL=7b1111011;default:SL=7b1111110;endcase end /minute always (posedge clr or posedge count_out
6、S) /产生清零信号或产生秒计数满59进位信号进入这个always begin if(clr) count_outM=0; /同步清零else begin if(count_outM3:0=9)begin count_outM3:0=0; /低四位满九即清零if(count_outM7:4=5) count_outM7:4=0; /低四位满九且高四位满五时高四位清零else count_outM7:4=count_outM7:4+1; /低四位满九且高四位不满五时高四位加一endelse count_outM3:0=count_outM3:0+1; /低四位不满九时低四位加一 endendas
7、sign countM=(count_outM=59)? 1:0; /当秒计数值达到59是countS产生一个脉冲always (*) /47译码显示 begin case (count_outS7:4) /高四位显示 4d0:MH=7b1111110;4d1:MH=7b0110000;4d2:MH=7b1101101;4d3:MH=7b1111001;4d4:MH=7b0110011;4d5:MH=7b1011011;default:MH=7b1111110;endcase case (count_outS3:0) /低四位显示 4d0:ML=7b1111110;4d1:ML=7b01100
8、00;4d2:ML=7b1101101;4d3:ML=7b1111001;4d4:ML=7b0110011;4d5:ML=7b1011011;4d6:ML=7b1011111;4d7:ML=7b1110000;4d8:ML=7b1111111;4d9:ML=7b1111011;default:ML=7b1111110;endcase end /hour always (posedge clr or posedge count_outM) /产生清零信号或产生分计数满59进位信号进入这个always if(clr) count_outH=0; /同步清零else begin if(count_o
9、utH11) count_outH=count_outH+1; /小于11时加一else count_outH=0; /满十一清零endalways (*) /47译码显示 begin case(count_outH)4d0:begin HH=7b1111110;HL=7b1111110;end4d1:begin HH=7b1111110;HL=7b0110000;end4d2:begin HH=7b1111110;HL=7b1101101;end4d3:begin HH=7b1111110;HL=7b1111001;end4d4:begin HH=7b1111110;HL=7b0110011
10、;end4d5:begin HH=7b1111110;HL=7b1011011;end4d6:begin HH=7b1111110;HL=7b1011111;end4d7:begin HH=7b1111110;HL=7b1110000;end4d8:begin HH=7b1111110;HL=7b1111111;end4d9:begin HH=7b1111110;HL=7b0110000;end4d10:begin HH=7b0110000;HL=7b1111110;end4d11:begin HH=7b0110000;HL=7b0110000;enddefault: begin HH=7b1111110;HL=7b1111110;endendcase endendmodule功能描述:该模块有时钟与清零两个输入,时分秒的高低位六个输出。当有清零信号产生时整个电路复位。时钟输入由FPGA内部50MHZ脉冲提供,经过分频得到1HZ的脉冲,做为秒计数的输入,当秒计数至59时清零,并产生一个进位脉冲信号作为分计数的脉冲输入。当分计数满59时清零并产生一个进位脉冲信号做为时计数的脉冲输入,当时计数至11时清零,完成12小时的计时并重新开始计时。