大连理工大学数电实验报告.docx
《大连理工大学数电实验报告.docx》由会员分享,可在线阅读,更多相关《大连理工大学数电实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
![大连理工大学数电实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/28/200d06ae-8797-4240-9150-4710ea2296a3/200d06ae-8797-4240-9150-4710ea2296a31.gif)
大连理工大学数电实验报告
大连理工大学本科实验报告
题目:
数字钟
课程名称:
数字电路课程设计
学院(系):
电子信息工程
专业:
电子
班级:
电子1301班
*******
学号:
********2
完成日期:
2015年7月18日
成绩:
2014年7月18日
注意:
本页要求放在实验报告第一页
课程设计得分表
考勤
课程设计50分
考试40分
作业
合计
最后得分
一、数字钟课程设计要求:
1、设计一个具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)计时器。
2、整点报时。
两种方法任选其一:
⑴发出仿中央人民广播电台的整点报时信号,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次要求高音“嘀”的信号,此信号结束即达到整点。
“嘟”是500Hz左右的频率输出,“嘀”是1000Hz左右的频率输出
⑵通过LED闪烁实现,闪烁频率及花型可自己设计并在这里说明。
3、手动校时、校分、校秒。
4、定时与闹钟功能,能在设定的时间发出闹铃声。
5、设计一个秒表,显示1%秒到60秒、手动停止。
6、设计一个倒计时,显示小时、分钟、秒。
7、其他创新。
第1题25分,其他每题5分
二、课程设计考试(40分,每题分):
考试题目:
1、实体名□
2、计数器□
3、异步清零□
4、进位输出□
5、仿真图□
6、数码管输出□
7、分频□
8、元件例化□
9、引脚分配□
10、下载□
一、设计要求
1、设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。
2、整点报时,可通过LED闪烁实现,闪烁频率及花型可自己设计。
3、能够调整小时和分钟的时间,调整的形式为通过按键进行累加。
4、具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪烁实现。
二、设计分析及系统方案设计
数字计时器一般都由振荡器、分频器、计数器、译码器、显示器等几部分组成。
其中振荡器和分频器组成标准秒信号发生器,由不同进制的计数器、译码器和显示器组成计时系统。
秒信号送入计时器进行计数,把累积的结果以‘时’、‘分’、‘秒’、的数字显示出来。
‘时’显示由二十四进制计数器、译码器、显示器构成,‘分’、‘秒’显示由六十进制计数器、译码器、显示器构成。
原理框图如下:
时十位时个位分十位分个位秒十位秒个位
三、系统以及模块硬件电路设计
系统的管脚配置如下表所示:
四、系统的VHDL设计
1.系统所用的库:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
2.系统顶层实体名及内容
entitytimeis
port(clk,rst,stop,pls,plm,plh:
instd_logic;
alarmstart:
instd_logic;
p,q,r,t,u,v:
outstd_logic_vector(6downto0);---时钟数码管输出
w,x:
outstd_logic_vector(6downto0);---闹钟小时数码管输出
y,z:
outstd_logic_vector(3downto0);---闹钟分钟输出
alarm:
outstd_logic;---闹钟开关
reptime:
outstd_logic);---清零
end;
architecturedataoftimeis
signalclk1s,clk1sp,clk10s,clk1m,clk1mp,clk10m,clk1h,clk1hp,rep:
std_logic;
signala,b,c,d,e,f:
std_logic_vector(3downto0);
signalalarmstart1:
std_logic;
signalalarm1m,alarm10m,alarm1h,alarm10h:
std_logic_vector(3downto0);
begin
3.时钟部分
process(stop)
begin
casestopis
when'0'=>clk1sp<=clk1s;
whenothers=>clk1sp<=pls;
endcase;
endprocess;
process(stop)
begin
casestopis
when'0'=>clk1mp<=clk1m;
whenothers=>clk1mp<=plm;
endcase;
endprocess;
process(stop)
begin
casestopis
when'0'=>clk1hp<=clk1h;
whenothers=>clk1hp<=plh;
endcase;
endprocess;
process(clk,rst)
variablenum:
integerrange0to49999999;
begin
ifrst='0'then
num:
=0;
elsifrising_edge(clk)then
ifnum=49999999then
num:
=0;
else
num:
=num+1;
endif;
ifnum<25000000then
clk1s<='0';
else
clk1s<='1';
endif;
endif;
endprocess;
4.时钟校时部分
process(clk1sp,rst)
begin
ifrst='0'then
a<="0000";
elsifclk1sp'eventandclk1sp='1'then
ifa="1001"then
a<="0000";
else
a<=a+1;
endif;
endif;
ifa="0000"then
clk10s<='1';
else
clk10s<='0';
endif;
endprocess;
process(clk10s,rst)
begin
ifrst='0'then
b<="0000";
elsifclk10s'eventandclk10s='1'then
ifb="0101"then
b<="0000";
else
b<=b+1;
endif;
endif;
ifb="0000"then
clk1m<='1';
else
clk1m<='0';
endif;
endprocess;
process(clk1mp,rst)
begin
ifrst='0'then
c<="0000";
elsifclk1mp'eventandclk1mp='1'then
ifc="1001"then
c<="0000";
else
c<=c+1;
endif;
endif;
ifc="0000"then
clk10m<='1';
else
clk10m<='0';
endif;
endprocess;
process(clk10m,rst)
begin
ifrst='0'then
d<="0000";
elsifclk10m'eventandclk10m='1'then
ifd="0101"then
d<="0000";
else
d<=d+1;
endif;
endif;
ifd="0000"then
clk1h<='1';
else
clk1h<='0';
endif;
endprocess;
process(clk1hp,rst)
begin
ifrst='0'then
e<="0000";f<="0000";
elsifclk1hp'eventandclk1hp='1'then
ife="1001"then
e<="0000";f<=f+1;
elsife="0011"andf="0010"then
e<="0000";f<="0000";
else
e<=e+1;
endif;
endif;
endprocess;
5.整点报时部分
process(clk1s)
begin
ifclk1s'eventandclk1s='1'then
ifc="0000"andd="0000"then
if(b="0000"anda="0000")or(b="0000"anda="0100")or(b="0000"anda="0010")then
rep<='1';
else
rep<='0';
endif;
else
rep<='0';
endif;
endif;
reptime<=rep;
endprocess;
6.设置闹钟部分
process(plm,alarmstart)
begin
ifalarmstart='1'then
ifplm'eventandplm='1'then
ifalarm1m="1001"then
alarm1m<="0000";
ifalarm10m="0101"then
alarm10m<="0000";
else
alarm10m<=alarm10m+1;
endif;
else
alarm1m<=alarm1m+1;
endif;
endif;
else
alarm1m<=alarm1m;alarm10m<=alarm10m;
endif;
y<=alarm1m;z<=alarm10m;
endprocess;
process(plh,alarmstart)
begin
ifalarmstart='1'then
ifplh'eventandplh='1'then
ifalarm1h="1001"then
alarm1h<="0000";alarm10h<=alarm10h+1;
elsifalarm1h="0011"andalarm10h="0010"then
alarm1h<="0000";alarm10h<="0000";
else
alarm1h<=alarm1h+1;
endif;
endif;
else
alarm1h<=alarm1h;alarm10h<=alarm10h;
endif;
endprocess;
7.时钟与闹钟时间对比产生闹钟信号
process(clk1s)
begin
ifalarmstart='1'then
ifclk1s'eventan