EDA技术与实践.docx
- 文档编号:9666500
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:16
- 大小:251.22KB
EDA技术与实践.docx
《EDA技术与实践.docx》由会员分享,可在线阅读,更多相关《EDA技术与实践.docx(16页珍藏版)》请在冰豆网上搜索。
EDA技术与实践
EDA技术与实践
课题数字钟的设计
班级通信11301
姓名彭文明
学号11014039
时间2012.11.26
一:
目的
◆、掌握QuartusII9.0原理图输入设计法和VerilogHDL文本输入设计法的编辑、编译综合、仿真和编程下载的操作过程
◆学习掌握数字钟的设计方法
◆学习较复杂的数字系统设计方法
二:
内容
数字钟是数字电路中的一个典型应用,本设计实现数字钟的一些基本功能,能进行正常的时、分、秒计时功能,能实现整点报时功能,当计时到达59分52秒时开始报时,在59分52秒,59分54秒,59分56秒,59分58秒时鸣叫,鸣叫声频为500Hz,在到达59分60时为最后一声整点报时,频率为1KHz。
总体设计框图如图7-10所示,包含control、sec、main、hour、sst五大模块。
其中sec和main模块均为六十进制计数器,计时输出分别为妙和分的数值;hour模块为二十四进制计数器,计时输出为小时的数值。
数字钟总体设计框图
(1)端口说明
s【5··0】信号对应6个控制键,分别对应秒个位,秒十位,分个位,分十位,小时个位,小时十位。
rst信号为复位信号,在系统初始化时使用,clk为系统时钟,clr信号为清零信号。
sound信号连接扬声器,产生鸣叫。
sec1【3··0】表示秒十位
sec0【3··0】表示秒十位
min1【3··0】表示秒十位
min0【3··0】表示秒十位
hour1【3··0】表示秒十位
hour0【3··0】表示秒十位
(2)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;
ARCHITECTUREbehavOFcon1IS
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;
(3)sst模块:
为整点报时提供控制信号,当58min,妙为52,54,56,58时,q500输出“1”;妙为00时,q1K输出“1”。
这两个信号经过逻辑门实现报时功能。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsstIS
PORT(clk:
INSTD_LOGIC;
m1,m0,s1,s0:
INSTD_LOGIC_VECTOR(3DOWNTO0);
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;
(4)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;
(5)hour模块:
小时计数电路是由IC5和IC6组成的24进制计数电路
hour模块的VHDL源代码如下。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhourIS
PORT(clk,clr,rst:
INSTD_LOGIC;
hour0,hour1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
hour11,hour00:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
co:
OUTSTD_LOGIC);
ENDhour;
ARCHITECTUREbehavOFhourIS
SIGNALclk1:
STD_LOGIC;
SIGNALq:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALp:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
A:
PROCESS(clk,clr,rst)
BEGIN
IFrst='1'THENq<="0000";
ELSIF(clk'EVENTANDclk='1')andclr='1'THEN
IFhour0="0000"THEN
IFq="1001"THEN
q<="0000";
clk1<='1';
ELSE
q<=q+1;
clk1<='0';
ENDIF;
ELSE
q<=hour0;
ENDIF;
ENDIF;
ENDPROCESSA;
B:
PROCESS(RST,CLR,CLK1)
BEGIN
IFrst='1'THENp<="0000";
ELSIF(clk1'EVENTANDclk1='1')andclr='1'THEN
IFhour1="0000"THEN
IFp="0010"THEN
p<="0000";
ELSE
p<=p+1;
ENDIF;
ELSE
p<=hour1;
ENDIF;
ENDIF;
ENDPROCESSB;
C:
PROCESS(CLK,CLK1)
BEGIN
IFclk'EVENTANDclk='1'THEN
IFp="0010"ANDq="0100"THEN
CO<='1';
P=”0000”;
Q=”0000”;
ELSE
CO<='0';
ENDIF;
ENDIF;
ENDPROCESSC;
hour00<=q;
hour11<=p;
ENDbehav;
hour模块儿为一个二十四进制计数器。
其外部接口功能如下:
clk为触发信号输入端口,clr为清零端,rst为复位端,hour0和hour1为时间调控输入端,hour00和hour11为计时输出端(hour00为个位、hour11为十位)。
本模块儿基本逻辑功能如下:
当hour0和hour1端无时间调控信号输入时,其计数功能不变。
输入一个触发信号计数一次,个位十次一循环然后十位进一。
直到十位为二、个位为四时计数器清零,然后计数器再从零开始计数,依次循环。
当hour0和hour1端有时间调控信号输入时,则hour00和hour11端输出时间调控信号。
(6)min模块
Min源代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminIS
PORT(rst,clr,clk:
INSTD_LOGIC;
min0,min1:
inSTD_LOGIC_VECTOR(3DOWNTO0);
min00,min11:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
cout:
OUTSTD_LOGIC);
ENDmin;
ARCHITECTUREbehavOFminIS
SIGNALcnt0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALcnt1:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALclk1:
STD_LOGIC;
BEGIN
A:
PROCESS(rst,clr,clk)
BEGIN
IFrst='1'THENcnt0<="0000";
ELSIF(clk'EVENTANDclk='1')ANDclr='1'THEN
IFcnt0="1001"THEN
cnt0<="0000";
clk1<='1';
ELSE
cnt0<=cnt0+1;
clk1<='0';
ENDIF;
ENDIF;
ENDPROCESSA;
B:
PROCESS(rst,clr,clk1)
BEGIN
IFrst='1'THENcnt1<="110";
ELSIF(clk1'EVENTANDclk1='1')ANDclr='1'THEN
IFcnt1="110"THEN
cnt1<="000";
ELSE
cnt1<=cnt1+1;
ENDIF;
ENDIF;
ENDPROCESSB;
C:
PROCESS(clk,clk1)
BEGIN
IFclk'EVENTANDclk='1'THEN
IFcnt1="100"ANDcnt0="1001"THEN
cout<='1';
ELSE
cout<='0';
ENDIF;
ENDIF;
ENDPROCESSC;
min00(3DOWNTO0)<=cnt0;
min11(2DOWNTO0)<=cnt1;
ENDbehav;
(7)sec模块
sec源代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsecIS
PORT(rst,clr,clk:
INSTD_LOGIC;
sec0,sec1:
inSTD_LOGIC_VECTOR(3DOWNTO0);
sec00,sec11:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
cout:
OUTSTD_LOGIC);
ENDsec;
ARCHITECTUREbehavOFsecIS
SIGNALcnt0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALcnt1:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALclk1:
STD_LOGIC;
BEGIN
A:
PROCESS(rst,clr,clk)
BEGIN
IFrst='1'THENcnt0<="0000";
ELSIF(clk'EVENTANDclk='1')ANDclr='1'THEN
IFcnt0="1001"THEN
cnt0<="0000";
clk1<='1';
ELSE
cnt0<=cnt0+1;
clk1<='0';
ENDIF;
ENDIF;
ENDPROCESSA;
B:
PROCESS(rst,clr,clk1)
BEGIN
IFrst='1'THENcnt1<="110";
ELSIF(clk1'EVENTANDclk1='1')ANDclr='1'THEN
IFcnt1="110"THEN
cnt1<="000";
ELSE
cnt1<=cnt1+1;
ENDIF;
ENDIF;
ENDPROCESSB;
C:
PROCESS(clk,clk1)
BEGIN
IFclk'EVENTANDclk='1'THEN
IFcnt1="100"ANDcnt0="1001"THEN
cout<='1';
ELSE
cout<='0';
ENDIF;
ENDIF;
ENDPROCESSC;
sec00(3DOWNTO0)<=cnt0;
sec11(2DOWNTO0)<=cnt1;
ENDbehav;
三、系统仿真
3.1数字钟仿真图
3.2数字钟编译报告
四:
实验总结
(1)各个模块之间的链接修改了很多次,提前没有整体构思好,单个模块设计好以后总是会在模块间的组合上出现接口不对应的情况。
在24/12小时制模块chg的设计中,不同的时间转换考虑的不周全(例如下午1~7点和下午8~11点的变化不一样)自己对知识的掌握还是不够好,有许多模块设计了很长的时间(无论是构思还是具体编程)。
(2)对课程的建议EDA课程上完以后,我感觉这门课程实际应用很强。
非常锻炼动手能力,与其他的课程很不一样。
希望学校增加该课的课时。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 技术 实践