基于FPGA数字秒表设计报告.docx
《基于FPGA数字秒表设计报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA数字秒表设计报告.docx(42页珍藏版)》请在冰点文库上搜索。
![基于FPGA数字秒表设计报告.docx](https://file1.bingdoc.com/fileroot1/2023-6/23/fd0ee521-80c5-4eed-ba31-26675c771e1c/fd0ee521-80c5-4eed-ba31-26675c771e1c1.gif)
基于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、论文(设计说明书)所体现的整体水平
□优□良□中□及格□不及格
评定成绩:
□优□良□中□及格□不及格
教研室主任(或答辩小组组长):
(签名)
年月日
教学系意见:
系主任:
(签名)
年月日
1.秒表设计要求
(1)秒表的计时范围为00:
00:
00~59:
59:
99。
(2)两个按钮开关Start/Stop和Split/Reset,控制秒表的启动、停止、分段和复位:
在秒表已经被复位的情况下,按下“Start/Stop”键,秒表开始计时。
在秒表正常运行的情况下,如果按下“Start/Stop”键,则秒表暂停计时;再次按下该键,秒表继续计时。
在秒表正常运行的情况下,如果按下“Split/Reset”键,显示停止在按键时的时间,但秒表仍然在计时;再次按下该键,秒表恢复正常显示。
在秒表暂停计时的情况下,按下“Split/Reset”键,秒表复位归零。
2.设计思路
2.1功能模块
2.1.1分频器
对晶体振荡器产生的时钟信号进行分频,产生时间基准信号
2.1.2计数器
对时间基准脉冲进行计数,完成计时功能
2.1.3数据锁存器
锁存数据使显示保持暂停
2.1.4控制器
通过产生锁存器的使能信号来控制计数器的运行、停止以及复位
设计分析:
2.1.5扫描显示的控制电路
包括扫描计数器、数据选择器和7段译码器,控制8个数码管以扫描方式显示计时结果,原理图如下:
2.1.6显示电路
2.1.7按键消抖电路
消除按键输入信号抖动的影响,输出单脉冲
按键按下时,FPGA的输入为低电平;松开按键时,FPGA的输入为高电平
但是在按下按键和松开按键的瞬间会出现抖动现象
2.2电路框图
3.电路实现
----------------------------------------------------------------------------------
--Company:
--Engineer:
--
--CreateDate:
09:
08:
3903/12/2011
--DesignName:
--ModuleName:
stopwatch_1-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--
--Dependencies:
--
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
--
----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitystopwatch_1is
Port(
Clk:
inSTD_LOGIC;
start_stop:
inSTD_LOGIC;
split_reset:
inSTD_LOGIC;
ncs:
outSTD_LOGIC;
s:
outSTD_LOGIC_VECTOR(2downto0);
seg:
outSTD_LOGIC_VECTOR(7downto0)
);
endstopwatch_1;
architectureBehavioralofstopwatch_1is
signalk1,k2,k3,k4:
STD_LOGIC;
signalcnt_1,cnt_2:
STD_LOGIC_VECTOR(1downto0);
signalstart_stop_out,split_reset_out:
STD_LOGIC;
signalcount:
STD_LOGIC_VECTOR(15downto0):
=(others=>'0');
signalclk_1k:
STD_LOGIC;
signalz0,z1,z2,z3,z4,z5,z6,q1,q2,q3,q4,q5,q6:
STD_LOGIC_VECTOR(3downto0):
=(others=>'0');
signalcount_2:
STD_LOGIC_VECTOR(2downto0):
=(others=>'0');
signalin_7:
STD_LOGIC_VECTOR(3downto0);
signalsreg:
STD_LOGIC_VECTOR(2downto0):
="111";
signalsnext:
STD_LOGIC_VECTOR(2downto0);
Begin
---------------------------------------------------------为三八译码器置入使能信号
ncs<='0';
---------------------------------------------------------分频电路
process(clk)
begin
ifrising_edge(clk)then
ifcount=47999then
count<=(others=>'0');
else
count<=count+1;
endif;
endif;
endprocess;
clk_1k<=count(15);
---------------------------------------------------------同步计数电路
process(clk_1k,sreg
(2))
begin
ifrising_edge(clk_1k)then
ifsreg
(2)='1'then
z0<=(others=>'0');
z1<=(others=>'0');
z2<=(others=>'0');
z3<=(others=>'0');
z4<=(others=>'0');
z5<=(others=>'0');
z6<=(others=>'0');
elsifsreg
(1)='1'then
z0<=z0+1;
ifz0=9then
z0<=(others=>'0');
z1<=z1+1;
ifz1=9then
z1<=(others=>'0');
z2<=z2+1;
ifz2=9then
z2<=(others=>'0');
z3<=z3+1;
ifz3=9then
z3<=(others=>'0');
z4<=z4+1;
ifz4=5then
z4<=(others=>'0');
z5<=z5+1;
ifz5=9then
z5<=(others=>'0');
z6<=z6+1;
ifz6=5then
z6<=(others=>'0');
endif;
endif;
endif;
endif;
endif;
endif;
endif;
endif;
endif;
endprocess;
---------------------------------------------------------扫描计数器
process(clk_1k)
begin
ifrising_edge(clk_1k)then
count_2<=count_2+1;
endif;
endprocess;
s<=count_2;
---------------------------------------------------------锁存器
process(sreg(0),z1,z2,z3,z4,z5,z6)
begin
ifsreg(0)='1'then
q1<=z1;
q2<=z2;
q3<=z3;
q4<=z4;
q5<=z5;
q6<=z6;
endif;
endprocess;
---------------------------------------------------------
process(count_2,q1,q2,q3,q4,q5,q6)
begin
casecount_2is
when"000"=>in_7<=q1;
when"001"=>in_7<=q2;
when"011"=>in_7<=q3;
when"100"=>in_7<=q4;
when"110"=>in_7<=q5;
when"111"=>in_7<=q6;
whenothers=>in_7<="1111";
endcase;
endprocess;
---------------------------------------------------------八段译码器
process(in_7)
begin
casein_7is
when"0000"=>seg<="00000011";
when"0001"=>seg<="10011111";
when"0010"=>seg<="00100101";
when"0011"=>seg<="00001101";
when"0100"=>seg<="10011001";
when"0101"=>seg<="01001001";
when"0110"=>seg<="01000001";
when"0111"=>seg<="00011111";
when"1000"=>seg<="00000001";
when"1001"=>seg<="00001001";
whenothers=>seg<="11111101";
endcase;
endprocess;
---------------------------------------------------------按键去抖电路
process(clk_1k,start_stop)
begin
ifclk_1k'eventandclk_1k='0'then
ifcnt_1=3then
k1<='1';
else
k1<='0';
cnt_1<=cnt_1+1;
endif;
k2<=k1;
endif;
ifstart_stop='0'then
cnt_1<="00";
endif;
endprocess;
start_stop_out<=notk1andk2;
process(clk_1k,split_reset)
begin
ifclk_1k'eventandclk_1k='0'then
ifcnt_2=3then
k3<='1';
else
k3<='0';
cnt_2<=cnt_2+1;
endif;
k4<=k3;
endif;
ifsplit_reset='0'then
cnt_2<="00";
endif;
endprocess;
split_reset_out<=notk3andk4;
---------------------------------------------------------控制器
process(clk_1k,start_stop_out,split_reset_out)
begin
ifrising_edge(clk_1k)then
sreg<=snext;
endif;
endprocess;
process(start_stop_out,split_reset_out,sreg)
begin
casesregis
when"111"=>ifstart_stop_out='1'andsplit_reset_out='0'thensnext<="011";
elsesnext<=sreg;
endif;
when"011"=>ifstart_stop_out='1'andsplit_reset_out='0'thensnext<="001";
elsifstart_stop_out='0'andsplit_reset_out='1'thensnext<="010";
elsesnext<=sreg;
endif;
when"001"=>ifstart_stop_out='0'andsplit_reset_out='1'thensnext<="111";
elsifstart_stop_out='1'andsplit_reset_out='0'thensnext<="011";
elsesnext<=sreg;
endif;
when"010"=>ifstart_stop_out='0'andsplit_reset_out='1'thensnext<="011";
elsesnext<=sreg;
endif;
whenothers=>snext<="111";
endcase;
endprocess;
endBehavioral;
注:
控制器设计时,巧妙地将状态编码和控制器输出的控制信号编码合二为一,即状态编码也是控制信号编码,使得程序形式上更为简单、清晰。
4.程序仿真
4.1分频器
entityfpis
Port(clk_48M:
inSTD_LOGIC;
clk_1k:
outSTD_LOGIC);
endfp;
architectureBehavioraloffpis
signalcount:
STD_LOGIC_VECTOR(15downto0):
=(others=>'0');
begin
proc