数字日历电路的设计..

2018-11-15 21:22

桂林电子科技大学信息科技学院

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

学 号

姓 名

指导教师:

2012 年 6 月 22 日

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

1.系统设计

1.1设计要求 1.1.1设计任务

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

1.1.2性能指标

① 用EDA实训仪的I/O设备和PLD芯片实现数字日历的设计。 ② 数字日历能够显示年、月、日、时、分、秒。

③ 数字日历有复位的功能,有校年、月、日和校时、分、秒的功能,通过一个开关来转换时校年、月、日还是校时、分、秒。

④ 此数字日历具有闹钟的功能,在6:01将开启闹钟,用一个LED灯表示,可以在任意时刻关闭闹钟。

1.2设计思路及框图 1.2.1设计思路

日历主要由年月日模块和时分秒模块组成,由分频器提供脉冲,再加上一个控制模块实现控制选择校准时分秒还是校准年月日。也可以实现时分秒和年月日的八秒自由转换。再加上一个闹钟,在6:01的时候闹钟开启,并由一个开关控制,在任意时间都可以关掉闹钟。

1.2.2总体设计框图

2各模块程序设计 2.1时分秒计时器模块:

module cnt60(clrn,clk,q,j,cont); //秒和分计时 input clrn,clk,j; output reg [7:0] q; output reg cont;

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) cont=1; else cont=0;end end endmodule

module cnt24(clrn,clk,q,j,cont); //小时计时 input clrn,clk,j; output reg [7:0] q; output reg cont;

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) cont=1; else cont=0;end end endmodule

2.2年月日模块

module nyr2009(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;

//年月日模块 // 日计时模块

end

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) clky = 1; else clky = 0;end

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

begin

if (~clrn) qy=1; end

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) else clkn = 0;end

clkn = 1;

always begin

case (qy) 'h01: date='h31; 'h02: begin

if ((qn%4==0)&(qn0 != 0)|(qn@0==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

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

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

else qn[11:8]=qn[11:8]+1;

if (qn[11:8]==9) clkn3=0; else clkn3=1;end end

always @(posedge clkn3 or negedge clrn )

begin

if (~clrn) qn[15:12]=2;

else if(qn[15:12]==9) qn[15:12]=0; end

else qn[15:12]=qn[15:12]+1;

endmodule

2.3校时模块

module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3); input output reg always begin

if (k==0) {jm,jf,js}={j1,j2,j3}; else {jr,jy,jn}={j1,j2,j3}; end endmodule

k,j1,j2,j3; jm,jf,js,jr,jy,jn;

2.4分频器模块

同时给时分秒和闹钟送入脉冲

module FENP(clk,newclk); input clk;

output reg newclk; reg[24:0] cnter; always @(posedge clk) begin

if(cnter<20000000) cnter=cnter+1; else cnter=0;

if (cnter<10000000) newclk=1; else

newclk=0; end endmodule

2.5控制器模块

显示年月日和显示时分秒直接的转换控制

module contr(clk,k1,k2,k); input

clk,k1,k2;

output reg k; reg [3:0] reg

qc; rc;

always @(posedge clk) begin qc=qc+1; if (qc<8) rc=0; else rc=1; case ({k1,k2})

0:k=rc; //八秒显示年月日八秒显示时分秒的自由转换

1:k=0; //显示并且校准时分秒 2:k=1; //显示并且校准年月日 3:k=rc; endcase

end endmodule 2.6闹钟模块

module naozhong(qs,qf,led,zt); input zt;

input[7:0] qs,qf; output led; reg led; always begin

if (qs=='h06&&qf=='h01) //6:01闹钟开始闪烁 led=1; else led=0;

if(zt==1) led=0; // 在任意时刻都可以关掉闹钟 end endmodule 2.7数码管显示模块

module mux_16(k,qm,qf,qs,qr,qy,qn,q); input

k;

input[7:0] input[15:0]

qm,qf,qs,qr,qy; qn;

output reg [31:0] q; always begin

if (k==0) begin q[31:24]=0;

q[23:0]={qs,qf,qm};end else q={qn,qy,qr};

end endmodule

3.调试过程

在调试过程中出现很多问题,在时分秒里加入分频器可以实现计时,但是闹钟就不能实现1秒钟闪烁一次的功能,当给闹钟加上一个分频器的时候,时分秒模块也不能自动计时。首先认识到必须只能有一个分频器,而且还能同时给两个提供脉冲。所以就删除了时分秒里的分频器,在总的图中加入一个分频器,同时给两个提供脉冲,这样两个功能都可以同时实现。

4.功能测试

4.1 测试仪器与设备

电脑,EDA实训仪。

4.2 性能指标测试

S0、S1控制手动切换和自动切换,当S0、S1都往上拨或都往下拨都是自动切换,SO上拨S1下拨是显示并可以校准时分秒的,反之是显示和校准年月日的。K8、K7、K6分别是校准年月日或时分秒的。K0是复位功能

5 实训心得体会

通过这次EDA实训,把课堂上学习的知识又巩固了一遍,也更加熟悉了对quartusII软件的使用。这次我们小组选作数字日历这个题目,创新点在于闹钟模块,可以实现闹钟的功能。通过小组的分工合作,把大家的思路整合在一起,在一起分析程序的使用,互相学习,更加理解了程序的用法。EDA的功能很强大,去除了传统算法的复杂,是程序简单化,几个语句就可以实现想要的功能。在我们所做的日历中,分别用到计数,分频,选择器这些最基本的功能,然后加以改善和创新,实现了日历的功能。

6.参考文献:

江国强.EDA技术与应用(第三版).北京:电子工业出版社,2011

附录

附录1:仿真波形图

1.分频器仿真波形图

2.时分秒仿真波形图

3.年月日仿真波形图

4.闹钟仿真波形图

附录2:程序清单:

程序1

module cnt60(clrn,clk,q,j,cont); //秒和分计时 input clrn,clk,j; output reg [7:0] q; output reg cont;

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) cont=1; else cont=0;end end endmodule 程序2

module cnt24(clrn,clk,q,j,cont); //小时计时 input clrn,clk,j; output reg [7:0] q; output reg cont;

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) cont=1; else cont=0;end end endmodule 程序3

module nyr2009(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] reg [7:0] reg reg [7:0] reg

qn; qy,qr; clkn,clky; date;

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; end

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) clky = 1; else clky = 0;end

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

begin

if (~clrn) qy=1; end

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) else clkn = 0;end

clkn = 1;

always begin

case (qy) 'h01: date='h31; 'h02: begin

if ((qn%4==0)&(qn0 != 0)|(qn@0==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

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

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

else qn[11:8]=qn[11:8]+1;

if (qn[11:8]==9) clkn3=0; else clkn3=1;end

end

//年计时模块 always @(posedge clkn3 or negedge clrn )

begin

if (~clrn) qn[15:12]=2;

else if(qn[15:12]==9) qn[15:12]=0; end

else qn[15:12]=qn[15:12]+1;

endmodule 程序4

module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3); //校时模块 input output reg always begin

if (k==0) {jm,jf,js}={j1,j2,j3}; else {jr,jy,jn}={j1,j2,j3}; end endmodule 程序5

module FENP(clk,newclk); //分频器模块 input clk;

output reg newclk; reg[24:0] cnter; always @(posedge clk) begin

if(cnter<20000000) cnter=cnter+1; else cnter=0;

if (cnter<10000000) newclk=1; else newclk=0; end endmodule 程序6

module contr(clk,k1,k2,k); //控制器模块 input

clk,k1,k2; k,j1,j2,j3; jm,jf,js,jr,jy,jn;

output reg k; reg [3:0] reg

qc; rc;

always @(posedge clk) begin qc=qc+1; if (qc<8) rc=0; else rc=1; case ({k1,k2})

0:k=rc; //八秒显示年月日八秒显示时分秒的自由转换

1:k=0; //显示并且校准时分秒 2:k=1; //显示并且校准年月日 3:k=rc; endcase

end endmodule 程序7

module naozhong(qs,qf,led,zt); //闹钟模块 input zt;

input[7:0] qs,qf; output led; reg led; always begin

if (qs=='h06&&qf=='h01) //6:01闹钟开始闪烁 led=1; else led=0;

if(zt==1) led=0; // 在任意时刻都可以关掉闹钟 end endmodule 程序8

module mux_16(k,qm,qf,qs,qr,qy,qn,q); //数码管显示模块 input

k;

input[7:0] input[15:0]

qm,qf,qs,qr,qy; qn;

output reg [31:0] q; always begin

if (k==0) begin q[31:24]=0;

q[23:0]={qs,qf,qm};end else q={qn,qy,qr}; end endmodule


数字日历电路的设计...doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:未成年人会议记录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

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