课程设计报告数字秒表的设计Word格式文档下载.docx
- 文档编号:21921645
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:27
- 大小:228.01KB
课程设计报告数字秒表的设计Word格式文档下载.docx
《课程设计报告数字秒表的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告数字秒表的设计Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。
秒表在很多领域充当一个重要的角色。
在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。
他们对时间精确度达到了几纳秒级别。
1.1课程设计的目的
本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。
在掌握所学的计算机组成与结构课程理论知识时。
通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。
通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。
1.2课程设计的内容
以FPGA为核心,利用VHDL语言设计基于计算机电路中时钟脉冲原理的数字秒表。
该数字秒表能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒。
设计了复位开关和启停开关。
复位开关只可以在秒表暂停的情况下使用,使用以后计时器清零,并做好下一次计时的准备。
2EDA、VHDL简介
2.1EDA技术
EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
目前EDA主要辅助进行三个方面的设计工作:
IC设计、电子电路设计和PCB设计。
没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;
反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
2.2硬件描述语言——VHDL
★VHDL的简介
VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
但是,由于它在一定程度上满足了当时的设计需求,于是他在1987年成为AI/IEEE的标准(IEEESTD1076-1987)。
1993年更进一步修订,变得更加完备,成为AI/IEEE的AI/IEEESTD1076-1993标准。
目前,大多数的CAD厂商出品的EDA软件都兼容了这种标准。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
★VHDL语言的特点
VHDL的程序结构特点是将一项工程设计,关于用VHDL和原理图输入进行CPLD/FPGA设计的粗略比较:
在设计中,如果采用原理图输入的设计方式是比较直观的。
你要设计的是什么,你就直接从库中调出来用就行了。
这样比较符合人们的习惯。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
★VHDL的设计流程
它主要包括以下几个步骤:
1.文本编辑:
用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。
通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件
2.功能仿真:
将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)
3.时序仿真:
需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。
(也叫后仿真)通常以上过程可以都在PLD/FPGA厂家提供的开发工具。
4.器件编程
3设计过程
3.1设计规划
本系统设计采用自顶向下的设计方案,系统的整体组装设计原理图如图3-1所示,它主要由控制模块、时基分频模块,计时模块和显示模块四部分组成。
各模块分别完成计时过程的控制功能、计时功能与显示功能。
3.2各模块的原理及其程序
本系统设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。
各模块实现秒表不同的功能。
图3-2就是整个系统原理图。
3.2.1顶层结构体的设计及VHDL源代码
在任何自顶向下的VHDL设计描述中,设计人员常常将整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。
现在我们就来根据前面描述的结构功能,确定使用哪些模块以及这些模块之间的关系。
由于秒表的复位开关和启/停开关采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面安排一个消抖和同步化电路模块,以保证系统能捕捉到输入脉冲,并保证每按一键,只形成一个宽度为系统时钟周期的脉冲。
由于外部时钟信号clk的频率为48MHz,而实际需要的内部计时时钟频率为100Hz和提供给消抖同步电路的频率为1000Hz,因此需要一个时钟分频电路。
通过分频电路,由外部时钟信号clk产生频率分别为100Hz和1000Hz的时钟信号。
秒表的计时操作是在复位开关信号无效并且两次启/停开关信号有效之间才能够进行,因此需要一个电路来产生一个使能信号。
只有当使能信号有效时,才能够进行秒表的定时计数操作。
当秒表开始正常计时的时候,需要进行定时计数操作,由于时间显示器是由8个LED七段显示数码管组成的,因此需要产生8位的计时信息:
小时十位信号、小时个位信号、分十位信号、分个位信号、秒十位信号、秒个位信号、0.1秒位信号和0.01秒位信号。
这个定时计数操作可以有一个定时计数器来完成,定时计数器的功能就是用来产生8位计时信息。
秒表还要将定时计数的结果显示出来,为了节省资源,我们采用循环点亮LED七段显示数码管的方法来显示秒表的计时输出。
我们通过信号sel(2downtown0)来进行8个LED七段显示数码管的选择,从而将输出信号display(7downtown0)送到相应的LED七段显示数码管上以完成跑表计时的显示。
跑表显示的功能可以通过一个单独的电路来实现。
通过上面的说明,不难看出我们可以将秒表系统划分为4个模块时钟分频模块、控制模块(含消抖功能)、秒表计时模块(计数器级联)、和显示模块。
下面我们就根据各个模块的连接关系来确定各个模块的输入信号和输出信号。
(1)控制模块
输入信号
●启/停开关信号ena;
●时钟信号clk。
输出信号:
●去除抖动后的启/停信号:
pulse;
●消除抖动后的使能信号:
temp.
(2)时钟分频模块
外部时钟信号clk。
输出信号
●时钟信号clk1k;
●时钟信号clk100。
(3)跑表计时模块
●复位信号clr;
●内部计时时钟信号clk100;
●定时计数的使能信号temp。
●小时十位信号hr10;
●小时个位信号hr;
●分十位信号min10;
●分个位信号min;
●秒十位信号sec10;
●秒个位信号sec;
●0.1秒位信号sec01;
●0.01秒位信号sec001。
这部分模块设计中没有直接生成,直接依靠计数器的级联而成
(5)显示模块
●外部时钟信号clk;
●LED七段显示数码管的选通信号sel;
●LED七段显示数码管的输出信号display。
下面根据各个模块的连接关系,给出顶层结构体的VHDL源代码。
首先在结构体的说明部分进行元件说明,然后在结构体中进行例化调用。
同时在结构体的说明部分还定义了许多中间信号,主要用来在模块之间传递信息。
architectureBehavioraloftopis
signalXLXN_1:
std_logic;
signalXLXN_2:
signalXLXN_3:
signalXLXN_4:
signalXLXN_5:
signalXLXN_6:
signalXLXN_7:
signalXLXN_9:
signalXLXN_10:
signalm:
std_logic_vector(23downto0);
COMPONENTclkgne
PORT(
clkin:
INstd_logic;
clkout100:
OUTstd_logic;
clkout1k:
OUTstd_logic
);
ENDCOMPONENT;
COMPONENTcount10
clk:
clr:
ena:
cq:
OUTstd_logic_vector(3downto0);
dout:
COMPONENTcount6
COMPONENTdisplay
s8:
INstd_logic_vector(3downto0);
s7:
s5:
s4:
s2:
s1:
g:
display:
OUTstd_logic_vector(7downto0);
sel:
OUTstd_logic_vector(2downto0)
COMPONENTcontrol
temp:
clk:
instd_logic;
pulse:
outstd_logic
begin
U1:
count10PORTMAP(
clk=>
XLXN_1,
clr=>
clr,
ena=>
XLXN_9,
cq(3downto0)=>
m(3downto0),
dout=>
XLXN_3);
U2:
XLXN_3,
m(7downto4),
XLXN_4);
U3:
XLXN_4,
m(11downto8),
XLXN_5);
U4:
count6PORTMAP(
XLXN_5,
XLXN_9,
m(15downto12),
XLXN_6);
U5:
XLXN_6,
m(19downto16),
XLXN_7);
U6:
XLXN_7,
clr=>
m(23downto20),
open);
U7:
displayPORTMAP(
clkin=>
XLXN_2,
s1(3downto0)=>
s2(3downto0)=>
s4(3downto0)=>
s5(3downto0)=>
s7(3downto0)=>
s8(3downto0)=>
display(7downto0)=>
DIS(7downto0),
g=>
G,
sel(2downto0)=>
sel(2downto0));
U8:
controlPORTMAP(
ena=>
ena,
clkin,
pulse=>
XLXN_10,
temp=>
XLXN_9);
U9:
clkgnePORTMAP(
CLKIN,
clkout1k=>
clkout100=>
XLXN_1);
endBehavioral;
3.3秒表各个模块的分析及其VHDL源代码
前面已经详细地讨论了秒表系统顶层的设计及其VHDL源代码,这里将重点介绍各个模块的实现及其VHDL源代码。
跑表系统被划分为4个模块,而在顶层设计中是将各个模块作为元件来引用的,因此需要将各个模块设计成为独立实体的形式,这样它们就能作为元件被引用了。
3.3.1控制模块
前面已经提到过,由于秒表的复位开关和启/停开关采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面加一个消抖控制。
消抖控制的作用是保证系统能捕捉到输入脉冲,并保证每按一键,只形成一个宽度为模块时钟周期的脉冲。
在数字系统中同步消抖电路的形式很多,应用的也十分广泛。
前面已经介绍了一种既有消抖功能又有同步功能的电路,但是这个电路只适用于得到一个宽度较大的键输入脉冲。
在秒表系统中,要求得到宽度为一个外部时钟信号clk的周期的键入脉冲,因此采用另一种同步消抖电路的形式。
该同步消抖电路的功能是:
;
每按一下启/停开关ena,键输入模块将输出一个宽度为1ms的启/停脉冲pulse。
该模块功能是产生消抖信号并产生新的使能信号,对计时器进行计时。
根据定时关系对该键输入模块进行VHDL描述,功能描述如下面源代码所示。
ibraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitycontrolis
Port(ena:
inSTD_LOGIC;
clk:
instd_logic;
pulse:
outstd_logic;
temp:
outSTD_LOGIC);
endcontrol;
architectureBehavioralofcontrolis
signaltemp1:
integerrange0to1:
=0;
signalreg1:
std_logic;
signalreg2:
signalreg3:
signalreg4:
signalq1:
signalq2:
signalreg_pulse:
q1<
=reg1andreg2andreg3andreg4;
reg_pulse<
=q1andnot(q2);
pulse<
=reg_pulse;
process(clk)
ifclk'
eventandclk='
1'
then
reg1<
=ena;
reg2<
=reg1;
reg3<
=reg2;
reg4<
=reg3;
q2<
=q1;
ifreg_pulse='
temp1<
=(temp1+1)mod2;
iftemp1=1then
temp<
='
0'
;
elsetemp<
endif;
endprocess;
3.3.2时钟分频模块
时钟分频模块的功能是将输入的外部时钟信号clk进行分频,从而产生用来消除抖动的1000Hz的时钟信号clk1k和用于跑表内部定时计数的100Hz的时钟信号clk100。
。
但是需要注意的是,设计中要求时钟信号clk1和时钟信号clk0的有效脉冲宽度为1ms。
libraryIEEE;
entityclkgneis
Port(clkin:
clkout100:
outSTD_LOGIC;
clkout1k:
endclkgne;
architectureBehavioralofclkgneis
signalcnt100:
integerrange1to240000;
signalcnt1k:
integerrange1to24000;
signalclk100:
std_logic:
signalclk1k:
std_logic:
process(clkin)
begin
ifrising_edge(clkin)then
ifcnt100=240000then
cnt100<
=1;
clk100<
=notclk100;
else
=cnt100+1;
endif;
endif;
ifcnt1k=24000then
cnt1k<
clk1k<
=notclk1k;
else
=cnt1k+1;
endprocess;
clkout100<
=clk100;
clkout1k<
=clk1k;
3.3.3计时模块
该模块在实际设计中通过计时器级联而成,分别进行0.01s,1s,1min为单位的计时,通过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 数字 秒表 设计