版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河南科技学院新科学院2014届本科毕业论文(设计)基于FPGA的出租车计费器设计 基于FPGA的出租车计费器设计摘 要本文介绍了一种采用可编程逻辑器件FPGA进行出租车计费器的设计思想以及实现方法, 主要阐述如何使用新兴的EDA 器件取代传统的电子设计方法,本文介绍了一个以Altera公司可编程逻辑芯片Cyclone系列的EP1K30QC208的FPGA芯片为控制核心、附加一定外围电路的出租车计费系统,不仅实现了出租车计价器所需的一些基本功能,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中.该设计采用模块化设计,在Quartus II软件平台下模拟仿真了各个模块
2、的功能,完成了出租车计费器仿真设计和硬件电路的实现。关键词:出租车计费器,Verilog HDL,FPGA,QuartusThe design of taxi meter based on FPGAAbstractIn this paper, a programmable logic device FPGA is adopted to improve the taxi meter design idea and implementation method, and mainly elaborates how to use the new device to replace the tradit
3、ional EDA electronic design method. This paper introduces a Cyclone to Altera corporation programmable logic chip series EP1K30C208 of FPGA chip as the control core of additional peripheral circuit of the taxi billing system, it not only achieves some of the basic functions of the taxi meter, but al
4、so considering the taxi industry particularity, and pays more attention to add some new ideas to the design. This design uses the modular design and simulation in the Quartus II software platform for the function of each module, completed the taxi fare register simulation and the realization of the
5、hardware circuit design. Keywords: Taxi meter; Verilog HDL; FPGA; Quartus目 录绪论11 设计工具的简介11.1 EDA简介11.2 FPGA简介11.3 Verilog HDL简介22 总体设计方案42.1 设计要求42.2 方案论证与选择42.3 设计思想及原理52.4 总体框架设计62.5 霍尔传感器A44E63 各个单元模块设计73.1 分频模块73.1.1 计数器分频模块73.1.2 计数器分频模块仿真结果73.2 计程模块73.2.1 计程模块电路83.2.2 计程模块仿真结果83.3 控制模块83.3.1 控
6、制模块电路83.3.2 控制模块的仿真结果83.4 计时模块93.4.1 计时模块电路93.4.2 计时模块的仿真结果93.5 计费模块103.5.1 计费模块电路103.5.2 计费模块的仿真结果113.6 数码管显示模块114 整体顶层模块设计115 系统功能仿真及调试126 结论14参考文献17附录19附录I 单元模块Verilog HDL源代码19附录 整体顶层电路图28致谢29绪论随着出租车行业的发展,对出租车计费器的要求也越来越高。最近几年出租车行业发展迅速,在全国有几千万家出租车公司。因此出租车计费器市场是庞大的。而出租车计费器成为不可缺少的一部分。出租车计价器是出租车营运收费的
7、专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。出租车计价器计费是否准确,运行数据的管理是否方便都是人们最关注的。该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息。EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。本设计采用Verilog HDL语言来设计实现出租车计费系统,具有良好的电路行为描述和系统描述的能力,并在
8、语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。源程序经ALTERA的Quartus II软件调试优化,通过下载到特定芯片后,可应用于实际的出租车计费系统中。本次课程设计巩固和运用了所学课程,通过理论联系实际,提高了分析、解决技术实际问题的独立工作能力,通过对一个出租车计费器的设计,进一步熟悉了数字电路系统设计、制作与调试的方法和步骤。1 设计工具的简介1.1 EDA简介EDA技术作为现代电子设计技术的核心,它依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动的完成逻辑化简、逻辑分割、逻辑综合、结构综合,以及逻辑优化和仿
9、真测试等项功能,直至实现既定性能的电子线路系统功能。EDA工具在EDA技术应用中占据极其重要的位置,EDA的核心是利用计算机实现电子设计的全自动化,因此,基于计算机环境的EDA软件的支持是必不可少的。EDA工具大致可以分为如下五个模块:设计输入编辑器,HDL综合器,仿真器,适配器,下载器。当然这些分类不是绝对的,如物理综合器就是EDA的辅助工具。一般的,利用EDA技术进行电子系统设计的最后目标是完成专用集成电路或印制电路板的设计和实现。1.2 FPGA简介FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器
10、件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数量有限的缺点。 FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有: (1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 (2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
11、 (3)FPGA内部有丰富的触发器和I/O引脚。 (4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。 (5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器
12、对其编程。本论文是基于EP1K30QC208的FPGA设计,结构框图如图1-1所示,包括电源部分、按键和LED、下载配置部分、复位部分、外部时钟、滤波电容、用户扩展接口、51单片机接口、FPGA芯片,共九个部分。1.3 Verilog HDL简介硬件描述语言HDL是硬件设计人员与电子设计自动化(EDA)工具之间的桥梁。Verilog HDL 作为一种常用的硬件描述语言,有着其固有的特性与鲜明的优势。Verilog 语言在数字逻辑电路设计方法中有两种形式:由上而下(Top-down);由下而上(Bottom-up)。在由上而下的方法中,必须先定义顶层的模块,再接着往下定义顶层所需的子模块,直到最
13、底层无法细分子模块为止。相反地,在由下而上的设计方法中,先设计一些常用的小模块电路,接着由这些小模块组成较大宏模块,最后完成顶层模块。在本设计中就采用自下而上的设计方法。Verilog语言中,主要设计结构为模块(module)。一个模块包含模块名称、输入/输出端口定义、完成此模块结构的功能描述、底层模块的实例引用组件及系统任务与函数。Verilog HDL的基本语言要素主要包括标识符、程序注释、书写格式、系统任务和系统函数等。其中内置的系统函数和任务,在使用的时候可以方便的调用。Verilog HDL的数据类型主要有两大类:线网类型和寄存器类型。表达式由操作数和操作符两部分组成。扩展接口MCU
14、接口滤波电容 LEDFPGA复位外部时钟按键电源用户接口JTAG图1-1 FPGA硬件结构图按键和LED:板上提供4个拨码按键和4个LED,分别接到FPGA的8个IO引脚上,按键和LED可以用外当成最简单的外设,用来控制这些外设。对于用该板作开发的用户来说,可以把按键当成键盘控制,而把LED当成提示来用。外部时钟:该板上接一个外部晶振,晶振的频率自己可以任选,我们提供的是10M的晶振,用来做全局时钟。当然用户要是想用其他的全局时钟,就必须要把51扩展部分的两个全局时钟连接其他的时钟源。滤波电容:滤波电容用来对FPGA电源滤波。复位:开发板上有两个复位按键,一个叫做硬件复位,按下此键,所有FPG
15、A的代码重新从EPCS1里面读到FPGA,程序从新开始运行,该引脚接到FPGA的nCONFIG引脚,该引脚为低电平时代码重新开始配置。另外一个复位按键连接到FPGA的另外一个全局时钟上,用来表示在设计的过程中的reset引脚。复位电路如图1-2所示。用户扩展接口:用户扩展接口一共有三组:分别是20x2、10x2、10x2的三组,用户根据自己的需要扩展外部电路。用这块板子作进一步的开发,一定要有这些接口。比如:用该板子作逻辑分析仪或者波形发生器等,像被分析信号,DA信号等都要从该接口输入或者输出。如果需要和51以外的单片机接口或者扩展也要通过这个端口。图1-2 复位电路原理图FPGA:一共144
16、个引脚就是和以上8个部分连接。这块板子既可以单独使用,也可以配合51的板子一起使用。单独使用时,通过用户接口和其他的电路连接,不同电路之间通信等。如果全局时钟不够,需要将预留给51的全局时钟资源拿来用,和51配合使用的时候,51和FPGA之间是总线的接口,FPGA相当于是51的一个存储器映射外设,操作的时候注意读写,另外不使用的时候要把数据线变为三态。2 总体设计方案2.1 设计要求该出租车计价器实现功能:1、行程<4公里,出租车的费用为起步价。2、起步价可通过按键来设定,按键一按下时起步价加1,按键二按下时起步价减1。3、行程4公里外,按每公里1元在起步价的基础上增加。 4、能显示行驶
17、公里数、等待累计时间和最后的总费用。5、能通过修改程序来对计费要求实现改变。用Verilog HDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路,各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。2.2 方案论证与选择方案一:采用单片机控制,通过单片机作为主控器,利用1602液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案一的系统流程图,本方案主要通过软硬结合可以很容易实现要求,其灵活性也还不错,成本也不高。方案原理图如图2-1所示。电源电路传感电路按键电路AT89S52LED灯1062液晶显示图2-1 单片机控制方
18、案分频器方案二:采用EDA技术,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块,计量模块,译码和动态扫描显示模块,其系统框图如图2-2所示: 译 码 显 示时钟信号计费计费/复位 控 制 器计程计程传感器等待信号计时按键图2-2 FPGA控制方案方案总结:通过这两个方案的比较,首先单片机方案虽有较大的活动空间,能实现所要求的功能而且能在很大的程度上扩展功能,还可以方便的对系统进行升级,但考虑到单片机方案软件设计调试较为繁琐,最大限制还是在于本课程设计是利用EDA技术实现,另一方面采用可编程逻辑器件设计,外围电路简单,模块设计方便原理清晰,灵活性强,并且完成和扩展附加功能性强。综
19、上,本设计采用方案二。2.3 设计思想及原理出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器和时间计数器从0开始计数,费用计数器从8开始计算。再根据行驶里程或停止等待的时间按以上的标准计费。若在行驶状态,则计程器开始加计数,当路程超过4公里后,计费器以每公里1元累加。若出租车停止行驶,处于等待状态,则计时器开始加计数,当时间超过两分钟后,计费器以每分钟1元累加。出租车到达目的地停止后,停止计费,显示总费用。本课程设计中计价器可根据车轮转数计算路程,车轮每转一圈送一个脉冲,可用传感器检测送出脉冲,不同型号的车轮,其所对应的直径不同,每行驶100m对应的圈数也不同,车
20、轮直径与每公里转过的圈数对照表由表2.1给出。本设计中选用直径是50cm的车轮,计算出车轮转一圈是大约2m。本系统采用分层次、分模块的方式设计,其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总费用信息。表2.1 车轮直径规格与每km转的圈数对应表车轮直径50cm54cm56cm58cm圈数/km6406105805502.4 总体框架设计框架原理图如图2-2所示,它由外部输入模块、控制模块和显示模块三部分组成。控制模块是整个系统的核心,它由分频模块、控制模块、计量模块和译码显示模块
21、构成。(1) 分频模块:分频模块是对系统时钟频率进行分频,分别得到2HZ、1KHz和1HZ;(2) 控制模块:计价器控制模块主要完成对计价器状态的控制;(3) 计量模块:计量模块完成计价、计时和计程功能;(4) 译码显示模块:译码显示模块完成计价、计时和计程数据显示。2.5 霍尔传感器A44E图2-3 A44E引脚霍尔传感器A44E芯片的引脚接线见图2-3所示。典型应用于无触点开关、汽车点火器、刹车电路、位置转速检测与控制、安全报警装置和纺织控制系统。霍尔传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,输出通常是集电极开路门输出,工作电压范围宽,使用非常方便。引脚1是电源V
22、CC,引脚2是地GND,引脚3是输出OUT。霍尔器件的工作电压不得超过规定的VCC,大部分霍尔开关均为OC输出。因此,输出应接负载电阻,其数值值取决于负载电流的大小,不得超负载使用。3 各个单元模块设计3.1 分频模块将时钟信号进行分频,分出的频率供后面的计程模块和计时模块用,以及后面的数码显示扫描模块都会用到。3.1.1 计数器分频模块此模块的功能是对总的时钟进行分频,分出的频率是让计数器用的,因为FPGA板上的晶振是50M的,首先要做的就是分频了,所以在设计该模块的时候用了一个32位的计数器,当计数器计到25_000000的时候产生时钟。在仿真的时候为了快速的方便观察,设计了一个5分频的电
23、路。在此时车轮每转一圈大约为2米,则转动100圈送一个脉冲,即是200米,则在经5分频后,每1km送一个脉冲到里程计算模块。图3-1 计数器的分频模块3.1.2 计数器分频模块仿真结果从波形可以看出当reset为低电平的时候clk为零,当reset为高电平的时候clk的高电平占了clk_50M的5个周期,低电平也占了clk_50M的5个周期。图3-2 计数器分频模块仿真3.2 计程模块3.2.1 计程模块电路此模块的功能是计算出租车行驶的路程。在出租车启动并行驶的过程中(即复位/启动信号reset为1,行驶/停止信号start为1),当时钟clk是上升沿的时候,系统即对路程计数器distanc
24、e的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲distance_enable。其模块如图3-3。图3-3 计程模块3.2.2 计程模块仿真结果从波形图3-4可以看出在时钟的控制下,当reset为高电平且start为高电平的时候distance开始计数,当计到大于三的时候输出了distance_enable为高电平。准备对第4公里以后的脉冲进行加计费。图3-4 计程模块功能仿真3.3 控制模块3.3.1 控制模块电路控制模块用于为计费模块提供时钟,当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的
25、时钟信号为time_enable。这样控制模块便控制着其计费模式。模块如图3-5所示。3.3.2 控制模块的仿真结果(1) 公里计费的仿真结果如3-6所示。从波形图可以看出当start为高电平的时候输出的信号是distance_enable。此时控制模块选出的是distance_enable,即选出距离使能脉冲计费,则实现了按公里计费。图3-5 控制模块图3-6 控制模仿真(公里计费)(2) 时间计费的仿真结果如3-7所示。图3-7 控制模仿真(按时计费)从波形图可以看出当start为低电平的时候输出的信号是time_enable。即选择了按等待时间脉冲计费。仿真上的公里脉冲和时间脉冲是为了仿
26、真而简单的设置的波形,并非是前面信号组合检测而成,在后面整体组合电路中为进行模块的组合。这里为了便于功能仿真区别,没有设置过多的脉冲,以影响分辨控制模块所选择的计费模式。3.4 计时模块3.4.1 计时模块电路此模块用于计算停车等待的时间。图中s代表秒计时,m代表分钟数计时。在出租车行进中,如果车辆停止等待,计数器则在1Hz信号clk的上升沿进行加计数,每60次产生进位脉冲使分钟计数器位进行加计数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志time_enable正脉冲信号。其模块如图3-8所示。3.4.2 计时模块的仿真结果(1) 两分钟之内(包括两分钟)的仿真结果如下所示:从波形图
27、可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,time_enable为低电平。图3-8 计时模块图3-9 计时模块功能仿真(2分钟内)(2) 两分钟之外(不包括两分钟)的仿真结果如下所示:从波形图3-10可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,当时间大于两分钟的时候,time_enable为输出高电平,为超过2分钟后以每增加一分钟对计费进行加计数。图3-10 计时模块功能仿真(2分钟外)3.5 计费模块3.5.1 计费模块电路费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。当出租车停车时,时钟reset用于将
28、费用计数器复位为起步价8.0元;当车处于行驶状态时,select_clk信号选择distans_enable,若满4公里后路程每满1公里,费用计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。图3-11 计费模块3.5.2 计费模块的仿真结果图3-12 计费模块仿真从波形图可以看出reset用于将费用计数器复位为起步价8.0元;由于本仿真select_clk信号并非是系统选择出来的公里脉冲和计时脉冲,通常认为设定,不影响其观察功能效果。3.6 数码管显示模块图3-13 数码管显示模块数码管有两种显示
29、方式动态显示与静态显示,由于在本文中用到了八个数码管所以选择了动态显示,在时钟的控制下,当reset为高电平的时候把费用,公里,时间译码输出。这里没有数码管显示仿真效果不明显,即不给予仿真。以上单元模块设计完毕,通过每个单元模块代码的设计以及仿真验证每个模块的真确性,为确保后面整体模块电路的正确性奠定了基础。4 整体顶层模块设计各模块设计仿真实现后,可分别创建成元件符号。顶层就是将各分模块用Verilog HDL语言或者是图形方法连接起来,便可实现系统电路。其Verilog HDL源代码详见其附录。其生成的顶层原理图如图4-1所示。图4-1 整体顶层电路原理图图5-1 系统仿真调试电路5 系统
30、功能仿真及调试各个单元模块完成后,即可将分模块和顶层模块进行仿真测试,同时可根据设计要求加入测试输入条件。仿真后得到的相应输出结果与预先的结果想比较,若不相符,则应修改设计,直到相符为止。为了仿真得到明显的效果,最好能下载到带数码管的试验箱上进行直接的数字观察。由于条件有限,为了能使仿真效果明显,采用了不带译码显示的波形仿真,其电路原理图如5-1所示。首先,对以下输入输出端作以下解释和说明,如表5.1:表5.1 测试端口说明输入输出端口说明端口类型功能定义Clk_50MInput全局时钟。在时钟上升沿,计算费用。resetInput整体复位,在reset=0时,等待计时为0startInput
31、选择计费模式Start=1,计程计费Start=0,计时计费m7:0Output等待时间的输入(分)s7:0Output等待计时的输入(秒)distance7:0Output所行路程的输入fee7:0Output总费用输出功能仿真结果验证如下所示:a.为行驶中未停时的系统电路仿真结果如图5-2。b.为行驶中停止时(在两分钟之内)的系统电路仿真结果如图5-3。c.为行驶中停止时(在两分钟之外)的系统电路仿真结果如图5-4。从(a)可以看出当reset为1时,费用计数器为8元,系统启动,start=1表示出租车行驶, distance_enable每产生一个脉冲,路程计数器加1;路程4公里内,费用
32、保持8不变,超过4公里,费用计数器进行加计数,每增加1公里费用加1元,此时等待时间计数器不变。而根据(b),(c)的仿真波形可知,当reset为1时,系统启动,start=0表示出租车处于停止等待状态,此时等待时间计数器计数,在2分钟等待时间内,费用计数器不变;等待时间超过2分钟后,每增加1分钟,费用计数器增加1元,此时路程计数器保持不变。图5-2 系统仿真调试电路(a)图5-3 系统仿真调试电路(b)图5-4 系统仿真调试电路(c)从三个仿真可看出该出租车计价器整体功能实现都能完成,出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车起步价格,暂停,停止等功能各种计费,并能够通过数
33、码管显示车费数目。本款出租车计价器包括总价输出、显示路程,显示其等待时间等功能。另外,如果再任意输入该出租车计价器的计费标准,那么,它的适用范围可能就更广泛了。6 结论毕业设计是对我这四年来所学的专业知识的检验,不仅让我对这四年中所学知识进行了综合,还让我温习了一些已经遗忘的专业知识,同时增长一些实践经验,通过自己的努力,希望以后能够为社会做出一点贡献。通过这本次课程设计,我才把学到的东西与实践相结合。从中对所学的知识有了更进一步的理解。刚开始拿到这题目的时候感觉是完全没有头绪,不知从何入手,但着手设计时,慢慢查询资料后才慢慢的有了点思路,但到自己具体来设计时又现了许多细节上的问题。我本次毕业
34、设计的题目是基于FPGA的出租车计价器设计。本次设计采用Verilog HDL硬件描述语言,按自下向上的方法,将设计的系统分成五个相对独立的模块分别设计,包括分频模块,计时模块,计程模块,计费模块,以及译码显示模块,用Quartus软件进行各模块仿真得其波形,直到各个模块功能仿真都通过后,再将其合成整体,最后进行综合仿真。在实际设计过程中,我碰到很多问题。比如说仿真软件Quartus不熟悉,以致总体模块顶层编译出错,就单单是画原理图就花费了很长的时间,这种问题比较容易解决,把之前的笔记拿出来在好好看看练习几遍步骤就可以了。给我印象最深的是设计过程中程序的编写,计数器的分频器,这个问题可以说是困
35、扰我比较久的一个问题了,通过老师简单的指导和同学的讲解,再加上自己的努力,最终这个问题被顺利的解决了。由于本人在经验水平上的欠缺,设计中可能存在很多不足,请各位老师予以指正!参考文献1 潘松,黄继明,潘明. EDA技术实用教程Verilog HDL版.北京:科学出版社,20102 张晓飞,秦刚刚,杨阳. FPGA技术入门与典型项目开发实例.北京:化学工业出版社,2011.93 杨晓慧,杨旭. FPGA系统设计与实例.北京:人民邮电出版社,2010.14 洗进. Verilog HDL数字控制系统设计实例.北京:中国水利水电出版社,20075 林灶生,刘绍汉. Verilog FPGA芯片设计.
36、北京:北京航空航天大学出版社,2006.76 康华光,陈大钦. 电子技术基础模拟部分.北京:高等教育出版社,2006.17 黄智伟. FPGA系统设计与实践.北京:电子工业出版社,20058 求是科技. FPGA 数字电子系统设计与开发实例导航.北京:人民邮电出版社,20059 谭会生. EDA技术综合应用实例与分析.西安电子科技大学出版社,200410 王金明. 数字系统设计与Verilog HDL.北京:电子工业出版社,201111 曹昕燕,周凤臣,聂春燕. EDA技术实验与课程设计.北京:清华大学出版社,2006.5附录附录I 单元模块Verilog HDL源代码计数器的分频模块Veri
37、log HDL源代码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=32'd0;endelse if(count=3'd100)/判断计时器记到了100吗? begin count<=32'd0;
38、/计到100计数器清零 clk<=clk;/输出的时钟取反 end/end begin else count<=count+1'd1;/ 没计到100计数器加一end/end alwaysendmodule / 结束分频模块数码管的分频模块Verilog HDL源代码module div1(clk_50M,clk1,reset);/ 端口的定义input clk_50M,reset;/ 总的时钟是50Moutput clk1;/分频后输出的时钟 1KHZreg clk1;reg 31:0 count;/32位的计数器always (posedge clk_50M or ne
39、gedge reset)/异步复位begin if(!reset) begin clk1<='d0; count=32'd0;endelse if(count=2'd50)/ 判断计时器记到了50吗 begin count<=32'd0;/计到50计数器清零 clk1<=clk1;/输出的时钟取反 end/end begin else count<=count+1'd1;/ 没计到50计数器加一end/end alwaysendmodule / 结束分频模块计程模块Verilog HDL源代码module distancemoku
40、ai(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<=8'd0; end else if(start)/ start 高电平有效 begi
41、n if(distance3:0=9)/判断distance的低四位计到了9没有 begin distance3:0<=4'd0;/计到9清零 if(distance7:4=9) /判断distance的高四位计到了9没有 distance7:4<=4'd0;/计到9清零 else distance7:4<= distance7:4+1'd1;/ distance的高四位没有计到9的时候加一 end else distance3:0<=distance3:0+1'd1;/ distance的低四位没有计到9的时候加一 end/end st
42、artend/end always/*产生distance_enable信号*/always(posedge clk or negedge reset)beginif(!reset)begin distance_enable<=1'd0;/复位endelse if(distance>8'd2)/ 大于公里三的时候 begin distance_enable<=1'd1;/输出distance_enable信号 endend/end alwaysendmodule/结束计程模块计时模块Verilog HDL源代码module timemokuai(clk
43、,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<=8'd0;m<=8'd0;endelse if(!start)/start 信号低电平有效begi
44、nif(s3:0=9)/ 秒的低四位是9 begin s3:0<=4'd0;/清零 if(s7:4=5) / 秒的高四位是5 begin s7:4<=4'd0; /清零 if(m3:0=9) / 分的低四位是9 begin m3:0<=4'd0; /清零 if(m7:4=9) / 分的高四位是9 m7:4<=4'd0; /清零 else m7:4<=m7:4+1'd1; / 分的高四位不是9加一endelse m3:0<=m3:0+1'd1; /分的低四位不是9加一endelse s7:4<=s7:4+1
45、'd1; / 秒的高四位不是5加一endelse s3:0<=s3:0+1'd1; /秒的低四位不是9加一 end/end alwaysend assign time_enable=(m7:0>8'd2)&&(s7:0=8'd0)?1'd1:1'd0;/产生time_enable信号。endmodule/结束计时模块控制模块Verilog HDL源代码module control(start,distance_enable,time_enable,select_clk);input start,distance_ena
46、ble,time_enable;output select_clk;/输出选择的时钟信号wire select_clk;/*当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable*/assign select_clk=start?distance_enable:time_enable; endmodule/结束控制模块计费模块Verilog HDL源代码module feemokuai(select_clk,reset,fee,clk);input select_clk,reset,cl
47、k;output7:0 fee; /输出的费用reg 7:0 fee;always(posedge clk or negedge reset)/异步复位begin if(!reset) /低电平有效 begin fee<=8'd8; /起步为八元 end else if(select_clk=1'd1) begin if(fee3:0=4'd9) /费用的低四位是不是计到了9 begin fee3:0<=4'd0;/计到9清零 if(fee7:4=4'd9)/ 费用的高四位是不是计到了9fee7:4<=4'd0; /计到9清零
48、else fee7:4<=fee7:4+1'd1;/ 费用的高四位没有计到9加1endelse fee3:0<=fee3:0+1'd1;/ 费用的低四位没有计到9加1end/end beginend/end alwaysendmodule /结束计费模块数码管显示模块Verilog HDL源代码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
49、; / 译码结果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+1'd1; /数码管的选择endalways(posedge clk1)begincase(a) 4'd0: disp_dat=distance7:4;/公里的高四位用第一个数码管显示。4'd1: disp_dat=dis
50、tance3:0;/公里的低四位用第二个数码管显示。4'd2: disp_dat=m7:4; /时间分的高四位用第三个数码管显示。4'd3: disp_dat=m3:0; /时间分的低四位用第四个数码管显示4'd4: disp_dat=s7:4; /时间秒的高四位用第五个数码管显示。4'd5: disp_dat=s3:0; /时间秒的低四位用第六个数码管显示。4'd6: disp_dat=fee7:4;/费用的高四位用第七个数码管显示。4'd7: disp_dat=fee3:0; /费用的低四位用第八个数码管显示。default: disp_da
51、t=4'b1010;endcasecase(a)4'd0:r_dig=8'b01111111; / 选择第一个数码管4'd1:r_dig=8'b10111111; / 选择第二个数码管4'd2:r_dig=8'b11011111; / 选择第三个数码管4'd3:r_dig=8'b11101111; / 选择第四个数码管4'd4:r_dig=8'b11110111; / 选择第五个数码管4'd5:r_dig=8'b11111011; / 选择第六个数码管4'd6:r_dig=8'b11111101; / 选择第七个数码管4'd7:r_dig=8&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西南宁市青秀区人大常委会办公室招聘1人(劳务派遣)笔试备考题库及答案解析
- 2026上海徐汇区城市运行管理中心、政务服务中心、大数据中心第一批政府购买服务人员招聘2人笔试备考题库及答案解析
- 2026多彩贵州航空有限公司第二批岗位招聘18人考试备考题库及答案解析
- 金川集团股份有限公司2026届校园招聘笔试备考试题及答案解析
- 2026江苏淮安市盱眙县“残疾人之家”公益性岗位招聘4人考试备考题库及答案解析
- 2026上海市水产研究所(上海市水产技术推广站)第二轮招聘博士研究生4人备考题库完整参考答案详解
- 2026滁州市轨道交通运营有限公司第一批次校园招聘21人备考题库含答案详解(综合题)
- 2026年郑州电力职业技术学院单招职业倾向性考试题库及完整答案详解1套
- 2026年益阳医学高等专科学校单招职业倾向性测试题库带答案详解
- 2026年重庆青年职业技术学院单招职业技能测试题库附答案详解
- 2026年金属非金属矿山(露天矿山)安全管理人员试题附答案详解【考试直接用】
- 2026湖南娄底市市直事业单位高层次和急需紧缺人才招聘集中组考18人备考题库含答案详解(预热题)
- 机械制图(王幼龙)第三章教案
- 15D501 建筑物防雷设施安装
- DB33-T 2350-2021数字化改革术语定义
- 广告效果研究方法课件
- 2.有机物的相互转化(图-方程式)
- 市政工程监理规划范本
- 桩基础负摩阻计算表格(自动版)
- 煎药机使用后清洗纪录表
- [PPT]杭州湾跨海大桥工程总体设计汇报(中交)_ppt
评论
0/150
提交评论