您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > FPGA秒表实验报告
课程设计报告专业班级课程题目秒表的设计学号姓名同组人成绩2013年5月一、设计目的1.进一步熟悉七段码译码器的硬件接口。2.掌握用扫描方法驱动多个数码管硬件接口。3.掌握秒表VHDL的编程方法。二、系统总体设计(1).设计要求:1.秒表共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便于和显示译码器的连接。当计时达60分钟后,蜂鸣器鸣响10声。2.整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。3.秒表的逻辑结构较简单,它主要由显示译码器、分频器、十进制计数器、六进制计数器和报警器组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲。(2).实验原理:秒表由于其计时精确,分辨率高(0.01秒),在各种竞技场所得到了广泛的应用。秒表的工作原理与数字时基本相同,唯一不同的是秒表的计时时钟信号,由于其分辨率为0.01秒,所以整个秒表的工作时钟是在100Hz的时钟信号下完成。当秒表的计时小于1个小时时,显示的格式是mm-ss-xx(mm表示分钟:0~59;ss表示秒:0~59;xx表示百分之一秒:0~99),当秒表的计时大于或等于一个小时时,显示的和多功能时钟是一样的,就是hh-mm-ss(hh表示小时:0~99),由于秒表的功能和钟表有所不同,所以秒表的hh表示的范围不是0~23,而是0~99,这也是和多功能时钟不一样的地方。在设计秒表的时候,时钟的选择为100Hz。变量的选择:因为xx(0.01秒)和hh(小时)表示的范围都是0~99,所以用两个4位二进制码(BCD码)表示;而ss(秒钟)和mm(分钟)表示的范围是0~59,所以用一个3位的二进制码和一个4位的二进制码(BCD)码表示。显示的时候要注意的问题就是小时的判断,如果小时是00,则显示格式为mm-ss-xx,如果小时不为00,则显示hh-mm-ss。三、详细设计1.计时模块:计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。他是由四个十进制计数器和俩个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。源程序:CLKSTARTCLRCOUTDAOUT[3..0]COUNT10inst2(1)十进制计数器(count_10)libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityCOUNT10isport(CLK,START,CLR:instd_logic;COUT:outstd_logic;DAOUT:outstd_logic_vector(3downto0));endCOUNT10;architectureoneofCOUNT10issignalh0:std_logic_vector(3downto0);signalh1:std_logic;beginprocess(CLK,CLR)beginifCLR='1'thenh0=0000;elsifCLK'eventandCLK='1'thenifSTART='1'thenifh0=1001thenh0=0000;h1='1';elseh0=h0+1;h1='0';endif;endif;endif;endprocess;DAOUT=h0;COUT=h1;endone;(2)六进制计数器(count_6)CLKSTARTCLRCOUTDAOUT[3..0]COUNT6inst1libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityCOUNT6isport(CLK,START,CLR:instd_logic;COUT:outstd_logic;DAOUT:outstd_logic_vector(3downto0));endCOUNT6;architecturetwoofCOUNT6issignalh0:std_logic_vector(3downto0);signalh1:std_logic;beginprocess(CLK,CLR)beginifCLR='1'thenh0=0000;elsifCLK'eventandCLK='1'thenifSTART='1'thenifh0=0101thenh0=0000;h1='1';elseh0=h0+1;h1='0';endif;endif;endif;endprocess;DAOUT=h0;COUT=h1;endtwo2.计时显示器(deled)计时显示电路的作用是将计时值在LED数码管上显示出来。计时电路产生的值经过BCD七段译码后,驱动LED数码管。计时显示电路的实现方案采用扫描显示。部分源程序:num[3..0]led[6..0]deledinst3Libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydeledisport(num:instd_logic_vector(3downto0);led:outstd_logic_vector(6downto0));enddeled;architectureaofdeledisbeginprocess(num)begincasenumiswhen0000=led=1111110;when0001=led=0110000;when0010=led=1101101;when0011=led=1111001;when0100=led=0110011;when0101=led=1011011;when0110=led=1011111;when0111=led=1110000;when1000=led=1111111;when1001=led=1111011;whenOTHERS=led=0000000;endcase;endprocess;enda;3.分频clrclkqfenpininst4libraryieee;useieee.std_logic_1164.all;entityfenpinisport(clr,clk:instd_logic;q:bufferstd_logic);endfenpin;architectureboffenpinissignalcounter:integerrange0to49999;beginprocess(clr,clk)beginif(clk='1'andclk'event)thenifclr='1'thencounter=0;elsifcounter=49999thencounter=0;q=notq;elsecounter=counter+1;endif;endif;endprocess;endb;4.位选clkclrdain0[3..0]dain1[3..0]dain2[3..0]dain3[3..0]dain4[3..0]dain5[3..0]daout[3..0]sel[2..0]seltimeinst5libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityseltimeisport(clk:instd_logic;clr:instd_logic;dain0:instd_logic_vector(3downto0);dain1:instd_logic_vector(3downto0);dain2:instd_logic_vector(3downto0);dain3:instd_logic_vector(3downto0);dain4:instd_logic_vector(3downto0);dain5:instd_logic_vector(3downto0);daout:bufferstd_logic_vector(3downto0);sel:bufferstd_logic_vector(2downto0));endseltime;architecturethreeofseltimeissignalm:std_logic_vector(2downto0);signaln:std_logic_vector(3downto0);beginn=0000whenclr='1'elsedain0whenm=000elsedain1whenm=001elsedain2whenm=010elsedain3whenm=011elsedain4whenm=100elsedain5;process(clr,clk,dain0,dain1,dain2,dain3,dain4,dain5)beginifclk'eventandclk='1'thenifm=101thenm=000;elsem=m+1;endif;endif;sel=m;endprocess;daout=n;endthree;5.警告CLKdainqALARMinstlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityALARMisport(CLK:instd_logic;dain:instd_logic;q:outstd_logic);endALARM;architecturefourofALARMissignalcount:std_logic_vector(1downto0);beginprocess(clk)beginq=count(1);if(clk'eventandclk='1')thenif(dain='1')thenif(count=10)thencount=00;elsecount=count+1;endif;endif;endif;endprocess;q=count(1);endfour;原理图:四、仿真分析1.仿真结果:2.管脚分配:五.设计中遇到的问题及解决方法问题:1.对秒表设计的原理理解不到位,试验不能正常进行。2.因为程序输入不正确,导致程序编译不成功。3.管脚分配不合理,导致结果不能显示或者不能正常显示。解决方法:1.进一步理解实验的原理,各部分的组成以及功能。2.运行程序之前仔细检查程序,并适当注释。3.按照规定分配管脚,注意区别不能定义的管脚。六.心得体会:因为对EDA技术及Quartus软件的相关知识知道的不够深入,在设计过程中我们遇到了很多困难,但通过从网上找一些相关资料,最终完成了设计任务。开始做设计时总是会出现各种错误,经过不停的编译及改错最终得到了正确的程序。其实这些错误的主要原因是自己的粗心造成的,如果细心一些这些错误时可以避免的。在编程时,要使用层次化结构的思想,这样程序检查起来也比较方便,调试时也给了自己很大的方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。在设计中要求我们要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我们要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法在数字系统设计中发挥越来越重要的作用。总之这次的设计受益匪浅。
本文标题:FPGA秒表实验报告
链接地址:https://www.777doc.com/doc-6418685 .html