基于某VerilogHDL设计的出租车计价器

上传人:无*** 文档编号:100544831 上传时间:2022-06-02 格式:DOC 页数:28 大小:938KB
收藏 版权申诉 举报 下载
基于某VerilogHDL设计的出租车计价器_第1页
第1页 / 共28页
基于某VerilogHDL设计的出租车计价器_第2页
第2页 / 共28页
基于某VerilogHDL设计的出租车计价器_第3页
第3页 / 共28页
资源描述:

《基于某VerilogHDL设计的出租车计价器》由会员分享,可在线阅读,更多相关《基于某VerilogHDL设计的出租车计价器(28页珍藏版)》请在装配图网上搜索。

1、word西华大学课程设计说明书题 目: 出租车计价器专 业: 信 息 工 程年 级: 2009级学 生: 潘 帅 学 号: 33200908020*指导教师: 林竞力 完成日期: 2012 年 6 月 6 日24 / 28摘要:本文介绍了一种采用可编程逻辑器件(FPGA/CPLD)进行出租车计费器的设计思想以及实现方法。本设计实现了出租车计费器所需的一些基本功能,计费金额包括起步价、里程计费、等待计时计费等。该设计采用模块化设计,在QuartusII9.0软件平台下,采用Verilog HDL 硬件描述语言描述和模拟仿真了分频模块、计程模块、计费模块、计时模块,译码以及动态扫描显示模块,完成了

2、出租车计费器仿真设计和硬件电路的实现。关键词:FPGA,出租车计费器,Quartus,Verilog HDLAbstract:This article describes the design ideas and methods of the taximeter,through the programmable logic device (FPGA/CPLD).The design of a taximeter to achieve the required basic functions,The total of billingincluded the starting price, met

3、ered, and wait for time billing.Through the Quartus II 9.0 Software Platform,Using Verilog HDL language pleted the description and simulation of frequency module, the meter module, Billing module, timing modules, decoding, dynamic scanning display module.ITIt has pleted the taxi meter simulation and

4、 the hardware circuit.Keywords:FPGA, Taximeter, Quartus, Verilog HDL目录1.前言12.总体方案设计22.1 设计要求22.2 方案论证与选择22.3 设计思想及原理33.单元模块设计53.1 分频模块53.1.1计数器分频模块53.1.2 计数器分频模块仿真结果53.1.3 数码管分频模块63.2 计程模块63.2.1 计程模块电路63.2.2 计程模块仿真结果73.3 计时模块73.3.1 计时模块电路73.3.2 计时模块的仿真结果73.4 控制模块83.4.1 控制模块电路83.4.2 计时模块的仿真结果93.5 计费模

5、块103.5.1 控制模块电路103.5.2 计费模块的仿真结果102.6 数码管显示模块114.整体顶层模块设计124.1 整体顶层模块电路125.系统功能仿真及调试135.1 系统仿真及调试136.总结与体会16致谢17参考文献17附录A:单元模块Verilog HDL源代码18A.1 计数器的分频模块VerilogHDL源代码18A.2数码管的分频模块VerilogHDL源代码18A.3 计程模块VerilogHDL源代码19A.4 计时模块VerilogHDL源代码20A.5 控制模块VerilogHDL源代码21A.6 计费模块VerilogHDL源代码21A.7 数码管显示模块Ve

6、rilogHDL源代码21A.8整体顶层模块VerilogHDL源代码23附录B:整体顶层电路图241.前言随着出租车行业的发展,对出租车计费器的要求也越来越高。最近几年出租车行业发展迅速,在全国有几千万家出租车公司。因此出租车计费器市场是庞大的。而出租车计费器成为不可缺少的一部分。出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。国出租车计价器已经经历了4 个阶段的发展。从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器,以及FPGA计价器.出租车

7、计价器计费是否准确,运数据的管理是否方便都是人们最关注的。该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。信息社会的现代电子产品,性能越来越高,复杂度越来越大,更新步伐也越来越快。实现这种进步的主要原因就是微电子技术和电子技术的发展。而电子技术的发展后者的核心就是电子设计自动化技术。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。没有

8、EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。本设计采用Verilog HDL语言来设计实现出租车计费系统,具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。源程序经ALTERA的Quartus II 9.0软件调试优化,通过下载到特定芯片后,可应用于实际的出租车计费系统中。本次课程设计巩固和运用了所学课程,通过理论联系实际,提高了分析、解决技术实际问题的独立工作能力,通过对一个出租车计费器的设计,进一步熟悉了数字电路系统设计、制作与调试的方法和步骤。2

9、.总体方案设计2.1 设计要求该出租车计价器实现功能:1、行程4公里,且等待累计时间2分钟,起步费为8.0元。2、行程4公里外,以每公里1.0元,等待累计时间2分钟外,以每分钟以1.0元计费。3、能显示行驶公里数、等待累计时间和最后的总费用。4、能通过修改程序来对计费要现改变。用Verilog HDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路,各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。2.2 方案论证与选择方案一:采用数字电路控制,其原理图如图1-1所示。采用传感器件,输出脉冲信号,经过放大整形最为移位寄存器的脉冲,实现计价,但是考虑

10、到这中电路性能不够稳定,故障率高,如要做到很精确多功能则其规模较大,难调试。而且电路不实用。电源电路及保护电路里程传感器单价显示金额显示移位寄存器电路图2-1 数字电路方案方案二:采用单片机控制,通过单片机作为主控器,利用1602字符液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要通过软硬结合可以很容易实现要求,其灵活性也还不错,成本也不高。方案原理图如下图所示:图2-2 单片机控制方案方案三:采用EDA技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块 计量模块、译码和动态扫描显示模块,其系统框图如图1-3所示:时钟信号

11、计时脉冲计程脉冲复位信号控制器分频器计费计程计时译码及显示图2-3 PFGA控制方案方案总结:通过各个方案的比较,首先数字电路控制不实用,不重点考虑,单片机方案虽有较大的活动空间,能实现所要求的功能而且能在很大的程度上扩展功能,虽然还可以方便的对系统进行升级,但考虑到单片机方案软件设计调试较为繁琐,最大限制还是在与本课程设计是利用EDA技术实现,另一方面采用可编程逻辑器件设计,外围电路简单,模块话设计方便原理清晰,灵活性强,并且完成和扩展附加功能性强。综上,本设计采用方案三。2.3 设计思想及原理出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器和时间计数器从0开始

12、计数,费用计数器从8开始计算。再根据行驶里程或停止等待的时间按以上的标准计费。若在行驶状态,则计程器开始加计数,当路程超过四公里后,计费器以每公里1元累加。若出租车停止等待状态,则计时器开始加计数,当时间超过两分钟后,计费器以每分钟1元累加。出租车到达目的地停止后,停止计费器,显示总费用。根据课程设计要求计价器可根据车轮转数计算路程,车轮每转一圈送一个脉冲波,假设每转一圈为2米,车轮每转一圈送一个脉冲波( 可用传感器检测送出脉冲),本设计为了好模拟仿真假设的是车轮转动100圈才产生一个脉冲,即是一个脉冲是代表200米,则经过5分频器后是每1Km送一个脉冲到里程计算模块,这样方便在软件里面仿真观

13、察,若要下载到实物应用中去,通过实际车轮周长自己设置不同的分频电路来达到产生任意精度的计程距离模块。其主要原理框图如图1-3所示。而当车停止的时候通过分频模块产生秒脉冲,通过计时要求来产生计费,本设计重点就在计费控制模式模块和计费模块这两大模块的设计,则根据出租车计费器的工作过程,其主要原理框图如图1-3所示。本系统采用分层次、分模块的方式设计,其本系统组成框图如下所示。其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总费用等信息。3.单元模块设计本系统采用层次化、模块化的设计方法,

14、设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。为了便于在数码管里显示,这里的路程、时间和费用计数器均用十六进制表示。3.1 分频模块将时钟信号进行分频,分出的频率供后面的计程模块和计时模块用,以及后面的数码显示扫描模块都会用到。3.1.1 计数器分频模块此模块的功能是对总的时钟进行分频,分出的频率是让计数器用的,因为总的时钟是50M的。设计该模块的时候用了一个32位的计数器,当计数器计到25_000000的时候产生时钟。在仿真的时候为了快速的方便观察,设计了一个5分频的电路。在此时假设车轮每转一圈为2米,则转动100圈送一个脉冲,即是200米,则在

15、经5分频后,每1Km送一个脉冲到里程计算模块。同理,若知道车轮直径,即可算出分频比来设置合理的分频电路,当下载到实物时还是用的是2HZ的时钟图3-1 计数器的分频模块3.1.2 计数器分频模块仿真结果图3-2 计数器的分频模块功能仿真从波形可以看出当reset为低电平的时候clk为零,当reset为高电平的时候clk的高电平占了clk_50M的5个周期,低电平也占了clk_50M的5个周期。3.1.3 数码管分频模块此模块的功能是对总的时钟进行分频,分出的频率是让数码管用的,当计数器计到50_000的时候产生时钟。此模块在整体仿真时,没有用到数码管显示,在此不在赘述以及仿真波形,在实物下载时必

16、不可少,其模块如下图:图3-3 数码块分频模块3.2 计程模块3.2.1 计程模块电路此模块的功能是计算出租车行驶的路程。在出租车启动并行驶的过程中(即复位/启动信号reset为1,行驶/停止信号start为1),当时钟clk是上升沿的时候,系统即对路程计数器distance的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲distance_enable。其模块如下:图3-4 计程模块3.2.2 计程模块仿真结果图3-5 计程模块功能仿真从波形图可以看出在时钟的控制下,当reset为高电平且start为高电平的时候distance开始计数,当计到大于三的时候输出了distance

17、_enable为高电平。准备对第4公里以后的脉冲进行加计费。3.3 计时模块3.3.1 计时模块电路此模块用于计算停车等待的时间。图中s代表秒计时,m代表分钟数计时。在出租车行进中,如果车辆停止等待,计数器则在1Hz信号clk的上升沿进行加计数,每60次产生进位脉冲使分钟计数器位进行加计数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志time_enable正脉冲信号。其模块如下图所示:图3-6 计时模块3.3.2 计时模块的仿真结果1.两分钟之(包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,time_enable为

18、低电平。图3-7 计时模块功能仿真(2分钟)2.两分钟之外(不包括两分钟)的仿真结果如下所示:图3-8 计时模块功能仿真(2分钟外)从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,当时间大于二分钟的时候,time_enable为输出高电平,为超过2分钟后以每增加一分钟对计费进行加计数。3.4 控制模块3.4.1 控制模块电路控制模块用于为计费模块提供时钟,当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable。这样控制模块便控制着其计费模式。模块如下

19、图所示:图3-9控制模块3.4.2 计时模块的仿真结果1公里计费的仿真结果如下所示:图3-10 控制模仿真图(公里计费)从波形图可以看出当start为高电平的时候输出的信号是distance_enable。此时控制模块选出的是distance_enable,即选出距离使能脉冲计费,则实现了按公里计费。2时间计费的仿真结果如下所示:图3-11 控制模仿真图(按时计费)从波形图可以看出当start为低电平的时候输出的信号是time_enable。即选择了按等待时间脉冲计费。仿真上的公里脉冲和时间脉冲是为了仿真而简单的设置的波形,并非是前面信号组合检测而成,在后面整体组合电路中为进行模块的组合。这里

20、为了便于功能仿真区别,没有设置过多的脉冲,以影响分辨控制模块所选择的计费模式。3.5 计费模块3.5.1 控制模块电路费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。当出租车停车时,时钟reset用于将费用计数器复位为起步价6.0元;当车处于行驶状态时,select_clk信号选择distans_enable,若满4公里后路程每满1公里,费用计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。图3-12 计费模块3.5.2 计费模块的仿真结果图3-13 计费模块仿真从波形图可以看出re

21、set用于将费用计数器复位为起步价8.0元;由于本仿真select_clk信号并非是系统选择出来的公里脉冲和计时脉冲,通过认为设定,不影响其观察功能效果。3.6 数码管显示模块图3-14 数码管显示模块数码管有两种显示方式动态显示与静态显示,由于在本文中用到了八个数码管所以选择了动态显示,在时钟的控制下,当reset为高电平的时候把费用,公里,时间译码输出。这里没有数码管显示仿真效果不明显,即不给予仿真。以上单元模块设计完毕,通过每个单元模块代码的设计以及仿真验证每个模块的真确性,为确保后面整体模块电路的正确性奠定了基础。4.整体顶层模块设计4.1 整体顶层模块电路各模块设计仿真实现后,可分别

22、创建成元件符号。顶层就是将各分模块用Verilog HDL语言或者是图形方法连接起来,便可实现系统电路。其Verilog HDL源代码详见其附录。其生成的顶层原理图如下所示:图4-1 整体顶层电路原理图5.系统功能仿真及调试本设计采用Quartus II软件进行仿真设计,Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。5.1 系统仿真及调试各个单

23、元模块完成后,即可将分模块和顶层模块进行仿真测试,同时可根据设计要求加入测试输入条件。仿真后得到的相应输出结果与预先的结果想比较,若不相符,则应修改设计,直到相符为止。为了仿真得到明显的效果,最好能能下载到带数码管的试验想上进行直接的数字观察。由于条件有限,为了能使仿真效果明显,采用了不带译码显示的波形仿真,其电路原理图如下:图5-1 系统仿真调试电路首先,对以下输入输出端作以下解释和说明,如表4-1:表5-1 测试端口说明输入输出端口说明端口类型功能定义Clk_50MInput全局时钟。在时钟上升沿,计算费用。resetInput整体复位,在reset=0时,等待计时为0startInput

24、选择计费模式Start=1,计程计费Start=0,计时计费m7:0Output等待时间的输入(分)s7:0Output等待计时的输入(秒)distance7:0Output所行路程的输入fee7:0Output总费用输出功能仿真结果验证如下如下所示:a为行驶中未停时的系统电路仿真结果:图5-2 系统仿真调试电路(a)b.为行驶中停止时(在两分钟之)的系统电路仿真结果:图5-3 系统仿真调试电路(b)c.为行驶中停止时(在两分钟之外)的系统电路仿真结果:图5-4 系统仿真调试电路(c)从(a)可以看出当reset为1时,费用计数器为8元,系统启动,start=1表示出租车行驶, distanc

25、e_enable每产生一个脉冲,路程计数器加1;路程4公里,费用保持8不变,超过4公里,费用计数器进行加计数,每增加1公里费用加1元,此时等待时间计数器不变。而根据(b),(c)的仿真波形可知,当reset为1时,系统启动,start=0表示出租车处于停止等待状态,此时等待时间计数器计数,在2分钟等待时间,费用计数器不变;等待时间超过2分钟后,每增加1分钟,费用计数器增加1元,此时路程计数器保持不变。从以上仿真可看出该出租车计价器整体功能实现都能完成,出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车起步价格,暂停,停止等功能各种计费,并能够通过LCD显示车费数目。本款出租车计价器

26、包括总价输出、显示路程,显示其等待时间等功能。另外,如果再任意输入该出租车计价器的计费标准,那么,它的适用围可能就更广泛了。(个人认为可调的话,会引起驾驶员改价作弊的问题,本设计没有外围可调电路,只能根据程序修改,因而防作弊。)6.总结与体会通过学习了数字数字系统设计和Verilog HDL语言,对EDA技术有了一些了解,但那厚厚的一本书讲的都是理论的东西。通过这本次课程设计,我才把学到的东西与实践相结合。从中对所学的知识有了更进一步的理解。刚开始拿到这题目的时候感觉还是有难度,但着手设计时,慢慢查询资料后感觉不是很难,但在设计时又现了许多细节上的问题。对Quartus II 9.0操作流程还

27、不到位,通过自己网上看Quartus软件基操作视频,首先把Quartus的功能和各操作用途功能详细的了解了一遍,这使我大添信心能把设计做出来,相信只有细心、耐性才能把设计搞好,在这次的出租车计价器设计中,对Verilog模块的基本结构和基本语法更为熟悉。在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路,要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为交流提供了方便,为以后编程打下基础。为期两周的EDA课程设计已经结束,从挑选课设题目,查阅资料,到研究出总体设计,详细设计,再到最后的编程上机调试,修改程序,完

28、善程序,收获颇多。锻炼了自己独立发现问题、分析问题和通过查看相关资料来解决问题的能力。使自己扩大了知识面,提高了知识水平,借助仿真软件,不仅可以把课堂中所学到的知识,直接加以运用,而且还可以把各个分离的知识组合为一个整体,真正做到理论联系实际的重要性。使自己在专业知识和动手能力上有了很大的提高。另外通过本次设计,使我认识到自己对Verilog HDL应用编程能力有很大的欠缺,需要在以后的学习中进一步提高。学校给我们安排课程设计,大大地加深了我们对理论知识的理解,同时有意识的培养了我们的创新思想。我想这类似的课程设计是为我们提供了良好的实践平台。致谢由于本次设计是第一次做关于EDA课程设计,不像

29、单片机那样顺手,感谢老师的指导,感谢老师对本次论文的认真检查审阅。由于时间有限和经验还尚欠缺,不足之处还望老师予以批评指正。另外,我还要感谢学校能安排这次课程设计,为我们学习相关专业提供了良好的实践平台。参考文献1 王金明.数字系统设计与Verilog HDL M.电子工业,20112 夏宇闻.Verilog数字系统设计教程 M:航天航空大学,20083 华成英.电子技术M.中央广播电视大学,20064 鹏,景.数字电子技术基础与设计.:理工大学,2004.4.5 王长宏.VHDL设计实例及其仿真与综合. :航天航空大学,2001附录A:单元模块VerilogHDL源代码A.1 计数器的分频模

30、块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=3d100)/判断计时器记到了100吗? begin count=32d0;/计到100计数器清零 clk=clk;/输出的

31、时钟取反 end/end begin else count=count+1d1;/ 没计到100计数器加一end/end alwaysendmodule / 结束分频模块A.2数码管的分频模块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) b

32、egin clk1=d0; count=32d0;endelse if(count=2d50)/ 判断计时器记到了50吗 begin count=32d0;/计到50计数器清零 clk1=clk1;/输出的时钟取反 end/end begin else count=count+1d1;/ 没计到50计数器加一end/end alwaysendmodule / 结束分频模块A.3 计程模块VerilogHDL源代码module distancemokuai(clk,start,reset,distance,distance_enable);/端口的定义input clk,start,reset;

33、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

34、: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)/

35、大于公里三的时候 begin distance_enable=1d1;/输出distance_enable信号 endend/end alwaysendmodule/结束计程模块A.4 计时模块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

36、(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

37、加一endelse m3:0=m3:0+1d1; /分的低四位不是9加一endelse s7:4=s7:4+1d1; / 秒的高四位不是5加一endelse s3:08d2)&(s7:0=8d0)?1d1:1d0;/产生time_enable信号。endmodule/结束计时模块A.5 控制模块VerilogHDL源代码module control(start,distance_enable,time_enable,select_clk);input start,distance_enable,time_enable;output select_clk;/输出选择的时钟信号wire selec

38、t_clk;/*当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable*/assign select_clk=start?distance_enable:time_enable; endmodule/结束控制模块A.6 计费模块VerilogHDL源代码module feemokuai(select_clk,reset,fee,clk);input select_clk,reset,clk;output7:0 fee; /输出的费用reg 7:0 fee;always(posedge c

39、lk or negedge reset)/异步复位begin if(!reset) /低电平有效 begin fee=8d8; /起步为八元 end else if(select_clk=1d1) begin if(fee3:0=4d9) /费用的低四位是不是计到了9 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+1d1;/ 费用的低四位没有计到9加1end/end begine

40、nd/end alwaysendmodule /结束计费模块A.7 数码管显示模块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

41、;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; /时间秒的高

42、四位用第五个数码管显示。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_

43、dig=8b11110111; / 选择第五个数码管4d5:r_dig=8b11111011; / 选择第六个数码管4d6:r_dig=8b11111101; / 选择第七个数码管4d7:r_dig=8b11111110; / 选择第八个数码管default:r_dig=8b11111111;endcaseend/ *译码结果*/always(disp_dat)begin case(disp_dat) 4h0: r_seg=8hc0;/ 显示0 4h1: r_seg=8hf9;/ 显示1 4h2: r_seg=8ha4;/ 显示2 4h3: r_seg=8hb0;/ 显示3 4h4: r_se

44、g=8h99;/ 显示4 4h5: r_seg=8h92;/ 显示5 4h6: r_seg=8h82;/ 显示6 4h7: r_seg=8hf8;/ 显示7 4h8: r_seg=8h80;/ 显示8 4h9: r_seg=8h90;/ 显示9 default: r_seg=8hbf;endcaseendendmodule/结束译码模块A.8整体顶层模块VerilogHDL源代码module taximeter(clk_50M,reset,start,seg,dig);/端口的定义input clk_50M,reset,start;/总的时钟信号,复位信号,开始信号output7:0 seg,

45、dig;/数码管的输出wire 7:0distance;/公里wire 7:0 s;/秒wire 7:0 m;/分wire7:0 fee;/费用wire clk; /计数时钟wire distance_enable;/公里控制费用的信号wire time_enable; /时间控制费用的信号wire select_clk; /控制信号wire clk1; /数码管显示的时钟/*模块的调用*/div u0(.clk_50M(clk_50M),.clk(clk),.reset(reset);/调用计数分频模块div1 u1(.clk_50M(clk_50M),.clk1(clk1),.reset(

46、reset);/调用数码管显示分频模块distancemokuai u2(.clk(clk),.start(start),.reset(reset),.distance(distance),.distance_enable(distance_enable); /调用计程模块timemokuai u4(.clk(clk),.reset(reset),.start(start),.s(s),.m(m),.time_enable(time_enable); /调用计时模块control u3(.start(start),.distance_enable(distance_enable),.time_enable(time_enable),.select_clk(select_clk); /调用控制模块feemokuai u5(.reset(reset),.fee(fee),.select_clk(select_clk),.clk(clk); /调用计费模块scan_led U6(.clk1(clk1),.dig(dig),.seg(seg),.distance(distance),.s(s),.m(m),.fee(fee);/调用数码管显示模块endmodule/结束顶层模块附录B:整体顶层电路图

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

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

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


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