基于FPGA的数字跑表的设计学士学位论文.docx
- 文档编号:24906438
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:61
- 大小:250.02KB
基于FPGA的数字跑表的设计学士学位论文.docx
《基于FPGA的数字跑表的设计学士学位论文.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字跑表的设计学士学位论文.docx(61页珍藏版)》请在冰豆网上搜索。
基于FPGA的数字跑表的设计学士学位论文
基于FPGA的数字跑表的设计
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
□优□良□中□及格□不及格
3、学生综合运用所学知识和专业技能分析和解决问题的能力
□优□良□中□及格□不及格
4、研究方法的科学性;技术线路的可行性;设计方案的合理性
□优□良□中□及格□不及格
5、完成毕业论文(设计)期间的出勤情况
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
二、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
建议成绩:
□优□良□中□及格□不及格
(在所选等级前的□内画“√”)
评阅教师:
(签名)单位:
(盖章)
年月日
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
□优□良□中□及格□不及格
2、对答辩问题的反应、理解、表达情况
□优□良□中□及格□不及格
3、学生答辩过程中的精神状态
□优□良□中□及格□不及格
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规范?
□优□良□中□及格□不及格
2、是否完成指定的论文(设计)任务(包括装订及附件)?
□优□良□中□及格□不及格
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
□优□良□中□及格□不及格
2、论文的观念是否有新意?
设计是否有创意?
□优□良□中□及格□不及格
3、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
评定成绩:
□优□良□中□及格□不及格
教研室主任(或答辩小组组长):
(签名)
年月日
教学系意见:
系主任:
(签名)
年月日
摘要:
以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
第1章引言
本设计是基于FPGA利用VHDL语言实现硬件电路的描述实现一个智力抢答器的设计,完成6位选手在规定的时间内(10秒)按键抢答;抢中编号锁定显示,其他无效;主持按键控制清零和开始选手抢中后在规定的时间内(30秒)答提;具有报警提示功能,分别提示抢答开始,有人抢答,抢答时间到,答题时间到。
报警延时为1s;。
设计使用的FPGA软件开发平台为Xilinx的ISE,它具有界面简单、简单易学、辅助功能强大等特点。
在编写代码时可以使用编写向导生成头文件和模块框架,也可以使用语言模块帮助编写代码。
实验使用的仿真软件为ModelSim,该软件具有代码分析能力可以看出不同代码段消耗资源的情况。
其功能侧重于编译和仿真,不能制定编译的器件和不具有下载配置能力,所以需要和ISE等软件关联使用。
第2章实验项目方案设计
2.1项目系统设计原理
系统主要要实现计数功能、显示功能还有数据的锁存和读取。
本设计采用了外部时钟为48Mhz的FPGA硬件开发平台。
首先利用分频器将48Mhz的外部时钟分频产生100hz和1khz的始终信号,100hz的时钟用于实现精度为0.01s精度的计数器时钟,1kHz的时钟信号用于显示模块扫描显示的外部信号。
计数器为两个六进制计数器和四个十进制计数器的同步级联,同时具有清零,暂停控制端口。
显示模块6只数码管采用动态扫描的连接方式,硬件电路上的每个数码管abcdefg分别连在一起,作为段选信号,8个数码管数码管分别由8个选通信号控制(这里使用到了三八译码器),由于段选信号连在一起,所以数码管的显示采用的是动态扫描的显示方式。
锁存模块设计时采用了六进制的计数器输出端触发,有效地完成了锁存六个时间点的实验要求,同时加入了数据锁存和数据输出选择键,完美实现了锁存数据的输出。
2.2项目系统设计方案及模块组成
图一为此次设计的基本构架和模块组成(不包含消抖模块)。
系统的主要组成模块主要有消抖电路模块、分频器模块、计数器模块、锁存器模块、扫描显示模块、译码器模块、势能/选择模块。
各模块的功能描述,将在第三章作介绍。
具体的实现过程为:
下载完成后按下get键,此时使能模块输出高电平,计数器开始计时,并在数码管上实时显示,锁存器模块进入锁存状态,start为系统的清零/复位键,sc为六进制计数器的时钟,每按一次sc键将会产生一个上升沿,并计数一次,六进制的计数器的输出端触发锁存器,每记一次数锁存一组数。
当再按一次get键的时候,势能/选择模块输出低电平,此时计数器停止计时,锁存器进入数据读取状态,显示模块显示读取的锁存的数据,按下start键为系统清零,当每按一次sc键,锁存器将会按锁存的顺序读取锁存的数据并显示该数据时第几次锁存下的。
第3章实验项目单元模块电路设计
3.1消抖模块设计
3.1.1模块描述
分频器的功能是提供计数器的时钟信号以及数码管动态扫描部分的时钟信号。
由于系统的外部时钟为48Mhz,而根据跑表的精度要求0.01s,计数器的时钟信号应为100hz,因此需要对48MHZ的时钟信号进行分频,得到100hz的信号,作为时钟的计数时钟。
根据显示部分的原理,需要1khz的扫描控制信号,因此在分频器部分还要产生1khz的信号。
分频器的设计采用基于计数器的方法来实现。
在本设计中,在程序的第一个进程中设计了一个24000进制的计数器,当计数24000个时钟,分频输出信号clk1kHz取反,这样就可以实现对输入时钟的48000次分频,从而得到1kHz的输出信号。
在第二个进程中采用同样的方法对已经得到的1khz的信号进行10分频得到100hz的输出信号clk100hz。
分频模块如图二所示:
clkin为48Mhz的外部时钟输入端
clk1khz为输出1khz的时钟输出端
clk100hz为输出为100hz的时钟输出端
该模块的VHDL源程序如下:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
entitydivis
port(clkin:
instd_logic;
clk1khz:
outstd_logic;
clk100hz:
outstd_logic);
enddiv;
architectureBehavioralofdivis
signalcnter0:
integerrange0to23999:
=0;
signalcnter1:
integerrange0to4:
=0;
signalclk100hz_TMP,clk1khz_TMP:
std_logic:
='0';
begin
process(clkin)is
begin
ifclkin'eventandclkin='1'then
ifcnter0=23999then
cnter0<=0;
clk1khz_TMP<=notclk1khz_TMP;
else
cnter0<=cnter0+1;
endif;
endif;
endprocess;
clk1khz<=clk1khz_TMP;
process(clk1khz_TMP)is
begin
ifclk1khz_TMP'eventandclk1khz_TMP='1'then
ifcnter1=4then
cnter1<=0;
clk100hz_TMP<=notclk100hz_TMP;
elsecnter1<=cnter1+1;
endif;
endif;
endprocess;
clk100hz<=clk100hz_TMP;
endBehavioral;
4.1.2模块仿真
仿真文件
LIBRARYieee;
USEieee.std_logic_1164.ALL;
ENTITYtest_divIS
ENDtest_div;
ARCHITECTUREbehaviorOFtest_divIS
COMPONENTdiv
PORT(
clkin:
INstd_logic;
clk1khz:
OUTstd_logic;
clk100hz:
OUTstd_logic
);
ENDCOMPONENT;
--Inputs
signalclkin:
std_logic:
='0';
--Outputs
signalclk1khz:
std_logic;
signalclk100hz:
std_logic;
--Clockperioddefinitions
constantclkin_period:
time:
=10ns;
constantclk1khz_period:
time:
=10ns;
constantclk100hz_period:
time:
=10ns;
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
divPORTMAP(
clkin=>clkin,
clk1khz=>clk1khz,
clk100hz=>clk100hz
);
--Clockprocessdefinitions
clkin_process:
process
begin
clkin<='0';
waitforclkin_period/2;
clkin<='1';
waitforclkin_period/2;
endprocess;
END;
仿真波形:
波形分析:
由仿真波形可以看出clk100hz波形的一个周期等于clk1khz的十倍,实现了分频器的分频功能。
3.2计数器模块的设计
3.2.1模块描述
由于要求秒表显示为六位,每一位可以视为一个一位计数器,则跑表的计数过程可由6个一位计数器级联完成,其中包括十进制的计数器4个,六进制的计数器2个。
其中rst是清零端,clk100hz是计数器信号输入端,carryin是计数器的使能端,高电平时计数,低电平时停止计数且保持计数不变。
Carryout是计数结果的输出,countout是进位端。
下图为计数器的同步级联原理。
十进制计数器的VHDL源程序如下:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityCOUNTER1is
port(res,clk100hz:
instd_logic;
carryin:
instd_logic;
carryout:
outstd_logic;
counterout:
outstd_logic_vector(3downto0));
endCOUNTER1;
architectureBehavioralofCOUNTER1is
signalcount:
std_logic_vector(3downto0):
="0000";
begin
process(res,clk100hz)
begin
ifres='1'then
count<="0000";
elsifclk100hz'eventandclk100hz='1'then
ifcarryin='1'then
ifcount<"1001"then
count<=count+1;
else
count<="0000";
endif;
elsenull;
endif;
endif;
endprocess;
counterout<=count;
carryout<='1'whencarryin='1'andcount="1001"else'0';
endBehavioral;
六进制计数器的VHDL源程序如下:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityCOUNTER6is
port(res,clk100hz:
instd_logic;
carryin:
instd_logic;
carryout:
outstd_logic;
counterout:
outstd_logic_vector(3downto0));
endCOUNTER6;
architectureBehavioralofCOUNTER6is
signalcount:
std_logic_vector(3downto0):
="0000";
begin
process(res,clk100hz)
begin
ifres='1'then
count<="0000";
elsifclk100hz'eventandclk100hz='1'then
ifcarryin='1'then
ifcount<"0101"then
count<=count+1;
else
count<="0000";
endif;
elsenull;
endif;
endif;
endprocess;
counterout<=count;
carryout<='1'whencarryin='1'andcount="0101"else'0';
endBehavioral;
仿真程序:
LIBRARYieee;
USEieee.std_logic_1164.ALL;
ENTITYtest_counter1IS
ENDtest_counter1;
ARCHITECTUREbehaviorOFtest_counter1IS
--ComponentDeclarationfortheUnitUnderTest(UUT)
COMPONENTCOUNTER1
PORT(
res:
INstd_logic;
clk100hz:
INstd_logic;
carryin:
INstd_logic;
carryout:
OUTstd_logic;
counterout:
OUTstd_logic_vector(3downto0)
);
ENDCOMPONENT;
--Inputs
signalres:
std_logic:
='0';
signalclk100hz:
std_logic:
='0';
signalcarryin:
std_logic:
='0';
--Outputs
signalcarryout:
std_logic;
signalcounterout:
std_logic_vector(3downto0);
--Clockperioddefinitions
constantclk100hz_period:
time:
=10ns;
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
COUNTER1PORTMAP(
res=>res,
clk100hz=>clk100hz,
carryin=>carryin,
carryout=>carryout,
counterout=>counterout
);
--Clockprocessdefinitions
clk100hz_process:
process
begin
clk100hz<='0';
waitforclk100hz_period/2;
clk100hz<='1';
waitforclk100hz_period/2;
endprocess;
--Stimulusprocess
stim_proc:
process
begin
res<='0';
carryin<='1';
--holdresetstatefor100ns.
waitfor100ns;
waitforclk100hz_period*10;
--insertstimulushere
wait;
endprocess;
END;
仿真波形:
波形分析:
由波形可以看出counterout每遇到一个适时钟的上升沿将会加一,carryout在遇到第十个上升沿是会出现一个上升沿,就会产生进位输出,仿真结果与预期结果一致。
3.3显示模块设计
3.3.1模块描述
本设计中7只数码管采用动态扫描的连接方式。
硬件电路上的每个数码管abcdefg分别连在一起作为段选信号。
根据硬件电路的连接方式,如果希望七个数码管显示计数器输出的数据,就必须是的7个选通信号分别被单独选通,所以我们设计了sel输出端作为位选信号的输出端。
LED为7段数码管的段选信号的输出端。
counterout1—counterout7为计数器实时计数显示的输入端口,Countout1—Countout7为锁存输出信号显示的输入端。
e为选择输入端,当e为高电平时,显示模块的将显示counterout1—counterout7的信号。
当e为低电平时,显示模块将显示Countout1—Countout7的信号。
Clk1khz为时钟信号的输入端。
高频率的时钟可以保证人眼很难分辨出数码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 数字 跑表 设计 学士学位 论文