基于FPGA的出租车计费器设计.docx_第1页
基于FPGA的出租车计费器设计.docx_第2页
基于FPGA的出租车计费器设计.docx_第3页
基于FPGA的出租车计费器设计.docx_第4页
基于FPGA的出租车计费器设计.docx_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

摘要基于FPGA的出租车计费器设计摘 要本文介绍了一种基于FPGA 芯片上实现出租车计价器功能的设计方法,主要阐述如何使用新兴的EDA 器件取代传统的电子设计方法,不仅实现了出租车计价器所需的一些基本功能,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。本设计主要借助了FPGA 芯片,使用Verilog HDL语言灵活编程来实现多方面的计费,这样不仅使其不拘泥于硬件,具有更强的移植性,而且增强了实用价值,更加利于产品升级。本设计参考成都的出租车计费标准,利用Verilog HDL语言设计出租车计价器,主要具有行驶路程动态显示计费,等待累计时间计费及最后的总费用动态显示功能,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点。此程序通过下载到特定的芯片后,可应用于实际的出租车计费系统中。关键词:出租车计价器; Verilog HDL语言; FPGA; Quartus II; EDA53第一章 绪论ABSTRACTThis article presents a method of how to use FPGA to design a taxi meter, and how to replace traditional electrical design with burgeoning EDA parts. Besides the basic functions of taxi count meter, some new ideas are added concerning about the particularity of this calling. This design has mainly drawn support from the FPGA chip, uses Verilog the HDL language nimble programming to realize various cost, which not only causes it not to rigidly adhere to the hardware with a stronger portability, but also strengthens the use value, even more favors the product promotion.This design acts according to chengdus rental car cost standard to design rental car fare register with Verilog the HDL language,which includes the travel distance,the waited for the accumulation time cost and the final all-in cost dynamic demonstration function, it, as the hardware description language, has highlighted the advantages of good readability, the probability, and easy to understand and so on. This procedure may apply in the actual rental car cost system through downloads into the specific chip.Key words:Taxi meter; Verilog HDL language; FPGA; Quartus II; EDA目 录第一章 绪论31.1 课题背景:31.2 出租车计价器现状及发展趋势:31.3 本设计的主要工作:31.4 现代数字系统的设计方法 :31.4.1 设计步骤:31.4.2 设计优点:31.5 EDA技术:31.5.1 EDA技术的内涵:31.5.2 EDA技术的基本特征:31.5.3 EDA的基本工具:31.6 EDA 技术简介:3第二章 出租车计价器的设计32.1 出租车计价器的要求:32.2 系统组成框图:3第三章 各模块设计33.1分频模块:33.1.1 计数器的分频模块:33.1.2 计数器的分频模块VerilogHDL源代码:33.1.3 仿真的结果:33.1.4 数码管的分频模块:33.1.5 数码管的分频模块VerilogHDL源代码:33.2 计程模块:33.2.1 计程模块的框图:33.2.2 计程模块的VerilogHDL源代码:33.2.3 计程模块的仿真结果:33.3计时模块:33.3.1 计时模块的框图:33.3.2 计时模块的VerilogHDL源代码:33.3.3 计时模块的仿真结果:33.4控制模块:33.4.1 控制模块的框图:33.4.2 控制模块的VerilogHDL源代码:33.4.3 控制模块的仿真结果:33.5 计费模块:33.5.1 计费模块的框图:33.5.2 计费模块的VerilogHDL源代码如下所示:33.5.3 计费模块的仿真结果:33.6 数码管显示模块:33.6.1 数码管显示模块的框图:33.6.2 数码管显示的VerilogHDL源代码:33.7 顶层模块:3第四章 验证方案34.1 验证的流程图:34.2 验证的VerilogHDL源代码:34.3 系统仿真:3第五章 结论35.1 Quartus II软件综合的报表:35.2 综合的RTL级电路:35.3 设计总结:35.4 FPGA设计展望:3参考文献3致谢3附录3外文资料(原文)3外文资料(译文)3第一章 绪论1.1 课题背景:随着我国经济的迅速发展,人们生活水平的显著提高,城市交通的日趋完善,出租车逐渐成为人们日常生活不可缺少的交通工具。而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客之间的双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛,应用也越来越广泛。近年来,我国出租车行业的迅速发展,出租车已经成为我国城市公共交通的重要组成部分和现代化城市必备的基础设施,成为人们工作、生活中不可缺少的交通工具。出租车服务行业和出租车计价器紧密联系,因为出租车必须安装出租车计价器才能投入运营。出租车计价器是一种能根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并直接显示车费值的计量器具。计价器是出租汽车的经营者和乘坐出租汽车的消费者之间用于公平贸易结算的工具,因而计价器计价准确与否,直接关系到经营者和消费者的经济利益。依据国家有关法律、法规,出租车计价器是列入国家首批强制检定的工作计量器具之一,也是近年来国家质量技术监督部门强化管理的六类重点计量器具之一。出租车行业在我国是八十年代初兴起的一项新兴行业,随着我国国民经济的高速发展,出租汽车已成为城市公共交通的重要组成部分。多年来国内普遍使用的计价器只具备单一的计量功能。目前全世界的计价器中有90%为台湾所生产。现今我国生产计价器的企业有上百家,主要是集中在北京,上海,沈阳和广州等地。传统的出租车计价器由于发展使用了十几年,在稳定性、成本、以及使用习惯上都具有一些优势。如89C51单片机实现汽车计价器的设计,大部分的功能可以用单片机来实现。但是单片机程序是不通用的,不同的芯片有不同的指令集,因此设计研发比较困难,周期长。如果系统设计的不好,则系统不是很稳定,而且灵活度不够,不易实现功能复杂的设计。随着中国经济的发展,许多因素主导了出租车行业成本的波动。而传统的用89C51为基础设计出来的出租车计价系统已经很难满足现在的需要,而FPGA等数字可编程器件的出现彻底解决了这些问题,FPGA不同逻辑可以并行执行,可以同时处理不同任务,这就导致了FPGA工作更有效率,同时可以根据不同的需要来设计不同模块,能够很快的实现其需要的功能。 正因为在出租车需求不断增大的情况下,未来汽车计价器的市场还是相当有潜力,通过FPGA设计出各种出租车的计价需求,能满足当地出租车的计价需要的系统是十分有必要的,而且这个课题还能有效解决传统计价器系统上的一些不足,以实现更好的计价功能。 1.2 出租车计价器现状及发展趋势:出租车计价器是一种按照一定的要求自动进行计价的装置,应用在出租车上使出租车行业的收费更加规范、方便。目前市场上使用的出租车计价器主要采用的都是利用微控器如89C51、PD78F0034单片机实现的计价器设计。传统的出租车计价器由于发展使用了十几年,在稳定性、成本、以及使用习惯上都具有一些优势,但在营运过程中系统不是很稳定,有时造成死机的现象。而且不同国家和地区的计价方式存在差异,有些地区有夜间收费及郊区收费等,而有些地区则无夜间收费和郊区收费;即使同一地区,不同车型的出租车,其计价方式也有差别;由于个别地区对计价器有特殊要求,有时必须修改软件;另外,计价器还面临软件升级问题;因而,所设计的计价器应能很方便地重新编程。另一方面,由于油价的不断上涨,出租车还面临调价或调整计价方式等问题。因此,所设计的计价器不仅要能满足不同国家和地区的要求,而且计价方式的调整也应当很方便。这都对传统的出租车计价器提出了更高的要求。近几年来,各大城市都在对出租车价格进行调整,由于数量太多,很多城市的调价需要很长时间才能完成,这就会出现同一时间几个价格,司机人工计价的尴尬情形。这些都暴露了传统计价器在灵活性和升级换代能力上的不足。现在计价器大多数以单片机为平台的,但是单片机程序是不通用的,不同的芯片有不同的指令集,因此设计研发比较困难。而FPGA等数字可编程器件的出现彻底解决了这个问题,而且性能更稳定、设计更灵活、能实现较复杂的功能,运用EDA软件可方便的在电脑上实现设计与仿真。FPGA是电子设计领域中最具活力和发展前途的一项技术,未来必定会取代部分落伍的数字器件。面对这些问题我所认识到传统计价器的不足:(1)产品更新周期长传统计价器利用微控器,如89C51或PD78F0034单片机实现汽车计价器的设计,大部分的功能可以用单片机来实现。但是单片机程序是不通用的,不同的芯片有不同的指令集,因此设计研发比较困难,周期长。如果系统设计的不好,则系统不是很稳定,而且灵活度不够,不易实现功能复杂的设计。(2)计价方式的不灵活每次计价标准的修改都需要将芯片重新烧录,使得每次调价都需要耗费大量的人力物力,很难达到目前油价联动的需求。1.3 本设计的主要工作: 考虑到目前出租车行业迅猛发展的趋势以及对计费器更高的灵活性要求,本设计希望尝试一些新的方法来予以解决,随着FPGA等数字可编程器件的出现解决传统电子设计不能完成的任务,利用 FPGA来实现出租车计价器。可行性很高,而且电路简单,大大减少外围器件,可以用软件完全仿真,灵活度高,可以设计一些复杂的系统,而且编好的系统可以在不同的 FPGA或CPLD芯片上通用。FPGA能完成任何数字器件的功能,使用FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。同时由于FPGA的功能完全取决于语言编写的程序,不拘泥于某种芯片的特殊指令,更加提高了产品的更新换代能力。1.4 现代数字系统的设计方法 :1.4.1 设计步骤: 现代数字系统的设计采用“ Topdown”(自顶向下)设计方法,设计步骤如图1-1所示。 图 1-1 设计流程图 在“Topdown”(自顶向下)的设计方法中,设计者首先需要对整个系统进行方案设计和功能划分,拟订采用一片或几片专用集成电路ASIC来实现系统的关键电路,系统和电路设计师亲自参与这些专用集成电路的设计,完成电路和芯片版图,再交由IC工厂投片加工,或者采用可编程ASIC(例如 CPLD和 FPGA)现场编程实现。 在“Topdown”(自顶向下)的设计中,行为设计确定该电子系统或VLSI芯片的功能、性能及允许的芯片面积和成本等。结构设计根据系统或芯片的特点,将其分解为接口清晰、相互关系明确、尽可能简单的子系统,得到一个总体结构。这个结构可能包括算术运算单元、控制单元、数据通道、各种算法状态机等。逻辑设计把结构转换成逻辑图,设计中尽可能采用规则的逻辑结构或采用经过考验的逻辑单元或模块。电路设计将逻辑图转换成电路图,一般都需进行硬件仿真,以最终确定逻辑设计的正确性。版图设计将电路图转换成版图,如果采用可编程器件就可以在可编程器件的开发工具时进行编程制片。 利用HDL语言,采用“ Topdown”(自顶向下)设计方法的设计系统硬件电路,一般分为三个步骤,如图1-2所示。 图1-2 “ Topdown”(自顶向下)设计系统硬件的过程(1)行为描述 对系统进行行为描述的目的是在系统设计的初始阶段,通过对系统行为描述的仿真来发现系统设计中存在的问题。在行为描述阶段,考虑的是系统的结构及其工作过程是否能达到系统设计规格书的要求,并不考虑其实际的操作和算法用什么方法来实现。行为描述是对整个系统的数学模型的描述,其设计与器件工艺无关。(2)寄存器传输描述RTL 将行为方式描述的HDL程序,采用RTL方式描述,导出系统的逻辑表达式,再用仿真工具对RTL方式描述的程序进行仿真。如果仿真通过,就可以利用逻辑综合工具进行综合了。 (3)逻辑综合 利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表),也可将综合结果以逻辑原理图方式输出。此后再对逻辑综合结果在门电路级上进行仿真,并检查定时关系,如果一切正常,那么系统的硬件设计基本结束。如果在某一层上仿真发现问题,就应返回上一层,寻找和修改相应的错误,然后再向下继续未完的工作。 由逻辑综合工具产生门级网络表后,在最终完成硬件设计时,还可以有两种选择:一种是由自动布线程序将网络表转换成相应的ASIC芯片的制造工艺,定制ASIC芯片;第二种是将网络表转换成相应的PLD编程码点,利用PLD完成硬件电路的设计7。1.4.2 设计优点: 利用HDL语言,采用“Topdown”(自顶向下)设计方法具有以下优点:(1)在“Topdown”(自顶向下)的设计过程中,每一步都可以进行仿真,可以在系统设计过程发现设计存在的问题,可大大缩短系统的设计周期,降低费用,使电路设计更趋合理,其体积和功耗也可减小。 (2)采用HDL语言,就可免除编写逻辑表达式或真值表的过程,使设计难度大幅度下降,从而可以缩短设计周期。(3) 采用HDL语言设计系统硬件电路时,主要的设计文件是用HDL语言编写的源程序,也可以将HDL语言编写的源程序转换成电原理图形式输出,降低了硬件电路设计难度。(4)用HDL语言的源程序作为归档文件资料量小,便于保存,可继承性好。1.5 EDA技术:1.5.1 EDA技术的内涵: EDA(Electronics Design Automation)即电子设计自动化。现在数字系统设计依靠手工已经无法满足设计要求,设计工作需要在计算机上采用EDA技术完成。EDA技术以计算机硬件和系统软件为基本工作平台,采用EDA通用支撑软件和应用软件包,在计算机上帮助电子设计工程师完成电路的功能设计、逻辑设计、性能分析、时序测试直至PCB(印刷电路板)的自动设计等。在EDA软件的支持下,设计者完成对系统功能的进行描述,由计算机软件进行处理得到设计结果。利用EDA设计工具,设计者可以预知设计结果,减少设计的盲目性,极大地提高设计的效率。EDA通用支撑软件和应用软件包涉及到电路和系统、数据库、图形学、图论和拓扑逻辑、计算数学、优化理论等多学科,EDA软件的技术指标有自动化程度,功能完善度,运行速度,操作界面,数据开放性和互换性(不同厂商的EDA软件可相互兼容)等。 EDA技术包括电子电路设计的各个领域:即从低频电路到高频电路、从线性电路到非线性电路、从模拟电路到数字电路、从分立电路到集成电路的全部设计过程,涉及到电子工程师进行产品开发的全过程,以及电子产品生产的全过程中期望由计算机提供的各种辅助工作5。1.5.2 EDA技术的基本特征: 采用高级语言描述,具有系统级仿真和综合能力是EDA技术的基本特征。与这些基本特征有关的几个概念是:(1)并行工程和“自顶向下”设计方法 并行工程是一种系统化的、集成化的、并行的产品及相关过程的开发模式(相关过程主要指制造和维护)。这一模式使开发者从一开始就要考虑到产品生存周期的质量、成本、开发时间及用户的需求等等诸多方面因素。 “自顶向下”(Topdown)的设计方法从系统级设计入手,在顶层进行功能方框图的划分和结构设计;在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述;在功能一级进行验证,然后用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。“ Topdown”设计方法有利于在早期发现产品结构设计中的错误,提高设计的一次成功率,在EDA技术中被广泛采用。 (2)硬件描述语言(HDL) 用硬件描述语言进行电路与系统的设计是当前EDA技术的一个重要特征。硬件描述语言突出优点是:语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用和继承等。与原理图输入设计方法相比较,硬件描述语言更适合规模日益增大的电子系统。硬件描述语言使得设计者在比较抽象的层次上描述设计的结构和内部特征,是进行逻辑综合优化的重要工具。目前最常用的IEEE标准硬件描述语言有VHDL和Verilog HDL。 (3)逻辑综合与优化 逻辑综合功能将高层次的系统行为设计自动翻译成门级逻辑的电路描述,做到了设计与工艺的独立。优化则是对于上述综合生成的电路网表,根据布尔方程功能等效的原则,用更小、更快的综合结果替代一些复杂的逻辑电路单元,根据指定的目标库映射成新的网表。 (4)开放性和标准化 EDA系统的框架是一种软件平台结构,它为不同的EDA工具提供操作环境。框架提供与硬件平台无关的图形用户界面以及工具之间的通信、设计数据和设计流程的管理,以及各种与数据库相关的服务项目等。一个建立了符合标准的开放式框架结构EDA系统,可以接纳其他厂商的EDA工具一起进行设计工作。框架作为一套使用和配置EDA软件包的规范,可以实现各种EDA工具间的优化组合,将各种EDA工具集成在一个统一管理的环境之下,实现资源共享。 EDA框架标准化和硬件描述语言等设计数据格式的标准化可集成不同设计风格和应用的要求导致各具特色的EDA工具在同一个工作站上。集成的EDA系统不仅能够实现高层次的自动逻辑综合、版图综合和测试码生成,而且可以使各个仿真器对同一个设计进行协同仿真,进一步提高了EDA系统的工作效率和设计的正确性。(5)库(Library) 库是支持EDA工具完成各种自动设计过程的关键。EDA设计公司与半导体生产厂商紧密合作、共同开发了各种库,如逻辑模拟时的模拟库、逻辑综合时的综合库、版图综合时的版图库、测试综合时的测试库等等,这些库支持EDA工具完成各种自动设计5。 1.5.3 EDA的基本工具: EDA工具的整体概念是电子系统设计自动化。EDA的物理工具完成和解决设计中如芯片布局、印刷电路板布线、电气性能分析,设计规则检查等问题的物理工具。基于网表、布尔逻辑、传输时序等概念的逻辑工具,设计输入采用原理图编辑器或硬件描述语言进行,利用EDA系统完成逻辑综合、仿真、优化等过程,生成网表或VHDL、Verilog-HDL的结构化描述。细分有:编辑器、仿真器、检查/分析工具、优化综合工具等。(1)文字编辑器在系统级设计中用来编辑硬件系统的描述语言如VHDL和Verilog-HDL,在其他层次用来编辑电路的硬件描述语言文本,如SPICE的文本输入。(2)图形编辑器用于硬件设计的各个层次。在版图级,图形编辑器用来编辑表示硅工艺加工过程的几何图形。在高于版图层次的其他级,图形编辑器用来编辑硬件系统的方框图、原理图等。典型的原理图输入工具包括基本单元符号库(基本单元的图形符号和仿真模型)、原理图编辑器的编辑功能、产生网表的功能3个组成部分。 (3)仿真器又称模拟器,用来帮助设计者验证设计的正确性。在硬件系统设计的各个层次都要用到仿真器。在数字系统设计中,硬件系统由数字逻辑器件以及它们之间的互连来表示。仿真器的用途是确定系统的输入/输出关系,所采用的方法是把每一个数字逻辑器件映射为一个或几个过程,把整个系统映射为由进程互连构成的进程网络,这种由进程互连组成的网络就是设计的仿真模型。 (4)检查/分析工具在集成电路设计的各个层次都会用到。在版图级,采用设计规则检查工具来保证版图所表示的电路能被可靠地制造出来。在逻辑门级,检查/分析工具用来检查是否有违反扇出规则的连接关系。时序分析器用来检查电路中的最大和最小延时。(5)优化/综合工具可以将硬件的高层次描述转换为低层次描述,也可以将硬件的行为描述转换为结构描述,转换过程通常伴随着设计的某种改进。如在逻辑门级,可用逻辑最小化来对布尔表达式进行简化。在寄存器级,优化工具可用来确定控制序列和数据路径的最优组合5。 1.6 EDA 技术简介:EDA技术的发展使电子系统的设计技术和工具发生了巨大的变化。所谓EDA技术(即电子设计自动化)是指以计算机为工作平台,融合电子技术、计算机技术、智能技术等最新成果而研制成的一种技术,用来帮助电子设计人员完成繁琐的设计工作。EDA的发展经历了三个阶段:一是20世纪70年代的CAD阶段。利用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作,产生了计算机辅助设计的概念。二是20世纪80年代的CAE阶段。与CAD相比,除了图形绘制功能外,又增加了电路功能设计和结构设计,并通过电气连接网络表将两者结合在一起,实现了工程设计。CAE主要功能包括原理图的输入、逻辑仿真、电路分析、自动布局布线、PCB后分析。三是20世纪90年代的EDA阶段。20世纪90年代以来,电子信息类产品的开发出现了两个特点:复杂程度加深,产品上市时限紧迫,原有的基于门级描述的单层次设计方法不能适应设计要求,由于人们的努力出现了整个设计过程自动化的一种高层次设计方法(即系统级设计)。这种系统级的高层次设计方法不需要通过门级原理图描述电路,而是针对设计目标进行功能描述,由于摆脱了电路细节的设计,设计人员可以把精力集中于创造性的方案与概念构思上,一旦这些概念构思以高层次描述的形式输入计算机后,EDA系统就能以规则驱动的方式自动完成整个设计,这样大大缩短了产品的研制周期。另外,高层次设计只是定义系统的行为特性,不涉及实现工艺,在厂家综合库的支持下,利用综合优化工具可以将高层次描述转换为针对某种工艺优化的网表,工艺转化可轻松实现。高层次的设计步骤如下:(1)确定设计方案。按照“自顶向下”的设计方法进行系统规划。(2)设计输入。可采用VHDL代码,此种方式普遍;也为图形输入方式(原理图、状态图、波形图等)该方法直观,容易理解。(3)源代码仿真。该项主要是检验系统功能设计的正确性。(4)综合、适配。这两项完成对源代码的综合优化处理和将综合后的网表文件针对某以具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化、布局布线。(5)器件编程或配置:即设计实现。将适配器产生的器件编程文件通过编程器或下载线缆载入目标芯片FPGA或CPLD中,实现设计功能。EDA代表了当今电子设计技术的最新发展方向。第二章 出租车计价器的设计2.1 出租车计价器的要求:行程3公里内(包括3公里),且等待累计时间2分钟内(包括2分钟),起步费为8.0元;3公里外(不包括3公里)以每公里2.0元,等待累计时间2分钟外(不包括2分钟)以每分钟以2.0元计费。能显示行驶公里数、等待累计时间和最后的总费用。本计费器的显示范围为099元,计价分辨率为1元;计程器显示范围为099公里,分辨率为1公里;计时器的显示范围是分钟的显示范围是099, 辨率为1分钟。秒的显示范围是059。分辨率为1秒。2.2 系统组成框图:出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器和时间计数器从0开始计数,费用计数器从8开始计算。再根据行驶里程或停止等待的时间按以上的标准计费。若在行驶状态,则计程器开始加计数,当路程超过三公里后,计费器以每公里2元累加。若出租车停止等待状态,则计时器开始加计数,当时间超过两分钟后,计费器以每分钟2元累加。出租车到达目的地停止后,停止计费器,显示总费用。根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其本系统组成框图如下所示。其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总费用等信息。系统框图如附录 图 附-1 所示。第三章 各模块设计第三章 各模块设计本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。为了便于显示,这里的路程、时间和费用计数器均用十六进制表示。3.1分频模块:3.1.1 计数器的分频模块:计数器的分频模块具体框图: 此模块的功能是对总的时钟进行分频,分出的频率是让计数器用的,因为总的时钟是50M的。设计该模块的时候用了一个32位的计数器,当计数器计到25.000.000的时候产生时钟。在仿真的时候为了方便观察设计了一个5分频的电路。3.1.2 计数器的分频模块VerilogHDL源代码:module div(clk_50M,clk,reset);/ 端口的定义input clk_50M,reset;/ 总的时钟是50Moutput clk;/分频后输出的时钟 reg clk;reg 31:0 count;/32位的计数器always (posedge clk_50M or negedge reset)/异步复位begin if(!reset) begin clk=d0; count=32d0;endelse if(count=32d25_000000)/判断计时器记到了25000000吗? begin count=32d0;/计到25_000000计数器清零 clk=clk;/输出的时钟取反 end/end begin else count=count+1d1;/ 没计到25000000计数器加一end/end alwaysendmodule / 结束分频模块3.1.3 仿真的结果:从波形可以看出当reset为低电平的时候clk为零,当为高电平的时候clk的高电平占了clk_50M的5个周期,低电平也占了clk_50M的5个周期。3.1.4 数码管的分频模块:具体框图: 此模块的功能是对总的时钟进行分频,分出的频率是让数码管用的,因为总的时钟是50M的。设计该模块的时候用了一个32位的计数器,当计数器计到50.000的时候产生时钟。3.1.5 数码管的分频模块VerilogHDL源代码:module div1(clk_50M,clk1,reset);/ 端口的定义input clk_50M,reset;/ 总的时钟是50Moutput clk1;/分频后输出的时钟 1KHZreg clk1;reg 31:0 count;/32位的计数器always (posedge clk_50M or negedge reset)/异步复位begin if(!reset) begin clk1=d0; count=32d0;endelse if(count=32d50_000)/ 判断计时器记到了50_000吗 begin count=32d0;/计到50_000计数器清零 clk1=clk1;/输出的时钟取反 end/end begin else count=count+1d1;/ 没计到50_000计数器加一end/end alwaysendmodule / 结束分频模块3.2 计程模块:3.2.1 计程模块的框图:此模块的功能是计算出租车行驶的路程。在出租车启动并行驶的过程中(即复位/启动信号reset为1,行驶/停止信号start为1),当时钟clk是上升沿的时候,系统即对路程计数器distance的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲distance_enable。3.2.2 计程模块的VerilogHDL源代码:module distancemokuai(clk,start,reset,distance,distance_enable);/端口的定义input clk,start,reset;output 7:0 distance;/ 输出的公里reg 7:0 distance;output distance_enable;/ 控制计费的公里信号reg distance_enable;always(posedge clk or negedge reset)/异步复位begin if(!reset)/低电平复位 begin distance=8d0; end else if(start)/ start 高电平有效 begin if(distance3:0=9)/判断distance的低四位计到了9没有 begin distance3:0=4d0;/计到9清零 if(distance7:4=9) /判断distance的高四位计到了9没有 distance7:4=4d0;/计到9清零 else distance7:4= distance7:4+1d1;/ distance的高四位没有计到9的时候加一 end else distance3:0=distance3:0+1d1;/ distance的低四位没有计到9的时候加一 end/end startend/end always/*产生distance_enable信号*/always(posedge clk or negedge reset)beginif(!reset)begin distance_enable8d2)/ 大于公里三的时候 begin distance_enable=1d1;/输出distance_enable信号 endend/end alwaysendmodule/结束计程模块3.2.3 计程模块的仿真结果:从波形图可以看出在时钟的控制下,当reset为高电平且start为高电平的时候distance开始计数,当计到大于三的时候输出了distancedistance_enable为高电平。3.3计时模块:3.3.1 计时模块的框图:此模块用于计算停车等待的时间。在出租车行进中,如果车辆停止等待,计数器则在1Hz信号clk的上升沿进行加计数,每60次产生进位脉冲使分钟计数器位进行加计数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志time_enable正脉冲信号。3.3.2 计时模块的VerilogHDL源代码:module timemokuai(clk,reset,start,s,m,time_enable);/ 端口的定义input clk,reset,start;output 7:0 s;/输出的秒output 7:0 m;/输出的分output time_enable;/输出的控制计费的信号reg 7:0 s;reg 7:0 m;wire time_enable; always(posedge clk or negedge reset)/异步复位beginif(!reset)/低电平有效begin /复位s=8d0;m=8d0;endelse if(!start)/start 信号低电平有效beginif(s3:0=9)/ 秒的低四位是9 begin s3:0=4d0;/清零 if(s7:4=5) / 秒的高四位是5 begin s7:4=4d0; /清零 if(m3:0=9) / 分的低四位是9 begin m3:0=4d0; /清零 if(m7:4=9) / 分的高四位是9 m7:4=4d0; /清零 else m7:4=m7:4+1d1; / 分的高四位不是9加一endelse m3:0=m3:0+1d1; /分的低四位不是9加一endelse s7:4=s7:4+1d1; / 秒的高四位不是5加一endelse s3:08d3)&(s7:0=8d0)?1d1:1d0;/产生time_enable信号。endmodule/结束计时模块3.3.3 计时模块的仿真结果:两分钟之内(包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,time_enable为低电平。两分钟之外(不包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,当时间大于二分钟的时候,time_enable为输出高电平。3.4控制模块:3.4.1 控制模块的框图:控制模块用于为计费模块提供时钟,当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable,3.4.2 控制模块的VerilogHDL源代码:module control(start,distance_enable,time_enable,select_clk);input start,distance_enable,time_enable;output select_clk;/输出选择的时钟信号wire select_clk;/*当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable*/assign select_clk=start?distance_enable:time_enable; endmodule/结束控制模块3.4.3 控制模块的仿真结果:(1)公里计费的仿真结果如下所示:从波形图可以看出当start为高电平的时候输出的信号是distance_enable。(2)时间计费的仿真结果如下所示:从波形图可以看出当start为低电平的时候输出的信号是time_enable。3.5 计费模块:3.5.1 计费模块的框图:费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。当出租车停车时,时钟select_clk用于将费用计数器复位为起步价6.0元;当车处于行驶状态且满3公里时,select_clk信号选择distans_enable,此后路程每满1公里,费用计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。3.5.2 计费模块的VerilogHDL源代码如下所示:module feemokuai(select_clk,reset,fee,clk);input select_clk,reset,clk;output7:0 fee; /输出的费用reg 7:0 fee;always(posedge clk or negedge reset)/异步复位begin if(!reset)/低电平有效 begin fee=8d8;/起步为8元 end else if(select_clk=1d1) begin if(fee3:0=4d8)/费用的低四位是不是计到了8 begin fee3:0=4d0;/计到9清零 if(fee7:4=4d9)/ 费用的高四位是不是计到了9fee7:4=4d0; /计到9清零 else fee7:4=fee7:4+1d1;/ 费用的高四位没有计到9加1endelse fee3:0=fee3:0+4d2;/ 费用的低四位没有计到8加2end/end beginend/end alwaysendmodule /结束计费模块3.5.3 计费模块的仿真结果:3.6 数码管显示模块:3.6.1 数码管显示模块的框图:数码管有两种显示方式动态显示与静态显示,由于在本文中用到了八个数码管所以选择了动态显示,在时钟的控制下,当reset为高电平的时候把费用,公里,时间译码输出。3.6.2 数码管显示的VerilogHDL源代码:module scan_led(clk1,dig,seg,distance,s,m,fee);input clk1;input7:0 distance,fee;/输入的公里,费用。input7:0 s;/输入的秒input7:0 m; / 输入的分。output7:0 dig; / 译码结果output7:0 seg; / 数码管的选择。reg 7:0 r_dig;/ 译码结果输出寄存器reg 7:0 r_seg; /数码管的选择寄存器。reg 3:0 disp_dat;reg3:0 a;assign dig=r_dig;assign seg=r_seg;always(posedge clk1)begin a=a+1d1; /数码管的选择endalways(posedge clk1)begincase(a) 4d0: disp_dat=distance7:4;/公里的高四位用第一个数码管显示。4d1: disp_dat=distance3:0;/公里的低四位用第二个数码管显示。4d2: disp_dat=m7:4; /时间分的高四位用第三个数码管显示。4d3: disp_dat=m3:0; /时间分的低四位用第四个数码管显示4d4: disp_dat=s7:4; /时间秒的高四位用第五个数码管显示。4d5: disp_dat=s3:0; /时间秒的低四位用第六个数码管显示。4d6: disp_dat=fee7:4;/费用的高四位用第七个数码管显示。4d7: disp_dat=fee3:0; /费用的低四位用第八个数码管显示。default: disp_dat=4b1010;endcasecase(a)4d0:r_dig=8b01111111; / 选择第一个数码管4d1:r_dig=8b10111111; / 选择第二个数码管4d2:r_dig=8b11011111; / 选择第三个数码管4d3:r_dig=8b11101111; / 选择第四个数码管4d4:r_dig=8b11110111; / 选择第五个数码管4d5:r_dig=8b11111011; / 选择第六个数码管4d6:r_dig=8b11111101; / 选择第七个数码管4d7:r_dig=8b11111110; / 选择第八个数码管default:r_dig=8b11111111;endcaseend/ *译码结果*/always(disp_dat)begin case

温馨提示

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

评论

0/150

提交评论