数字钟《EDA》综合设计报告.docx
- 文档编号:4690883
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:14
- 大小:44.80KB
数字钟《EDA》综合设计报告.docx
《数字钟《EDA》综合设计报告.docx》由会员分享,可在线阅读,更多相关《数字钟《EDA》综合设计报告.docx(14页珍藏版)》请在冰豆网上搜索。
数字钟《EDA》综合设计报告
《EDA》综合设计报告
题目:
数字钟
班级:
学号:
地点:
工业中心EDA机房
指导老师:
2012年5月27日
一.课题设计简介
二.课题设计具体思路(包括设计的原理图,主要源程序及注释)
本数字钟由ccc、control、sec、main、hour、sst六部分组成,总体设计框图如图1。
数字钟最后用七段译码管显示,具体设计框图如图2。
Control模块实现修改时间功能,其子模块从con1功能为采集修改数值。
Control模块的VHDL源代码如下
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcontrolIS/*定义实体名*/
PORT(s:
INSTD_LOGIC_VECTOR(5DOWNTO0);
clk,rst0:
INSTD_LOGIC;/*分别为始终扫描入口、复位端口*/
min1,min0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
sec1,sec0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
hour1,hour0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
/*分别为秒、分、时置位端口*/
END;
ARCHITECTUREoneOFcontrolIS/*结构体开始*/
SIGNALmin11,min00,sec11,sec00,hour11,hour00:
STD_LOGIC_VECTOR(3DOWNTO0);
COMPONENTcon1IS
PORT(s,rst:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENTcon1;
BEGIN
u0:
con1PORTMAP(s=>s(0),rst=>rst0,q=>sec00);
u1:
con1PORTMAP(s=>s
(1),rst=>rst0,q=>sec11);
u2:
con1PORTMAP(s=>s
(2),rst=>rst0,q=>min00);
u3:
con1PORTMAP(s=>s(3),rst=>rst0,q=>min11);
u4:
con1PORTMAP(s=>s(4),rst=>rst0,q=>hour00);
u5:
con1PORTMAP(s=>s(5),rst=>rst0,q=>hour11);
PROCESS(clk)
BEGIN
IFclk'EVENTANDclk='1'THEN
sec1<=sec11;sec0<=sec00;
min1<=min11;min0<=min00;
hour1<=hour11;hour0<=hour00;
ENDIF;
ENDPROCESS;
END;
Con1模块实现对按键数的统计,按键一次,计数器加1,如果大于9时自动请零。
Con1模块的VHDL源代码如下
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcon1IS/*定义实体*/
PORT(s,rst:
INSTD_LOGIC;/*复位端口*/
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREoneOFcon1IS/*结构体开始*/
SIGNALq1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(s,rst)
BEGIN
IFrst='1'THENq1<="0000";
ELSIFs'EVENTANDs='1'THEN
IFq1<"1001"THEN
q1<=q1+1;
ELSE
q1<="0000";
ENDIF;
ENDIF;
ENDprocess;
q<=q1;
END;
Ccc模块对系统时钟clk输入时4MHz频率进行分频,产生频率分别为1000Hz,500Hz,1Hz的时钟信号。
Ccc模块的VHDL源代码如下
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcccIS
PORT(clk:
INSTD_LOGIC;
q500,q1k,q1sec:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFcccIS
SIGNALx,y,z:
STD_LOGIC;
BEGIN
PROCESS(clk)
VARIABLEcnt:
INTEGERRANGE0TO1999;
BEGIN
IFclk'EVENTANDclk='1'THEN
IFcnt<1999THEN
cnt:
=cnt+1;
ELSE
cnt:
=0;
x<=NOTx;
ENDIF;
ENDIF;
ENDPROCESS;
q1k<=x;
PROCESS(x)
BEGIN
IFx'EVENTANDx='1'THEN
y<=noty;
ENDIF;
ENDPROCESS;
q500<=y;
PROCESS(y)
VARIABLEcnt:
INTEGERRANGE0TO499;
BEGIN
IFy'EVENTANDy='1'THEN
IFcnt<499THEN
cnt:
=cnt+1;
ELSE
cnt:
=0;
z<=NOTz;
ENDIF;
ENDIF;
ENDPROCESS;
q1sec<=z;
END;
Sst模块为整点报时提供控制信号,当59分,秒为52、54、56、58时q500输出“1”,秒为00时,q1k输出“1”,这两个信号经过逻辑门实现报时功能。
Sst模块的VHDL源代码如下
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsstIS
PORT(m1,m0,s1,s0:
INSTD_LOGIC_VECTOR(3DOWNTO0);
clk:
INSTD_LOGIC;
q500,q1k:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFsstIS
BEGIN
PROCESS(clk)
BEGIN
IFclk'EVENTANDclk='1'THEN
IFm1="0101"ANDm0="1001"ANDs1="0101"THEN
IFs0="0001"ors0="0011"ors0="0101"ors0="0111"THEN
q500<='1';
ELSE
q500<='0';
ENDIF;
ENDIF;
IFm1="0101"ANDm0="1001"ANDs1="0101"ANDs0="1001"THEN
q1k<='1';
ELSE
q1k<='0';
ENDIF;
ENDIF;
ENDPROCESS;
END;
Sec源代码如下
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysecis
port(rst,en,clk:
instd_logic;
sec0:
instd_logic_vector(3downto0);
sec1:
instd_logic_vector(3downto0);
sec11:
outstd_logic_vector(3downto0);
sec00:
outstd_logic_vector(3downto0);
co:
outstd_logic);
endsec;
architecturebehavofsecis
signalcnt0:
std_logic_vector(3downto0);
signalcnt1:
std_logic_vector(3downto0);
signalclk1:
std_logic;
begin
a:
process(rst,en,clk)
begin
ifrst='1'thencnt0<=sec0;
elsif(clk'eventandclk='1')anden='1'then
ifcnt0="1001"then
cnt0<="0000";
clk1<='1';
else
cnt0<=cnt0+1;
clk1<='0';
endif;
endif;
endprocessa;
b:
process(rst,en,clk1)
begin
ifrst='1'thencnt1<=sec1;
elsif(clk1'eventandclk1='1')anden='1'then
ifcnt1="0101"then
cnt1<="0000";
else
cnt1<=cnt1+1;
endif;
endif;
endprocessb;
c:
process(clk,clk1)
begin
ifclk'eventandclk='1'then
ifcnt1="0101"andcnt0="1001"then
co<='1';
else
co<='0';
endif;
endif;
endprocessc;
sec00(3downto0)<=cnt0;
sec11(3downto0)<=cnt1;
endbehav;
hour源代码如下
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhourIS
PORT(CLK,RST,EN:
INSTD_LOGIC;
hour0:
INSTD_LOGIC_VECTOR(3DOWNTO0);
hour1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
hour11:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
hour00:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDhour;
ARCHITECTUREbehavOFhourIS
SIGNALCQI0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCQI1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
P:
PROCESS(CLK,RST,EN)
BEGIN
IFRST='1'THEN
CQI0<=hour0;CQI1<=hour1;
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFCQI1<2THEN
IFCQI0<9THEN
CQI0<=CQI0+1;
ELSECQI0<=(OTHERS=>'0');
CQI1<=CQI1+1;
ENDIF;
ELSIFCQI0<3THEN
CQI0<=CQI0+1;
ELSECQI0<=(OTHERS=>'0');
CQI1<=(OTHERS=>'0');
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP;
hour00(3downto0)<=CQI0;
hour11(3downto0)<=CQI1;
ENDbehav;
Main源代码如下
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityminis
port(rst,en,clk:
instd_logic;
min0:
instd_logic_vector(3downto0);
min1:
instd_logic_vector(3downto0);
min11:
outstd_logic_vector(3downto0);
min00:
outstd_logic_vector(3downto0);
co:
outstd_logic);
endmin;
architecturebehavofminis
signalcnt0:
std_logic_vector(3downto0);
signalcnt1:
std_logic_vector(3downto0);
signalclk1:
std_logic;
begin
a:
process(rst,en,clk)
begin
ifrst='1'thencnt0<=min0;
elsif(clk'eventandclk='1')anden='1'then
ifcnt0="1001"then
cnt0<="0000";
clk1<='1';
else
cnt0<=cnt0+1;
clk1<='0';
endif;
endif;
endprocessa;
b:
process(rst,en,clk1)
begin
ifrst='1'thencnt1<=min1;
elsif(clk1'eventandclk1='1')anden='1'then
ifcnt1="0101"then
cnt1<="0000";
else
cnt1<=cnt1+1;
endif;
endif;
endprocessb;
c:
process(clk,clk1)
begin
ifclk'eventandclk='1'then
ifcnt1="0101"andcnt0="1001"then
co<='1';
else
co<='0';
endif;
endif;
endprocessc;
min00(3downto0)<=cnt0;
min11(3downto0)<=cnt1;
endbehav;
七段译码管实现数值的显示。
七段译码器源代码如下
libraryieee;
useieee.std_logic_1164.all;
entitydecoder7is
port(bcd:
instd_logic_vector(3downto0);
dout:
outstd_logic_vector(6downto0));
enddecoder7;
architecturertlofdecoder7is
begin
process(bcd)
begin
casebcdis
when"0000"=>dout<="1000000";
when"0001"=>dout<="1111001";
when"0010"=>dout<="0100100";
when"0011"=>dout<="0110000";
when"0100"=>dout<="0011001";
when"0101"=>dout<="0010010";
when"0110"=>dout<="0000010";
when"0111"=>dout<="1111000";
when"1000"=>dout<="0000000";
when"1001"=>dout<="0010000";
whenothers=>dout<="1111111";
endcase;
endprocess;
endrtl;
图1
端口说明
S[5..0]信号对应六个控制键,分别对应秒个位、秒十位、分个位、分十位、小时个位、小时十位。
Rst信号为复位信号,在系统初始化时使用,clk为系统时钟,clr信号为清零信号。
Second信号连接LED灯,发出亮光。
Sec1[3..0]表示秒十位。
Sec0[3..0]表示秒个位。
Main1[3..0]表示分十位。
Main0[3..0]表示分个位。
Hour1[3..0]表示小时十位。
Hour0[3..0]表示小时个位。
图2
完成上述步骤后进行仿真、锁定引脚,然后下载。
三.实验结果分析(要附图)
实验结果如图3,通过调节开关可以调节时间,当时间达到59分52秒时LED灯亮,在59分54秒、59分56秒、59分58秒和59分60秒时都亮。
四.总结
此时数字钟的设计部仅只用到组成数字钟的模块,还用到七段译码器模块,让我们明白有些设计的完成要结合多方面的共同作用。
在此次实验过程中,我遇到很多困难:
在编译control时总出现错误,但源代码不存在问题,最后发现control的编译必须在con1编译封装完成后才能实现。
而且在保存的时候,文件名必须与实体名一致。
每一次编译的时候都要将文件置顶,否则编译不成功。
文件名保存错误或编译错误都要从新打开程序。
经过一次的修改,一次次的编译,最后终于完成了数字钟的设计,看到数码管上显示额数字,无比开心。
在完成实验的过程中,虽然遇到了很多困难,但通过努力最终克服了这些困难,这告诉我,在遇到困难时不要害怕,冷静分析就一定可以找到办法。
同时经过这次设计让我对EDA有了个更整体更全面的认识,对其步骤也比以前更清楚更熟练了。
五.参考资料
《EDA技术与实践教程》宋烈武编著
问题:
1、数字钟电路都有什么功能?
数字钟电路有计时和鸣叫的功能。
2、控制模块实现什么功能?
控制模块control实现修改时间功能。
3、控制模块将哪个模块作为元件使用?
Conl模块
4、ccc模块实现什么功能?
ccc模块对系统时钟clk输入的4MHz频率信号进行分频,产生频率分别为1000Hz、500Hz、1Hz的时钟信号。
5、sst模块实现什么功能?
模块为整点报时提供控制信号,当59分,秒为52、54、56、58时q500输出“1”,秒为00时,q1k输出“1”,这两个信号经过逻辑门实现报时功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 数字 综合 设计 报告