EDA模电子时钟设计资料Word格式文档下载.docx
- 文档编号:22954922
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:19
- 大小:105.36KB
EDA模电子时钟设计资料Word格式文档下载.docx
《EDA模电子时钟设计资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA模电子时钟设计资料Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
计时功能;
为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软件来进行电子时钟仿真。
和同学交流更使我对设计有了新的认识也对自己提出了新的要求。
课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;
学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。
设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学,每一个任务都是一个锻炼的机会和成长的过程,我在规定的时间尽善尽美的完成,把自己的能力发挥到最大限度。
这个课题设计的过程让我学习、工作的思路有了更为明朗的认识:
它是站在一定高度上去工作的,眼界要放宽,思路要开阔,内容要饱满。
我曾经也做过不少课程设计,但都是局限在课本中,而这次实验设计,能够让我走出来,仿佛推开门看见外面的世界是如此之大,如同井底之蛙跳上井沿过程中要有很好的团结合作意识和责任感,积极的参与到实验设计的讨论中去,学习和听取别人的意见,我也主动的发表意见,用一个积极上进、激情乐观的态度面对每一天的实验设计生活,让我的学习生活丰富多彩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 电子 时钟 设计 资料