eda数字电子钟之欧阳史创编.docx
《eda数字电子钟之欧阳史创编.docx》由会员分享,可在线阅读,更多相关《eda数字电子钟之欧阳史创编.docx(23页珍藏版)》请在冰豆网上搜索。
eda数字电子钟之欧阳史创编
唐山学院
时间:
2021.02.10
创作:
欧阳史
《EDA技术》课程设计
题目数字电子钟设计
系(部)智能与信息工程学院
班级13电本1班
姓名马建雨
学号4130208144
指导教师郭耀华、王默琦、戴彦
2016年7月4日至7月8日共1周
2016年7月8日
1引言1
2EDA技术简介2
2.1EDA技术的基本特征2
2.2硬件描述语言2
3QuartusII软件简介4
3.1软件介绍4
3.2QuartusII工作环境介绍5
4课程设计说明8
4.1设计内容8
4.2设计要求8
4.3设计目的8
4.4设计思路8
4.5设计具体方案及实现9
4.5.1秒、分、时计时模块9
4.5.2动态显示模块11
4.5.3整点报时模块13
4.5.4校时模块14
4.6总程序16
5总结18
参考文献19
1引言
随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也愈益依赖于EDA技术的应用。
即使是普通的电子技术的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、、性能价格比大幅提高。
不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。
EDA技术的设计语言为VHDL(硬件描述语言),实验载体为可编程器件CPLD或者FPGA,进行元件模拟和仿真的目标器件为ASIC/SOC芯片。
它是一种自动化设计电子产品的过程。
在电子设计仿真的领域里,EDA技术的出现具有非常重要的现实意义。
EDA源自于计算机辅助设计、制造、测试以及辅助工程。
利用EDA工具,设计者们可以从概念、算法、协议等方面来设计电子系统。
值得一提的是,在整个电子系统的设计过程中,设计电路、分析性能、布置IC和PCB版图等步骤都可以在电脑上自动完成。
时钟是我们日常生活中必备的生活用品之一。
而数字时钟的出现更是给人们的生产生活带来了极大的便利。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
EDA技术为数字类产品提供了一个非常简便实用的开发平台。
随着EDA技术的快速发展,数字时钟的应用越来越广泛,并且它在功能外观方面也有了很大的改善和提高。
本文就是基于EDA技术的基础知识,利用Quartus2软件再现一个具有传统时钟功能和自动报时功能的数字时钟。
数字钟采用EDA技术设计,利用硬件描述语言VHDL按模块化方式设计、编程及时序仿真等。
该数字钟能实现时、分、秒计数的显示功能,且以24小时循环计时,具有清零的功能,且能够对计时系统的小时、分钟进行调整,具有整点报时功能。
整个系统包括传统数字时钟所拥有的计时模块、校时模块、译码显示模块以及整点报时模块。
整个系统使用方便,功能齐全,精度高。
2EDA技术简介
电子设计技术的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术、最新成果二研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。
2.1EDA技术的基本特征
EDA代表了当今电子技术的最新发展方向,它的基本特征是:
设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为及设计,最后通过综合器和适配器生成最终的目标器件,这样的设计被称为高层次的电子设计方法。
这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。
在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一进行享验证。
然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现既可以是印刷电路板或专用集成电路。
由于设计的主要仿真和调试过程实在高层次上完成的,这既有利于早期发现结构设计上的一些错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次成功率。
2.2硬件描述语言
硬件描述语言是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。
例如一个32位的加法器,利用图形输入软件需要输入500至1000个门,而利用VHDL语言只需要书写一行A=B+C即可。
而且VHDL语言可读性强,易于修改和发现错误。
早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。
为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL为硬件描述语言标准(IEEESTD—1067)。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或者自底向上的电子设计过程都可以用VHDL来完成。
VHDL还具有以下优点:
(1)VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现.
(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用。
(3)VHDL的设计不依赖于特定的期间,方便了工艺的转换。
(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
与其他的硬件描述语言相比,VHDL的优势在于:
(1)VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
3Quartus
软件简介
3.1软件介绍
QuartusII是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(AlteraHardware支持DescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;
LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;
功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;
可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;
使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;
可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
3.2Quartus
工作环境介绍
1.启动Quartus
,进入如图3.1管理器窗口:
2.新建工程,如图3.2所示:
3.代码输入:
执行File菜单下的New命令,点击VHDLFile。
如图3.3所示:
4.进行程序仿真,如图3.4所示:
5.建立波形文件,进行波形仿真。
执行File菜单下的New命令,点击VectorWaveformFile。
如图3.5所示:
图3.5功能仿真界面
4课程设计说明
4.1设计内容
在本次课程设计中使用Quartus
软件并基于实验室现有的EDA实验箱,实现数字电子钟的设计:
(1)设计一个能进行时、分、秒计时数字钟。
(2)能对时、分和秒进行手动调节以校准时间。
(3)具有整点报时功能,通过选择此功能,能在整点时间发出报时声音。
(4)系统具有整体复位功能
(5)进阶设计:
报时声响为四低一高,最后一响正好为整点
4.2设计要求
(1)根据任务要求确定电路各功能模块;
(2)写出设计程序并给出时序仿真结果;
(3)最后要有设计总结;
4.3设计目的
(1)加深对VHDL语言设计的理解并熟悉Quartus
软件的工作方法及应用。
(2)通过设计加深对EDA课程的理解并了解简易集成电路的设计思路。
(3)熟悉Quartus
软件的工作方法及应用技术。
4.4设计思路
本设计包含:
校时模块、秒、分计时模块(60进制计数器)、时计时模块(24进制计数器)、数码显示模块、整点报时模块。
具体框图如图4.1所示:
moshi=1
moshi=0
moshi=2
moshi=3
4.5设计具体方案及实现
4.5.1秒、分、时计时模块
(1)秒、分计时模块的设计原理
秒、分计时模块实质上是一个60进制计数器其设计思想是将输入脉冲进行计数,每来一个上升沿记一次数,当计到60是清零并且进位端输出1,否则输出0。
而秒计时的进位端用于控制分计时的clk脉冲,分计时的进位端用于控制小时计时的clk脉冲。
小时计时模块则是一个24进制计数器,与前两个不同的是其在计到24时清零但不需要使用进位输出端。
(以下均以秒计时为例分析)
(2)程序如下:
libraryieee;
useieee.std_logic_1164.all;
entitymiaois
port(clk,rst:
instd_logic;
m1,m2:
outstd_logic_vector(3downto0);--m1为秒的低位;m2为秒的高位;
cin:
outstd_logic);
endmiao;
architecturebhvofmiaois
begin
process(clk,rst)
variabletemp1:
integerrange0to10;variabletemp2:
integerrange0to6;
begin
ifrst='1'thentemp1:
=0;temp2:
=0;
elsifclk'eventandclk='1'thentemp1:
=temp1+1;
iftemp1=10thentemp1:
=0;temp2:
=temp2+1;
iftemp2=6thentemp2:
=0;cin<='1';
elsecin<='0';endif;endif;endif;
casetemp1is
when0=>m1<="0000";
when1=>m1<="0001";
when2=>m1<="0010";
when3=>m1<="0011";
when4=>m1<="0100";
when5=>m1<="0101";
when6=>m1<="0110";
when7=>m1<="0111";
when8=>m1<="1000";
when9=>m1<="1001";
whenothers=>null;
endcase;
casetemp2is
when0=>m2<="0000";
when1=>m2<="0001";
when2=>m2<="0010";
when3=>m2<="0011";
when4=>m2<="0100";
when5=>m2<="0101";
whenothers=>null;
endcase;
endprocess;
endbhv;
(3)波形仿真
在QuartusII软件输入上述代码,再通过编译和时序仿真,可得到如下的仿真波形。
如图4.2所示:
图4.2仿真波形
(4)将我们设计的计时模块电路编译成库中的一个元件。
如下图所示:
4.5.2动态显示模块
(1)动态显示模块的设计原理
将计时模块的输出作为显示模块的输入,用动态扫描的方式实现四位二进制的七段数码显示。
本设计采用了两个四位七段数码显示模块实现XX﹣XX﹣XX。
(2)设计程序如下:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYxianshi1IS
PORT(c1,c2,c3:
INSTD_LOGIC_VECTOR(3DOWNTO0);
clk:
INstd_logic;
rst:
INstd_logic;
led_out1:
OUTstd_logic_vector(7DOWNTO0);
led_bit1:
OUTstd_logic_vector(3DOWNTO0));
ENDxianshi1;
ARCHITECTUREbhvOFxianshi1IS
signaldongtai:
std_logic_vector(5downto0);
signaldata:
std_logic_vector(3downto0);
signalm_bit:
std_logic_vector(3downto0);
begin
process(clk,rst)
begin
if(rst='1')thendongtai<="000000";
elsif(clk'eventandclk='1')thendongtai<=dongtai+1;endif;
endprocess;
process(dongtai(5downto4))
begin
casedongtai(5downto4)is
when"00"=>m_bit<="0001";
when"01"=>m_bit<="0010";
when"10"=>m_bit<="0100";
when"11"=>m_bit<="1000";
whenothers=>m_bit<="0001";
endcase;endprocess;
process(m_bit,c1,c2,c3)
begin
casem_bitis
when"0001"=>data<=c1;
when"0010"=>data<=c2;
when"0100"=>data<="1010";
when"1000"=>data<=c3;
whenothers=>data<=null;
endcase;
endprocess;
process(data)
begin
casedatais
WHEN"0000"=>led_out1<="11111100";
WHEN"0001"=>led_out1<="01100000";
WHEN"0010"=>led_out1<="11011010";
WHEN"0011"=>led_out1<="11110010";
WHEN"0100"=>led_out1<="01100110";
WHEN"0101"=>led_out1<="10110110";
WHEN"0110"=>led_out1<="10111110";
WHEN"0111"=>led_out1<="11100000";
WHEN"1000"=>led_out1<="11111110";
WHEN"1001"=>led_out1<="11110110";
WHEN"1010"=>led_out1<="00000010";
WHENOTHERS=>null;ENDCASE;ENDPROCESS;
led_bit1<=m_bit;
endbhv;
(4)将动态显示模块编译为库中的元件,如下图所示:
a
4.5.3整点报时模块
(1)模块设计原理
本次设计中要求完成进阶设计:
报时声响为四低一高,最后一响正好为整点。
所以在设计中用case语句对alarm进行赋值,例如当分计时模块输出为59,而秒计时模块为56、57、58、59时,对alarm赋低频clk;当秒、分计时模块输出都为00时,对alarm赋1;其他情况时对alarm赋0;
(2)设计程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitybaoshiis
port(clk:
instd_logic;
m1,m2,f1,f2,h1,h2:
instd_logic_vector(3downto0);
alarm:
outstd_logic);
endbaoshi;
architecturebhvofbaoshiissignala:
std_logic;
begin
process(clk)
variablecnt:
integerrange0to10000;
variablec:
std_logic;
begin
ifclk'eventandclk='1'then
ifcnt<10000thencnt:
=cnt+1;
elsecnt:
=0;c:
=notc;
endif;endif;
a<=c;
endprocess;
process(f1,f2,m1,m2)
begin
iff1="0000"andf2="0000"andm1="0000"andm2="0000"thenalarm<='1';
elsiff1="1001"andf2="0101"andm1="0110"andm2="0101"thenalarm<=a;
elsiff1="1001"andf2="0101"andm1="0111"andm2="0101"thenalarm<=a;
elsiff1="1001"andf2="0101"andm1="1000"andm2="0101"thenalarm<=a;
elsiff1="1001"andf2="0101"andm1="1001"andm2="0101"thenalarm<=a;
elsealarm<='0';
endif;
endprocess;
endbhv;
(3)将整点报时模块编译为库中的元件,如图4.8所示:
4.5.4校时模块
(1)设计原理
校时模块是用来对秒、分、时计时模块分别操作加1计数,已完成校时;因此,该数字电子钟就有4种工作模式:
正常计时、调秒、调分、调时;当正常运行时,秒由1Hz的时钟脉冲来控制,当加到60时,产生进位输出1,则模拟出现一个上升沿送到分的clk端,分加1;小时计时同样是由分计时模块的进位输出来控制的;
此时,若想完成校时模块对其计时控制,须将计时模块的进位输出端接到校时模块,在校时模块中进行输入输出与工作模式的关系描述,再将其输出作为各计时模块的clk脉冲。
(2)设计程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytiaoshiis
port(k1,k2:
instd_logic;
c1,c2,c3:
instd_logic;
out1,out2,out3:
outstd_logic);
endtiaoshi;
architecturebhvoftiaoshiis
begin
process(k1)
variablemoshi:
integerrange0to4;
begin
ifk1'eventandk1='1'thenmoshi:
=moshi+1;
ifmoshi=4thenmoshi:
=0;endif;endif;
casemoshiis
when0=>out1<=c1;out2<=c2;out3<=c3;
when1=>out1<=k2;out2<='1';out3<='1';
when2=>out1<='1';out2<=k2;out3<='1';
when3=>out1