计算机EDA毕业设计报告.docx
- 文档编号:29231450
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:21
- 大小:304.61KB
计算机EDA毕业设计报告.docx
《计算机EDA毕业设计报告.docx》由会员分享,可在线阅读,更多相关《计算机EDA毕业设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
计算机EDA毕业设计报告
EDA课程设计报告
课题名称:
数字钟
姓名:
陈屹
班级:
电信051
日期:
2008-12-7
指导老师:
朱耀东
一、 设计要求说明
设计并实现具有一定功能的数字小系统(数字钟)
要求:
1、对所有设计的小系统能够正确分析;
2、基于VHDL语言描述系统的功能;
3、在quartus2环境中编译通过;
4、仿真通过并得到正确的波形;
5、给出相应的设计报告。
难度要求:
至少有2层电路,底层电路至少有4中元件。
二、 方案论证
该数字钟可以实现3个功能:
计时功能、整点报时功能和重置时间功能,因此有3个子模块:
计时、报时(alarm1)、重置时间(s1、m1、h1、d1)。
其中计时模块有4部分构成:
秒计时器(second1)、分计时器(minute1)和时计时器(hour1)
秒计时器(second1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。
其中reset为清0信号,当reset为0时,秒计时器清0;set为置数信号,当set为0时,秒计时器置数,置s1的值。
clk为驱动秒计时器的时钟,sec为秒计时器的输出,ensec为秒计时器的进位信号,作为下一级的时钟输入信号。
分计时器(minute1)是由一个60进制的计数器构成的,具有清0、置数和计数功能。
其中reset为清0信号,当reset为0时,分计时器清0;set为置数信号,当set为0时,分计时器置数,置m1的值。
clkm为驱动分计时器工作的时钟,与ensec相连接;min为分计时器的输出;enmin为分计时器的进位信号,作为下一级的时钟输入信号。
时计时器(hour1)是由一个24进制的计数器构成的,具有清0、置数和计数功能。
其中reset为清0信号,当reset为0时,时计时器清0;set为置数信号,当set为0时,时计时器置数,置h1的值。
clkh为驱动时计时器工作的时钟,与enmin相连接;hour为时计时器的输出;enhour为时计时器的进位信号,作为下一级的时钟输入信号。
报时模块(alarm1)的功能是当整点(将min作为该模块的输入信号,min=00)时,alarm输出高电平,并且持续1分钟。
数字钟的工作原理图如下所示:
“EDA课程设计论文-数字钟-仿真波形”图1
三、 各模块设计
1、秒计时器(second1)
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entitysecond1is
Port(clks,reset:
instd_logic;
Sec1,sec2:
bufferstd_logic_vector(3downto0);--秒输出端
Ensec:
outstd_logic);--秒计时器的进位,用来驱动分计时器
End;
Architectureaofsecond1is
Begin
Process(clks,reset)
Begin
Ifreset='0'then
Sec1<="0000";
Sec2<="0000";
ensec<='0';--对秒计时器清0
Elsifclks'eventandclks='1'then
if(sec1="1001"andsec2="0101")then
Sec1<="0000";
Sec2<="0000";
ensec<='1';--重复计数并产生进位
elsif(sec1="1001")then
Sec1<="0000";
Sec2<=sec2+1;
ensec<='0';
else
sec1<=sec1+1;
ensec<='0';--以驱动下一级
endif;
endif;
Endprocess;
End;
2、分计时器(minute1)
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityminute1is
Port(clkm,reset:
instd_logic;
Min1,Min2:
bufferstd_logic_vector(3downto0);--秒输出端
Enmin:
outstd_logic);--秒计时器的进位,用来驱动分计时器
End;
Architectureaofminute1is
Begin
Process(clkm,reset)
Begin
Ifreset='0'then
Min1<="0000";
Min2<="0000";
enmin<='0';--对计时器清0
Elsifclkm'eventandclkm='1'then
if(Min1="1001"andMin2="0101")then
Min1<="0000";
Min2<="0000";
enmin<='1';--重复计数并产生进位
elsif(Min1="1001")then
Min1<="0000";
Min2<=Min2+1;
enmin<='0';
else
min1<=min1+1;
enmin<='0';--以驱动下一级
endif;
endif;
Endprocess;
End;
3、时计时器(hour1)
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityhour1is
Port(clkh,reset:
instd_logic;
End;
Architectureaofhour1is
Begin
Process(clkh,reset)
Begin
Ifreset='0'then
hou1<="0000";
hou2<="0000";--对时计时器清0
Elsifclkh'eventandclkh='1'then
if(hou1="0011"andhou2="0010")then
hou1<="0000";
hou2<="0000";
--重复计数
elsif(hou1="1001")then
hou1<="0000";
hou2<=hou2+1;
else
hou1<=hou1+1;
endif;
endif;
Endprocess;
End;
4、星期计时器(day1)
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityday1is
Port(clkd,set,reset:
instd_logic;
d1:
instd_logic_vector(2downto0); ――置数端(星期)
day:
bufferstd_logic_vector(2downto0)); ――星期输出端
end;
Architectureaofday1is
Begin
Process(clkd,reset,set,d1)
Begin
Ifreset='0'thenday<="000"; ――对星期计时器清0
Elsifset='0'thenday<=d1; ――对星期计时器置d1的数
Elsifclkd'eventandclkd='1'then
Ifday=6thenday<="000"; ――重复计数
Elseday<=day+1;
Endif;
Endif;
Endprocess;
End;
5、报时模块(alarm1)
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityalarm1is
Port(reset:
instd_logic;
Min1,min2:
instd_logic_vector(3downto0);
Alarm:
outstd_logic);--输出的报时信号
End;
Architectureaofalarm1is
Begin
Alarm<='0'whenmin1="0000"andmin2="0000"andreset='1'
else'1';--当分为0且清0
--信号无效时,输出高电平并持续至分不为0
end;
6、分频模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityjhgjghis
port(clk,reset:
instd_logic;
q:
outstd_logic);
endjhgjgh;
architectureBehavioralofjhgjghis
signalcnt:
integer:
=0;
signalclks:
std_logic:
='0';
begin
process(clk,reset)
begin
ifreset='0'then
clks<='0';
elsif(clk'eventandclk='1')then
ifcnt=16000000then
cnt<=0;
clks<=not(clks);
else
cnt<=cnt+1;
clks<=clks;
endif;
endif;
endprocess;
q<=clks;
endBehavioral;
7译码模块
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityyimais
Port(sec1,sec2,min1,min2,hou1,hou2:
instd_logic_vector(3downto0);
s1,s2,m1,m2,h1,h2:
outstd_logic_vector(6downto0));
End;
Architectureaaaaofyimais
Begin
Process(sec1)
Begin
Casesec1is
when"0000"=>s1<="1000000";
when"0001"=>s1<="1111001";
when"0010"=>s1<="0100100";
when"0011"=>s1<="0110000";
when"0100"=>s1<="0011001";
when"0101"=>s1<="0010010";
when"0110"=>s1<="0000010";
when"0111"=>s1<="1111000";
when"1000"=>s1<="0000000";
when"1001"=>s1<="0010000";
whenothers=>s1<="XXXXXXX";
endcase;
endprocess;
Process(sec2)
Begin
Casesec2is
when"0000"=>s2<="1000000";
when"0001"=>s2<="1111001";
when"0010"=>s2<="0100100";
when"0011"=>s2<="0110000";
when"0100"=>s2<="0011001";
when"0101"=>s2<="0010010";
when"0110"=>s2<="0000010";
when"0111"=>s2<="1111000";
when"1000"=>s2<="0000000";
when"1001"=>s2<="0010000";
whenothers=>s2<="XXXXXXX";
endcase;
endprocess;
Process(min1)
Begin
Casemin1is
when"0000"=>m1<="1000000";
when"0001"=>m1<="1111001";
when"0010"=>m1<="0100100";
when"0011"=>m1<="0110000";
when"0100"=>m1<="0011001";
when"0101"=>m1<="0010010";
when"0110"=>m1<="0000010";
when"0111"=>m1<="1111000";
when"1000"=>m1<="0000000";
when"1001"=>m1<="0010000";
whenothers=>m1<="XXXXXXX";
endcase;
endprocess;
Process(min2)
Begin
Casemin2is
when"0000"=>m2<="1000000";
when"0001"=>m2<="1111001";
when"0010"=>m2<="0100100";
when"0011"=>m2<="0110000";
when"0100"=>m2<="0011001";
when"0101"=>m2<="0010010";
when"0110"=>m2<="0000010";
when"0111"=>m2<="1111000";
when"1000"=>m2<="0000000";
when"1001"=>m2<="0010000";
whenothers=>m2<="XXXXXXX";
endcase;
endprocess;
Process(hou1)
Begin
Casehou1is
when"0000"=>h1<="1000000";
when"0001"=>h1<="1111001";
when"0010"=>h1<="0100100";
when"0011"=>h1<="0110000";
when"0100"=>h1<="0011001";
when"0101"=>h1<="0010010";
when"0110"=>h1<="0000010";
when"0111"=>h1<="1111000";
when"1000"=>h1<="0000000";
when"1001"=>h1<="0010000";
whenothers=>h1<="XXXXXXX";
endcase;
endprocess;
Process(hou2)
Begin
Casehou2is
when"0000"=>h2<="1000000";
when"0001"=>h2<="1111001";
when"0010"=>h2<="0100100";
when"0011"=>h2<="0110000";
when"0100"=>h2<="0011001";
when"0101"=>h2<="0010010";
when"0110"=>h2<="0000010";
when"0111"=>h2<="1111000";
when"1000"=>h2<="0000000";
when"1001"=>h2<="0010000";
whenothers=>h2<="XXXXXXX";
endcase;
endprocess;
end;
四、系统设计
将上述5个程序作为底层文件,存放在同一个文件夹中,然后按下面的图将这几个文件连接起来,并用元件例化语句编写顶层文件的程序,如下:
“EDA课程设计论文-数字钟-仿真波形”图2
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entitytopclockis
Port(clk,reset:
instd_logic;
Alarm:
outstd_logic;
Sec1,sec2,min1,min2,hou1,hou2:
bufferstd_logic_vector(3downto0);
s1,s2,m1,m2,h1,h2:
outstd_logic_vector(6downto0));
End;
Architectureoneoftopclockis
Componentsecond1--秒元件的例化
Port(clks,reset:
instd_logic;
Sec1,sec2:
bufferstd_logic_vector(3downto0);
Ensec:
outstd_logic);
EndComponent;
Componentminute1--分元件的例化
Port(clkm,reset:
instd_logic;
min1,min2:
bufferstd_logic_vector(3downto0);
Enmin:
outstd_logic);
EndComponent;
Componenthour1--时元件的例化
Port(clkh,reset:
instd_logic;
hou1,hou2:
bufferstd_logic_vector(3downto0));
EndComponent;
Componentyima--星期元件的例化
Port(sec1,sec2,min1,min2,hou1,hou2:
instd_logic_vector(3downto0);
s1,s2,m1,m2,h1,h2:
outstd_logic_vector(6downto0));
EndComponent;
Componentalarm1--报时元件的例化
Port(reset:
instd_logic;
min1,min2:
instd_logic_vector(3downto0);
alarm:
outstd_logic);
EndComponent;
Componentjhgjgh
port(clk,reset:
instd_logic;
q:
outstd_logic);
EndComponent;
signalenm,enh,enk:
std_logic;--秒分、分时、时星期之间的连接信号
begin
uo:
jhgjghportmap(reset=>reset,clk=>clk,q=>enk);
u1:
second1portmap(reset=>reset,
sec1=>sec1,sec2=>sec2,clks=>enk,ensec=>enm);
u2:
minute1portmap(reset=>reset,
min1=>min1,min2=>min2,clkm=>enm,enmin=>enh);
u3:
hour1portmap(reset=>reset,
hou1=>hou1,hou2=>hou2,clkh=>enh);
u4:
yimaportmap(sec1=>sec1,sec2=>sec2,min1=>min1,min2=>min2,hou1=>hou1,
hou2=>hou2,s1=>s1,s2=>s2,m1=>m1,m2=>m2,h1=>h1,h2=>h2);
u5:
alarm1portmap(reset=>reset,min1=>min1,min2=>min2,alarm=>alarm);
end;
五、 调试过程
1、秒计时器(second1)(Endtime为1us)
在秒计时器的clk输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;秒重置端(s1)可设置数值为50秒,保存波形图,进行仿真,产生如下波形:
“EDA课程设计论文-数字钟-仿真波形”图3
由上述波形可以清楚的看到:
当清0信号(reset)无效时,秒计时器置数,从50秒开始计数,到59秒时回到0,并且从ensec输出一个高电平。
2、分计时器(minute1)(Endtime为1us)
在分计时器的clkm输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;分重置端(m1)可设置数值为50分,保存波形图,进行仿真,产生如下波形:
“EDA课程设计论文-数字钟-仿真波形”图4
由上述波形可以清楚的看到:
当清0信号(reset)无效时,分计时器置数,从50分开始计数,到59秒时回到0,并且从enmin输出一个高电平。
3、时计时器(hour1)(Endtime为1us)
在时计时器的clkh输入一个周期为5ns的时钟信号;清0端(reset)前面一小段(100ns)为低电平,后面均为高电平;置数端(set)前面一小段(200ns)为低电平,后面均为高电平;时重置端(h1)可设置数值为20时,保存波形图,进行仿真,产生如下波形:
“EDA课程设计论文-数字钟-仿真波形”图5
由上述波形可以清楚的看到:
当清0信号(reset)无效时,时计时器置数,从20时开始计数,到23时回到0,并且从enhour输出一个高电平。
4、星期计时器(day1)(Endtime为1us)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 EDA 毕业设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)