学校:五邑大学 学院:信息工程学院
实验:数字时钟
姓名:梁杰帆
一、实验目的:
1.了解VHDL的程序设计,学会编写,调试,运行和仿真。 2.掌握数字顶层原理图的设计与仿真。 3.掌握多位计数器相连的设计方法。
4.掌握十二进制,六十进制计数器的设计方法。 二、设计要求
使用顶层原理图与Verilog语言设计一个数字时钟,要求可以显示时,分,秒。 三、顶层原理图设计 、模六十计数器
模六十计数器由一个模六与模十的lpm计数器组合而成。 、模十二计数器
模十二计数器有两个模十的74160计数器组合而成。 整体结构图:
功能描述:
电路时钟由FPBA内部50MHZ脉冲提供,经由50M_100HZ_fenpin模块分频为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 reg[6:0] HL,HH,ML,MH,SL,SH; reg[7: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_outS[3:0]==9) begin count_outS[3:0]<=0; //低四位满九即清零 if(count_outS[7:4]==5) count_outS[7:4]<=0; //低四位满九且高四位满五时高四位清零 else count_outS[7:4]<=count_outS[7:4]+1; //低四位满九且高四位不满五时高四位加一 end else count_outS[3:0]<=count_outS[3:0]+1; //低四位不满九时低四位加一 end end
assign countS=(count_outS==59)1:0; //当秒计数值达到59是countS产生一个脉冲 always @(*) //47译码显示 begin
case (count_outS[7:4]) //高四位显示 4'd0:SH=~7'b1111110; 4'd1:SH=~7'b0110000; 4'd2:SH=~7'b1101101; 4'd3:SH=~7'b1111001; 4'd4:SH=~7'b0110011; 4'd5:SH=~7'b1011011; default:SH=~7'b1111110; endcase case (count_outS[3:0]) //低四位显示 4'd0:SL=~7'b1111110; 4'd1:SL=~7'b0110000; 4'd2:SL=~7'b1101101; 4'd3:SL=~7'b1111001; 4'd4:SL=~7'b0110011; 4'd5:SL=~7'b1011011; 4'd6:SL=~7'b1011111; 4'd7:SL=~7'b1110000; 4'd8:SL=~7'b1111111; 4'd9:SL=~7'b1111011; default:SL=~7'b1111110; endcase end
//minute
always @(posedge clr or posedge count_outS) //产生清零信号或产生秒计数满59进位信号进入这个always begin if(clr) count_outM<=0; //同步清零 else begin if(count_outM[3:0]==9) begin count_outM[3:0]<=0; //低四位满九即清零 if(count_outM[7:4]==5) count_outM[7:4]<=0; //低四位满九且高四位满五时高四位清零 else count_outM[7:4]<=count_outM[7:4]+1; //低四位满九且高四位不满五时高四位加一 end else count_outM[3:0]<=count_outM[3:0]+1; //低四位不满九时低四位加一 end end
assign countM=(count_outM==59) 1:0; //当秒计数值达到59是countS产生一个脉冲 always @(*) //47译码显示 begin
case (count_outS[7:4]) //高四位显示