多功能数字钟的VHDL设计教材Word文件下载.docx
《多功能数字钟的VHDL设计教材Word文件下载.docx》由会员分享,可在线阅读,更多相关《多功能数字钟的VHDL设计教材Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
2.1VHDL的特点
应用VHDL进行系统设计,有以下几方面的特点。
(一)功能强大
VHDL具有功能强大的语言结构。
它可以用明确的代码描述复杂的控制逻辑设计。
并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。
VHDL是一种设计、仿真和综合的标准硬件描述语言。
(二)可移植性
VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。
它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。
此外,通过更换库再重新综合很容易移植为ASIC设计。
(三)独立性
VHDL的硬件描述与具体的工艺技术和硬件结构无关。
设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。
程序设计的硬件目标器件有广阔的选择范围,可以是各系列的CPLD、FPGA及各种门阵列器件。
(四)可操作性
由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。
(五)灵活性
VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。
使其在任何大系统的设计中,随时可对设计进行仿真模拟。
所以,即使在远离门级的高层次(即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。
2.2VHDL的设计结构
VHDL描述数字电路系统设计的行为、功能、输入和输出。
它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。
VHDL将一个设计称为一个实体Entity(元件、电路或者系统),并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现)。
当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。
所以,内部和外部的概念对系统设计的VHDL是十分重要的。
外部的实体名或连接由实体声明Entity来描述。
而内部的实体算法或实现则由结构体Architecture来描述。
结构体可以包含相连的多个进程process或者组建component等其他并行结构。
需要说明的是,它们在硬件中都是并行运行的。
2.3VHDL的设计步骤
采用VHDL的系统设计,一般有以下6个步骤。
1)要求的功能模块划分;
2)VHDL的设计描述(设计输入);
3)代码仿真模拟(前仿真);
4)计综合、优化和布局布线;
5)布局布线后的仿真模拟(后仿真);
6)设计的实现(下载到目标器件)。
3.MAX+plusII仿真软件的使用简介
Max+plusII(或写成Maxplus2,或MP2)是Altera公司推出的的第三代PLD开发系统(Altera第四代PLD开发系统被称为:
QuartusII,主要用于设计新器件和大规模CPLD/FPGA)。
使用MAX+PLUSII的设计者不需精通器件内部的复杂结构。
设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。
其设计速度非常快。
对于一般几千门的电路设计,使用MAX+PLUSII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。
设计处理一般在数分钟内内完成。
特别是在原理图输入等方面,MaxplusII被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用。
PLD器件的逻辑功能描述一般分为原理图描述和硬件描述语言描述,原理图描述是一种直观简便的方法,它可以将现有的小规模集成电路实现的功能直接用PLD器件来实现,而不必去将现有的电路用语言来描述,但电路图描述方法无法做到简练;
硬件描述语言描述是可编程器件设计的另一种描述方法,语言描述可能精确和简练地表示电路的逻辑功能,现在PLD的设计过程中广泛使用。
常用的硬件描述语言有ABEL,VHDL语言等。
在这里我们可以先看一看用FPGA/CPLD开发工具进行电路设计的一般流程
通常可将FPGA/CPLD设计流程归纳为以下7个步骤,这与ASIC设计有相似之处。
1.设计输入。
在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。
自90年代初,Verilog、VHDL、AHDL等硬件描述语言的输入方法在大规模设计中得到了广泛应用。
2.前仿真(功能仿真)。
设计的电路必须在布局布线前验证电路功能是否有效。
(ASCI设计中,这一步骤称为第一次Sign-off)PLD设计中,有时跳过这一步。
3.设计编译。
设计输入之后就有一个从高层次系统行为设计向门级逻辑电路设转化翻译过程,即把设计输入的某种或某几种数据格式(网表)转化为软件可识别的某种数据格式(网表)。
4.优化。
对于上述综合生成的网表,根据布尔方程功能等效的原则,用更小更快的综合结果代替一些复杂的单元,并与指定的库映射生成新的网表,这是减小电路规模的一条必由之路。
5.布局布线。
在PLD设计中,3-5步可以用PLD厂家提供的开发软件(如Maxplus2)自动一次完成。
6.后仿真(时序仿真)需要利用在布局布线中获得的精确参数再次验证电路的时序。
(ASCI设计中,这一步骤称为第二次Sign—off)。
7.生产。
布线和后仿真完成之后,就可以开始ASCI或PLD芯片的投产。
同样,使用MaxplusII基本上也是有以上几个步骤,但可简化为:
设计输入、设计编译、设计仿真、下载。
4.电子钟的设计要求与总体设计
4.1设计要求
本次设计的多功能数字钟具有如下功能:
1.秒/分/时的依次显示并正确计数;
2.定时闹钟:
实现整点报时,扬声器发出报时声音;
3.时间设置,即手动调时功能:
当认为时钟不准确时,可以分别对分/时进行调整;
4.2总体设计
4.2.1设计框图
图1顶层框图
4.2.2外部输入输出要求
外部输入要求:
输入信号有1kHz/1Hz时钟信号、低电平有效的秒清零信号CLR、低电平有效的调分信号SETmin、低电平有效的调时信号SEThour;
外部输出要求:
整点报时信号SOUND(59分51/3/5/7秒时未500Hz低频声,59分59秒时为1kHz高频声)、时十位显示信号h1(a,b,c,d,e,f,g)、时个位显示信号h0(a,b,c,d,e,f,g)、分十位显示信号m1及分个位m0、秒十位s1及秒个位s0;
数码管显示位选信号SEL0/1/2等三个信号。
4.2.3内部各功能模块:
1)FREQ分频模块:
整点报时用的1kH与500Hz的脉冲信号,这里的输入信号是1KHz信号,所以只要一个二分频即可;
时间基准采用1Hz输入信号直接提供(当然也可以分频取得,这里先用的是分频取得的信号,后考虑到精度问题而采用硬件频率信号。
2)秒计数模块SECOND:
60进制,带有进位和清零功能的,输入为1Hz脉冲和低电平有效的清零信号CLR,输出秒个位、时位及进位信号CO。
3)分计数模块MINUTE
60进制,带有进位和置数功能的,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个位、时位及进位信号CO。
4)时计数模块HOUR:
24进制,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个位、时位。
5)扫描模块SELTIME:
输入为秒(含个/十位)、分、时、扫描时钟CLK1K,输出为D和显示控制信号SEL。
6)整点报时功能模块ALERT:
输入为分/秒信号,输出为高频声控Q1K和Q500。
7)译码显示功能模块DISPLAY:
输入为D,输出为Q
5.VHDL程序设计
5.1分频模块(原理图输入)
图2顶层设计
5.2秒模块程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitySECONDis
port(clk,clr:
instd_logic;
sec1,sec0:
outstd_logic_vector(3downto0);
co:
outstd_logic);
endSECOND;
architectureSECofSECONDis
begin
process(clk,clr)
variablecnt1,cnt0:
std_logic_vector(3downto0);
ifclr='
1'
then
cnt1:
="
0000"
;
cnt0:
elsifclk'
eventandclk='
ifcnt1="
0101"
andcnt0="
1000"
co<
='
1001"
elsifcnt0<
"
=cnt0+1;
else
ifcnt1<
=cnt1+1;
0'
endif;
sec1<
=cnt1;
sec0<
=cnt0;
endprocess;
endSEC;
图3秒模块仿真波形
5.3分模块程序
entityMINUTEis
port(clk,en:
min1,min0:
endMINUTE;
architectureMINofMINUTEis
process(clk,en)
ifclk'
ifen='
min1<
min0<
endMIN;
图4分模块仿真波形
5.4时模块程序
entityHOURis
h1,h0:
outstd_logic_vector(3downto0));
endHOUR;
architecturehour_arcofHOURis
process(clk)
0010"
0011"
elsifcnt0>
else
h1<
h0<
endhour_arc;
图5时模块仿真波形
5.5扫描模块程序
useieee.std_logic_arith.all;
entitySELTIMEis
port(
clk:
sec1,sec0,min1,min0,h1,h0:
instd_logic_vector(3downto0);
daout:
sel:
outstd_logic_vector(2downto0));
endSELTIME;
architecturefunofSELTIMEis
signalcount:
std_logic_vector(2downto0);
sel<
=count;
process(clk)
begin
if(clk'
)then
if(count>
101"
count<
000"
else
=count+1;
endif;
casecountis
when"
=>
daout<
=sec0;
001"
=sec1;
010"
=min0;
011"
=min1;
100"
=h0;
whenothers=>
=h1;
endcase;
endprocess;
endfun;
图6扫描模块仿真波形
5.6显示模块程序
entityDISPLAYis
port(d:
q:
outstd_logic_vector(6downto0));
endDISPLAY;
architecturedisp_areofDISPLAYis
process(d)
casedis
=>
q<
0111111"
0001"
0000110"
1011011"
1001111"
0100"
1100110"
1101101"
0110"
1111101"
0111"
0100111"
1111111"
1101111"
endcase;
enddisp_are;
图7显示模块仿真波形
5.7定时闹钟模块程序
entityALERTis
port(m1,m0,s1,s0:
q500,qlk:
endALERT;
architecturesss_arcofALERTis
ifclk'
ifm1="
andm0="
ands1="
ifs0="
ors0="
q500<
ifm1="
ands0="
qlk<
endsss_arc;
图8定时闹钟模块仿真波形
5.8顶层文件(原理图输入)
6.结语
毕业设计,也许是我大学生涯交上的最后一个作业了。
想借次机会感谢三年以来给我帮助的所有老师、同学,你们的友谊是我人生的财富,是我生命中不可或缺的一部分。
感谢老师对我的教育培养,你们细心指导我的学习,在此,我要向诸位老师深深地鞠上一躬。
毕业论文的撰写过程是对所学的电子技术基本理论知识的综合运用,对三年专业知识的一次综合应用、扩充和深化,也是对我们理论运用于实际设计的一次锻炼。
通过毕业论文的撰写过程,我不仅温习了以前在课堂上学习的专业知识,同时我也得到了老师和同学的帮助,学习和体会到了电子技术的基本技能和思想。
从开始接到论文题目到电路图的设计,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战。
在这段时间里,我学到了很多知识也有很多感受。
当然在做的过程中也遇到过很多的麻烦,一些没有接触过的元件,它们的封装需要自己去书籍、网上搜索,在更新的时候会有一些错误,自己很难改正,只得求助老师,最后得以解决。
这次毕业设计使我开始了自主的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次的成功都会让我兴奋好一段时间。
此次设计过程中,各种系统的适用条件,各种程序的选用标准,各种元件的安装方式,我都是随着设计的不断深入而不断熟悉并学会应用的。
和老师的沟通交流更使我对设计有了新的认识也对自己提出了新的要求。
课题设计过程中我不怕失败,在失败中总结经验,为成功积累素材;
学着自我超越,敢于尝试,在尝试中进步,这对我能力的提高大有好处。
设计中有太多的不懂和陌生,但是我会多看、多想、多问、多学,认真的对待每一次老师交代的任务,每一个任务都是一个锻炼的机会和成长的过程,我在规定的时间尽善尽美的完成,把自己的能力发挥到最大限度。
这些本是我工作后才会意识到的问题,通过这次毕业设计让我提前了解了这些知识,这是很珍贵的。
这个课题设计的过程让我学习、工作的思路有了更为明朗的认识:
它是站在一定高度上去工作的,眼界要放宽,思路要开阔,内容要饱满。
我曾经也做过不少课程设计,但都是局限在课本中,而这次实验设计,能够让我走出来,仿佛推开门看见外面的世界是如此之大,如同井底之蛙跳上井沿过程中要有很好的团结合作意识和责任感,积极的参与到实验设计的讨论中去,学习和听取别人的意见,我也主动的发表意见,用一个积极上进、激情乐观的态度面对每一天的实验设计生活,让我的学习生活丰富多彩。
非常感谢学院能给我们提供这样的一个可以自己动脑、动手进行设计的机会,同时也大大加强了同学之间的沟通,以及学生与老师之间的交流,这是一个放飞自我的平台,也是我们理想与实际结合的升华,我想学院给我们提供的这些,教会我们的这些不仅仅在现在有用,对于我们今后步入社会也是同样有用的。
目前我已经在一家