欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOCX文档下载
 

基于FPGA的数字钟设计

  • 资源ID:10161631       资源大小:809.20KB        全文页数:28页
  • 资源格式: DOCX        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

基于FPGA的数字钟设计

基于FPGA的数字钟设计 学院:电子信息工程学院 专业:电子设计自动化 班级:1班 姓名:XXX 学号:201210525XXX摘 要 伴随着集成电路技术的发展, 电子设计自动化(EDA)技术逐渐成为数字电路设计的重要手段。 基于FPGA的EDA技术的发展和应用领域的扩大与深入,使得EDA技术在电子信息,通信,自动控制,计算机等领域的重要性日益突出。 本设计给出了一种基于FPGA的多功能数字钟方法,采用EDA作为开发工具,VHDL语言和图形输入为硬件描述语言,QuartusII作为运行程序的平台,编写的程序经过调试运行,波形仿真验证,下载到EDA实验箱的FPGA芯片,实现了设计目标。系统主芯片采用CycloneII系列EP2C35F672C8。采用自顶向下的设计思想,将系统分为五个模块:分频模块、计时模块、报时模块、显示模块、顶层模块。用VHDL语言实现各个功能模块, 图形输入法生成顶层模块. 最后用QuartusII软件进行功能仿真, 验证数字钟设计的正确性。测试结果表明本设计实现了一个多功能的数字钟功能,具有时、分、秒计时显示功能,以24小时循环计时;具有校正小时和分钟的功能;以及清零,整点报时功能。关键词:EDA技术;FPGA;数字钟;VHDL语言;自顶向下Abstract Accompanied by the development of integrated circuit technology, electronic design automation (EDA) technology is becoming an important means of digital circuit design. FPGA EDA technology development and expansion of application fields and in-depth, the importance of EDA technology in the field of electronic information, communication, automatic control, computer, etc. have become increasingly prominent. This design gives a FPGA-based multifunctional digital clock using EDA as a development tool, VHDL language and graphical input hardware description language, the QuartusII as a platform for running the program, written procedures debugging and running, the waveform simulation downloaded to the FPGA chip to achieve the design goals. The main system chip CycloneII series EP2C35F672C8. Adopted a topdwn design ideas, the system is divided into five modules: frequency module, timing module, timer module, display module, the top-level module. With VHDL various functional modules, graphical input method to generate the top-level module. Last QuartusII under simulation, to verify the correctness of the digital clock design. The test results show that the design of a multifunctional digital clock, with seconds time display, 24-hour cycle timing; has a school, cleared, and the whole point timekeeping functions.Key words: EDA technology; FPGA; VHDL language; top-down; digital clock目录 1 绪论41.1 研究背景41.2 研究目的51.3 研究方法和内容52 本软件开发环境52.1 FPGA简介52.1 .1 FPGA概述62.1.2 FPGA基本结构6图2-1 CLB基本结构82.1.3 FPGA系统设计流程82.1.4 FPGA开发编程原理102.2 QuartusII设计平台102.2.1 软件开发环境及基本流程102.2.2 软件的具体设计流程113总体设计方案123.1 数字钟的硬件构成原理123.2 软件设计的功能框图和流程框图134 软件设计与功能实现154.1 分频模块功能的软件设计与实现154.2 计时校时模块功能的软件设计与实现164.3 整点报时模块功能的软件设计与实现174.4 扫描译码显示模块功能的软件设计与实现174.5 顶层模块功能的软件设计与实现185 系统功能调试及分析186 结论及展望196.1 结论196.2 展望20参考文献22附录23基于FPGA的数字钟设计1 绪论 现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronic design automatic,EDA)技术。 ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。本设计采用的VHDL语言是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。数字化的钟表给人们带来了极大的方便。近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。而基于FPGA的数字钟设计能极大的扩展其功能。1.1 研究背景当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。它与传统的电子产品在设计上的显著区别是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低。同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。 EDA是电子设计自动化(Elcctronic Design Automation)的缩写,是90年代初从CAD(计算机辅助设备),CAM(计算机辅助制造),CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言VHDL完成设计文件,自动的完成逻辑编译,化简,分割,综合及优化,布局布线,仿真以及对特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器, 综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的VHDL原理图或状态图形描述,针对给定的硬件系统组件,进行编译,优化,转换和综合,最终获得我们将实现的功能的描述文件。综合器在工作前,必须给定要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来,也就是说综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换成低级的,可与目标器件CPLD相映射的网表文件。适配器的功能是将由综合器产生的网表文件配置与指定的目标器件中,产生最终的下载文件。适配器所选的目标器件(CPLD芯片)必须包含于在综合器中已指定的目标器件系列。本次数字钟设计利用VHDL硬件描述语言和图形输入相结合的编程方式,并通过可编程逻辑器件FPGA进行硬件设计,用LED数码管动态显示计时结果。数字钟可以由各种技术实现,如单片机等。利用可编程逻辑器件具有其他方式没有的特点,它具有成功率高,理论与实践结合紧密,体积小,容量大,I/O口丰富,易编程和加密等特点,并且它还具有开放的界面,丰富的设计库,模块化的工具等优良性能,应用非常方便。因此,本设计采用可编程逻辑器件FPGA来实现。1.2 研究目的现在是一个知识爆炸的新时代。新产品、新技术层出不穷,电子技术的发展更是日新月异。可以说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。1.3 研究方法和内容本设计主要研究基于FPGA的数字钟,采用EDA作为开发工具,VHDL语言和图形输入为硬件描述语言,采用自顶向下的设计思想,QuartusII软件作为运行程序的平台。设计的数字钟时间以24小时为一个周期,用LED数码管动态显示时、分、秒。具有清零和整点报时功能,可以对小时,分钟进行单独校对,使其校正到标准时间。校对时间由按键进行控制,为了保证计时的稳定及准确,须由晶体振荡器提供时间基准信号并经分频得到。2.本软件开发环境 2.1 FPGA简介 2.1.1 FPGA概述 FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,有时可以忽略这两者的区别,统称为可编程逻辑器件CPLD/FPGA。CPLD/FPGA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLD/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。这些优点使得CPLD/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言VHDL的进步。2.1.2 FPGA基本结构FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程的互连资源连接这些逻辑功能块来实现不同的设计。FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这3种可编程电路是:可编程逻辑模块(CLB-Configurable Logic Block)、输入/输出模块(IOB-I/O Block)和互连资源(IRInterconnect Resource)。可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。1. CLB是FPGA的主要组成部分。图1是CLB基本结构框图,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G、F和H。G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G和F,而另一个输入信号是来自信号变换电路的输出H1。这个函数发生器能实现3输入变量的各种组合函数。这3个函数发生器结合起来,可实现多达9变量的逻辑函数。CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输出。另外,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制。2. 输入/输出模块IOB。IOB提供了器件引脚和内部逻辑阵列之间的连接。它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。缓冲器的输出分成两路:一路可以直接送到MUX,另一路延时几个纳秒(或者没有延时)后送到输入通路D触发器,再送到数据选择器。通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通VCC、地线或者不接通,用以改善输出波形和负载能力。3. 可编程互连资源IR。可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。CLBCLBCLBCLBCLBBCLBCLBCLBCLB矩CLBCLBCLB块CLBCLBBCLBCLBCLBCLBCLBCLB 可编程开关矩 输入输出模块互连资源图2-1 CLB基本结构2.1.3 FPGA系统设计流程一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是自顶向下的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换为针对某种工艺优化的网络表,使工艺转化变得轻而易举。CPLD/FPGA系统设计的工作流程如图2.2所示。流程说明:1.工程师按照“自顶向下”的设计方法进行系统划分。2.输入VHDL代码,这是设计中最为普遍的输入方式。此外,还可以采用图形输入方式,这种输入方式具有直观、容易理解的优点。3.将以上的设计输入编译成标准的VHDL文件。4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。5.利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。6.利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。一般的设计,也可略去这一步骤。7.利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。8.在适配完成后,产生多项设计结果:a.适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;b.适配后的仿真模型;c.器件编程文件。根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。图2-2 CPLD/FPGA系统设计流程系统划分编译器代码级功能仿真综合器适配前时序仿真适配器CPLD/FPGA实现适配后仿真模型适配后时序仿真适配报告ASIC实现VHDL代码或图形方式输入仿真综合库器件编程文件2.1.4 FPGA开发编程原理硬件设计需要根据各种性能指标、成本、开发周期等因素,确定最佳的实现方案,画出系统框图,选择芯片,设计PCB并最终形成样机。CPLD/FPGA软件设计可分为两大块:编程语言和编程工具。编程语言主要是VHDL硬件描述语言;编程工具主要是两大厂家Altera和Xilinx的集成综合EDA软件QuartusII以及第三方工具。具体的设计输入方式有以下几种:1.VHDL语言。VHDL既可以描述底层设计,也可以描述顶层的设计,但它不容易做到较高的工作速度和芯片利用率。用这种方式描述的项目最后所能达到的性能与设计人员的水平、经验以及综合软件有很大的关系。2.图形方式。可以分为电路原理图描述,状态机描述和波形描述3种形式。电路原理图方式描述比较直观和高效,对综合软件的要求不高。一般大都使用成熟的IP核和中小规模集成电路所搭成的现成电路,整体放到一片可编程逻辑器件的内部去,其硬件工作速度和芯片利用率很高,但是当项目很大时,该方法就显得有些繁琐;状态机描述主要用来设计基于状态机思想的时序电路。在图形的方式下定义好各个工作状态,然后在各个状态上输入转换条件以及相应的输入输出,最后生成HDL语言描述,送去综合软件综合到可编程逻辑器件的内部。由于状态机到HDL语言有一种标准的对应描述方式,所以这种输入方式最后所能达到的工作速度和芯片利用率主要取决于综合软件;波形描述方式是基于真值表的一种图形输入方式,直接描述输入与输出的波形关系。2.2 QuartusII设计平台2.2.1 软件开发环境及基本流程本设计所用软件主要是QuartusII,在此对它做一些介绍。QuartusII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。QuartusII提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。Altera公司的QuartusII 开发工具人机界面友好、易于使用、性能优良,并自带编译、仿真功能。QuartusII软件完全支持VHDL设计流程,其内部嵌有VHDL逻辑综合器。QuartusII 也可以利用第三方的综合工具,如FPGA Compiler II,并能直接调用这些工具。同样,QuartusII具备仿真功能,同时也支持第三方的仿真工具。此外,QuartusII与MATLAB和DSP Builder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA技术。QuartusII包括模块化的编译器。编译器包括的功能模块有分析/综合器、适配器、装配器、时序分析器、设计辅助模块、EDA网表文件生成器、编辑数据接口等。可以通过选择Start Compilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。在Compiler Tool窗口中,可以打开该模块的设置文件或报告文件,或者打开其它相关窗口。在设计输入之后,QuartusII的编译器将给出设计输入的错误报告。QuartusII拥有性能良好的设计错误定位器,用于确定文本或图形设计中的错误。在进行编译后,可对设计进行时序仿真。在仿真前,需要利用波形编辑器编辑一个波形激励文件。编译和仿真检测无误后,便可将下载信息通过QuartusII提供的编程器下载入目标器件中了。2.2.2 软件的具体设计流程1.建立工作库文件夹和编辑设计文件首先建立工作库目录,以便存储工程项目设计文件。任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有设计文件的文件夹。此文件夹将被EDA软件默认为工作库。一般来说,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。2.创建工程使用New Project Wizard可以为工程指定工作目录、分配工程名称以及指定最高层设计实体的名称,还可以指定要在工程中使用的设计文件、其它源文件、用户库和EDA工具,以及目标器件系列和具体器件等。3.编译前设置在对工程进行编译处理前,必须做好必要的设置。步骤如下:a.选择FPGA目标芯片b.选择配置器件的工作方式c.选择配置器件和编程方式d.选择输出设置e.选择目标器件闲置引脚的状态4.全程编译QuartusII编译器是由一系列处理模块构成的,这些模块负责对设计项目的检错、逻辑综合、结构综合、输出结果的编辑配置,以及时序分析。在这一过程中,将设计项目适配到FPGA目标器中,同时产生多种用途的输出文件。编译器首先检查出工程设计文件中可能的错误信息,供设计者排除。然后产生一个结构化的以网表文件表达的电路原理图文件。如果编译成功,可以见到工程管理窗口左上角显示了工程(例如工程div)的层次结构和其中结构模块耗用的逻辑宏单元数;在此栏下是编译处理流程,包括数据网表建立、逻辑综合、适配、配置文件装配和时序分析等;最下栏是编译处理信息;中栏式编译报告项目选择菜单,单击其中各项可以详细了解编译与分析结果。5.时序和功能仿真工程编译通过后,必须建立VWF文件对其功能和时序性质进行仿真测试,以了解设计结果是否满足原设计要求。可以自己设置输入信号,再由功能仿真出输出信号。这能在软件上实现硬件的功能,大大提高了硬件电路调试成功率。6. 编程下载编程下载指将编程数据放到具体的可编程器件中去。如果以上所有的过程都没有发现问题,即满足设计要求,就可以将适配器产生的配置/下载文件通过FPGA编程器或下载电缆载入目标芯片FPGA中。对FPGA来说就是将数据文件“配置”到FPGA中去。3 总体设计方案3.1 数字钟的硬件构成原理数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。图3-1所示为数字钟的一般构成框图。主要包括晶振电路、复位电路、按键电路、译码扫描和显示电路、报时电路。LED数码管译码电路FPGA 按键电路LED数码管显示电路 复位电路LED数码管扫描电路 晶振电路整点报时电路 图3-1 数字钟硬件构成框图晶振电路产生稳定的10MHZ的高频脉冲信号,作为数字钟的时间基准,然后经过软件分频10000次输出标准秒脉冲1HZ。秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻1”规律计数。计满后各计数器清零,重新计数。计数器的输出分别经译码器送数码管显示。计时出现误差时,可以用校时电路校时、校分。在控制信号中除了一般的校时信号外,还有时钟清零信号,可以使数字钟复位清零。控制信号由3个按键S1、S2、S3输入,分别实现校时、校分、复位清零功能。扫描译码显示电路由七段译码器完成,显示由8位数码管构成。3.2 软件设计的功能框图和流程框图 软件设计采用模块化思想和自顶向下的设计方法。用VHDL语言分别编写分频模块,计时校时模块,报时模块和显示模块的程序。并将这些设计好的工程文件分别生成模块符号文件作为自己的功能模块符号在顶层调用。再用图形输入的方法设计顶层模块,将模块符号文件放置到工作区,进行模块符号间的连线。编写好顶层模块后,进行编译仿真,下载到FPGA芯片,就能在实验箱上完成数字钟的功能。FPGA功能模块框图和整个数字钟系统的软件流程框图如下。顶 层 模 块 顶 层 模 块 顶 层 模 块 顶 层 模 块译码扫描显示模块报时模块计时校时模块分频模块 图3-2 数字钟功能模块框图 开始 初始化Y是否有复位信号N 数字钟清零 数字钟计时Y 是否有校时信号NN 是否整点Y 整点报时 LED扫描译码显示 结束3-3 数字钟软件流程框图4 软件设计与功能实现4.1 分频模块功能的软件设计与实现 晶体振荡器是构成数字式时钟的核心,晶振的稳定度及频率的精度决定了数字钟计时的准确程度,它保证了时钟的走时准确及稳定。石英晶体的选频特性非常好,只有某一频率点的信号可以通过它,其它频率段的信号均会被它所衰减,而且,振荡信号的频率与振荡电路中的R、C元件的数值无关。因此,这种振荡电路输出的是准确度极高的信号。然后再利用分频电路,将其输出信号转变为秒信号,其组成框图如图4-1。秒信号分频电路石英晶体振荡电路秒信号图4-1 秒信号产生电路框图本系统使用的晶振电路给数字钟提供一个频率稳定准确的10MHz的方波信号,其输出至分频电路。分频模块的逻辑框图如图4-2所示。经分频后输出1HZ的标准秒信号CLK1HZ,用于秒信号,校时电路和报时电路。 图4-2 分频模块的逻辑框图4.2 计时校时模块功能的软件设计与实现时间计数模块由60进制的秒计数,60进制的分计数和24进制的小时计数分别实现。当数字钟处于正常计数状态时,秒计数器对1Hz 的标准信号进行计数,在其进位输出信号作为分计数器的使能端,而分计数器的进位输出信号又作为时计数器的使能端。数字钟除了正常计时外,通过两个按键S1,S2分别实现对小时、分钟的调整。这两个按键的作用,就是用来产生时计数器、分计数器的另一路使能信号按键使能信号.由于它们的基准信号都是1Hz ,故有按键使能信号时,它们会迅速增加,达到调整时间的目的。下面给出计时校时模块的逻辑框图如图4-3。 图4-3 计时校时模块的逻辑框图4.3 整点报时模块功能的软件设计与实现 整点报时模块是根据秒、分的输出数值,与程序设定的时间作比较,当时间为59 分55 秒、56 秒、57 秒、58 秒、59 秒时,整点报时模块的LED灯控制信号有输出,LED灯闪烁。下面给出整点报时模块的逻辑框图4-4。 图4-4 整点报时模块的逻辑框图4.4 扫描译码显示模块功能的软件设计与实现 动态扫描电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且输出数码管的片选信号和位选信号。所谓动态扫描显示方式是在显示某一位LED显示块的数据的时候,让其它位不显示,然后在显示下一位的数据,同时关闭其他显示块。这样做可以使每一个显示块显示与自己相对应的数据。只要保证每一位显示的时间间隔不要太大,利用人眼的视觉暂留的现象,就可以造成各位数据同时显示的假象。 显示译码电路,选择八位七段数码管作为显示单元电路。计数器实现了对时间的累计并以8421BCD码的形式输送到动态扫描模块,由译码电路将8421BCD码转换为七段码,再由数码管显示出来。下面给出扫描译码显示模块的逻辑框图4-5。 图4-5 扫描译码显示模块的逻辑框图4.5 顶层模块功能的软件设计与实现 将分频模块,计时校时模块,报时模块和显示模块创建的符号文件在新建的顶层模块图形编辑文件中调用,进行模块符号间的连线,设置输入,输出引脚。编写好顶层模块后,进行编译仿真,验证程序的正确性。下面给出顶层模块的逻辑框图4-6。 图4-6 顶层模块的逻辑框图5 系统功能调试及分析本系统只含有FPGA自编程硬件设计电路,整个系统比较简单。因此在系统调试中采用自低向上的调试方法,也就是先进行各个单元模块的软件编译,在各个单元模块调试好后再把各个单元模块综合起来进行系统的整体的编译和功能仿真。数字钟系统的整体功能仿真波形图如下图5。功能仿真无误后,通过下载电缆将设计文件加载到目标器件FPGA,通过控制按键观察LED显示是否达到数字钟的设计要求。 图5 数字钟系统的整体功能仿真波形图6 结论及展望6.1 结论 本文提出了一种基于FPGA的数字钟设计方案,从硬件和软件两个方面详细地介绍了设计思想和过程,最终设计出了数字钟,将设计程序加载到实验箱上运行调试后,时、分、秒能够正常计数,并能由控制键分别校正时、分的显示,整点报时功能正常。最终结果与预期效果一致,完成了预期的设计任务。 论文取得了如下结果:1.采用了FPGA芯片CycloneII系列EP2C35F672C8作为核心器件。设计的数字钟系统的硬件电路,能够完成数字钟的校时,计时,报时,显示等实时任务。 2.运用自顶向下的思想。将整个系统分成几个模块分别设计,再用顶层模块块将它们联系起来,实现数字钟整体的功能,降低了系统设计的难度。 3.采用了VHDL语言为主,图形输入为辅的编程方法。优点是编程方法灵活,而且编写的程序具有很好的移植性,同样适用于其他FPGA芯片的数字钟设计。 4.采用QuartusII软件进行编译和仿真,可以不管硬件而先进行软件的仿真,并能根据仿真结果分析设计存在的问题和缺陷,从而进行程序的调试和完善,这大大的提高了编程的成功率。6.2 展望 虽然数字钟的设计取得了一定的进展,但是在某些方面还存在着很多不足,比如数字钟的功能还不够强大,计时和校时的精度还有待提高等。今后需要进一步进行的研究工作和内容: 1. 实现数字钟微秒位的计时显示,扩展数字钟的功能,实现时、分、秒和分、秒、微秒有选择的分别显示。并能实现秒位的校正。2.实现定时报时功能,可随意设置报时时间,而不是在整点时报时,增加其实用性。3.提高计时精度。通过按键校正时间时,由于器件对信号的延时,会产生一定的误差。可以进一步通过软件实现按键消抖,提高整个数字钟系统的计时精度。 参考文献1 廖日坤,CPLD/FPGA嵌入式应用开发技术白金手册,中国电力出版社,2003,212-218。2 王开军,姜宇柏,面向CPLD/FPGA的VHDL设计,机械工业出版社,2006,28-65。3 赵保经,中国集成电路大全,国防工业出版社,1985。4 高吉祥,电子技术基础实验与课程设计,电子工业出版社,2002。5 吕思忠,数子电路实验与课程设计,哈尔滨工业大学出版社,2001。6 赵志杰,集成电路应用识图方法,机械工业出版社,2003,35-40。7 张庆双,电子元器件的选用与检测,机械工业出版社,2003。8 谭会生,张昌凡,EDA技术及应用,西安电子科技大学出版社,2002。9 李可,数字钟电路及应用M,北京:电子工业出版社,1996。附录数字钟子模块程序1.分频模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity FP is port(clk: in std_logic; clk1HZ: out std_logic );end FP; architecture behave of FP is signal clk_count1: std_logic_vector(13 downto 0); begin process(clk)begin if(clkevent and clk=1)then if(clk_count1<10000)then clk_count1<=clk_count1+1; else clk_count1<="00000000000001" end if; end if; end process; clk1HZ<=clk_count1(13); END BEHAVE;2.计时校时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity JS is port(clkHZ: in std_logic; clk: in std_logic; rst: in std_logic; s1, s2: in std_logic; sec1,sec10,min1,min10,hour1,hour10: BUFFER INTEGER);end JS; architecture behave of JS is BEGIN process(clkHZ,rst) begin if(rst=0) then sec1<=0;sec10<=0; min1<=0;min10<=0; hour1<=0;hour10<=0; elsif(clkHZevent and clkHZ=1)then if(s1=0) then if(hour1=9) then hour1<=0; hour10<=hour10+1;elsif(hour10=2 and hour1=3)then hour1<=0;hour10<=0; else hour1<=hour1+1;end if; elsif(s2=0) then if( min1=9)then min1<=0; if(min10=5) then min10<=0; else min10<=min10+1; end if; else min1<=min1+1; end if;elsif(sec1=9) then sec1<=0; if (sec10=5)then sec10<=0; if(min1=9)then min1<=0; if(min10=5)then min10<=0; if(hour1=9) then hour1<=0;hour10<=hour10+1; elsif(hour10=2 and hour1=3)then hour1<=0; hour10<=0; else hour1<=hour1+1; end if; else min10<=min10+1;end if; else min1<=min1+1; end if; else sec10<=sec10+1; end if; else sec1<=sec1+1; end if; end if; end process; END BEHAVE;3.整点报时模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity BAOS is port(clkHZ1: in std_logic; min1,min10,sec1,sec10: in integer; led: out std_logic_vector(3 downto 0) );end BAOS; architecture behave of BAOS is signal led_count: std_logic_vector(2 downto 0); signal led_display: std_logic_vector(3 downto 0); BEGINprocess(clkHZ1) begin if(clkHZ1event and clkHZ1=1) then if (min10=5 and min1=9 and sec10=5 and sec1>3 )then led_count<=led_count+1; else led_count<="000" end if; end if;end process; process(led_count) begin case(led_count)is when"000"=>led_display<="0000" when"001"=>led_display<="1111" when"010"=>led_display<="0111" when"011"=>led_display<="0011" when"100"=>led_display<="0001" when"101"=>led_display<="1111" when others=>led_display<="0000" end case; led<=led_display; end process; END BEHAVE;4.扫描译码显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity XIANS is port(clk: in std_logic; M1,M2,M3,M4,M5,M6: in INTEGER; display:out std_logic_vector(6 downto 0); seg_sel :buffer std_logic_vector(2 downto 0) );end XIANS; architecture behave of XIANS is signal disp_temp: integer range 0 to 15; signal disp_decode: std_logic_vector(6 downto 0); signal sec1,sec10: integer range 0 to 9; signal min1,min10: integer range 0 to 9; signal hour1,hour10: integer range 0 to 9;BEGIN process(seg_sel)begin case(seg_sel+1) is when"000"=>disp_temp<=M1;when"001"=>disp_temp<=M2;when"010"=>disp_temp<=10;when"011"=>disp_temp<=M3;when"100"=>disp_temp<=M4;when"101"=>disp_temp<=10;when"110"=>disp_temp<=M5;when"111"=>disp_temp<=M6; end case; end process; process(clk) begin if(clkevent and clk=1) then seg_sel<=seg_sel+1;display<=disp_decode; end if; end process;process(disp_temp)begin case disp_temp is when 0=>disp_decode<="0111111" when 1=>disp_decode<="0000110" when 2=>disp_decode<="1011011" when 3=>disp_decode<="1001111" when 4=>disp_decode<="1100110" when 5=>disp_decode<="1101101" when 6=>disp_decode<="1111101" when 7=>disp_decode<="0000111" when 8=>disp_decode<="1111111" when 9=>disp_decode<="1101111" when 10=>disp_decode<="1000000" when others=>disp_decode<="0000000" end case; end process; end behave;

注意事项

本文(基于FPGA的数字钟设计)为本站会员(gbs****77)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!