数字日历电路设计EDA实训
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成绩
批阅教师
日期
桂林电子科技大学
实训报告
2016-2017学年第1学期
学院海洋信息工程学院
课程EDA综合实训
姓名钟朝林
学号 1416030218
指导老师覃琴
日期2016/12/29
实训题目:数字日历电路的设计
1 概述
1.1 设计要求
1.1.1 设计任务
设计并制作一台数字日历。
1.1.2 性能指标要求
①用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。
②数字日历能够显示年、月、日、时、分和秒。
③用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日(如20080101),然后在另一时间段内显示时、分、秒(如00123625),两个时间段能自动倒换。
④数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时,依此类推。
1.2 总体设计基本原理及框图
1.2.1 基本原理
日历主要由年月日模块、时分秒模块、控制模块、显示模块、校时模块组成。采
用3个公用按钮j1、j2、和j3完成时分秒或年月日的校时,用8只七段数码管分
时完成时分秒或年月日的显示。设计电路的计时器模块(jsq24)用于完成一天
的24小时计时;年月日模块接收计时器模块送来的“天”脉冲进行计数,得到
日月年的显示结果,控制模块产生控制信号k,控制数码显示器显示年月日,还
是时分秒,或者自动轮流显示;校时选择模块在k信号的控制下,选择将j1、j2
和j3这3个校时按钮产生的信号是送到计时器模块的校秒、校分和校时输入端,
还是送到年月日模块的校天、校月、校年输入端;显示选择模块在k信号的控制
下,选择是将计时器模块的时、分、秒状态信号,还是将年月日模块的年、月、
日状态信号送到数码管显示器显示。
1.2.2 总体框图
2 系统软件设计分析
2.1年月日模块
module r(clrn,clk,jn,jy,jr,qn,qy,qr); //年月日模块input clrn,clk,jn,jy,jr;
output reg[15:0] qn;
reg [15:0] qn1;
output 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='h2011;qn1=2011;qy=1;qr=1;end
always @(posedge (clk^jr) or negedge clrn)// 日计时模块begin
if(~clrn)qr=1;
else begin
if(qr==date)begin qr=1; clky=1;end
else begin qr=qr+1;clky=0;end
if(qr[3:0]=='ha)begin
qr[3:0]=0;qr[7:4]=qr[7:4]+1;end
end
end
always @(posedge (clky^jy) or negedge clrn)//月计时模块 begin
if(~clrn) qy=1;
else begin
if(qy=='h12) begin qy=1;clkn=1;end
else begin qy=qy+1;clkn=0;end
if(qy[3:0]=='ha)begin
qy[3:0]=0;qy[7:4]=qy[7:4]+1;end
end
end
always
begin
case(qy)
'h01:date='h31;
'h02:begin
if((qn1%4==0)&(qn1%100 != 0)|(qn1%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)begin qn[3:0]=1;qn1=2011;end
else begin if(qn[3:0]==9)qn[3:0]=0;
else begin qn[3:0]=qn[3:0]+1;qn1=qn1+1;end
if(qn[3:0]==9)clkn1=0;
else clkn1=1;end
end
always @(posedge clkn1 or negedge clrn)
begin
if(~clrn)qn[7:4]=1;
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;