数字秒表课程设计报告.docx
《数字秒表课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字秒表课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
数字秒表课程设计报告
摘要
当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,用电省的方向开展。
推动该潮流迅速开展的决定性因素就是使用了现代化的EDA[1]设计工具。
本论文先确定了系统的逻辑功能,建立算法流程,选择电路构造,然后确定并设计电路所需的数据处理以及控制模块,在QuartusII[1]上以超高速硬件描述语言VHDL为系统逻辑描述方法完成了数字计时器所需的设计与顶层设计,利用计算机的强大运算能力在QuartusII上对用VHDL建模的复杂数字逻辑进展编译,自动综合地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑行局布线、逻辑仿真,生成符合要求且在电路构造上可以实现的数字逻辑网表〔Netlist〕,根据网表和某种工艺的器件自动生成具体电路,然后生成该工艺条件下这种具体电路的延时模型,通过本设计对数字系统自动化的根本概念、根本原理、特性及实现方法都有了较好的了解和理解,同时锻炼了计算机应用能力和VHDL语言的编程能力和QuartusII的使用能力,本设计圆满完成了用VHDL语言设计1/100秒数字计时器并仿真。
关键词:
电子设计自动化;超高速集成电路硬件描述语言;数字系统设计
第1章绪论
数字秒表是日常生活中比拟常见的电子产品,其设计也是EDA技术中最根本的设计实验之一。
当今社会是数字化的社会,是数字集成电路广泛应用的社会。
数字集成电路本身在不断进展更新换代,随着微电子技术的开展,设计与制造集成电路的任务已不完全由半导体厂商来独立承当。
系统设计师更愿意自己设计专业集成电路(ASIC)芯片,而且希望设计周期尽可能短,最好在实验室里就能设计出适宜的ASIC芯片并且立即投入实际应用之中,因而出现了现场可编程器件〔FPLD〕。
现场可编程门阵列〔FPGA〕即属其中应用最广泛的一种。
超高速硬件描述语言VHDL,是对数字系统进展抽象的行为与功能描述到具体的部线路构造描述,利用EDA工具可以在电子设计的各个阶段、各个层次进展计算机模拟验证,保证设计过程的正确性,可大大降低设计本钱,缩短设计周期。
本文介绍的数字秒表,利用基于VHDL的EDA设计工具,采用大规模可编程逻辑器件FPGA,通过设计芯片来实现系统功能。
给出了顶层电路图,和各模块的设计.通过编辑、编译和器件编程,经测试验证,到达了预期的设计要求,显示结果准确无误。
1.1课题的研究背景
在科技高度开展的今天,集成电路和计算机应用得到了高速开展。
尤其是计算机应用的开展。
它在人们日常生活已逐渐崭露头角。
大多数电子产品多是由计算机电路组成,如:
手机、mp3等。
而且将来的不久他们的身影将会更频繁的出现在我们身边。
各种家用电器多会实现微电脑技术。
电脑各局部在工作时多是一时间为基准的。
本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。
秒表在很多领域充当一个重要的角色。
在各种比赛中对秒表的准确度要求很高,尤其是一些科学实验。
他们对时间准确度到达了几纳秒级别。
秒表作为日常生活中,特别是体育运动中应用的特别广泛,所以准确且方便使用的秒表就被越来越多的人所选择.本秒表计时器用于体育竞赛及各种要求有较准确时的各领域,以往常利用中小规模集成电路实现,但一般体积大,使用携带不方便。
利用VHDL在FPGA或CPLD上实现1/100秒计时控制器,能充分发挥VHDL与可编程器件灵活、高效,集成度高的特点,基于VHDL实现1/100秒计时控制器具有重要的实际意义.此计时器是用一块专用的芯片,用VHDL语言描述的。
它具有开关、时钟和显示功能,其体积小,携带方便。
1.2课题的研究目的
本次设计的目的就是在掌握EDA实验开发系统的初步使用根底上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。
在掌握所学的计算机组成与构造课程理论知识时。
通过对数字秒表的设计,进展理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。
通过课程设计深入理解计算机构造与控制实现的技术,到达课程设计的目标。
1.3主要工作条件
EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
目前EDA主要辅助进展三个方面的设计工作:
IC设计、电子电路设计和PCB设计。
没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
1.4硬件描述语言——VHDL
1.4.1VHDL的简介
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语言将承当起大局部的数字系统设计任务。
1.4.2VHDL语言的特点
VHDL的程序构造特点是将一项工程设计,关于用VHDL和原理图输入进展CPLD/FPGA设计的粗略比拟:
在设计中,如果采用原理图输入的设计方式是比拟直观的。
你要设计的是什么,你就直接从库中调出来用就行了。
这样比拟符合人们的习惯。
在对一个设计实体定义了外部界面后,一旦其部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成外局部的概念是VHDL系统设计的根本点。
应用VHDL进展工程设计的优点是多方面的。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最正确的硬件描述语言。
强大的行为描述能力是避开具体的器件构造,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进展仿真模拟。
(3)VHDL语句的行为描述能力和程序构造决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进展逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的构造,也不必管理最终设计实现的目标器件是什么,而进展独立的设计。
1.4.3VHDL的设计流程
它主要包括以下几个步骤:
(1)文本编辑:
用任何文本编辑器都可以进展,也可以用专用的HDL编辑环境。
通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件
(2)功能仿真:
将文件调入HDL仿真软件进展功能仿真,检查逻辑功能是否正确〔也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进展时序仿真〕
(3)时序仿真:
需要利用在布局布线中获得的准确参数,用仿真软件验证电路的时序。
〔也叫后仿真〕通常以上过程可以都在PLD/FPGA厂家提供的开发工具。
(4)器件编程
第2章设计思想与方案论证
实现数字秒表的方法有多种,可以用单片机作为控制芯片,也可以用FPGA作为控制芯片。
本章说明了采用EDA技术用VHDL语言实现硬件电路,用FPGA作为控制芯片实现数字秒表的方案。
2.1设计思想
基于FPGA的数字秒表的设计
其设计思路为:
通过分频器将晶振所提供的信号分频成0.01S脉冲作为计时信号,经十进制与六进制计数器累加计数。
使用按键开关可实现开场/完毕计时操作以及复位清零操作的操作。
2.2设计要求(秒表的功能描述)
〔1〕要求设置复位开关。
当按下复位开关时,秒表清零并做好计时准备。
在任何情况下只要按下复位开关,秒表都要无条件地进展复位操作,即使是在计时过程中也要无条件地进展清零操作。
〔2〕要求设置启/停开关。
当按下启/停开关后,将启动秒表并开场计时,当再按一下启/停开关时,将终止秒表的计时操作。
〔3〕要求计时准确度大于0.01秒。
要求设计的计时器能够显示秒〔2位〕、0.1秒〔1位〕,0.01秒的时间。
〔4〕要求秒表的最长计时时间为秒表计时长度为59.99秒.
第3章系统设计
整个系统设计是采用自顶向下分析,自底向上设计。
将数字秒表系统的整体分解为各个模块电路。
本章详细介绍了数字秒表系统的各个模块的设计,并对各个模块的每一个局部进展了分析,在第五章对系统模型进展了访真与程序调试。
各模块之间的每一个坏节都是深思熟虑而成,各自完成相应的功能并组成一个统一的整体。
3.1顶层电路设计
数字秒表设计整体运用自顶向下的设计思想,将系统按功能逐层分割的层次化设计方法。
在顶层设计中,要对部各功能块的连接关系和对外的接口关系进展描述,而功能块实际的逻辑功能和具体的实现形式那么由下一层模块来描述[1]。
图3.1QUARTUSII顶层电路图
根据图所示的数字秒表系统顶层电路图,按照自顶向下的设计思路,编写各个模块的源程序,最后再对各个模块进展组合,编写顶层描述的源程序。
3.2数字秒表的设计原理
各个输入/输出端口的作用如下:
(1)CLK为外部时钟信号
(2)CLR为复位信号
(3)ENA为启动/停顿开关,用于开场/完毕计时操作
(4)COUT为输出信号
部模块说明:
(1)分频器模块
(2)十进制计数器模块
(3)六进制计数器模块
3.3分频器模块
在基于EDA技术的数字电路系统设计中,分频电路应用十分广泛。
常常使用分频电路来得到数字系统中各种不同频率的控制信号。
所谓分频电路,就是将一个给定的频率较高的数字输入信号经过适当处理后,产生一个或数个频率较低的数字输出信号。
本设计需要一个计时围为0.01s-59.99秒的秒表,首先需要获得一个比拟准确的计时基准信号,这里时周期为1/100s的计时脉冲,采用一个时钟信号源3MHZ经3万倍分频后获得一个准确的100HZ的脉冲来作为计数器的时钟信号NEWCLK。
图3.2分频器模块图
3.4十进制计数模块
十进制计数器的作用:
当输入100HZ的时钟信号时,每个脉冲相当于是0.01秒,经过一个十进制计数器输出便相当于是0.1秒,经过两个十进制计数器输出那么为1秒,经过三个输出为10秒,这样便完成了有0.01秒到10秒的转变。
图3.3十进制计数器模块图
3.5六进制计数器模块
六进制计数器的作用:
当输出为10秒时,经过一个六进制计数器,便可转化为1分钟,在经过一个十进制计数器输出就是10分钟,最后经过一个六进制计数器最终便会转化为1小时。
图3.4六进制计数器模块图
第4章系统仿真
系统设计完成后需要对其编译仿真,观看仿真波形图来判断设计的是否可以实现期望功能,FPGA的仿真分功能仿真和时序仿真[1]。
功能仿真是指在一个设计中在设计实现前对所创立的逻辑进展的验证其功能是否正确的过程。
布局布线以前的仿真都称作功能仿真,它包括综合前仿真〔Pre-SynthesisSimulation〕和综合后仿真〔Post-SynthesisSimulation〕。
综合前仿真主要针对基于原理框图的设计;综合后仿真既适合原理图设计,也适合基于HDL语言的设计,功能仿真没有考虑进布线延时等情况,波形不存在毛刺。
时序仿真也叫后仿真,时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。
时序仿真使用的仿真器和功能仿真使用的仿真器是一样的,所需的流程和鼓励也是一样的;惟一的差异是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有,时序仿真波形会有毛刺现象。
在本次设计中我们利用的EDA工具是ALTERA公司的QUARTUSⅡ对源程序进展编译、选配、优化、逻辑综合,自动地把VHDL描述转变成器件图,并进而完成电路分析、纠错、验证、自动布局布线、仿真等各种测试工作。
在仿真过程中我分别对分频器模块、六进制计数器、十进制计数器、数字秒表顶层模块进展波形仿真,结果符合设计要求。
4.1分频器模块仿真
4.1.1分频器模块程序clkgen.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCLKGENIS
PORT(CLK:
INSTD_LOGIC;--定义3MHZ脉冲输入端
NEWCLK:
OUTSTD_LOGIC);--定义100HZ脉冲输出端
ENDCLKGEN;
ARCHITECTUREARTOFCLKGENIS
SIGNALTER:
INTEGERRANGE0TO10#29999#;--暂存输入脉冲个数
BEGIN
U1:
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFTER=10#29999#THENTER<=0;--判断输入脉冲个数是否为30000
ELSETER<=TER+1;
ENDIF;
ENDIF;
ENDPROCESSU1;
U2:
PROCESS(TER)--计数溢出信号控制
BEGIN
IFTER=10#29999#THENNEWCLK<='1’--3MHZ信号变为100HZ信号
ELSENEWCLK<='0';
ENDIF;
ENDPROCESSU2;
ENDART;
4.1.2分频器模块仿真波形
图4.1分频器电路模块时序仿真波形
4.1.3分频器模块仿真结果分析
在构造体的说明语句中,定义了一个频率脉冲计数信号〔TER〕,该信号的类型为整数型,计数围为0~29999。
在构造体的功能描述语句中,用两个进程〔U1和U2〕来完成3MHZ转化成100HZ的频率描述。
在U1中每次检测到一上升沿输入脉冲时,先通过IF语句检测输入信号是否为上升沿,假设是上升沿,再使IF语句判断当前计数值〔TER〕是否等于29999,如果相等,那么将TER置零,为输出下一个100HZ的频率做准备,否那么将TER加1。
U2中判断TER是否等于29999,如果相等,将NEWCLK输出为高电平,否那么输出为低电平。
由仿真波形图可知此模块能正确完成分频功能[2]。
4.2十进制计数器模块仿真
4.2.1十进制计数器模块程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYT10IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CARRY_OUT:
OUTSTD_LOGIC);
ENDT10;
ARCHITECTUREARTOFT10IS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
U1:
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI="1001"THENCQI<="0000";
ELSECQI<=CQI+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSU1;
U2:
PROCESS(CQI)
BEGIN
IFCQI="0000"THENCARRY_OUT<='1';
ELSECARRY_OUT<='0';
ENDIF;
ENDPROCESSU2;
CQ<=CQI;
ENDART;
4.2.2十进制计数器模块仿真波形
图4.2十进制计数器仿真波形
4.2.3十进制计数器模块仿真结果分析
由于CQ的方向定义为OUT,在构造体中不能对输入脉冲进展加1计数,因此在构造体说明语句中定义了一个频率脉冲计数信号〔CQI〕,通过CQI来进展加1控制。
在构造体的功能描述语句中,使用2个进程〔U1和U2〕来完成十进制计数器的功能描述。
在U1中,先判断清零信号(CLR)是否有效,假设有效时,将CQI清零,否那么检测输入脉冲。
每次检测到一个上升沿输入脉冲时,同过IF语句检测输入信号是否为上升沿,再判断是否允许计数〔即ENA是否有效〕,假设ENA无效,那么暂停计数,否那么在使用IF语句判断当前计数值(CQI)是否等于“1001〞〔即整数9〕,如果相等,那么将CQI清零,否那么CQI加1。
在U2中判断CQI是否等于“1001〞,如果相等,产生溢出信号〔CARRY_OUT<=’1’〕,否那么CARRY_OUT输出为低电平(CARRY_OUT<=’0’)。
由仿真波形图可知此模块能正确完成十进制计数功能[2]。
4.3六进制计数器模块仿真
4.3.1六进制计数器模块程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYT6IS
PORT(CLK:
INSTD_LOGIC;
CLR:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CARRY_OUT:
OUTSTD_LOGIC);
ENDT6;
ARCHITECTUREARTOFT6IS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
U1:
PROCESS(CLK,CLR,ENA)
BEGIN
IFCLR='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THEN
IFCQI="0101"THENCQI<="0000";
ELSECQI<=CQI+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSU1;
U2:
PROCESS(CQI)
BEGIN
IFCQI="0000"THENCARRY_OUT<='1';
ELSECARRY_OUT<='0';
ENDIF;
ENDPROCESSU2;
CQ<=CQI;
ENDART;
4.3.2六进制计数器模块仿真波形
图4.3六进制计时器仿真波形
4.3.3六进制计数器模块仿真结果分析
在构造体的功能描述语句中,使用2个进程〔U1和U2〕来完成六进制计数器的功能描述。
在U1中,先判断清零信号(CLR)是否有效,假设有效时,将CQI清零,否那么检测输入脉冲。
每次检测到一个上升沿输入脉冲时,同过IF语句检测输入信号是否为上升沿,再判断是否允许计数〔即ENA是否有效〕,假设ENA无效,那么暂停计数,否那么在使用IF语句判断当前计数值(CQI)是否等于“0101〞,〔即整数5〕,如果相等,那么将CQI清零,否那么CQI加1。
在U2中判断CQI是否等于“0101〞,如果相等,产生溢出信号〔CARRY_OUT<=’1’〕,否那么CARRY_OUT输出为低电平(CARRY_OUT<=’0’)。
由仿真波形图可知此模块能正确完成六进制计数功能[2]。
4.4数字秒表顶层模块仿真
4.4.1数字秒表顶层模块程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmiaobiaoIS
PORT(CLR:
INSTD_LOGIC;
CLK:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(23DOWNTO0));
ENDmiaobiao;
ARCHITECTUREARTOFmiaobiaoIS
PONENTCLKGEN
PORT(CLK:
INSTD_LOGIC;
NEWCLK:
OUTSTD_LOGIC);
ENDPONENT;
PONENTT10
PORT(CLK,CLR,ENA:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CARRY_OUT:
OUTSTD_LOGIC);
ENDPONENT;
PONENTT6
PORT(CLK,CLR,ENA:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CARRY_OUT:
OUTSTD_LOGIC);
ENDPONENT;
SIGNALNEWCLK:
STD_LOGIC;
SIGNALCARRY1:
STD_LOGIC;
SIGNALCARRY2:
STD_LOGIC;
SIGNALCARRY3:
STD_LOGIC;
SIGNALCARRY4:
STD_LOGIC;
SIGNALCARRY5:
STD_LOGIC;
BEGIN
U0:
CLKGENPORTMAP(CLK=>CLK,NEWCLK=>NEWCLK);
U1:
T10PORTMAP(CLK=>NEWCLK,CLR=>CLR,ENA=>ENA,CQ=>DOUT(3DOWNTO0),CARRY_OUT=>CARRY1);
U2:
T10PORTMAP(CLK=>CARRY1,CLR=>CLR,ENA=>ENA,CQ=>DOUT(7DOWNTO4),CARRY_OUT=>CARRY2);
U3:
T10PORTMAP(CLK=>CARRY2,CLR=>CLR,ENA=>ENA,CQ=>DOUT(11DOWNTO8),CARRY_OUT=>CARRY3);
U4:
T6PORTMAP(CLK=>CARRY3,CLR=>CLR,ENA=>ENA,CQ=>DOUT(15DOWNTO12),CARRY_OUT=>CARRY4);
U5:
T10PORTMAP(CLK=>CARRY4,CLR=>CLR,ENA=>ENA,CQ=>DOUT(19DO