eda电子钟.docx
- 文档编号:8983345
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:16
- 大小:233.69KB
eda电子钟.docx
《eda电子钟.docx》由会员分享,可在线阅读,更多相关《eda电子钟.docx(16页珍藏版)》请在冰豆网上搜索。
eda电子钟
课程设计
课程名称___VHDL与集成电路设计___
题目名称___电子钟VHDL设计______
学生学院___物理与光电工程学院___
专业班级_____________
学号_____________
学生姓名_________________
指导教师_______________
2014年12月19日
一、前言
1.1EDA技术简介
电子系统设计自动化(EDA:
Electronic Design Automation)已成为不可逆转的潮流,它是包含CAD、CAE、CAM等与计算机辅助设计或设计自动化等相关技术的总称。
随着信息时代的到来,信息电子产品已不断地向系统高度集成化和高度微型化发展,使得传统的手工设计和生产技术无法满足信息产品的社会和市场需要,因此,人们开始借助于EDA技术进行产品的设计和开发。
目前EDA技术主要是以计算机软件工具形式表现出来的,对于现代复杂的电子产品设计和开发来说,一般需要考虑“自上而下”三个不同层次内容的设计(即:
系统结构级设计,PCB板级设计和IC集成芯片级设计)。
Protel DXP软件系统是一套建立在IBM兼容PC环境下的CAD电路集成设计系统,它是世界上第一套EDA环境引入到Windows环境的EDA开发工具,具有高度的集成性和可扩展性。
本设计就是利用Protel DXP 进行原理图设计、PCB布局布线、进行电路仿真测试。
通过本设计充分了解到Protel DXP的特点并且充分掌握了Protel DXP的设计系统的基础知识。
1.2EDA的发展前景
随着微电子技术和计算机技术的不断发展,在涉及通信、国防、航天、工业自动化、仪器仪表等领域工作中,EDA技术的含量以惊人的速度上升,从而使它成为当今电子技术发展的前言之一。
由于在电子系统设计领域中的明显优势,基于大规模可编程器件解决方案的EDA技术及其应用在近年中有了巨大的发展,将电子发展技术再次推向了又一崭新的历史阶段。
这些新的发展大致包含了这样6个方面:
1.新器件;2.新工具软件;3.嵌入式系统设计;4.DSP系统设计;5.计算机处理器设计;6.与ASIC市场的竞争技术。
二、设计内容及要求
2.1设计内容
设计一个电子钟,要求可以显示时、分、秒,用户可以设置时间。
2.2设计要求
① 设计思路清晰,整体设计给出框图,提供顶层电路图;
② 应用vhdl完成各次级模块设计,绘出具体设计程序;
③ 完成设计仿真和程序下载;
④ 写出实验报告
2.3实验目的
①掌握多位计数器相连的设计方法。
②掌握二十四进制,六十进制计数器的设计方法。
③掌握VHDL技术的层次化设计方法。
④了解软件的元件管理含义以及模块元件之间的连接概念。
⑤掌握电子电路一般的设计方法,并了解电子产品的研制开发过程,基本掌握电子电路安装和调试的方法。
⑥培养独立分析问题,解决问题的能力
三、设计原理及框图
3.1设计原理
首先,电子钟的时钟信号的分、秒都是60进制的计数信号,小时则为24进制的计数信号。
由此,可以设置3个模块,分别为秒模块、分钟模块和小时模块。
首先开关打开后,给秒模块接一个1Hz的时钟信号,使秒模块开始对时钟的上升沿计数,每来一个时钟上升沿,秒模块加1。
每当计满一个周期后,即60秒,会向分钟模块产生进位信号,同时向秒模块发出重置信号,使秒模块为00。
然后重新对时钟上升沿计数,当秒模块显示为59之后,下一个时钟上升沿到来时又向分模块产生进位信号,秒模块重新被置为00,如此循环。
分钟模块对秒模块的进位信号进行计数。
来一个秒进位,分模块加1。
当分钟模块计满一个周期后,即60分钟,同样向小时模块产生进位信号并向本模块发出重置信号,使分钟模块为00。
然后重新对秒模块的进位信号进行计数,当分模块显示为59时,下一个秒模块进位信号到来时,分模块又向小时模块产生进位信号,分模块重新被置为00,如此循环。
小时模块对分钟模块进位信号的数目进行计数,来一个进位信号,小时模块加1。
当大于23后,小时模块向本模块发出重置信号,使小时模块显示为00,开始新一轮的计数。
以此来实现24小时的计时功能。
复位功能的设计,可以用控制信号控制各个模块的重置功能即可实现。
3.2设计框图
①系统顶层框图,如下图1
图1系统顶层框图
②电子钟结构框图,如下图2
图2数字钟结构框图
四、模块程序设计
4.1秒、分模块程序及仿真
秒和分计数模块是60进制计数器,计数到59后,下一个计数脉冲到来时清零,并向高位发出进位信号,然后重新从00开始计数。
VHDL的RTL描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt_smIS
PORT(CLK,CLR:
INSTD_LOGIC;
OUT_H:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUT_L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
C:
OUTSTD_LOGIC);
ENDcnt_sm;
ARCHITECTUREbehavOFcnt_smIS
SIGNALS_H:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALS_L:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFS_L(3DOWNTO0)<"1001"THEN
S_L(3DOWNTO0)<=S_L(3DOWNTO0)+1;
C<='0';
ELSIFS_H(3DOWNTO0)<"0101"THEN
S_L(3DOWNTO0)<="0000";
S_H(3DOWNTO0)<=S_H(3DOWNTO0)+1;
C<='0';
ELSE
S_L(3DOWNTO0)<="0000";
S_H(3DOWNTO0)<="0000";
C<='1';
ENDIF;
ENDIF;
IFCLR='1'THEN
S_L(3DOWNTO0)<="0000";
S_H(3DOWNTO0)<="0000";
ENDIF;
OUT_H<=S_H;
OUT_L<=S_L;
ENDPROCESS;
ENDbehav;
秒、分计数模块的仿真波形如图3、图4:
图3
图4
波形分析:
从仿真波形可知,当计数到59时,即OUT_H=0101,OUT_L=1001时,下一个时钟上升沿到来时就清零了,即OUT_H=0000,OUT_L=0000,并且产生进位信号,即C=1,然后重新开始计数,如此循环,符合设计要求。
4.2时模块程序及仿真
时计数模块就是一个24进制计数器,记数到23时,下一个时钟脉冲到来时清零,重新从00开始计数。
VHDL的RTL描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt_hIS
PORT(CLK,CLR:
INSTD_LOGIC;
OUT_H:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUT_L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcnt_h;
ARCHITECTUREbehavOFcnt_hIS
SIGNALS_H:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALS_L:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENS_H<="0000";
S_L<="0000";
ELSIFCLK='1'ANDCLK'EVENTTHEN
IFS_H="0010"ANDS_L="0011"THEN
S_L<="0000";
S_H<="0000";
ELSIFS_L<"1001"THENS_L<=S_L+1;
ELSES_L<="0000";
S_H<=S_H+1;
ENDIF;
ENDIF;
ENDPROCESS;
OUT_H<=S_H;OUT_L<=S_L;
END;
时模块的仿真波形如下图5:
图5
波形分析:
从仿真波形可知,当计数到23时,即OUT_H=0010,OUT_L=0011时,下一个时钟上升沿到来时就清零了,即OUT_H=0000,OUT_L=0000,然后重新进行计数,如此循环符合设计要求。
4.3消抖模块
按键消抖动有很多方案,这里选择的是计数消抖,即只当有效电平到来后开始计数,当计数值大于一定值后再输出该有效电平,否则不输出,从而达到消抖目的。
VHDL的RTL描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYajxdIS
PORT(DIN,CLK:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREbehavOFajxdIS
BEGIN
PROCESS(DIN)
VARIABLET:
INTEGERRANGE0TO63:
=0;
BEGIN
IFDIN='1'THEN
IFCLK'EVENTANDCLK='1'THEN
T:
=T+1;
IFT>8THEN
DOUT<='1';T:
=T-1;
ELSEDOUT<='0';
ENDIF;
ENDIF;
ELSEDOUT<='0';T:
=0;
ENDIF;
ENDPROCESS;
ENDbehav;
消抖模块电路原理图如下图6:
图6消抖模块电路原理图
4.4顶层文件设计
VHDL的RTL描述如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclockIS
PORT(CLK1m:
INSTD_LOGIC;--输入1MHZ
CLK1:
INSTD_LOGIC;--输入1HZ
CLR0:
INSTD_LOGIC;
KEY1_M:
INSTD_LOGIC;--调时调分键
KEY2_H:
INSTD_LOGIC;
SECH:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);--时分秒输出
SECL:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
MINH:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
MINL:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
HOUH:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
HOUL:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREbehavOFclockIS
SIGNALSCO1,SCOM:
STD_LOGIC;
SIGNALYS,YM:
STD_LOGIC;
SIGNALSCO2,SCOH:
STD_LOGIC;
SIGNALS1,S2:
STD_LOGIC;
SIGNALSMINH,SMINL:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALSSECH,SSECL:
STD_LOGIC_VECTOR(3DOWNTO0);
COMPONENTcnt_sm--分和秒模块
PORT(CLK,CLR:
INSTD_LOGIC;
OUT_H:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUT_L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
C:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTcnt_h--时模块
PORT(CLK,CLR:
INSTD_LOGIC;
OUT_H:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
OUT_L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTajxd--消抖模块
PORT(DIN,CLK:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
BEGIN
PROCESS(CLK1m,KEY1_M,KEY2_H)--调时调分
BEGIN
IFCLK1m'EVENTANDCLK1m='1'THEN
IFS1='1'THENSCOM<='1';
ELSESCOM<='0';
ENDIF;
IFS2='1'THEN
SCOH<='1';
ELSESCOH<='0';
ENDIF;
ENDIF;
ENDPROCESS;
U1:
cnt_smPORTMAP(CLK=>CLK1,CLR=>CLR0,C=>SCO1,OUT_L=>SSECL,OUT_H=>SSECH);--秒计数模块例化
U2:
cnt_smPORTMAP(CLK=>YS,CLR=>CLR0,C=>SCO2,OUT_L=>SMINL,OUT_H=>SMINH);--分钟计数模块例化
U3:
cnt_hPORTMAP(CLK=>YM,CLR=>CLR0,OUT_L=>HOUL,OUT_H=>HOUH);--小时计数模块例化
U4:
ajxdPORTMAP(DIN=>KEY1_M,CLK=>CLK1m,DOUT=>S1);--按键模块例化
U5:
ajxdPORTMAP(DIN=>KEY2_H,CLK=>CLK1m,DOUT=>S2);--按键模块例化
YS<=SCOMORSCO1;
YM<=SCOHORSCO2;
SECL<=SSECL;
SECH<=SSECH;
MINL<=SMINL;
MINH<=SMINH;
END;
因为秒和分钟模块都是60进制的计数器,所以在例化时,U1和U2的元件名相同,都是cnt_sm。
但是它们连接端口名不一样,在U1中:
CLK=>CLK1,CLR=>CLR0,C=>SCO1,OUT_L=>SSECL,OUT_H=>SSECH。
而在U2中:
CLK=>YS,CLR=>CLR0,C=>SCO2,OUT_L=>SMINL,OUT_H=>SMINH。
这样可以综合出秒模块和分钟模块。
U4,U5的例化也是这个道理。
其中,U4的KEY1_M是调节分钟的按键;U5的KEY2_H是调节小时的按键。
顶层模块电路原理如下图7:
图7顶层模块电路原理图
五、调试
当把程序下载到试验箱上的时候,时分秒能够正常显示,秒逢60向分钟进1,分钟数加1。
当分钟数大于59后,向小时进1,小时数加1。
小时数满24后,变为00。
按下清零端,时钟显示变为00:
00:
00。
调分按键,每按1次,分钟数加1,当加到59后,又从00开始加。
调分正常。
调时按键,每按1次,小时数加1,当加到23后,又从00开始加。
调时正常。
遇到的问题:
当时遇到的问题就是,例如当实验箱上显示的时间为8:
59:
59,当下一个1Hz时钟脉冲到来时,时间立马变为9:
00:
00。
然而,继续往前计时,当计到9:
00:
59时,下一个秒时钟脉冲到来时,时间却变为10:
01:
00。
就是说,程序在进位的问题上发生错误了。
后来检查程序,发现是顶层文件中这段程序综合出两个D触发器SCOM和SCOH导致的。
问题程序:
BEGIN
PROCESS(CLK0,KEY1_M,KEY2_H,SCO1,SCO2)--调时调分
BEGIN
IFCLK0'EVENTANDCLK0='1'THEN
IFSCO1='1'ORS1='1'THENSCOM<='1';
ELSESCOM<='0';
ENDIF;
IF(SCO2='1'ANDSCO1='1')ORS2='1'THENSCOH<='1';
ELSESCOH<='0';
ENDIF;
ENDIF;
ENDPROCESS;
修改后的程序:
BEGIN
PROCESS(CLK1m,KEY1_M,KEY2_H)--调时调分
BEGIN
IFCLK1m'EVENTANDCLK1m='1'THEN
IFS1='1'THENSCOM<='1';
ELSESCOM<='0';
ENDIF;
IFS2='1'THEN
SCOH<='1';
ELSESCOH<='0';
ENDIF;
ENDIF;
ENDPROCESS;
比较问题程序和修改后的程序,可以发现,修改后的程序里面,只让按键S1和S2的分别连接到D触发器的输入端SCOM和SCOH。
而秒进位信号SCO1和分进位信号SCO2则通过YS<=SCOMORSCO1;YM<=SCOHORSCO2;这两句程序,跳过D触发器,从而解决了问题。
六、心得总结
上课的时候,一直不明白EDA是用来干嘛的。
也不知到为什么要学这门课程。
通过这次设计,进一步加深了对EDA的了解,知道它是用来设计硬件电路的,通过代码写出各模块功能,然后综合在一起,可以综合出复杂、功能强大的电路系统,给电路设计带来很大的方便。
在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,看懂代码不等于会编写,所以经常动手把代码输入QuartusⅡ,编译一下,观察仿真波形,查看综合出来的RTL,这样才能有明显的进步。
在设计的过程中遇到问题,可以说得是困难重重,因为对EDA还不熟悉,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处:
对上课所学过的知识理解得不够深刻,掌握得不够牢固。
经过这次课程设计,加深了我对书本知识的理解。
参考文献
[1]彭介华.电子技术课程设计指导.北京:
高等教育出版社,1997
[2]李国丽,朱维勇.电子技术实验指导书.合肥:
中国科技大学出版社,2000
[3]潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2002
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda 电子钟
![提示](https://static.bdocx.com/images/bang_tan.gif)