基于硬件描述语言VHDL的电子钟设计.docx
- 文档编号:9644612
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:29
- 大小:1.13MB
基于硬件描述语言VHDL的电子钟设计.docx
《基于硬件描述语言VHDL的电子钟设计.docx》由会员分享,可在线阅读,更多相关《基于硬件描述语言VHDL的电子钟设计.docx(29页珍藏版)》请在冰豆网上搜索。
基于硬件描述语言VHDL的电子钟设计
基于硬件描述语言VHDL的电子钟设计
目录
1引言1
2相关知识介绍1
2.1VHDL介绍2
2.2自顶向下设计方法3
2.3QuartusⅡ开发平台3
2.4CPLD简介4
3电子钟系统设计方案4
3.1电子钟系统设计要求4
3.2系统设计方案概述及工作原理4
4电子钟顶层设计5
4.1顶层设计分析5
4.2顶层电路图6
5各模块电路的设计6
5.1正常计数时间功能模块6
5.1.1分频组件设计7
5.1.260进制计数器设计7
5.1.324进制计数器设计8
5.2定时器设定于计时功能模块9
5.2.1定时器组件设计思路及原理图9
5.2.2定时器仿真波形10
5.3闹钟模块设计11
5.3.1闹钟组件的设计思路及原理图11
5.3.2仿真波形11
5.4输出选择与数码转换模块设计12
5.4.1秒/分查表组件设计12
5.4.2小时查表组件设计13
5.5扫描多路输出模块14
5.5.1bin2led组件设计14
5.5.2scan4组件设计15
5.5.3scan2组件设计16
6各模块硬件实现结果17
6.1正常计数模块的硬件实现结果18
6.2定时模块的硬件实现结果19
6.3闹钟模块硬件实现结果20
7小结20
参考文献:
20
附录:
部分模块代码21
1引言
随着电子技术的飞速发展,各种电子设备及数字系统的复杂度、集成度越来越高,现代电子产品性能进一步提高,产品更新换代的节奏越来越快,要求产品开发周期短、开发成本低、保密性和可修改及可扩展性好,因此对集成电路的设计方法不断提出了新的要求,因此EDA技术应运而生。
所谓EDA(ElectronicDesignAutomation)技术,是依赖目前功能已十分强大的计算机为工具,代替人完成数字系统设计、逻辑综合、布局布线和仿真工作的技术。
目前,EDA技术已经成为支撑现代电子设计的通用平台,并逐步向支持系统级设计的方向发展。
只有以硬件描述语言和逻辑综合为基础的自顶向下的设计方法才能满足日趋复杂的数字系统设计要求。
硬件描述语言有很多种,本文应用具有强大的电路描述和建模能力的VHDL语言进行电子钟系统设计,为以后深入学习和应用电子系统现代设计方法打好基础,并具有工程实用性。
2相关知识介绍
本文所设计的电子钟系统是运行在QuartusⅡ环境下的一个小型的数字系统。
我采用了自顶向下的设计方法,应用功能强大的硬件描述语言VHDL完成系统的设计仿真。
下面就本设计所用到的技术作一下简单的介绍。
2.1VHDL介绍
VHDL是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage的缩写,是在ADA语言的基础上发展起来的硬件描述语言。
VHDL诞生于1983年,1987年12月,VHDL被接纳为标准硬件描述语言,即IEEE1076标准。
经过不断更改和改善,1993年,VHDL重新修订并增加了一些功能,即IEEE1076-93标准。
目前在电子工程领域,作为IEEE的工业标准硬件描述语言,VHDL已成为事实上的通用硬件描述语言。
电路设计的描述层次可分为系统级、算法级、寄存器传输级、门级和晶体管级,VHDL的建模范围可以从最抽象的系统级一直到门级,从多个层次对电路进行模拟仿真。
它除了具有硬件特征的语句外,其语言形式和描述风格以及句法和一般的计算机高级语言相当类似,然而它又有同软件语言完全不同的性质。
以下是一个VHDL的实例:
LIBRARYIEEE;--IEEE库使用说明语句
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux21IS--实体说明部分
PORT(
a,b:
INSTD_LOGIC;
s:
INSTD_LOGIC;
y:
OUTSTD_LOGIC
);
ENDENTITYmux21;
ARCHITECTUREmux21aOFmux21IS--结构体说明部分
BEGIN
PROCESS(a,b,s)
BEGIN
IFs=’0'THENy<=a;
ELSEy<=b;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREmux21a;
这个程序是一个简单的2选1多路选择器的VHDL完整描述。
它体现出了VHDL程序的一般结构:
使用库(Use)定义区——实体(Entity)定义区——结构(Architecture)定义区。
其中Use定义区描述的是这个程序使用的定义库,类似于C语言的头文件包括;
Entity定义区描述的电子的外部结构,就是指元件的输入和输出接口,它用以定义一个芯片的管脚状态;Architecture定义区里面是这个程序的关键部分,包括算法,功能,硬件的行为等都是在Architecture区里面描述的。
一个完整的VHDL程序是对一个功能元件从外部和内部两个方面来进行描述,由于元件本身具有层次性,因此它既可以作为完成某一功能的逻辑电路单元而独立存在,也可以作为一个部件,和其他功能元件一起构成更复杂的功能元件或数字系统,因此其单元的概念很清晰,可以灵活地应用于自顶向下的数字系统设计流程。
2.2自顶向下设计方法
本设计采用自顶向下的设计方法来完成电子钟系统。
所谓自顶向下的设计方法,是指在设计过程中,从数字系统的最高层次出发,进行仿真验证,再将系统划分成各个子模块。
然后再对各个子模块进行仿真验证,合格之后经EDA开发平台由计算机自动综合成门级电路,进行门级仿真验证。
自顶向下的方法强调在每个层次进行仿真验证,以保证系统性能指标的实现,以便于在早期发现和纠正设计中出现的错误。
自顶向下设计方法有一些突出的优点:
(1)适应于复杂和大规模的数字系统的开发,便于层次式、结构化的设计思想。
(2)各个子系统可以同时并发,缩短设计周期。
(3)对于设计的系统进行层层分解,且在每一层次进行仿真验证,设计错误可以在早期发现,提高了设计的正确性。
(4)逻辑综合之前的设计工作与具体的实现工艺、器件等无关,因此,设计的可移植性良好。
2.3QuartusⅡ开发平台
QuartusII是Altera公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。
QuartusII可以产生并识别EDIF网表文件、VHDL网表文件,为其他EDA工具提供了方便的接口;可以在QuartusII集成环境中自动运行其他EDA工具。
QuartusII软件的开发流程可概括为以下几步:
设计输入、设计编译、设计时序分析、设计仿真和器件编程,具有FPGA和CPLD芯片设计的所有阶段的解决方案。
(1)设计输入QuartusII软件在File菜单中提供“NewProjectWizard...”向导,引导设计者完成项目的创建。
当设计者需要向项目中添加新的VHDL文件时,可以通过“New”选项选择添加。
(2)设计编译QuartusII编译器完成的功能有:
检查设计错误、对逻辑进行综合、提取定时信息、在指定的Altera系列器件中进行适配分割,产生的输出文件将用于设计仿真、定时分析及器件编程。
(3)设计定时分析单击Project菜单下的“TimingSettings...”选项,可以方便地完成时间参数的设定。
QuartusII软件的时序分析功能在编译过程结束之后自动运行,并在编译报告的TimingAnalyses文件夹中显示。
(4)设计仿真QuartusII软件允许设计者使用基于文本的向量文件(.vec)作为仿真器的激励,也可以在QuartusII软件的波形编辑器中产生向量波形文件(.vwf)作为仿真器的激励。
(5)器件编程设计者可以将配置数据通过MasterBlaster或ByteBlasterMV通信电缆下载到器件当中,通过被动串行(PassiveSerial)配置模式或JTAG模式对器件进行配置编程,还可以在JTAG模式下给多个器件进行编程。
2.4CPLD简介
CPLD是ComplexProgrammableLogicDevice的缩写,即复杂可编程逻辑器件,内部结构为“与或阵列”。
该结构来自于典型的PAL、GAL器件的结构。
任意一个组合逻辑都可以用“与或”表达式来描述,所以该“与或阵列”结构能实现大量的组合逻辑功能。
CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆将代码传送到目标芯片中,实现设计的数字系统。
CPLD具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。
几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。
CPLD器件已成为电子产品不可缺少的组成部分。
3电子钟系统设计方案
3.1电子钟系统设计要求
(1)能够对秒、分、小时进行计时,每日按24小时计时制;
(2)能够作为计时器使用;
(3)能够设定闹钟;
3.2系统设计方案概述及工作原理
根据系统设计要求,系统设计采用自顶向下设计方法,由正常计时模块、定时器模块、闹钟模块、数码转换模块、扫描多路输出模块组成。
(1)首先按下复位开关rst进行复位清零操作,电子钟从新计时开始。
(2)为了便于时钟计数,需要1hz的时钟信号。
而实验箱上提供给系统的频率大于1hz,这里取22.1184MHZ,所以要对频率进行分频,用来实现系统输入信号产生一个1hz的时钟信号。
(3)为了设定闹钟,本文设计了一个目标时间调整程序。
将alarm的开关转成on,ok键是off时,6个数字即显示00:
00:
00,以等待输入。
当按下调秒键sec_tune时,秒针将从0持续增加到59后,再返回0,任何时刻弹出按键即显示当时的值,调分键与调时键的原理与此相同。
当ok键是on时,则停止设定,显示时间便到正常计时。
(4)计时器的原理与闹钟程序有相似之处。
将stop的开关转成on,ok键是off时,6个数字即显示00:
00:
00,以等待输入。
当按下调秒键sec_tune时,秒针将从0持续增加到59后,再返回0,任何时刻弹出按键即显示当时的值,调分键与调时键的原理与此相同。
当ok键是on时,则停止设定,显示时间为所设定的计时起始时间,并开始进行计时,直到计时器显示00:
00:
00为止。
(5)为了节省6个七段显示器显示所需的电流消耗,本文利用视觉暂留原理来让七段显示器轮流来显示。
4电子钟顶层设计
4.1顶层设计分析
对于电子钟的设计,这里将采用自顶向下的设计方法进行设计,因此首先需要进行电子钟的顶层设计。
本节将首先介绍电子钟的系统结构和模块划分,然后设计出顶层VHDL设计程序。
根据前边叙述的电子钟的设计要求、工作原理和设计方案,这里给出设计系统结构框图和外部管脚图分别如图4.1和图4.2所示。
图4.1系统结构框图
图4.2系统外部管脚图
由电子钟的外部管脚图可知,系统的输入输出信号包括:
(1)复位开关信号rst:
输入信号;
(2)外部输入的时钟信号clk:
输入信号;
(3)闹钟触发信号alarm:
输入信号;
(4)定时器信号stop:
输入信号;
(5)定时器计时开始信号ok:
输入信号;
(6)秒/分/时调整信号sec_tune,min_tune,hour_tune:
输入信号;
(7)闹钟/定时器标志信号led_alarm,led_stop:
输出信号;
(8)LED七段译码管的输出信号seg4[0..6],seg2[0..6]:
输出信号。
由图4.1知,系统划分了五个模块,划分的这五个模块,每个模块都包含若干个组件,因此首先建立一个程序包把所有的组件包含在一起,以便于主程序模块的调用,然后再对每个组件进行编程设计。
4.2顶层电路图
顶层电路图见附页。
5各模块电路的设计
5.1正常计数时间功能模块
系统必须维持一个持续不断计数的时钟,从时间00:
00:
00到23:
59:
59循环不断。
首先将22.1184MHZ的系统输入脉冲除以22118400得到1HZ的基本秒输入,然后除以60得到分数,再除以60得到小时数,再除以24得一个满日指针,这些功能的实现要用到三种组件:
分频组件,60进制计时组件,24进制计时组件。
5.1.1分频组件设计
本设计采用的是CPLD芯片EP1K100QC208-3,内部晶振为22.1184MHz,但是数码显示管位扫描信号和其他模块的工作频率是1Hz。
所以要用分频组件来对输入时钟进行22118400分频。
下面图5.1是生成的分频组件元器件图形。
接口:
clk——时钟输入,输入信号22.1184MHz
f1hz——1Hz输出信号
图5.1分频组件器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.2
图5.2分频组件仿真波形图
由图5.2知,输入信号的周期是80ns,输出信号的周期是1769472118ns,1769472118除以80约等于22118400,证明分频是正确的。
5.1.260进制计数器设计
为了让计算过程容易阅读,个位数信号one(0~9)与十位数信号ten(0~5)先以整数形式出现,计算完成后再转换成位矢量形式(信号ones和tens),便于以后转换成七段LED显示码。
虽然十进制仅需2位的位矢量,但为统一以后的七段显示器输出显示的需要,这里是以4位的位矢量表示的。
if_then语句与适当的条件进位适合时钟计时,十进制的进位归零必须配合个位数的进位归零,而个位数的进位归零则不必配合十进制的进位归零,所以在if_then语句中,十进制的计数动作应放在内层。
秒数的计数以1Hz的输入为触发信号,分数的计数以秒数的进位输出full_sec作为触发。
下面图5.3是60进制计数器器件图形。
接口:
carry:
1hz时钟信号或者是秒的进位信号
rst:
复位信号
times:
输出十进制的秒数或分数
full:
进位信号
图5.360进制计数器器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.4
图5.460进制计数器仿真波形图
由图5.4知,每来一个carry上升沿,计数器就加1,当计数器当到达第60个上升沿时,full=1,times由59归零,仿真符合60进制计数器的要求。
5.1.324进制计数器设计
24进制计数器的结构和原理与60进制计数器相类似,只是将除以60改为除以24,并在接收60分进位指针carry时,检查是否同时为23小时,再决定进位与否。
因此个为数信号one与十位数信号ten先以整数形式出现,计算完成后再转换成位矢量形式,便于以后转成了LED显示码。
虽然十进制仅需2位的位矢量,但为统一以后的七段显示器输出显示的需要,这里是以4位的位矢量表示的。
个位数的进位归零在十进制为2时,必须在one等于3时进位,同时送出进位指针full=1,1小时后将指针归零。
下面图5.5是生成的24进制计数器器件图形。
接口:
carry:
1hz时钟信号或者是分的进位信号
rst:
复位信号
times:
输出十进制的小时数
full:
进位信号
图5.524进制计数器器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.6
图5.624进制计数器仿真波形
由上图5.6知,carry信号的周期是1ms,当到达第24个上升沿时,full=1,times归零。
仿真符合24进制计数器的要求。
5.2定时器设定于计时功能模块
在此模块中,先利用定时器组件设定定时器的计时时间,并执行计时动作,取得计时中止指针,然后由计时中止指针标示出计时中止状态led_stop=’1’。
5.2.1定时器组件设计思路及原理图
将stop的开关转成on,ok键是off时,6个数字即显示00:
00:
00,以等待输入。
当按下调秒键sec_tune时,秒针将从0持续增加到59后,再返回0,任何时刻弹出按键即显示当时的值,调分键与调时键的原理与此相同。
当ok键是on时,则停止设定,显示时间为所设定的计时起始时间,并开始进行计时,直到计时器显示00:
00:
00为止。
接口:
rst:
复位信号
hz1:
系统时钟1hz
stop:
输入停止信号
ok:
计时是否开始
sec_tune:
按下以调秒
min_tune:
按下以调分
hour_tune:
按下以调时
stop_sec:
定时秒数
stop_min:
定时分数
stop_hour:
定时小时数
index:
定时器输出停止信号
disp:
显示信号
图5.7定时组件器件图
5.2.2定时器仿真波形
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.8
图5.8定时器仿真波形
由图5.8知,当ok=1时,确定定时时间为5秒,然后时间递减,减到零后完成定时。
此时index=1,定时结束。
5.3闹钟模块设计
在此模块中,先利用alarm_set组件确定闹钟的设定时刻,然后确认指针开关ok处于ok处于on(‘1’)时,开始进行目前正常时间与闹钟设定时间的对比动作,对比完成即设定alarm_index为1,然后再进一步标示出闹钟设定状态led_alarm=’1’。
5.3.1闹钟组件的设计思路及原理图
闹钟的功能就是设定特定的时间然后与正常时间对比,时间相同特定的等就会亮。
这个组件的功能是调整秒分时以确定闹钟时间,并配合alarm,ok两键来确定动作。
接口:
rst:
复位信号
hz1:
系统时钟1hz
alarm:
输入闹钟信号
ok:
闹钟是否开始
sec_tune:
按下以调秒
min_tune:
按下以调分
hour_tune:
按下以调时
sec:
闹钟的秒数
min:
闹钟的分数
hour:
闹钟的小时数
图5.9闹钟组件器件图
5.3.2仿真波形
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.10。
图5.10闹钟模块仿真波形
由图5.10,当按下alarm键,即alarm=1时,可以进行调时分秒,然后当ok=1时,闹钟设定结束。
5.4输出选择与数码转换模块设计
通常6个时分秒数字所显示的是正常的计时闹钟,但在闹钟与定时器时间设定过程中,必须显示正在设定的闹铃时间或定时器计时时间。
另外,在定时器计时过程中,为了观察进行时间,必须显示正在计时的剩余时间。
本模块的功能就是进行输出选择,并进行数码转换来完成将输出时间由整数形式转成BCD形式的工作。
本模块用到了秒/分查表组件和小时查表组件。
5.4.1秒/分查表组件设计
在此设计中,为了计算方便,前面的都是以整数来处理时间,但在电路中,数值均以二进制的形式存储,所以需要设计一个查表程序来将秒数或分数的0到59共60个整数转换成二进制编码的十进制(BCD)表示法,以便将来转换成七段显示器格式输出。
下面图5.11是生成的秒/分查表器件图形。
接口:
interg:
输入0到59的整数信号
one:
输出个位的BCD码
ten:
输出十位的BCD码
图5.11秒/分查表组件器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.12
图5.12秒/分查表组件仿真波形
由图知,十进制转化成二进制,one代表十进制的个位,ten代表十进制的十位。
例如18是00011000。
仿真结果证明程序可行。
5.4.2小时查表组件设计
小时查表组件的思路与秒/分组件相似,只是将小时数0到23共24个整数转换成二进制编码表示。
下面图5.13是小时查表器件图
接口:
interg:
输入0到23的整数信号
one:
输出个位的BCD码
ten:
输出十位的BCD码
图5.13小时查表组件器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.14
图5.14小时查表组件仿真波形图
由图知,十进制转化成二进制,one代表十进制的个位,ten代表十进制的十位。
例如5是00000101。
仿真结果证明程序可行。
5.5扫描多路输出模块
为了节省IC的输出引脚及耗电量,可以将4组数字输出或2组数字输出作为多路输出;另外使用四合一型七段显示器与视觉暂留效应可降低显示耗电量。
首先将6个数字通过bin2led组件将BCD码转换成七段显示器码,然后分别将分秒的4个数字通过scan4组件扫描输出,而将小时数的2个数字通过scan2组件扫描输出,最后完成整个电子钟的功能。
5.5.1bin2led组件设计
在一般电路中,数值均以二进制的形式存储与计算,但是要将其输出值七段译码管显示时,则必须提供一个电路模块专门将二进制转换成十进制输出使用。
此处我们以查表方式来设计转换电路,使用并行语句with_select,列出0到9等10中对照数值情况。
若为10及其以上的数字,则显示错误信息“E”。
本设计用的实验平台的七段译码管是共阴极的。
下面图5.15是bin2led的器件图。
接口:
bin:
0到9的二进制表示形式,输入信号
led:
七段译码管显示管对应显示的数值
图5.15bin2led组件器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.16
图5.16bin2led组件仿真波形图
由上图分析,输入的是0到9的二进制表示形式,输出的是七段显示译码,本设计的七段显示器是共阴极的,所以,如输入时6的二进制0110,输出是1101101。
仿真证明程序是可行的。
5.5.2scan4组件设计
在本组件中,sel线选择控制输出4组数字a,b,c,d,轮流输出至多路输出mux_out;同时,电源控制信号pa,pb,pc,pd也同步配合多路输出。
下面图5.17是scan4器件图。
接口:
rst:
复位信号
clk:
外部时钟信号
a,b,c,d:
分秒的各位数的七段译码
pa,pb,pc,pd:
驱动信号
图5.17scan4组件器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.18
图5.18scan4仿真波形图
从上图可知,clk每来一个上升沿,输出muxout就输出a,b,c,d中的一组,同时对应pa,pb,pc,pd分别等于1,如clk来第一个上升沿,输出muxout是a组,同时pa=1。
符合多路输出的原理,此组件的程序可行。
5.5.3scan2组件设计
本组件与scan4组件相似,sel线选择控制输出2组数字a,b,轮流输出至多路输出mux_out;同时,电源控制信号pa,pb也同步配合多路输出。
接口:
rst:
复位信号
clk:
外部时钟信号
a,b:
小时的各位数的七段译码
pa,pb:
驱动信号
图5.19scan2器件图
在QuartusⅡ软件中进行仿真后,得到仿真时序图如图5.20
图5.20scan2仿真波形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 硬件 描述 语言 VHDL 电子钟 设计