EDA模电子时钟设计资料Word格式文档下载.docx

上传人:b****8 文档编号:22954922 上传时间:2023-02-06 格式:DOCX 页数:19 大小:105.36KB
下载 相关 举报
EDA模电子时钟设计资料Word格式文档下载.docx_第1页
第1页 / 共19页
EDA模电子时钟设计资料Word格式文档下载.docx_第2页
第2页 / 共19页
EDA模电子时钟设计资料Word格式文档下载.docx_第3页
第3页 / 共19页
EDA模电子时钟设计资料Word格式文档下载.docx_第4页
第4页 / 共19页
EDA模电子时钟设计资料Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA模电子时钟设计资料Word格式文档下载.docx

《EDA模电子时钟设计资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA模电子时钟设计资料Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

EDA模电子时钟设计资料Word格式文档下载.docx

计时功能;

为1:

闹铃功能;

为2:

手动校对功能。

一个按键选择是调整时间,还是分钟,若长时间按住该键,可使秒信号清零,用于精确调时。

一个按键用于手动调整,每按一次,计数器加1,如果长按,则连续快速加1;

用于快速调时和定时。

第三部分详细设计过程

图2顶层模块

3.1分频模块

3.1.1模块功能描述

该模块为任意分频计数器,在这里使用了两个分频模块,分别输出4Hz和1Khz的时钟信号。

功能:

对输入时钟clock进行F_DIV倍分频后输出clk_out。

其中F_DIV为分频系数,分频系数范围为1~2^n(n=F_DIV_WIDTH)若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。

若分频系数为偶数,则输出时钟占空比为50%;

若分频系数为奇数,则输出时钟占空比取决于输入时钟占空比和分频系数(当输入为50%时,输出也是50%)。

图3分频模块div_4hz

图4分频模块div_1k

3.1.2模块设计思想

定义变量为分频系数,若位偶数,则产生分频系数的一半个时钟周期为高电平,分频系数的一半个时钟周期为低电平;

若为奇数,则相应地偏移一个。

3.1.3设计关键知识点

modulediv_4hz(clock,clk_out);

//I/O口声明

inputclock;

//输入时钟

outputclk_out;

//输出时钟

//内部寄存器

regclk_p_r;

//上升沿输出时钟

regclk_n_r;

//下降沿输出时钟

reg[F_DIV_WIDTH-1:

0]count_p;

//上升沿脉冲计数器

0]count_n;

//下降沿脉冲计数器

//参数--分频系数

parameterF_DIV=12500000;

//分频系数<

<

-----修改这里

parameterF_DIV_WIDTH=32;

//分频计数器宽度

wirefull_div_p;

//上升沿计数满标志

wirehalf_div_p;

//上升沿计数半满标志

wirefull_div_n;

//下降沿计数满标志

wirehalf_div_n;

//下降沿计数半满标志

//判断计数标志位置位与否

assignfull_div_p=(count_p<

F_DIV-1);

assignhalf_div_p=(count_p<

(F_DIV>

>

1)-1);

assignfull_div_n=(count_n<

assignhalf_div_n=(count_n<

//时钟输出

assignclk_out=(F_DIV==1)?

clock:

(F_DIV[0]?

(clk_p_r&

clk_n_r):

clk_p_r);

//上升沿脉冲计数

always@(posedgeclock)

begin

if(full_div_p)

begin

count_p<

=count_p+1'

b1;

if(half_div_p)

clk_p_r<

=1'

b0;

else

end

else

=0;

clk_p_r<

end

//下降沿脉冲计数

always@(negedgeclock)

if(full_div_n)

count_n<

=count_n+1'

if(half_div_n)

clk_n_r<

clk_n_r<

endmodule

3.2显示模块

3.2.1模块功能描述

该模块设计为时钟显示模块,一共8个共阳极数码管,显示格式为XX.XX.XX。

3.2.2模块设计思想

整个时钟的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。

由于分钟和秒钟显示的范围都是从0~59,可以用一个4位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位;

对于小时因为他的范围是从0~23,同样可以用一个4位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。

3.2.3设计关键知识点

由于动态扫描,需要一个频率较高的时钟信号用于刷新显示。

送入显示的数高低4位分离开来,分别用于显示十位和个位。

图5显示模块scan_led

modulescan_led(clk_1k,dig,seg,hourh,hourl1,minh,minl1,sech,secl1);

inputclk_1k;

input[3:

0]hourh,hourl1,minh,minl1,sech,secl1;

output[7:

0]dig;

0]seg;

reg[7:

reg[3:

0]dataout_buf;

reg[2:

0]count;

always@(posedgeclk_1k)

count<

=count+1'

case(count)

3'

d0:

dataout_buf=secl1;

d1:

dataout_buf=sech;

d2:

dataout_buf=4'

ha;

d3:

dataout_buf=minl1;

d4:

dataout_buf=minh;

d5:

dataout_buf=4'

d6:

dataout_buf=hourl1;

d7:

dataout_buf=hourh;

endcase

3'

dig=8'

b1111_1110;

b1111_1101;

b1111_1011;

b1111_0111;

b1110_1111;

b1101_1111;

b1011_1111;

b0111_1111;

always@(dataout_buf)

case(dataout_buf)

4'

h0:

seg=8'

b0000_0011;

h1:

b1001_1111;

h2:

b0010_0101;

h3:

b0000_1101;

h4:

b1001_1001;

h5:

b0100_1001;

h6:

b0100_0001;

h7:

b0001_1111;

h8:

b0000_0001;

h9:

b0000_1001;

ha:

3.3时钟控制模块

3.3.1模块设计功能

该模块设计为多功能数字钟的控制模块。

各信号引脚功能定义为:

mode:

功能控制信号;

手动校对功能;

turn:

在手动校对时,选择是调整时间,还是分钟,若长时间按住该键,可使秒信号清零,用于精确调时;

change:

手动调整时,每按一次,计数器加1,如果长按,则连续快速加1;

用于快速调时和定时;

hour,min,sec:

时,分,秒显示信号;

alert:

扬声器驱动信号;

用于产生闹铃音和报时音;

闹铃音为持续20秒的急促的“嘀嘀嘀”音,若按住“change”键,可屏蔽该闹铃音;

整点报时音为“嘀嘀嘀嘀嘟”四短一长音;

LD_alert:

接发光二极管,指示是否设置了闹钟功能;

LD_hour:

接发光二极管,指示当前调整的是小时信号;

LD_min:

接发光二极管,指示当前调整的是分钟信号。

3.3.2模块设计思想

mode按键每触发一次,定义一个变量m自加,从0加到2;

加满2,重新置为0。

用case语句产生3种模式。

图6时钟模块clock1

moduleclock(clk,clk_1k,mode,change,turn,alert,hourh,hourl1,minh,minl1,sech,secl1,

LD_alert,LD_hour,LD_min);

inputclk,clk_1k,mode,change,turn;

outputalert,LD_alert,LD_hour,LD_min;

output[3:

0]hour,min,sec,hour1,min1,sec1,ahour,amin;

reg[1:

0]m,fm,num1,num2,num3,num4;

0]loop1,loop2,loop3,loop4,sound;

regLD_hour,LD_min;

regclk_1Hz,clk_2Hz,minclk,hclk;

regalert1,alert2,ear;

regcount1,count2,counta,countb;

wirect1,ct2,cta,ctb,m_clk,h_clk;

always@(posedgeclk)

clk_2Hz<

=~clk_2Hz;

if(sound==3)beginsound<

=0;

ear<

=1;

elsebeginsound<

=sound+1;

end//ear信号用于产生或屏蔽声音

always@(posedgeclk_2Hz)//由4HZ的输入时钟产生1HZ的时基信号

clk_1Hz<

=~clk_1Hz;

always@(negedgemode)//mode信号控制系统在三种功能间的转换

if(m==2)m<

elsem<

=m+1;

always@(negedgeturn)//产生count1,count1,counta,countb四个信号

fm<

=~fm;

always

case(m)

2:

beginif(!

fm)

begincount1<

=!

change;

{LD_min,LD_hour}<

=2;

else

begincounta<

{count2,countb}<

1:

begincount2<

begincountb<

{count1,counta}<

=2'

b00;

default:

{count1,count2,counta,countb,LD_min,LD_hour}<

always@(negedgeclk)

if(count2)begin

if(loop1==3)num1<

else

beginloop1<

=loop1+1;

num1<

elsebeginloop1<

if(countb)begin

if(loop2==3)num2<

beginloop2<

=loop2+1;

num2<

elsebeginloop2<

 

if(count1)begin

if(loop3==3)num3<

beginloop3<

=loop3+1;

num3<

elsebeginloop3<

if(counta)begin

if(loop4==3)num4<

beginloop4<

=loop4+1;

num4<

elsebeginloop4<

assignct1=(num3&

clk)|(!

num3&

m_clk);

assignct2=(num1&

num1&

count2);

assigncta=(num4&

num4&

h_clk);

assignctb=(num2&

num2&

countb);

always@(posedgeclk_1Hz)

if(!

(sec1^8'

h59)|(!

turn)&

(!

m))

sec1<

if(!

((!

m)))minclk<

elsebegin

if(sec1[3:

0]==4'

b1001)

beginsec1[3:

0]<

=4'

b0000;

sec1[7:

4]<

=sec1[7:

4]+1;

elsesec1[3:

=sec1[3:

0]+1;

minclk<

assignm_clk=minclk||count1;

always@(posedgect1)

if(min1==8'

h59)beginmin1<

hclk<

elsebegin

if(min1[3:

0]==9)

beginmin1[3:

min1[7:

=min1[7:

elsemin1[3:

=min1[3:

assignh_clk=hclk||counta;

always@(posedgecta)

if(hour1==8'

h23)hour1<

elseif(hour1[3:

0]==9)

beginhour1[7:

=hour1[7:

hour1[3:

elsehour1[3:

=hour1[3:

always@(posedgect2)

if(amin==8'

h59)amin<

elseif(amin[3:

beginamin[3:

amin[7:

=amin[7:

elseamin[3:

=amin[3:

always@(posedgectb)

if(ahour==8'

h23)ahour<

elseif(ahour[3:

beginahour[3:

ahour[7:

=ahour[7:

elseahour[3:

=ahour[3:

if((min1==amin)&

&

(hour1==ahour)&

(amin|ahour)&

(change))

if(sec1<

8'

h20)alert1<

elsealert1<

always

case(m)

3'

b00:

beginhour<

=hour1;

min<

=min1;

sec<

=sec1;

b01:

=ahour;

=amin;

=8'

hzz;

b10:

endcase

assignLD_alert=(ahour|amin)?

1:

0;

assignalert=((alert1)?

clk_1k&

clk:

0)|alert2;

begin

if((min1==8'

h59)&

(sec1>

h54)||(!

(min1|sec1)))

if(sec1>

h54)alert2<

=ear&

clk_1k;

elsealert2<

ear&

assign{hourh,hourl1}=hour;

assign{minh,minl1}=min;

assign{sech,secl1}=sec;

第四部分功能仿真

4.1分频仿真波形

由于50MHz分频为4Hz分频系数太大,这里以50分频为例。

图750分频示例

在clk_out的半个周期内,clk出现了25个周期,50分频是正确的。

4.2计时仿真

图8时间-分计数

如图8所示,每有一个clk脉冲信号,送给显示的数加1,从0加到59,再到0,如此循环。

4.3闹钟仿真

图9闹钟仿真波形

如图9所示为01:

02:

00-01:

59的一分钟闹钟波形,当计数满60(图中显示为59)时,alert信号置位。

第五部分总结

此次设计过程中,学会了使用Quartus软件来进行电子时钟仿真。

和同学交流更使我对设计有了新的认识也对自己提出了新的要求。

课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;

学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。

设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学,每一个任务都是一个锻炼的机会和成长的过程,我在规定的时间尽善尽美的完成,把自己的能力发挥到最大限度。

这个课题设计的过程让我学习、工作的思路有了更为明朗的认识:

它是站在一定高度上去工作的,眼界要放宽,思路要开阔,内容要饱满。

我曾经也做过不少课程设计,但都是局限在课本中,而这次实验设计,能够让我走出来,仿佛推开门看见外面的世界是如此之大,如同井底之蛙跳上井沿过程中要有很好的团结合作意识和责任感,积极的参与到实验设计的讨论中去,学习和听取别人的意见,我也主动的发表意见,用一个积极上进、激情乐观的态度面对每一天的实验设计生活,让我的学习生活丰富多彩。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1