数字日历设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XXXXX学院

《EDA技术与应用》实训报告

数字日历设计

学号 XX

姓名 XX

指导教师:xx

题目:数字日历电路的设计

1概述

通过EDA项目设计,使用Quartus软件进行数字日历电路的设计,能够实现最基本的日期,时间显示功能,并在此基础上进行相应的功能创新,使设计项目拥有更丰富的功能。

1.1设计要求

1.1.1设计任务

用EDA的方法设计一个数字日历

1.1.2性能指标

①用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。

②数字日历能够显示年、月、日、时、分和秒。

③用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20080101),然后在另一时间段内显示时、分、秒(如00123625),两个时间段能自动倒换。

④数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时,依此类推。

1.2总体设计基本原理及框图

1.2.1基本原理

首先设计要实现年月日和时分秒的显示,再设计定时和整点报时模块,以及校准模块。此外,还要使其具备星期显示功能,则要设计星期模块。最后,就是将这些底层模块连接起来实现整体功能。那么,就需要控制模块,校准模块,显示控制模块等等。

1.2.2总体框图

2 系统软件设计分析

2.1时分秒计时器模块:

分秒模块程序:

module cnt60(clk,clrn,j,q,cout);

input clk,clrn,j;

output reg[7:0] q;

output reg cout;

always @(posedge clk^j or negedge clrn) begin

if (~clrn) q=0;

else begin

if (q=='h59)q=0;

else q=q+1;

if (q[3:0]=='ha)begin

q[3:0]=0;q[7:4]=q[7:4]+1;end

if (q=='h59)cout=1;

else cout=0;end

end

endmodule

小时模块程序:

module cnt24(clk,clrn,j,q,cout);

input clk,clrn,j;

output reg [7:0] q;

output reg cout;

always@(posedge clk^j or negedge clrn)

begin

if(~clrn)q=0;

else begin

if(q=='h23) q=0;

else q=q+1;

if(q[3:0]=='ha) begin

q[3:0]=0;q[7:4]=q[7:4]+1;end

if(q=='h23) cout=1;

else cout=0;end

end

endmodule

2.2年月日模块

module nyr2016(clrn,clk,jn,jy,jr,qn,qy,qr); //年月日模块input clrn,clk,jn,jy,jr;

output [15:0] qn;

output [7:0] qy,qr;

reg [15:0] qn;

reg [7:0] qy,qr;

reg clkn,clky;

reg [7:0] date;

reg clkn1,clkn2,clkn3;

initial begin clkn1=1;clkn2=1;clkn3=1;end

initial begin qn='h2000;qy=1;qr=1;end

always @(posedge (clk^jr) or negedge clrn) // 日计时模块begin

if (~clrn) qr=1;

else begin

if (qr==date) qr=1;

else qr=qr+1;

if (qr[3:0]=='ha) begin

qr[3:0]=0; qr[7:4]=qr[7:4]+1;end

if (qr==date) c lky = 1;

else clky = 0;end

end

always @(posedge clky^jy or negedge clrn) //月计时模块begin

if (~clrn) qy=1;

else begin

if (qy=='h12) qy=1;

else qy=qy+1;

if (qy[3:0]=='ha) begin

qy[3:0]=0;qy[7:4]=qy[7:4]+1;end

if (qy=='h12) clkn = 1;

else clkn = 0;end

end

always

begin

case (qy)

'h01: date='h31;

'h02: b egin

if ((qn%4==0)&(qn%100 != 0)|(qn%400==0)) date='h29;

else date='h28; end

'h03: date='h31;

'h04: date='h30;

'h05: date='h31;

'h06: date='h30;

'h07: date='h31;

'h08: date='h31;

'h09: date='h30;

'h10: date='h31;

'h11: date='h30;

'h12: date='h31;

default :date='h30;

endcase

end

always @(posedge (clkn^jn) or negedge clrn ) //年计时模块begin

if (~clrn) qn[3:0]=0;

else begin if(qn[3:0]==9) qn[3:0]=0;

else qn[3:0]=qn[3:0]+1;

if (qn[3:0]==9) clkn1=0;

else clkn1=1;end

end

always @(posedge clkn1 or negedge clrn )

begin

if (~clrn) qn[7:4]=0;

else begin if(qn[7:4]==9) qn[7:4]=0;

else qn[7:4]=qn[7:4]+1;

if (qn[7:4]==9) clkn2=0;

else clkn2=1;end

end

always @(posedge clkn2 or negedge clrn )

begin

相关文档
最新文档