基于VerilogHDL的闹钟设计说明_第1页
基于VerilogHDL的闹钟设计说明_第2页
基于VerilogHDL的闹钟设计说明_第3页
基于VerilogHDL的闹钟设计说明_第4页
基于VerilogHDL的闹钟设计说明_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.PAGE.....封面删除~你懂的..摘要随着微电子技术、计算机技术、半导体技术的发展,很多传统的数字门电路的设计已经被可编程逻辑器件替代。而对于传统的模拟控制技术,也被数字控制系统所取代。数字系统在各个领域显示出了无穷的魅力与优势,如今已经被广泛应用于实际工程中。本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,实现时、分、秒的计时和校时,以及整点报时和闹钟的功能。突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,并通过ModelSimSE6.5完成综合、仿真。通过VerilogHDL语言完成数字钟的层次化设计。关键词:数字电子时钟,有限状态机,功能仿真AbstractAsthemicroelectronics,computertechnology,semiconductortechnology,manytraditionaldesignofdigitalgateprogrammablelogicdevicehasbeenreplaced.Asforthetraditionalanalogcontrol,digitalcontrolsystemshavealsobeenreplaced.Digitalsystemsinvariousfieldshasshowninfinitecharmandadvantages,andnowhasbeenwidelyusedinpracticalprojects.Inthispaper,VerilogHDL,thedesignoftop-downmulti-functionaldigitalclockdesignedtoachievethehours,minutes,seconds,timeandschool,aswellasthewholepointtimekeepingandalarmfunctions.Highlightedasahardwaredescriptionlanguage,goodreadability,portabilityandeaseofunderstanding,etc.,andthroughtheModelSimSE6.5completethecomprehensive,simulation.CompletedbyVerilogHDL,thelevelofthedigitalclockdesign.Keywords:Digitalelectronicclock,finitestatemachine,functionalsimulation...目录第1章绪论11.1时钟的发展简史11.2设计目的………………11.3VerilogHDL硬件描述语言21.4Modelsim仿真工具5第2章数字电路设计方法72.1数字系统设计简介72.2有限状态机9第3章数字钟的层次化设计…133.1功能要求………133.2数字钟系统的工作原理133.3模块的设计……………….…………133.4程序设计14第4章功能仿真…….……194.1仿真前准备194.2功能仿真20第5章总结23参考文献26..第1章绪论1.1时钟的发展简史设计目的公元1300年以前,人类主要是利用天文现象和流动物质的连续运动来计时。例如,日晷是利用日影的方位计时;漏壶和沙漏是利用水流和沙流的流量计时。东汉张衡制造漏水转浑天仪,用齿轮系统把浑象和计时漏壶联结起来,漏壶滴水推动浑象均匀地旋转,一天刚好转一周,这是最早出现的机械钟。北宋元祜三年<1088>苏颂和韩公廉等创制水运仪象台,已运用了擒纵机构。1350年,意大利的丹蒂制造出第一台结构简单的机械打点塔钟,日差为15~30分钟,指示机构只有时针;1500~1510年,德国的亨莱思首先用钢发条代替重锤,创造了用冕状轮擒纵机构的小型机械钟;1582年前后,意大利的伽利略发明了重力摆;1657年,荷兰的惠更斯把重力摆引入机械钟,创立了摆钟。1660年英国的胡克发明游丝,并用后退式擒纵机构代替了冕状轮擒纵机构;1673年,惠更斯又将摆轮游丝组成的调速器应用在可携带的钟表上;1675年,英国的克莱门特用叉瓦装置制成最简单的锚式擒纵机构,这种机构一直沿用在简便摆锤式挂钟中。1695年,英国的汤姆平发明工字轮擒纵机构;1715年,英国的格雷厄姆又发明了静止式擒纵机构,弥补了后退式擒纵机构的不足,为发展精密机械钟表打下了基础;1765年,英国的马奇发明自由锚式擒纵机构,即现代叉瓦式擒纵机构的前身;1728~1759年,英国的哈里森制造出高精度的标准航海钟;1775~1780年,英国的阿诺德创造出精密表用擒纵机构。18~19世纪,钟表制造业已逐步实现工业化生产,并达到相当高的水平。20世纪,随着电子工业的迅速发展,电池驱动钟、交流电钟、电机械表、指针式石英电子钟表、数字式石英电子钟表相继问世,钟表的日差已小于0.5秒,钟表进入了微电子技术与精密机械相结合的石英化新时期。1.2设计目的掌握各类计数器及将他们相连的方法掌握多个数码管动态显示的原理与方法掌握用FPGA技术的层次化设计方法进一步掌握用Verilog硬件描述语言的设计思想了解相关数字系统的设计1.3VerilogHDL硬件描述语言VerilogHDL的发展过程与编程特点VerilogHDL是一种硬件描述语言〔HDL:HardwareDiscriptionLanguage,是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。VerilogHDL就是在用途最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA<GatewayDesignAutomation>公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得VerilogHDL迅速得到推广应用。VerilogHDL充分保留了C语言简洁、高效的编程风格,其中有许多语句和C语言中的语句十分相似,如if语句、case语句等。VerilogHDL的基本结构1模块的基本结构模块是VerilogDHL语言的基本单元。一个模块可以大道代表一个完整的系统,也可以小到仅代表最基本的逻辑单元。模块内部具体行为的描述或实现方式的改变,并不会影响该模块与外部之间的连接关系。一个Verilog模块可被任意多个其他模块所调用,但由于VerilogHDL所描述的是具体的硬件电路,一个模块代表具有特定功能的一个电路块,每当它被某个其他模块调用一次,则在该模块内部,被调用的模块将原原本本的复制一次。一个完整的VerilogHDL模块由以下五部分组成。<1>模块定义行。这一行以module开头,接着给出所定义模块的模块名,模块名是模块唯一的标识符;之后的括号内给出的是端口名列表,端口名列表是由模块的各个输入、输出和双向端口组成的一张端口列表,这些端口用来与其他模块进行连接;最后以分号结束。当无端口名列表时,括号可省去。<2>端口类型说明接在模块定义行后面的是对端口类型的说明,凡是出现在端口名列表中的端口,都必须显示说明其端口类型。<3>数据类型说明VerilogHDL支持的数据类型有连线类和寄存器类两个大类,每个大类有细分为多种具体的数据类型。数据类型定义部分用来指定模块内用到的数据对象为寄存器型或连线型,除了1位宽的wire类可缺省外,其他将在后面的描述中出现的变量都应给出相应的数据类型说明。<4>描述部分本部分具体展开对模块功能的描述。<5>结束行结束行是用关键词endmodule标志模块定义的结束。2>模块的描述在模块的功能描述中,可用下述方式描述一个设计:数据流方式;行为方式;结构方式;上述描述方式的混合。下面分别介绍模块的这几种描述方式。<1>数据流描述方式数据流型描述主要用来描述组合功能,具体由"assign"连续赋值语句来实现。<2>行为描述方式行为描述时一种高级语言使用到的方法,Verilog中的行为描述方式具有很强的通用性。行为描述是通过行为语句来实现的,行为功能可使用下述过程语句结构描述。Initial语句:此语句只执行一次。Always语句:此语句循环执行。<3>结构描述方式结构描述方式是通过实例进行描述的方法。它将Verilog中预定义的基本元件实例嵌入到语言中,监控实例的输入,一但其中任何一个发生变化,便重新运算并输出。<4>混合型描述方式在模块中,用户可以混合使用以上几种描述方式,也就是说,模块中可以包含门的实例、模块实例语句、连续赋值语句、always语句和initial语句以及它们的混合语句,并且它们之间可以相互包含。VerilogHDL的层次设计实现过程用VerilogHDL进行硬件设计的过程实质上是把构成硬件系统的各功能模块进行Verilog描述,也可以使结构描述,前者侧重刻画模块所具有的行为特征,后者侧重反映模块内部的具体构造。通常一个硬件系统是由多个不同的功能模块所组成的,因而总会存在这样一个模块,他用结构描述的方法,将构成硬件系统的所有功能模块连接起来,这个模块就是系统的顶层模块。相对于顶层模块,其他的模块就是低一层次的模块。在对低一层次的模块进行描述时,如果有必要,可以同样用结构描述的方法,把模块的内部结构进一步具体的刻画出来,相对于顶层模块而言,用于构造低一层次模块的结构单元就属于更低一个层次。因而随着设计过程的展开,一个硬件系统的构造逐渐由顶层走向底层,各个功能模块的内部结构逐渐得到深化和细化,整个设计过程因而被称之为一个自顶向下的分级设计过程。在这个自顶向下的设计过程的任何阶段,都可以利用仿真工具对处于设计过程中的系统描述进行性能评估与正确性检测。在自顶向下的设计过程中,对于上层模块来说,只需要知道某个模块的名称与端口类型,就可把它作为自己的一个下层模块进行调用。至于下层模块的具体实现方式,或者从一种实现方式转换到另一种实现方式,都不会对上层模块的描述产生任何影响。这是自顶向下设计方法一个突出的优点。在设计过程中,通过仿真测试,如果发现性能不够理想,或者发现任何错误,只需对存在问题的低层的描述或实现方式进行修改或调整,而不必对上层结构进行任何改变。所谓的顶层和底层都是相对的。在实际设计过程中,总是把当前正在实现的模块作为一个局部的顶层模块,在完成描述后,先单独对他进行仿真测试,在验证其正确性后在加入需要调用它的模块中,而成为整个系统设计中某一个层次的功能模块,一个大的电子系统设计就是这样从顶层到底层,边设计,边仿真,并依据仿真结果,反复调整或优化的过程。1.4Modelsim仿真工具ModelSim是业界最优秀的HDL语言仿真器。它提供最友好的调试环境,是唯一的单内核支持VHDL和Verilog混合仿真的仿真器。是作FPGA/ASIC设计的RTL级和门级电路仿真的首选,它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段。全面支持VHDL和Verilog语言的IEEE标准,支持C/C++功能调用和调试。ModelSim专业版,具有快速的仿真性能和最先进的调试能力,全面支持UNIX<包括64位>、Linux和Windows平台。主要特点:RTL和门级优化,本地编译结构,编译仿真速度快;单内核VHDL和Verilog混合仿真;源代码模版和助手,项目管理;集成了性能分析、波形比较、代码覆盖等功能;数据流ChaseX;SignalSpy;C和Tcl/Tk接口,C调试。是业界唯一单一内核支持VHDL、VerilogHDL和SystemC混合仿真的仿真器同时也支持业界最广泛的标准如Verilog2001、SystemVerilog等,内部集成了用于C/C++,PLI/FLI和SystemC的集成C调试器。支持众多的ASIC和FPGA厂家库,可以用于FPGA和ASIC设计的RTL级和门级电路仿真。下面图1.1为modelsim的主界面。图1.1modelsim主界面ModelSim最大的特点是其强大的调试功能:先进的数据流窗口,可以迅速追踪到产生不定或者错误状态的原因;性能分析工具帮助分析性能瓶颈,加速仿真;代码覆盖率检查确保测试的完备;多种模式的波形比较功能;先进的SignalSpy功能,可以方便地访问VHDL或者VHDL和Verilog混合设计中的底层信号;支持加密IP;可以实现与Matlab的Simulink的联合仿真。ModelSim分几种不同的版本:SE、PE、LE和OEM,其中SE是最高级的版本而集成在Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的仿真速度问题,以Xilinx公司提供的OEM版本ModelSimXE为例,对于代码少于40000行的设计,ModelSimSE比ModelSimXE要快10倍;对于代码超过40000行的设计,ModelSimSE要比ModelSimXE快近40倍。以下列表介绍了OEM版本〔以Xilinx公司提供的ModelSimXE版本为例与ModelSimSE版本之间的差异。ModelSimSE支持PC、UNIX和LINUX混合平台;提供全面完善以及高性能的验证功能;全面支持业界广泛的标准;MentorGraphics公司提供业界最好的技术支持与服务。第2章数字电路设计方法2.1数字系统设计简介2.1.1从概念上讲,凡是利用数字技术处理和传输信息的系统都可以称为数字系统。通常把门电路、触发器等称为逻辑器件。将由逻辑器件构成,能执行某单一功能的电路,如计数器、译码器、加法器等称为逻辑功能部件,把有逻辑功能部件组成的能实现复杂功能的数字电路称为数字系统。复杂的数字系统可以分割称为若干个子系统,例如,计算机就是一个内部结构相当复杂的数字系统。近几年来,IC技术的发展日新月异,而最具有代表性的IC芯片主要包括以下几类:微控制芯片〔MCU;可编程逻辑器件〔PLD;数字信号处理器〔DSP;大规模存储芯片〔RAM&ROM。这几类器件在最近20年均取得了长足的发展,无论是芯片的规模还是性能都有了巨大的提高,构成了现代数字系统的基石。数字系统设计方法数字系统一般由控制电路、多个受控电路、输入/输出电路、时基电路等几部分构成,如图2.1所示。图2.1数字系统设计方法构成图一般来说,电子系统的设计有两种思路,一种是自下而上的设计思路,一种自上而下的设计思路。<1>自下而上的设计自下而上的设计,也可称为自底向上的设计,过程从最底层设计开始。设计系统硬件时,首先选择具体的元器件,用这些元器件通过逻辑电路设计,完成系统中各独立功能模块的设计,再把这些功能模块连接起来,总装成完整的硬件系统。<2>自上而下的设计自上而下的设计,也可称为自顶向下的设计。它是目前常用的数字系统设计方法,也是基于芯片的系统设计的主要方法。它在功能划分、任务分配及设计管理上有一定的长处。数字系统设计流程数字系统的设计可分为四个层次,即系统级设计、电路级设计、芯片级设计和电路板级设计。相应的,从提出设计要求到完成系统成品,数字系统设计可分为以下几个步骤:系统设计、电路设计、芯片设计、PCB设计、结构设计及电路调试和系统调试,如图2.2所示。图2.2数字系统设计流程图数字系统设计准则进行数字系统设计时,通常需要考虑多方面的条件和要求。如设计的功能和性能要求,元器件的资源分配和设计工具的可实现性,系统的开发费用和成本等。虽然具体设计的条件和要求千差万别,实现方法也个各相同,但数字系统设计还是具备一些共同的方法和准则。分割准则自顶向下设计方法或其他层次化设计方法需要对系统功能进行分割,然后用逻辑语言进行描述。分割过程中,若分割过粗,则不易用逻辑语言表达;若分割过细,则会带来不必要的充分和繁琐。因此,分割合适与否对系统设计是否方便有着至关重要的影响。系统的可观测性一个系统除了引脚上的信号外,系统内部的状态也是需要测试的内容。因此,在系统设计中,应该同时考虑功能检查和性能的测试,即系统观测性的问题。系统的稳定性设计时应注意采取措施避免竞争和增加系统稳定性。最优化设计设计中常见的最优化目标有:〔1器件资源利用率最高;〔2系统工作速度最快,即延时最小;〔3布线最容易。2.2有限状态机有限状态机简介有限状态机〔FSM又称为有限状态自动机或简称状态机,是表示有限个状态以及这些状态之间的转移和动作的数学模型。一般来说,除了输入部分和输出部分外,状态机还含有一组具有"记忆"功能的寄存器,这些寄存器的功能是记忆有限状态机的内部状态,他们常被称为状态寄存器。其中,寄存器逻辑的功能是存储有限状态机的内部状态;而组合和逻辑又可分为次态逻辑和输出逻辑两部分,次态逻辑的功能是确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。在实际应用中,根据有限状态机的输出信号是否与输入信号有关,将其分为Moore〔莫尔型有限状态机和Mealy〔米里型有限状态机两种类型。Moore型状态机输出信号仅与当前状态有关,如图2.3。即可以把Moore型有限状态的输出看成是当前状态的函数。Mealy型状态机输出信号不仅与当前状态有关,而且还与输入信号有关,如图2.4即可以把Mealy型状态机的输出看成是当前状态和输入信号的函数。图2.3Moore函数图输出输出逻辑输出当前状态激励输入输出当前状态激励输入状态寄存器状态寄存器下一个逻辑状态时钟信号时钟信号图2.4Mealy函数图需要注意的是Mealy型状态机的输出是当前状态和输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。而Moore型状态机仅为当前状态的函数,这类状态机在输入发生变化后,还必须等待时钟的到来,时钟使状态发生变化才导致输出的变化,所以比Mealy要多等待一个时钟周期。有限状态机的编码方案在状态机的编码方案中,有两种重要的编码方法:二进制编码和一位热码<One—Hot>编码。在二进制编码的状态机中,状态位<B>与状态<S>的数目之间的关系为B=log2S,如两位状态位就有00,01,10,11四个不同状态,它们在不同的控制信号下可以进行状态转换,但如果各触发器又没有准确地同时改变其输出值,那么在状态01变到10时则会出现暂时的11或00状态输出,这类险象可能使整个系统造成不可预测的结果。这时,采用格雷码二进制编码是特别有益,在该编码方案中,每次仅一个状态位的值发生变化。一位热码编码就是用n个触发器来实现n个状态的编码方式,状态机中的每一个状态都由其中一个触发器的状态来表示。如4个状态的状态机需4个触发器,同一时间仅一个状态位处于逻辑1电平,四个状态分别为:0001、0010、0100、1000。在实际应用中,根据状态机的复杂程度、所使用的器件系列和从非法状态退出所需的条件来选择最适合的编码方案,使之能确保高效的性能和资源的利用。对复杂的状态机,二进制编码需用的触发器的数目比一位热码编码的少。如100个状态的状态机按二进制编码仅用7个触发器就可以实现,而一位热码编码则要求100个触发器。另一方面,虽然一位热码编码要求用较多的触发器,但逻辑上通常相对简单些。在二进制编码的状态机中,控制从一个状态转换到另一个状态的逻辑与所有7个状态位以及状态机的输入均有关。这类逻辑通常要求到状态位输入的函数是多输入变量的。然而,在一热恋位编码的状态机中,到状态位的输入常常是其它状态位的简单函数。站在器件结构的角度,不同结构支持其确定的编码类型。MAX+plusII编译程序对所采用的器件系列自动地选择最合适的编码方法〔除非在设计文件中规定了具体的编码方案。例如,FLEX7000器件系列是寄存器增强型〔Register-intensive,以这类器件为对象的状态机最好选用一位热码编码方案来实现。由于一位热码编码的状态机降低了送到每一个状态位的逻辑电路的复杂程度,因而可提高用FLEX7000器件实现的状态机的性能。MAX5000和MAX7000器件系列最适合二进制状态机编码方案。这两类器件都能够利用共享和并联的扩展乘积项有效地实现复杂的逻辑函数。因此,在这两类器件小,可以容纳复杂的组合逻辑函数而不会浪费资源或损失性能。有限状态机的一般设计步骤用VerilogHDL进行有限状态机的设计时,主要是用always和case语句来描述模块的功能,一般来说,它们可以采用以下几个步骤来进行:通过逻辑抽象,得出状态转换图或状态表首先,通过分析给定的逻辑问题,确定输入变量、输出变量以及电路的状态数,通常是把设计给定的条件作为输入变量,把得到的结果作为输出变量;然后,定义输入、输出逻辑状态的含义,并将电路状态顺序编号;最后,按照要求列出电路的状态转换表或画出状态转换图就可以了。状态化简初次确定的状态,通常会出现重复的状态,即它们在相同的输入下转换到同一状态去,并得到一样的输出。这样的状态可以合并为一个。电路的状态数越少,存储电路也就越简单。状态简化的目的就是要将重复的状态尽可能的合并,以得到最简单的状态装换图。状态分配状态分配又称状态编码。通常有很多编码方法,编码方案选择得当,设计的电路可以很简单;反之,选的不好,则设计的电路就会复杂很多。实际设计时,需综合考虑电路复杂度与电路性能之间的折中。在触发器资源丰富的FPGA或ASIC设计中,采用独热编码,既可以使电路性能得到保证,又可充分利用触发器数量多的优势。根据画好的状态转换图或状态表,用VerilogHDL编写程序。用VerilogHDL来描述有限状态机,通过使用always块语句和case〔if等条件语句及赋值语句即可方便实现,而不必去考虑逻辑化简等问题,那些问题可以通过计算机自动完成。第3章数字钟的层次化的设计3.1功能要求设计一个具有时、分、秒计时功能的电子钟电路。按照层次化的设计方法将数字钟的功能划分为三个功能块:计时电路,显示电路,和扩展电路。要求在准确计时的基础上具有校时、校分的功能,定时闹钟的功能和整点报时的功能。3.2数字钟系统的工作原理向秒计数器提供秒脉冲信号,秒计数器记满60后向分计数器进位,分计数器记满60后向小时计数器进位,小时计数器按照24进制规律计数。计数器的输出经译码器送显示器,即显示时间。计时出现误差可以用校时电路进行校时、校分。在计时主体电路正确运行的况下,进行功能扩展,实现仿电台报时和闹钟功能。3.3模块的设计数字钟可以划分为三个功能块:1.计时电路;2.显示电路;3.扩展电路。这些模块又可分割为更小的模块。计时电路包括校时电路和计数器两个部分。计数器的功能是完成小时、分钟、秒钟的计时,因此又可继续分割为二十四进制和六十进制计数器;校时电路的作用是对小时和分钟的误差进行调整,可设置两个按键,分别予以控制。显示电路的作用是将计时电路产生的几十只在数码管上进行显示,通过七段译码后,驱动LED数码管,然后在计时电路正确的情况下实现两个扩展功能。设计图如图3.1数字钟数字钟功能扩展闹钟伪电台报时计时电路显示电路校时电路计数器二十四进制小时计数器六十进制秒计数器六十进制分计数器图3.1模块设计3.4程序设计.计时电路设计<1>六十进制计数器。modulecnt60<clk,qs,co>;inputclk;output[7:0]qs=0;outputco=0;reg[7:0]qs;regco;always<posedgeclk>beginif<qs[7:4]!=4'b0101>beginif<qs[3:0]==4'b1001>beginqs[7:4]<=qs[7:4]+4'b0001;qs[3:0]<=4'b0000;co<=1'b0;endelsebeginqs[7:4]<=qs[7:4];qs[3:0]<=qs[3:0]+4'b0001;co<=1'b0;endendelseif<qs[3:0]==4'b1001>beginqs[7:4]<=4'b0000;qs[3:0]<=4'b0000;co<=1'b1;endelsebeginqs[7:4]<=qs[7:4];qs[3:0]<=qs[3:0]+4'b0001;co<=1'b0;endendendmodule<2>二十四进制计数器modulecnt24<qh,clk>;inputclk;output[7:0]qh=0;reg[7:0]qh;always<posedgeclk>beginif<qh[7:4]!=2>beginif<qh[3:0]==4'b1001>beginqh[7:4]<=qh[7:4]+4'b0001;qh[3:0]<=4'b0000;endelsebeginqh[7:4]<=qh[7:4];qh[3:0]<=qh[3:0]+4'b0001;endendelseif<qh[3:0]==4'b0011>beginqh[7:4]<=4'b0000;qh[3:0]<=4'b0000;endelsebeginqh[7:4]<=qh[7:4];qh[3:0]<=qh[3:0]+4'b0001;endendendmodule2>校时电路设计moduleadjust<clk,co1,co2,set1,set2,clk1,clk2>;inputclk,set1,set2,co1,co2;outputclk1,clk2;assignclk1=set1?clk:co1;assignclk2=set2?clk:<!set1&&co2>;endmodule3.4.2.modulealarm<clk,qm,qh,qs,sound>;inputclk;input[7:0]qs,qm,qh;outputsound;wirebell,noise;regcp;always<posedgeclk>begincp<=~cp;endassignnoise=<qh==8'h7>&&<qm==8'h30>&&clk;assignbell=<<qs==8'h51||qs==8'h53||qs==8'h55||qs==8'h57>&&<qm==8'h59>&&cp>||<<qs==8'h59>&&<qm==8'h59>&&clk>;assignsound=noise|bell;endmodule3.4.3.moduletop<clk1,clk2,set1,set2,qs,qm,qh,sound>;inputclk1,clk2,set1,set2;output[7:0]qm,qh,qs;outputsound;wire[7:0]qs,qm,qh;cnt60s<clk1,qs,co1>;cnt60m<cp1,qm,co2>;cnt24h<qh,cp2>;adjustu1<clk1,co1,co2,set1,set2,cp1,cp2>;alarmu2<clk2,qm,qh,qs,sound>;endmodule模块说明:计时电路设计包括计数器电路设计和校时电路设计两个部分。计数器电路包含二十四进制和六十进制两种类型计数器,分别用于时和秒〔分的计数。计数器间采用串行连接方式,由六十进制计数器在计数到最大值后产生高电平,作为向前级〔分或时的进位信号。<1>六十进制计数器。六十进制计数器完成分和秒的计时,其计数规律为:00-01-02-…-58-59-00-01-…clk:1Hz脉冲信号或秒计数器的进位信号qs:计数器输出co:进位脉冲信号模块最要的部分是clk的定义,首先假定计数器的高位,也就是十位数〔高4位不等于5,定义个位数的累加和进位,当低位[3:0]值等于9时,低位值清零,高位[7:4]值+1,当值小于9时,低位[3:0]值+1。else语句定义十位数等于5的情况,当个位值为9的时候,个位,十位全部清零,并且co进位+1。<2>二十四进制计数器小时计数器为二十四进制计数器,其计数规律为:00-01-02-…-09-10-11-12-…18-19-20-21-22-23先定义小时模块的十位〔高位,当十位不等于2的时候,个位等于9以后,十位值+1,个位清零;个位置小于9时,十位不变,个位置+1。当十位等于2的时候,个位置等于9,全部清零重置;个位小于9,则个位值+1.<3>校时模块电路进行校时和正常计时的区别在于,若是分钟的正常计时,则分钟计数器选用秒计数器的进位信号作为其时钟信号,而进行分校时,则分钟计数器选用1Hz脉冲信号作为其时钟信号。小时计数器的时钟信号选择原理类似。在校时模块中,clk1和clk2都采用高电平有效来实现校分和校时,clk1表示分钟,clk表示小时。set1对应的是clk1,set2对应clk2。<4>扩展电路sound信号为输出,clk为1kHz的方波信号,引入分秒时3个计数器,分别为qm,qs,qh,bell为闹钟信号输出,noise为仿电台报时信号输出,在59分51秒的时候开始进行报时,每两秒一次信号。<4>顶层模块共有4个输入clk1、clk2、set1、set2,7个输出outsl、outsh、outml、outmh、outhl、outhh,分别代表译码显示模块的秒分时的低位和高位显示。通过将qs、qm、qh相连接,显示出完整的时间。第4章功能仿真4.1仿真前准备〔1打开ModelsimSE新建工程:点击FileNewProject出现图4.1所示对话框,输入工程名,点击OK。图4.1〔2给工程添加文件:如图4.2,如若没有现成文件,则点击CreatNewFile添加新文件。出现如图4.3对话框,写好文件名点击OK。图4.2图4.3〔3把预先写好的程序复制的建好文件中,点击编译ComlileComlileAll。如若没有问题,就可以正式开始仿真啦。4.2功能仿真Testbench如下`timescale100us/100usmoduletop_test;regclk1,clk2,set1,set2;wiresound;wire[7:0]qs,qm,qh;initialbeginclk1=0;clk2=0;endinitialbeginset1=0;#150000set1=1;#50000set1=0;endinitialbeginset2=0;#300000set2=1;#50000set2=0;endalways#5000clk1=~clk1;alwa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论