多功能数字钟设计实验报告 Xilinx EDA Basys2 华中科技大学 HUST

时间:2025-03-11

多功能数字钟设计实验报告

院系:电子与通信工程学院

姓名:郭世康

班级:1301

学号:U201313639

指导教师:唐祖平

一、 实验目标

掌握可编程逻辑器件的应用开发技术

——设计输入、编译、仿真和器件编程

熟悉EDA软件使用

掌握Verilog HDL设计方法

分模块、分层次数字系统设计

二、 实验内容要求

基本功能

能显示小时、分钟、秒钟(时、分用显示器,秒用LED)

能调整小时、分钟的时间

提高要求

任意闹钟;(1分)

小时为12/24进制可切换(1分)

报正点数(几点钟LED闪烁几下)(1分)

三、 实验条件

Xilinx工程环境,win7操作系统,BASYS2实验板。

四、 实验设计

1.设计分析

数字钟大体上由2个60进制计数器,1个24进制计数器构成,中间有数据选择器进行连接。为实现提高功能,还需12进制计数和整点判断模块。下图为数字钟层次结构图。

2. 实验原理 振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,再经分频器

输出标准秒脉冲。秒计数器计满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按24或12进制规律计数。计数器的输送译码显示电路,即可显示出数码(即时间)。计时出现误差时可以用校时电路进行校时和校分。小时显示(12\24)切换电路、仿电台报时、定时闹钟为扩展电路,只有在计时主体电路正常运行的情况下才能进行功能扩展。本实验采用Verilog HDL进行描述,然后用FPGA/CPLD实现,使用内部50MHz晶振作为时钟电路。

3. 逻辑设计

实现上述功能的Verilog HDL

程序如下。实现基本功能的程序分为两层次四个模块,底层有3个模块构成,即6进制计数器模块,10进制计数器模块和24进制计数器模块,顶层有一个模块,他调用底层的3个模块完成数字中的计时功能。

module

timeclock(Hour,Minute,Second,CP,nCR,EN,Adj_Min,Adj_Hour,number,Light,clk,temp,change,AMTM,dingdong);

output [7:0] Hour,Minute,Second;

output [3:0] Light,temp;

output [6:0] number;

output clk,AMTM,dingdong;//clk为分频之后的时钟信号,频率为1Hz,AMTM为24进制转换12进制时表明上下午的变量,dingdong为整点报时时的闪烁信号。

input CP;//输入的时钟信号,需分频后才能正常使用。

input nCR;//清零

input EN,change;//EN为使能信号,change为12/24进制转换开关。 input Adj_Min;//校分控制

input Adj_Hour; //校时控制

wire [7:0] Hour,Minute,Second;

reg clk;

reg [29:0] count,count1;//分频需要的计数器

reg [1:0] scan;//扫描时需要的计数器

reg [3:0] Light,temp;//4Bit 变量Light代表四个数码管,temp表示数码管需要显示的数字 reg [6:0] number;//number代表7个发光二极管

reg clk1;//为分频后的扫描频率

supply1 Vdd;

wire MinL_EN,MinH_EN,Hour_EN;//中间变量

// Hour,Minute,Second counter//

//60进制秒计数器

counter10 U1(Second[3:0],nCR,EN,clk);//个位

counter6 U2(Second[7:4],nCR,(Second[3:0]==4'h9),clk);//十位

//产生分钟计数器使能信号。Adj_Min=1,校正分钟;Adj_Min=0,分钟正常计时 assign MinL_EN=Adj_Min?Vdd:(Second==8'h59);

assign

MinH_EN=(Adj_Min&&(Minute[3:0]==4'h9))||((Minute[3:0]==4'h9)&&(Second==8'h59));

//60进制分钟计数器

counter10 U3(Minute[3:0],nCR,MinL_EN,clk);

counter6 U4(Minute[7:4],nCR,MinH_EN,clk); //产生小时计数器使能信号。Adj_Hour=1,校正小时;Adj_Hour=0,小时正常计时

assign Hour_EN=Adj_Hour?Vdd:((Minute==8'h59)&&(Second==8'h59)); //24进制和12进制可切换的小时计数器 counter24 U5(Hour[7:4],Hour[3:0],nCR,Hour_EN,clk,change,AMTM); //整点报时模块

dingdong

U6(clk,nCR,Minute[7:4],Minute[3:0],Hour[7:4],Hour[3:0],dingdong); //分频 always @(posedge CP) begin if(~nCR) count<=30'd00;

else if(count==30'd25000000) begin count<=30'd00; clk=~clk; end else count<=count+1'b1;

end //产生1Hz的频率

always @(posedge CP) begin if(~nCR) count1<=30'd00;

else if(count1==30'd100000) begin count1<=30'd00; clk1=~clk1; end

else count1<=count1+1'b1;

end //产生扫描用的频率

//扫描计数器

always @(posedge clk1)

begin

if(~nCR) scan<=2'b00;

else if(scan==2'b11) scan<=2'b00;

else scan<=scan+1'b1; end

//扫描 always @ (scan[1:0]) begin case(scan[1:0]) 2'b00: Light<=4'b0111; 2'b01: Light<=4'b1011; 2'b10: Light<=4'b1101; 2'b11: Light<=4'b1110; endcase end

//显示数字

always @ (scan[1:0])

begin case(scan[1:0]) 2'b00: temp<=Hour[7:4]; 2'b01: temp<=Hour[3:0]; 2'b10: temp<=Minute[7:4]; 2'b11: temp<=Minute[3:0]; endcase end

always @(temp) begin case(temp) 4'd0:number<=7'b0000001; //0

4'd1:number<=7'b1001111; //1

4'd2:number<=7'b0010010; //2 4'd3:number<=7'b0000110; //3 4'd4:number<=7'b1001100; //4 4'd5:number<=7'b0100100; //5 4'd6:number<=7'b0100000; //6 4'd7:number<=7'b0001111; //7 4'd8:number<=7'b0000000; //8 4'd9:number<=7'b0000100; //9 default:number<=7'b0000001; endcase end

endmodule

module dingdong(clk,ncr,minuteh,minutel,hourh,hourl,dingdong); input ncr; input c …… 此处隐藏:4407字,全部文档内容请下载后查看。喜欢就下载吧 ……

多功能数字钟设计实验报告 Xilinx EDA Basys2 华中科技大学 HUST.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219