欢迎来到天天文库
浏览记录
ID:8528874
大小:140.00 KB
页数:13页
时间:2018-03-31
《基于fpga的数字秒表设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于FPGA的数字秒表设计一、设计实验条件Quartus7.2集成开发环境二、设计目标1.能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒;2.计时精度达到10ms;3.设计复位开关和启停开关,复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。三、设计内容1.绪论数字秒表是日常生活中比较常见的电子产品,当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断进行更新换代,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师更愿意自己设计
2、专业集成电路(ASIC)芯片,而且希望设计周期尽可能短,最好在实验室里就能设计出合适的ASIC芯片并且立即投入实际应用之中,因而出现了现场可编程器件(FPLD)。现场可编程门阵列(FPGA)即属其中应用最广泛的一种。超高速硬件描述语言VHDL,是对数字系统进行抽象的行为与功能描述到具体的内部线路结构描述,各个层次进行计算机模拟验证,保证设计过程的正确性,可大大降低设计成本,缩短设计周期。2.设计主体2.1原理根据数字秒表的设计要求,可以使用多个不同的计数器单元模块,通过有机的组合来得到数字秒表系统。要满足数字秒表的精度,首先应获得精确
3、的计数基准信号,这里的系统精度要求为0.01s,因此必须设置周期0.01s的时钟脉冲。由于数字秒表输入脉冲为3MHZ,因此每个3000个外界输入脉冲的输出一个频率,该频率的时间周期正好为0.01s,即先将外界脉冲进行3MHZ—100HZ的分频。0.1s、1s、1min等计时单位之间的进位转换可以通过十进制与六进制计数器来实现。每位计数器均能输出相应计时单位计时结果,其中十进制计数器可以实现0.01s、0.1s、1s和1min单位单元的计数;六进制可以实现10s,10min为单位的计数。由于秒表需要具有异步清零和启动/暂停功能,因此可以
4、将每个计数器都设置异步清零(CRL)和启动/暂停(ENA)输入端口,再将各级计数器进行级联,即可显示不同度量单位的计时内容。数字秒表内部计数器内部构成如下图1。图1数字秒表内部计数器在上图中,U0模块用于将外界脉冲进行3MHZ—100MHZ的分频,从而得到0.01s的脉冲信号;U1模块用于实现0.1s的脉冲信号;U2模块用于实现1s的脉冲信号;U3和U4用于实现1min的脉冲信号,U5和U6用于实现1h的脉冲信号。除U0外,U1~U6的CQ都可以驱动显示带译码的七段LED进行数字显示。通过上述分析可知,数字秒表的构成实质上依赖于3个基
5、本模块,即3MHZ—100HZ的分频模块(CLKGEN)、十进制计数器模块(CNT10)和六进制计数器模块(CNT6),然后使用一个顶层模块(miaobiao)进行有机结合。2.2各模块程序及仿真(1)3MHZ-100HZ分频模块3MHZ-100HZ分频模块流程图如下图2所示,在使用VHDL编写程序时,在实体中应定义3MHZ时钟频率输入端(CLK)和100HZ的时钟脉冲输出端(NEWCLK)。3MHZ时钟输入每来一个脉冲,CNTER是否为29999?CNTER清零NEWCLK输出为高电平得到100MHZ的输出脉冲CNTER+1NEWC
6、LK输出为低电平NY图23MHZ--100HZ分频模块流程图在结构体的说明语句中,应定义一个频率脉冲计数信号(CNTER),该信号的类型为整数型,计数范围为0~29999。在结构体的功能描述语句中,可使用2个进程(U1和U2)来完成3MHZ-100HZ的频率描述。在U1中,每次检测到一个上升沿输入脉冲时,先通过if语句检测输入信号是否为上升沿。若是上升沿,在使用一个if语句判断当前计数值(CNTER)是否等于29999,如果相等,则将CNTER清零,为输出下一个100HZ的频率做准备,否则将CNTER加1。在U2中,判断CNTER是否
7、等于29999,如果相等,将NEWCLK输出为高电平,否则输出为低电平。源程序如下:LibraryIeee;UseIeee.Std_Logic_1164.All;EntityClkgenIsPort(Clk:InStd_Logic;Newclk:OutStd_Logic);EndClkgen;ArchitectureArtOfClkgenIsSignalCnter:IntegerRange0To10#29999#;Beginu1:Process(Clk)BeginIfClk'EventAndClk='1'ThenIfCnter=10#
8、29999#ThenCnter<=0;ElseCnter<=Cnter+1;EndIf;EndIf;EndProcessu1;u2:Process(Cnter)BeginIfCnter=10#29999#ThenNewc
此文档下载收益归作者所有