数字时钟设计课程设计Word格式.docx
《数字时钟设计课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《数字时钟设计课程设计Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
2011年6月10日
目录
第一章概述1
1.1EDA技术简介1
1.2课题背景1
1.3EDA发展趋势2
1.4系统的总体设计2
第二章实验开发系统软件介绍3
2.1VHDL设计步骤3
2.2系统软件介绍3
第三章数字时钟的设计5
3.1设计目的5
3.2设计原理5
3.3设计要求5
3.4单元模块的设计5
3.5引脚设置12
3.6系统测试12
3.7实验连线13
结论15
参考文献16
第1章概述
1.1EDA技术简介
现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronicdesignautomatic,EDA)技术。
电子技术领域全方位融入EDA技术,除了日益成熟的数字技术外,传统的电路系统设计建模理念发生了重大的变化,如软件无线电技术的崛起、模拟电路系统硬件描述语言的表达和设计的标准化、系统可编程模拟器件的出现、数字信号处理和图像处理的全硬件实现方案的普遍接受以及软硬件技术的进一步融合等[1]。
EDA使得电子领域各学科的界限更加模糊,更加互为包容,如模拟与数字、软件与硬件、系统与器件、ASIC与FPGA、行为与结构等。
随着硬件描述语言的标准化进一步确立,计算机辅助工程、辅助分析和辅助设计在电子技术领域获得更加广泛的应用。
与此同时,电子技术在通信、计算机及家电产品生产中的市场需求和技术需求,极大地推动了全新的电子设计自动化技术的应用和发展,特别是集成电路设计工艺步入了超深亚微米阶段,百万门以上的大规模可编程逻辑器件的陆续面世,以及基于计算机技术的面向用户的低成本大规模ASIC设计技术的应用,促进了EDA技术的形成。
更为重要的是各EDA公司致力于推出兼容各种硬件实现方案和支持标准硬件描述语言的EDA工具软件的研究,更有效地将EDA技术推向成熟和实用[2]。
1.2课题背景
FPGA嵌入式应用开发技术与数字钟技术发展的客观实际出发,通过对该技术发展状况的了解,以及课题本身的需要,指出研究基于FPGA的芯片系统与设计——数字钟的设计与实现的必要性。
课题相关技术的发展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别师大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
美国ALTERA公司的可编程逻辑器件采用全新的结构和先进的技术,加上MaxplusII(或最新的QUARTUS)开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。
EDA技术,技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。
最终形成集成电子系统或专用集成芯片的一门新技术。
本设计利用VHDL硬件描述语言结合可编程逻辑器件进行的,并通过数码管动态显示计时结果。
数字钟可以由各种技术实现,如单片机等利用可编程逻辑器件具有其他方式没有的特点,它具有易学,方便,新颖,有趣,直观,设计与实验项目成功率高,理论与实践结合紧密,体积小,容量大,I/O口丰富,易编程和加密等特点,并且它还具有开放的界面,丰富的设计库,模块化的工具以及LPM定制等优良性能,应用非常方便。
因此,本设计采用可编程逻辑器件实现[3]。
1.3EDA发展趋势
EDA技术发展趋势面对当今飞速发展的电子产品市场,设计师需要更加实用、快捷的EDA工具,使用统一的集成化设计环境,改变传统设计思路,将精力集中到设计构思、方案比较和寻找优化设计等方面,需要以最快的速度,开发出性能优良、质量一流的电子产品,对EDA技术提出了更高的要求。
未来的EDA技术将在仿真、时序分析、集成电路自动测试、高速印刷电路板设计及开发操作平台的扩展等方面取得新的突破,向着功能强大、简单易学、使用方便的方向发展[4]。
1.4系统的总体设计
数字时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,数字时钟可植入自动控制、测试等系统内部,作为系统的时钟源,可为系统提供定时信号或中断控制的时间基准,具有广泛的用途。
由于数字集成电路的发展使得数字时钟的精度远远超过老式钟表,而且加入了一些诸如自动报时、定时闹钟等功能。
这些都是以钟表数字化为基础的。
因此,研究数字时钟及扩大其应用,有着非常现实的意义。
数字时钟的设计方法有很多种,包括基于单片机的硬件设计、基于各种描述语言的软件设计,本设计采用VHDL语言来设计数字时钟有着多方面的优越性,通过把整个设计分为多个模块依次来实现,减少了众多重复性步骤,合理化了设计过程,使得设计更加省时、快捷,提高了设计效率[5]。
第2章实验开发系统软件介绍
2.1VHDL设计步骤
采用VHDL的系统设计,一般有以下6个步骤:
1)按照要求的功能模块划分;
2)VHDL的设计描述(设计输入);
3)代码仿真模拟(前仿真);
4)计综合、优化和布局布线;
5)布局布线后的仿真模拟(后仿真);
6)设计的实现(下载到目标器件)
2.2系统软件介绍
QuartusII是Alera公司推出的一款功能强大,兼容性最好的EDA工具软件。
该软件界面友好、使用便捷、功能强大,是一个完全集成化的可编程逻辑设计环境,具有开放性、与结构无关、多平台完全集成化丰富的设计库、模块化工具、支持多种硬件描述语言及有多种高级编程语言接口等特点。
QuartusII支持原理图输入与VerilogHDL和VHDL输入混合设计,它除了承接原来的Max+PlusII软件的部设计功能和器件对象外,还增加了许多新功能和新的FPGA器件系列。
它可对设计进行功能仿真,对数字电路的设计实现同步模拟分析和时序仿真。
这种同步模拟分析、时序仿真在数字电路的教学中可以起到很好的辅助作用。
逻辑分析工具进行嵌入式的逻辑分析;
支持软件源文件的添加和创建,并将它们链接起来生成编程文件;
使用组合编译方式可一次完成整体设计流程;
自动定位编译错误;
高效的期间编程与验证工具;
可读入标准的EDIF网表文件VHDL网表文件和Verilog基于VHDL的数字时钟设计和时序仿真网表文件;
能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
QuartusII软件设计流程设计输入:
设计文件的输入方法有原理图输入、文本输入、内存编辑以及由第三方EDA工具产生的网表输入、格式输入,生成方法不同,生成的文件格式也有所不同。
在图形设计文件中,QuartusII软件为了实现不同的逻辑功能提供了大量的基本单元符号和宏功能模块,在图形编辑器中可以直接调用;
为了适应自顶向下的设计,设计者可以使用和VerilogHDL以及Tcl脚本输入文本型设计项目编译:
项目编译主要完成设计项目的检查和逻辑综合,将项目最终设计结果生成器件的下载文件,并为模拟和编程产生输出文件。
仿真验证和时序分析:
在把经过编译的输入设计编程或配置到器件之前,可以通过QuartusII软件的仿真器对文件进行全面测试,保证设计在各种可能的条件下都有正确的响应。
根据所需的信息类型,可以进行功能仿真和时序仿真。
QuartusII时序分析器允许分析设计中所有逻辑的性能,得出时序分析结果,如建立时间、保持时间、引脚到引脚延迟、最大时钟频率、延迟时间及其它时序特征,并协助引导适配器满足设计中的时序要求。
器件编程:
成功编译了设计工程之后,编译器的Assembler模块自动将适配过程的器件、逻辑单元和引脚分配信息转换为器件的编程图像,并以.sof形式保存,QuartusII软件的编程器(programmer)使用该文件就可对器件进行编程配置。
基于VHDL的数字时钟设计和时序仿真在QuartusII软件开发环境下,使用VHDL描述语言、结合FPGA开发板编译和仿真数字时钟;
要求时钟能进行基本的计时功能,按照:
“时:
分:
秒”来显示时间;
并且能进行时间设置,具有整点报时功能,可对所有显示的内容进行调节设定[6]。
第3章数字时钟的设计
3.1设计目的
设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分具有清零功能。
调节小时、分钟功能。
整点报时功能,整点报时的同时LED灯花样显示。
3.2设计原理
在同一EPLD芯片EPF10K10上集成了如下电路模块:
1.时钟计数:
秒——60进制BCD码计数;
分——60进制BCDD码计数;
时——24进制BCDD码计数;
同时整个计数器有清零,调分,调时功能。
在接近整数时间能提供报时信号。
2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。
3.扬生器在整点时有报时驱动信号产生。
4.LED灯按个人口味在整点时有花样显示信号产生。
3.3设计要求
1.主芯片EPF10K10LC84-4。
2.8个LED灯。
3.扬声器。
4.8位八段扫描共阴级数码显示管。
5.三个按键开关(清零,调小时,调分钟)
3.4单元模块的设计
时钟的设计共化分为6个模块:
秒计数器(second),分计数器(minute),小时计数器(hour),报警电路(alert),扫描电路(seltime),译码电路(deled)。
下面具体分析各个模块的原理、内容和功能。
分别对秒、分、小时进行计数。
整个计数模块从00点00分00秒开始计时,当计数到23点59分59秒的时候,一天结束,计数器清零,新的一天重新开始计数。
秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号。
要设计一个同时显示时、分、秒6个数字的数字时钟,则需要6个七段数码显示管。
通过产生一个扫描信号来控制6个七段显示器,依次点亮6个七段数码显示管,也就是每次只点亮一个七段显示器。
只要扫描信号的频率超过人的眼睛视觉暂留频率24Hz以上,就可以达到尽管每次点亮单个七段数码显示管,却能具有6个同时显示的视觉效果,而且显示也不致闪烁抖动。
其中6位扫描信号一方面控制七段显示器依次点亮,时间数据选择模块的作用是将时钟产生的秒、分钟、小时信号集合起来,然后驱动六位七段数码管的片选驱动信号输出。
1.秒模块的设计;
能够实现60进制循环计数,带有复位端reset、手动调分功能端setmin和向分进位端enmin,受时钟上升沿信号控制,其文本语言(文件名:
second.vhd)为底层文本,图1为秒计数器的仿真波形图。
process(clk,reset,setmin)--秒计数进程
begin
--enmin<
=k;
if(reset='
0'
)then
count<
="
0000000"
;
--复位信号为1时,秒计数清零
elsif(setmin='
enmin<
=clk;
elsif(clk'
eventandclk='
1'
)then-------给他一个上升沿,然后
if(count(3downto0)="
1001"
if(count<
16#60#)then
if(count="
1011001"
enmin<
='
--当秒计数为58时进位信号为1
count<
="
ELSE
count<
=count+7;
--分低位小于9时,cnt加1
endif;
else
count<
endif;
elsif(count<
16#60#)then
=count+1;
--秒高位小于5时,加1
enmin<
after100ns;
endprocess;
第一个模块为秒计数模块,其实质是一个六十进制计数器,其中输入管脚:
clk为1hz的时钟脉冲;
reset为秒模块清零复位键;
setmin为调分钟按键输出管脚:
enmin为分模块的进位信号。
如图所示:
图3-1六十进制秒计数器的仿真波形
2.分模块的设计;
能够实现60进制循环计数,带有带有复位端reset、手动调小时功能端sethour和向分进位端enhour,受时钟上升沿信号控制。
其文本语言(件名:
minute.vhd)为底层文本,图2为分计数器的仿真波形图
process(clk,reset,sethour)--分计数进程
begin
elsif(sethour='
enhour<
=clk1;
elsif(clk'
eventandclk='
)then--时钟上升沿,en为1时分开始计数
enhour<
--当分计数到58时产生进位信号
=count+1;
else
elsif(count<
16#60#)then------------------用十六进制表示60
count<
=count+1;
enhour<
else
count<
计数模块的第二个模块为分计时模块,其实质是一个六十进制计数器,其中:
输入管脚:
clk为秒模块输出的进位信号;
clk1为1hz的时钟控制脉冲;
reset管脚的作用为分模块的清零、复位sethour为调小时按键。
输出管脚:
enhour输出为时模块的进位信号
图3-2六十进制分计数器的仿真波形
3.时模块的设计;
能够实现24进制循环计数,带有复位端reset,受时钟上升沿信号控制。
其文本语言(文件名:
hour.vhd)为底层文本,图2为分计数器的仿真波形图。
process(clk,reset)--小时计数进程
000000"
)then-----------------时钟上升沿,en为1时小时开始计数
16#24#)then------------------------------如果用用16进制表示24
count<
=count+1;
16#24#)then------------------------------十六进制表示24
图3-3小时计数器的仿真波形
第三个模块为小时计数模块,其实质是一个二十四进制计数器,其中:
clk为分模块输出的进位信号;
Reset为小时模块的清零、复位管脚.输出模块:
dout[5..0]为小时模块输出的计数信号
4.报时模块的设计;
能够实现整点报时和循环点亮3只LED灯,工作时受时钟上升沿控制。
alert.vhd)为底层文本,图4为其仿真波形。
speaker:
process(clk)----------------------------------------------进程
begin-------------------------------------------------------------------------开始
speak<
=count1
(1);
---------------------------------------------------------声音
if(clk'
eventandclk='
)then-------------------------------------给个上升沿
if(dain="
)then----------------------如果输入数据为000000
if(count1>
10"
)then
count1<
00"
else
count1<
=count1+1;
------------------------加1给count1
endif;
endif;
endif;
endprocessspeaker;
lamper:
process(clk)
begin
if(rising_edge(clk))then
if(count<
if(count="
lamp<
001"
;
--------------------------------第一个灯亮
elsif(count="
01"
010"
--------------------------------第二个灯亮
elsif(count="
100"
---------------------------------第三个灯亮
count<
else
count<
------------------------如果没有加1的话就都不亮
endprocesslamper;
图3-4报警电路的仿真波形
报警模块的作用是在时钟整点的时候输出一个报时信号,信号作用用开发板上,产生外部响声,起到报时的作用,同时可以选择在开发板的LED上显示出整点报时的LED花样显示,其中:
clk为1hz的脉冲信号;
dain[6..0]是分钟的输入信号;
输出管脚:
speak为整点报时的声音输出lamp[2..0]为整点报时的LED输出
5.译码器模块的设计;
能够实现译码功能,将扫描到的数据能够译码显示在7段数码管上,输出端led[6..0]分别对应数码管的a~g。
deled.vhd)为底层文本。
BEGIN
led<
1111110"
whennum="
0000"
"
0110000"
0001"
1101101"
0010"
"
1111001"
0011"
0110011"
0100"
1011011"
0101"
1011111"
0110"
1110000"
0111"
1111111"
1000"
1111011"
1110111"
1010"
0011111"
1011"
1001110"
1100"
0111101"
1101"
1001111"
1110"
1000111"
1111"
ENDfun;
6.扫描模块的设计;
能够实现逐次扫描秒个位、秒十位、分个位、分十位、时个位、时十位,并输出扫描数据和相应位的点dp,带有复位端reset,受扫描时钟上升沿控制。
seltime.vhd)为底层文本,图5为其仿真波形。
process(clk1,reset)
if(reset='
)then--------------------------------------------如果设置等于0
000"
elsif(clk1'
e