资源描述
word摘 要本设计为一个多功能的数字时钟,具有时、分、秒计数显示功能,以24小时循环计数;具有校对功能。 本设计采用EDA技术,以硬件描述语言Verilog HDL为系统逻辑描述语言设计文件,在QUARTUSII工具软件环境下,采用自顶向下的设计方法,由各个根本模块共同构建了一个基于FPGA的数字钟。系统由时钟模块、控制模块、计时模块、数据译码模块、显示以与组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,按键进展校准,整点报时,闹钟功能。关键词:数字时钟,硬件描述语言,Verilog HDL,FPGAAbstractThe design for a multi-functional digital clock, with hours, minutes and seconds count display to a 24-hour cycle count; have proof functions function. The use of EDA design technology, hardware-description language VHDL description logic means for the system design documents, in QUAETUSII tools environment, a top-down design, by the various modules together build a FPGA-based digital clock. The main system make up of the clock module, control module, time module, data decoding module, display and broadcast module. After piling the design and simulation procedures, the programmable logic device to download verification, the system can plete the hours, minutes and seconds respectively, using keys to cleared , to calibrating time. And on time alarm and clock for digital clock.Keywords: digital clock,hardware description language,Verilog HDL,FPGA 43 / 48目 录摘要1Abstract2第一章绪论1112第二章编程软件与语言介绍32.1Quarters II编程环境介绍33892.2Verilog HDL语言介102.2.1什么是verilog HDL语言1011第三章数字化时钟系统硬件设计13131515151717第四章数字化时钟系统软件设计181818192020202021212123232324242525252525262727272729第五章系统调试与运行结果分析3030313133第六章总结和展望343434参考文献35致谢36附录37第一章 绪论1.1. 选题意义与研究现状在这个时间就是金钱的年代里,数字电子钟已成为人们生活中的必需品。目前应用的数字钟不仅可以实现对年、月、日、时、分、秒的数字显示,还能实现对电子钟所在地点的温度显示和智能闹钟功能,广泛应用于车站、医院、机场、码头、厕所等公共场所的时间显示。随着现场可编程门阵列( field program-mable gate array ,FPGA) 的出现,电子系统向集成化、大规模和高速度等方向开展的趋势更加明显, 作为可编程的集成度较高的ASIC,可在芯片级实现任意数字逻辑电路,从而可以简化硬件电路,提高系统工作速度,缩短产品研发周期。故利用 FPGA这一新的技术手段来研究电子钟有重要的现实意义。设计采用FPGA现场可编程技术,运用自顶向下的设计思想设计电子钟。防止了硬件电路的焊接与调试,而且由于FPGA的 I /O端口丰富,内部逻辑可随意更改,使得数字电子钟的实现较为方便。本课题使用Cyclone EP1C6Q240的FPGA器件,完成实现一个可以计时的数字时钟。该系统具有显示时、分、秒,智能闹钟,按键实现校准时钟,整点报时等功能。满足人们得到准确时间以与时间提醒的需求,方便人们生活。1.2. 国内外研究与趋势随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式开展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步。我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使电子时钟除了原有的显示时间根本功能外,还具有闹铃,报警等功能。商家生产的电子时钟更从质量,价格,实用上考虑,不断的改良电子时钟的设计,使其更加的具有市场。1.3. 论文结构第一章详细论述了近些年来,数字化时钟系统研究领域的动态与整个数字化时钟系统的开展状况,同时分析了所面临的问题与解决方案,从而提出了本论文的研究任务。第二章从研究任务着手,选择符合设计要求的常用芯片与其它元器件,详细论述了各接口电路的设计与连接,以模块化的形式,整合数字化时钟硬件的设计从小到大,从局部到整体,循序渐进,最终实现一个功能齐全的数字化时钟系统。第三章根据系统设计要求,着手对数字化时钟系统软件进展功能的实现,将各功能模块有机结合,实现时钟走时,实现闹铃、整点报时附加功能。第四章按照设计思路,在联机调试过程中,对时钟系统的不足和缺点进展分析,将调试过程作重点的记录。第五章对全文的总结,对本系统功能实现以与制作过程中需要注意的方面,与整个系统软件编写中所吸取的经验教训进展论述,同时,也对整个研究应用进展展望。第二章 编程软件与语言介绍2.1 Quarters II编程环境介绍运行环境设计采用quartus II软件实现,因此针对软件需要用到的一些功能在这里进展描述.Quartus II软件界面简单易操作,如如下图2.1:图2.1Quartus II软件界面图2.1.1 菜单栏1) 【File】菜单Quartus II的【 File】菜单除具有文件管理的功能外,还有许多其他选项图2.2Quartus II菜单栏图1【New 】选项:新建工程或文件,其下还有子菜单【New Quartus II Project】选项:新建工程。 【Design File】选项:新建设计文件,常用的有:AHDL文本文件、VHDL文本文件、Verilog HDL文本文件、原理图文件等。 【Vector Waveform Five】选项:矢量波形文件。 2【Open】选项:打开一个文件。 3【New Project Wizard 】选项:创建新工程。点击后弹出对话框。单击对话框最上第一栏右侧的“按钮,找到文件夹已存盘的文件,再单击打开按钮,既出现如下列图的设置情况。对话框中第一行表示工程所在的工作库文件夹,第二行表示此项工程的工程名,第三行表示顶层文件的实体名,一般与工程名一样。图2.3Quartus II新建工程图4【creat /update】选项:生成元件符号。可以将设计的电路封装成一个元件符号,供以后在原理图编辑器下进展层次设计时调用。 2) 【 View】菜单:进展全屏显示或对窗口进展切换,包括层次窗口、状态窗口、消息窗口等。图2.4Quartus II菜单栏全屏切换图3) 【Assignments】菜单1【Device】选项:为当前设计选择器件。 2【Pin】选项:为当前层次树的一个或多个逻辑功能块分配芯片引脚或芯片内的位置。3【Timing Ananlysis Setting】选项:为当前设计的 tpd、tco、tsu、fmax等时间参数设定时序要求。 4【EDA tool setting】选项:EDA 设置工具。使用此工具可以对工程进展综合、仿真、时序分析,等等。EDA 设置工具属于第三方工具。 5【Setting】选项:设置控制。可以使用它对工程、文件、参数等进展修改,还可以设置编译器、仿真器、时序分析、功耗分析等。 6【assignment editor】选项:任务编辑器。 7【pin planner 】选项:可以使用它将所设计电路的 I/O 引脚合理的分配到已设定器件的引脚上。图2.5Quartus II菜单栏设定引脚下拉图4) 【processing】菜单【processing】菜单的功能是对所设计的电路进展编译和检查设计的正确性。 1【Stop process】选项:停止编译设计项目。 2【Start pilation】选项:开始完全编译过程,这里包括分析与综合、适配、装配文件、定时分析、网表文件提取等过程。 3【analyze current file】选项:分析当前的设计文件,主要是对当前设计文件的语法、语序进展检查。 4【pilation report】选项:适配信息报告,通过它可以查看详细的适配信息,包括设置和适配结果等。 5【start simulation】选项:开始功能仿真。 6【simulation report】选项:生成功能仿真报告。 7【piler tool】选项:它是一个编译工具,可以有选择对项目中的各个文件进展分别编译。 8【simulation tool】选项:对编译过电路进展功能仿真和时序仿真。 9【classic timing analyzer tool】选项:classic时序仿真工具。 10【powerplay power analyzer tool】选项:PowerPlay 功耗分析工具。 图2.6Quartus II菜单栏运行下拉图5) 【tools】菜单【tools 】菜单的功能是 1【run EDA simulation tool 】选项:运行EDA仿真工具,EDA是第三方仿真工具。 2【run EDA timing analyzer tool 】选项:运行EDA时序分析工具,EDA是第三方仿真工具。 3【Programmer 】选项:打开编程器窗口,以便对 Altera 的器件进展下载编程。图2.7Quartus II仿真菜单下拉图2.1.2 工具栏工具栏紧邻菜单栏下方,它其实是各菜单功能的快捷按钮组合区。2.8Quartus II菜单栏图图2.9Quartus II菜单栏按键功能图2.1.3 功能仿真流程1、 新建仿真文件图2.10Quartus II菜单栏新建文件夹图2、 功能方正操作在菜单上点processing在下拉菜单中,如如下图:图2.11Quartus II菜单栏processing下拉图2.2 Verilog HDL语言介2.2.1 什么是verilog HDL语言Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在一样描述中显式地进展时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以与包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Ve rilog仿真器进展验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进展描述。2.2.2 主要功能下面列出的是Verilog硬件描述语言的主要能力:l 根本逻辑门,例如and、or和nan d等都内置在语言中。l 用户定义原语UP创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。l 开关级根本结构模型,例如pmos和nmos等也被内置在语言中。l 提供显式语言结构指定设计中的端口到端口的时延与路径时延和设计的时序检查。l 可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。l Verilog HDL中有两类数据类型:线网数据类型和存放器数据类型。线网类型表示构件间的物理连线,而存放器类型表示抽象的数据存储元件。l 能够描述层次设计,可使用模块实例结构描述任何层次。l 设计的规模可以是任意的;语言不对设计的规模大小施加任何限制。l Verilog HDL不再是某些公司的专有语言而是IEEE标准。l 人和机器都可阅读Verilog语言,因此它可作为EDA的工具和设计者之间的交互语言。l Verilog HDL语言的描述能力能够通过使用编程语言接口PLI机制进一步扩展。PLI是允许外部函数访问Verilog模块内信息、允许设计者与模拟器交互的例程集合。l 设计能够在多个层次上加以描述,从开关级、门级、存放器传送级RTL到算法级,包括进程和队列级。l 能够使用内置开关级原语在开关级对设计完整建模。l 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。l Verilog HDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比拟,在不匹配的情况下,打印报告消息。l 在行为级描述中,Verilog HDL不仅能够在RTL级上进展设计描述,而且能够在体系结构级描述与其算法级行为上进展设计描述。l 能够使用门和模块实例化语句在结构级进展结构描述。l 如图显示了Verilog HDL的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。l Verilog HDL还具有内置逻辑函数,例如&按位与和|按位或。l 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。l 可以显式地对并发和定时进展建模。l 提供强有力的文件读写能力。l 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。第三章 数字化时钟系统硬件设计3.1 系统核心板电路分析本系统采用的开发平台标配的核心板是QuickSOPC,可以实现EDA、SOP和DSP的实验与研发。本系统采用QuickSOPC标准配置为Altera公司的EP1C6Q240C8芯片。(1) 核心板的硬件资源核心板采用4层板精心设计,采用120针接口。QuickSOPC核心板的硬件原理框图如图2-1所示:(2) FPGA电路核心板QuickSOPC上所用的FPGA为Altera公司Cyclone系列的EP1C6Q240。EP1C6Q240包含有5980个逻辑单元和92Kbit的片上RAM。EP1C6Q240有185个用户I/O口,封装为240-Pin PQFP。核心板EP1C6Q240器件特性如表2-1。表3-1核心EP1C6Q240器件特性:Hb7838电子-技术资料-电子元件-电路图-技术应用-根本知识-原理-维修-作用-参数-电子元器件符号-各种图纸特性核心板EP1C6Q240器件逻辑单元LE5980M4K RAM 块20RAM总量bit92160PLL(个)2最大用户I/O数个185配置二进制文件.rbf大小bit1167216可选串行主动配置器件EPCS1/ EPCS4/ EPCS16(3) 配置电路Cyclone FPGA的配置方式包括:主动配置模式、被动配置模式以与JTAG配置模式。本系统采用的是JTAG配置模式下载配置数据到FPGA。通过JTAG结果,利用Quartus II软件可以直接对FPGA进展单独的硬件重新配置。Quartus II软件在编译时会自动生成用于JTAG配置的.sof文件。Cyclone FPGA设计成的JTAG指令比其他任何器件操作模式的优先级都高,因此JTAG配置可随时进展而不用等待其他配置模式完成。JTAG模式使用4个专门的信号引脚:TDI、TDO、TMS以与TCK。JTAG的3个输入脚TDI、TMS和TCK具有内部弱上拉,上拉电阻大约为25k。在JGTA进展配置的时候,所有用户I/O扣都为高阻态。(4) 时钟电路FPGA内部没振荡电路,使用有源晶振是比拟理想的选择。EP1C6Q240C8的输入的时钟频率X围为15.625387MHz,经过内部的PLL电路后可输出15.625275MHz的系统时钟。当输入时钟频率较低时,可以使用FPGA的内部PLL调整FPGA所需的系统时钟,使系统运行速度更快。核心板包含一个48MHz的有源晶振作为系统的时钟源。如图2-2所示。为了得到一个稳定、准确的时钟频率,有源晶振的供电电源经过了LC滤波。本系统硬件整体设计框图如图2-3所示:数字时钟系统硬件电路总体框图3.2 系统主板电路分析3.2.1 时钟模块电路FPGA内部没振荡电路,使用有源晶振是比拟理想的选择。EP1C6Q240C8的输入的时钟频率X围为15.625387MHz,经过内部的PLL电路后可输出15.625275MHz的系统时钟。当输入时钟频率较低时,可以使用FPGA的内部PLL调整FPGA所需的系统时钟,使系统运行速度更快。核心板包含一个50MHz的有源晶振作为系统的时钟源。为了得到一个稳定、准确的时钟频率,有源晶振的供电电源经过了LC滤波。3.2.2 显示电路由于本设计需要显示时间信息包括:时、分、秒,显所以采用主板上七段数码管显示电路与系统连接实现显示模块的功能。主板上七段数码管显示电路如图2-4 所示,RP4和 RP6 是段码上的限流电阻,位码由于电流较大,采用了三极管驱动。数码管 LED显示是工程项目中使用较广的一种输出显示器件。常见的数管有共阴和 共阳 2 种。共阴数码管是将 8 个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将 8 个发光二极管的阳极连接在一起作为公共端。公共端常被称作位码,而将其他的 8 位称作段码。如图 2-5所示为共阳数码管与其电路,数码管有 8 个段分别为:h、g、f、e、d、c、b 和ah 为小数点 ,只要公共端为高电平“1 ,某个段输出低电平“0如此相应的段就亮。从电路可以看出,数码管是共阳的,当位码驱动信号为 0时,对应的数码管才能操作;当段码驱动信号为 0 时,对应的段码点亮。3.2.3 键盘控制电路键盘控制电路要实现时钟系统调时的功能和闹铃开关的功能。本设计采用主板上的独立键盘来实现这两个功能。当键盘被按下是为“0,未被按下是为“1。电路连接图如图2-6所示。电路中为了防止FPGA的I/O设为输出且为高电平在按键下直接对地短路,电阻RP9、RP10对此都能起到保护作用。图3.6 键盘电路图3.2.4 蜂鸣电路设计如图2-7所示,蜂鸣器使用 PNP三极管进展驱动控制,蜂鸣器使用的是交流蜂鸣器。当在 BEEP输入一定频率的脉冲时,蜂鸣器蜂鸣,改变输入频率可以改变蜂鸣器的响声。因此可以利用一个 PWM 来控制 BEEP,通过改变 PWM 的频率来得到不同的声响,也可以用来播放音乐。假如把 JP7断开,Q4 截止,蜂鸣器停止蜂鸣。第四章 数字化时钟系统软件设计4.1 整体方案介绍4.1.1 整体设计描述设计中的数字时钟,带有按键校准,定点报时,数码管显示等功能。因此数字时钟所包含的模块可分为,分频模块,按键模块,计时校准模块,闹钟模块,LED显示模块,模块之间的关系如下图:针对框图流程,设定出各个模块的需求:1、 分频电路:针对计时器模块与闹钟设定模块的需求,可以知道分频模块需要生成一个1Hz的频率信号,确保计时模块可以正常计数。2、 计时器模块:计数模块的作用是收到分频模块1Hz频率的信号线,能进展正确计时,并且可以通过按键进展时间的修改,且当整点时,给蜂鸣器产生使能信号,进展整点报时,播放音乐。3、 闹钟设定模块:可根据按键的设定闹钟的时间,当计时模块的时间与闹钟设定模块的时间相等的时候,给蜂鸣器一个使能信号,蜂鸣器闹铃。4、 蜂鸣器模块:根据计时模块,闹钟模块给出的使能信号,判定蜂鸣器是整点报时,还是闹钟响铃。整点报时会播放音乐,闹钟时嘀嘀嘀报警。5、 LED显示模块:根据实际的需求显示计时模块的时间,还是闹钟设定模块的时间,8个七段码LED数码管,进展扫描方式显示数据。4.1.2 整体信号定义对整个模块进展信号定义。接口与存放器定义module clock(clk,key,dig,seg,beep);/ 模块名 clock input clk; / 输入时钟 input 4:0 key; /输入按键 ,key3:0分别为秒,分钟,小时的增加按键。Key4为闹钟设置按键,key5为校准设置按键。output 7:0 dig; / 数码管选择输出引脚 aoutput 7:0 seg; / 数码管段输出引脚output beep;/蜂鸣器输出端reg 7:0 seg_r = 8h0; /定义数码管输出存放器 reg 7:0 dig_r; /定义数码管选择输出存放器 reg 3:0 disp_dat;/ 定义显示数据存放器 reg 8:0 count1; /定义计数存放器reg 14:0 count; /定义计数中间存放器 reg 23:0 hour = 24h235956; / 定义现在时刻存放器 reg 23:0 clktime = 24h000000;/定义设定闹钟reg 1:0 keyen = 2b11; / 定义标志位 reg 4:0 dout1 = 5b11111;reg 4:0 dout2 = 5b11111;reg 4:0 dout3 = 5b11111;/ 存放器 wire 4:0 key_done; / 按键消抖输出 reg 15:0 beep_count = 16h0;/蜂鸣器存放器reg 15:0 beep_count_end = 16hffff; /蜂鸣器截止存放器reg clktime_en = 1b1;/闹钟使能存放器reg sec ;/1秒时钟reg clk1;/1ms时钟reg beep_r;/存放器 wire beepen;/闹钟使能信号4.1.3 模块框图通过quartus II的creat symble for current file功能生成框图如下:分频模块实现,计数电路所需时钟信号为1HZ,而系统时钟为48MHZ,所以要对系统时钟进展分频以来满足电路的需要。4.2 分频模块实现4.2.1 分频模块描述对于分频模块,关键是生成个1Hz的时钟信号。考虑到仿真的需要,模块中间生成1个1kHz的时钟信号。1Hz的信号的产生用来产生时钟的秒脉冲,框图如如下图4.2:分频模块图4.2.2 分频模块设计本系统程序设计时钟的准确与否主要取决于秒脉冲的准确度。为了保证计时准确,我们对系统时钟48MHz进展了48000分频生成1kHz信号clk1,在通过1kHz信号,生成1Hz信号clk。/1ms信号产生局部 always (posedge clk) / 定义 clock 上升沿触发 begin count = count + 1b1; if(count = 15d24000) /0.5mS到了吗? begin count = 15d0; /计数器清零 clk1 = clk1; /置位秒标志 end end/秒信号产生局部 always (posedge clk1) / 定义 clock 上升沿触发 begin count1 = count1 + 1b1; if(count1 = 9d500) /0.5S到了吗? begin count1 = 9d0; /计数器清零 sec = sec; /置位秒标志 endEnd4.2.3 分频模块仿真通过设置功能仿真,检查代码的正确性1、 仿真结果分频模块波形仿真图右上图可以知道,计数存放器count累加到23999时,重新变为0,共计数了24000个值。触发clk1跳变,使得count1加一,count1累加到499的时候,下一个数据为0,共技术500个值。所以,sec信号的频率为1Hz,满足设计要求。4.3 计时模块实现4.3.1 计时模块描述与实现计时模块是采用16进制来实现的,将hour23,0定义为其时分秒,其中hour3,0为其秒钟上的个位数值,hour4,7为其秒钟上的十位数值,以此类推分钟、时钟的个位和十位。当clk脉冲过来时,秒个位hour3,0便开始加1,当加到9时,秒十位加1,与此同时秒个位清零,继续加1。当秒十位hour7,4为5秒个位为9时即59秒,分个位hour11,8加1,与此同时秒个位和秒十位都清零。以此类推,当分十位hour15,12为5和分个位为9时即59分,时个位加1,与此同时分个位hour19,16和分十位都清零。当时分十位23,20为2和分个位为4,全部清零,开始重新计时。从功能上讲分别为模60计数器,模60计数器和模24计数器。/时间计算与校准局部always (negedge sec)/计时处理begin hour3:0 = hour3:0 + 1b1; /秒加 1 if(hour3:0 = 4ha) /加到10,复位begin hour3:0 = 4h0; hour7:4 = hour7:4 + 1b1; / 秒的十位加一if(hour7:4 = 4h6) /加到6,复位begin hour7:4 = 4h0; hour11:8 = hour11:8 + 1b1;/分个位加一if(hour11:8 = 4ha) /加到10,复位begin hour11:8 = 4h0; hour15:12 = hour15:12 + 1b1;/分十位加一if(hour15:12 = 4h6) /加到6,复位begin hour15:12 = 4h0; hour19:16 = hour19:16 + 1b1;/时个位加一if(hour19:16 = 4ha) /加到10,复位begin hour19:16 = 4h0; hour23:20 = hour23:20 + 1b1;/时十位加一end if(hour23:16 = 8h24) /加到24,复位hour23:16 = 8h0; end end end end end end 4.3.2 计时模块仿真对计时模块进展仿真,记录仿真波形计时模块仿真图由上图可见,当sec信号下降沿跳变时,hour寄出去会加1,也就相当于跳了一秒钟时间。当hour的时间为235959是,下一个计数器的值为000000,hour存放器归零,相当于半夜0点的时刻。仿真的结果达到预期,通过。4.4 按键处理模块实现4.4.1 按键处理模块描述框图如如下图4.4:按键控制功能图模块讲计时局部和时间调整局部整合到一起,正常态的时候,时间正常运行,当key5被按下时,进入时间校准,可以通过key2:0三个键,分别对秒,分,时进展加1操作,从而进展时间校准。当key3被按下时,进入闹钟设定,可以通过key2:0三个键,分别对秒,分,时进展加1操作,从而进展闹钟的设定。按键模块仿真图通过按键key进展仿真控制,可以发现clktime会随着按键的按下,分别有时钟,分钟秒钟加1,仿真结果满足设计要求。4.4.2 按键去抖处理模块设计按键模块实现去抖处理,与乒乓按键设计,确保后面的计时模块与闹钟模块的功能实现。assign key_done = key|dout3; / 按键消抖输出 always (posedge count15) /按键去噪声begin dout1 = key; dout2 = dout1; dout3 =hour23:0)。正常情况下,闹铃时间到会进展为时1分钟的蜂鸣报时,可以通过按下闹钟按键key3使其停止。当闹铃设置为整点是,会先进展整点报时,然后进入闹铃。闹钟控制键功能图4.5.2 闹钟设定模块仿真闹钟模块仿真图通过按键key进展仿真控制,可以发现clktime会随着按键的按下,分别有时钟,分钟秒钟加1,仿真结果满足设计要求。4.6 蜂鸣器模块实现4.6.1 蜂鸣器模块描述蜂鸣器模块负责整点报时,和闹铃的时候进展出声的作用。整点报时的时候,播放音乐,10秒音乐播报完后停止整点报时。闹钟触发时,播放嘀嘀嘀报警声。当闹铃设置为整点是,会先进展整点报时,然后进入闹铃。当闹钟设定键被按下,响起的蜂鸣声会被屏蔽。模块框图如如下图4.9:4.6.2 蜂鸣器模块实现/蜂鸣器的计数定时器always(posedge clk) begin beep_count = beep_count + 1b1; /计数器加 1 if(beep_count = beep_count_end)&(!(beep_count_end = 16hffff) begin beep_count = 16h0; /计数器清零 beep_r = beep_r; /取反输出信号 end end always (posedge clk) beginif (!beepen)case(hour3:0) /整点报时音乐内容4h0:beep_count_end = 16h6a88; /中音 6 的分频系数值 4h1:beep_count_end = 16h8637; /中音 4 的分频系数值4h2:beep_count_end = 16h7794; /中音 5 的分频系数值 4h3:beep_count_end = 16hb327; /中音 1 的分频系数值 4h5:beep_count_end = 16hb327; /中音 1 的分频系数值 4h6:beep_count_end = 16h7794; /中音 5 的分频系数值 4h7:beep_count_end = 16h6a88; /中音 6 的分频系数值 4h8:beep_count_end = 16h8637; /中音 4 的分频系数值default:beep_count_end = 16hffff; /其他情况无声endcaseelse if (!clktime_en)begincase(count18:5)/闹钟嘀嘀嘀声内容4h0,4h2,4h6,4h8:beep_count_end = 16h2f74; /高音 7 的分频系数值 default:beep_count_end = 16hffff; /其他情况不出声endcaseendelsebeep_count_end = 16hffff;end/闹铃使能控制always (posedge clk) beginif (!keyen0)/判断闹铃是否有取消clktime_en = 1b1;/闹铃响起后,需要手动关闭闹铃else if (clktime23:0 =hour23:0)/闹铃过一点时间,自动关闭。clktime_en = 1b0;end4.6.3 蜂鸣器模块仿真功能仿真,记录波形图:蜂鸣器模块仿真图通过上图可以看出来,当hour与clktime相等时,闹铃被触发,经过一段时间后,闹铃停止工作,设计满足要求。4.7 显示模块实现4.7.1 显示模块描述此设计中的LED七段数码管显示模块主要显示时间的时、分、秒信息,数码管为共阳的。在此设计中占非常重要的地位,它是确保时间能直观呈现的桥梁。在设计过程中,首先进展程序编写和调试的应该是显示模块。下面输入的端口为闹钟设定键被按下,七段数码管会显示闹钟设定情况下数码管所对应的数字。正常时间情况、闹钟设定以与查看闹钟所设定好的时间都是同样的原理,当他们被按下数码管会显示对应的模式相应的数字。显示模块图4.7.2 显示模块实现/数码管显示内容always (posedge clk)begincase(keyen0,count13:1)/选择扫描显示数据 4d0:disp_dat = clktime3:0;/秒个位 4d1:disp_dat = clktime7:4;/秒十位 4d2:disp_dat = 4ha;/显示- 4d3:disp_dat = clktime11:8;/分个位 4d4:disp_dat = clktime15:12;/分十位 4d5:disp_dat = 4ha;/显示- 4d6:disp_dat = clktime19:16;/时个位 4d7:disp_dat = clktime23:20;/时十位 4d8:disp_dat = hour3:0;/秒个位 4d9:disp_dat = hour7:4;/秒十位 4d10:disp_dat = 4ha;/显示- 4d11:disp_dat = hour11:8; /分个位 4d12:disp_dat = hour15:12; /分十位 4d13:disp_dat = 4ha;/显示- 4d14:disp_dat = hour19:16; /时个位 4d15:disp_dat = hour23:20; /时十位 default:disp_dat = 4ha;/显示- endcase/数码管选择case(count13:1) /选择数码管显示位 3d0:dig_r = 8b11111110; /选择第一个数码管显示 3d1:dig_r = 8b11111101; /选择第二个数码管显示 3d2:dig_r = 8b11111011; /选择第三个数码管显示 3d3:dig_r = 8b11110111; /选择第四个数码管显示 3d4:dig_r = 8b11101111; /选择第五个数码管显示 3d5:dig_r = 8b11011111; /选择第六个数码管显示 3d6:dig_r = 8b10111111; /选择第七个数码管显示 3d7:dig_r = 8b01111111; /选择第八个数码管显示endcaseend/数码管显示always (posedge clk) begin case(disp_dat) 4h0:seg_r = 8hc0;/显示 0 4h1:seg_r = 8hf9;/显示 1 4h2:seg_r = 8ha4;/显示 2 4h3:seg_r = 8hb0;/显示 3 4h4:seg_r = 8h99;/显示 4 4h5:seg_r = 8h92;/显示 5 4h6:seg_r = 8h82;/显示 6 4h7:seg_r = 8hf8;/显示 7 4h8:seg_r = 8h80;/显示 8 4h9:seg_r = 8h90;/显示 9 4ha:seg_r = 8hbf;/显示 - default:seg_r = 8hff; /不显示 endcase if(count13:1= 3d2)&sec) seg_r = 8hff; End4.7.3 显示模块仿真编译程序,进展功能仿真,记录仿真图形:显示模块仿真图通过上面的图可以知道,LED数码管是通过扫描的方式实现数据更新,通过dig,seg存放器的数据可以知道,数据能正常显示,满足设计要求。第五章 系统调试与运行结果分析5.1 硬件调试在软件联机调试之前,首先要确定硬件是否完全正确。检查方面主要包括:1PC机的接口和核心板上的JTAG下载口是否连接正确;2蜂鸣器的电路是否为通路;3检查接地、电源线是否连接正确;4用示波器检测核心板的各个引脚是否有信号输出;5LED七段数码管显示正常。引脚分布如下表5-1:表5-1引脚分布图:信号引脚说明信号引脚说明seg0169数码管断信号选择dig0160数码管片选信号控制seg1170dig1159seg2167dig2162seg3168dig3161seg4165dig4215seg5166dig5216seg6163dig6213seg7164dig7214key0121秒加1控制clk28时钟信号key1122分加1控制Beep175蜂鸣器信号key2123时加1控制key3124闹钟控制key4143时间校准控制5.2 软件调试在确定好硬件系统正确之后,我对本设计进展分模块的软件调试。功能模块先后调试顺序为:显示模块时间模块键盘模块时间设定与其显示模块闹铃、整点报时设定与其显示模块。每完成一个模块就与前一个已完成的模块结合起来调试,直至实现相应功能,再编写下一模块程序。在与主程序衔接时,主程序和各子程序也需作相应的改动,以便与子程序更好的衔接,特别是显示子程序需作较大改动,以便对不同内容进展显示。软件编译后的结果:软件编译结果图通过上图5.1可以知道,整个设计值用了383个逻辑单元,占用很少的资源。5.3 调试过程与结果调试过程按照:显示模块时间模块键盘模块时间设定与其显示模块闹铃、整点报时设定与其显示模块的顺序进展调试。1显示模块调试本系统功能完整运行离不开正确显示,所以显示模块的实现非常重要,在联机调试第一步就要确定系统的显示是否能够正常运行。将需要显示的内容编写在程序内,单独得进展仿真。此模块调试结果如图4-1所示:2时间系统模块调试确定系统显示成功后,进展时间系统的调试。时间系统需要实现时、分、秒的正确走时。显示结果为时、分、秒,其中秒钟可以正常走动。此模块调试结果如图4-2所示:图5.3 时间系统模块调试图3按键模块调试key1按键被按下进入校时状态,key2按键被按下进入调闹钟状态在闹铃响时按此键能屏蔽闹铃音,在两个不同状态下,key3、key4、key5三个按键的功能是一样的,当被按下时,时、分、秒的数值加1。由于图片限制校时状态下和闹钟设定类似不予以截图。5.4 调试须知事项软件设计时,需要确定好软件设计的思路,即先确定各个功能需要实现的先后,再将各功能模块单独进展编写调试,待各模块功能完善后,再进展总体联合调试。调试过程中出现了一些问题,并一一解决:1在进展系统联机调试时,要注意电源是否接通,PC机的接口和核心板上的JTAG下载口是否连接正确。确定将未使用的引脚设置为三态输入,否如此可能会损坏芯片。2显示模块正确调试之后,进展时钟系统的调试过程中,出现时间信息并没有显示在屏幕上,而在对应时间信息的位置上显示的是“-。出现此问题时候,首先对硬件进展再次检查,用示波器检查引脚两端是否有信号的输入输出。结果发现硬件电路连接正确,问题出现在引脚设置的方面。在设定引脚时,没有选择正确的输出引脚。通过查找书本,修改输出引脚,解决了这个问题。3时钟模块时,出现秒钟走的过快的现象。最终发现是分频程序中没有正确的对时钟脉冲信号进展正确的分频。通过在网络资源和书籍的学习正确的改善了这个问题。4 键盘调整时间程序中,出现了无法正常调时情况,按键盘后,时间信息没有改变或者改变过多。经过检查,找到原因是没有给按键进展按键去抖动。这说明在编写程序时候要充分了解各芯片内容资料,减少编写小错误引起对整个程序造成的影响。5闹钟报时和整点报时蜂鸣时间问题。闹钟报时中,如果闹钟时间到就会闹铃1分钟,考虑到实际生活中,闹钟都是可以手动关闭的,于是设定了一个闹钟开关键,为了减少系统硬件的繁杂,当系统时间到达闹铃时间和整点报时的时间,蜂鸣器才会响起。第六章 总结和展望5.5 总结在FPGA上设计和调试都需要耐心,时钟设计在生活中无处不在,设计的过程要考虑到应用的习惯,设计更人性化的体验,才会是一个好的设计。在Verilog HDL语言的学习上还存在一些问题,没有深入的学习,对于有些语法错误,还需要仔细的查找。如果将这个数字时钟应用于现实生活中,还存在些许的问题。例如按键太多,操作起来没那么的方便等等。5.6 展望针对数字时钟的设计,通过以上的验证,我们可以知道,对数字时钟来说,其实占用很少逻辑资源,也就意味着如果一点制作成SOC的话,本钱会非常的低,所以基于这点,整个模块完全可以依附在其他功能产品如CPU内部上,给整个产品增加的优势。参考文献1 X君,常明,秦娟,基于硬件描述语言VHDL的数字时钟设计,某某理工大学学报,2007,第23卷 第4期,40-412 廖日坤,CPLD/FPGA嵌入式应用开发技术白金手册,中国电力,2003,212-218。3 王开军,姜宇柏,面向CPLD/FPGA的VHDL设计,机械工业,2006,28-65。 4 赵保经,中国集成电路大全,国防工业,1985。5 高吉祥,电子技术根底实验与课程设计,电子工业,2002。6 吕思忠,数子电路实验与课程设计,某某工业大学,2001。7 谢自美,电子线路设计、实验、测试,华中理工大学,2003。8 赵志杰,集成电路
展开阅读全文