FPGA出租车计价器设计
- 格式:doc
- 大小:1.21 MB
- 文档页数:20
基于FPGA的出租车计程计费器项目教学设计一、项目背景出租车计程计费器是出租车行业的重要设备,它可以根据行驶里程和时间自动计算乘客的费用。
传统的计程计费器通常是基于单片机或嵌入式系统来实现的,但是随着FPGA技术的发展,利用FPGA来实现计程计费器也成为一种新的选择。
FPGA具有运算速度快、可编程性强的特点,可以有效地提高计程计费器的性能和灵活性。
本项目将设计基于FPGA的出租车计程计费器,并将其作为教学实践项目,以帮助学生掌握FPGA的应用技术和计程计费器的工作原理。
二、项目目标1. 理解出租车计程计费器的工作原理和需求;2. 掌握FPGA的基本原理和应用方法;3. 设计并实现基于FPGA的出租车计程计费器原型。
三、项目内容1. 出租车计程计费器的工作原理出租车计程计费器通常需要实现以下功能:- 实时采集车辆的行驶里程和行驶时间;- 根据里程和时间计算乘客的费用;- 显示乘客的费用信息。
2. FPGA的基本原理和应用方法FPGA是一种可编程的逻辑器件,它由大量的可编程逻辑单元和存储单元组成,可以根据用户的需要编程实现各种数字逻辑功能。
FPGA的设计通常包括以下几个步骤:- 确定设计功能和性能需求;- 采用硬件描述语言(如Verilog、VHDL)进行逻辑设计;- 进行逻辑综合和布局布线;- 下载到FPGA芯片中进行验证和调试。
基于以上内容,学生将分为以下几个阶段进行项目设计和实现:第一阶段:学习出租车计程计费器的工作原理和需求,了解FPGA的基本原理和应用方法。
第二阶段:进行计程计费器的逻辑设计,包括行驶里程和行驶时间的实时采集、费用的计算和显示。
第三阶段:进行计程计费器的逻辑综合和布局布线,生成FPGA的配置文件。
第四阶段:将配置文件下载到FPGA芯片中进行验证和调试,完成基于FPGA的出租车计程计费器原型的设计和实现。
四、教学方案为了帮助学生顺利完成基于FPGA的出租车计程计费器项目,可以采取以下教学方案:1. 确定项目的实践环境和硬件平台,提供FPGA开发板和相关的软件工具;2. 组织相关理论课程和实验课程,介绍出租车计程计费器的工作原理和需求,讲解FPGA的基本原理和应用方法;3. 指导学生进行项目的逻辑设计、综合布局和验证调试,提供必要的技术支持和指导;4. 完成项目的设计和实现后,组织学生进行成果展示和总结,评选出优秀的作品并给予奖励。
《EDA》设计报告题目:出租车计价器FPGA设计学院:电子信息与电气工程学院专业:电子信息工程班级:姓名:学号:出租车计价器的FPGA设计引言FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种高密度可编程逻辑器件,它支持系统可编程,通过写入不同的配置数据就可以实现不同的逻辑功能。
使用FPGA来设计电子系统,具有设计周期短、易于修改等明显特点,特别适合于进行科学实验、样机研制和电子产品的小批量生产。
一 .系统设计要求主要功能包括:信号输入模块对车轮传感器传送的脉冲信号进行计数(每100米送一个脉冲),并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号作用;数据转换模块将计费模块输出的车费和路程转换成4位的十进制数据;译码/动态扫描模块将路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将公里数用3位LED数码管显示、等待时间用2位LED数码管显示和计费金额用3位LED数码管显示。
二. 设计题目设计一个出租车计价器,要求显示里程和金额。
(1)出租车启动和停驶由司机控制;(2)行程小于基本里程时,显示起步价,基本里程设2公里,起步价设5元;(3)当行程大于基本里程时,每多行一公里,在起步价上加1元;(4)当出租车进入低速状态,由司机按下等候键,每等待5分钟加1元,不足5分钟的不计算;(5)此处用脉冲信号模拟轮胎的转数,设每计一个脉冲汽车前进100米,系统中所需脉冲均由20MHz晶振分频提供。
三 . 系统设计方案该系统的设计可以采用分立元件来搭建,也可以通过单片机来设计,而使用可编程FPGA来设计,具有设计周期短、易于修改等明显特点,而且随着可编程逻辑器件和EDA软件的飞速发展,越来越多的电子系统采用FPGA来设计,一旦该系统达到一定的量产规模,也比较容易转化为ASIC芯片设计。
因此,基于FPGA来设计一个出租车的计价器。
本系统在EDA工具软件MAX+plusⅡ中,采用硬件描述语言Verilog HDL和原理图设计相结合的方法,进行各个模块的设计,最终将各个模块组成整个系统。
基于FPGA的出租车计程计费器项目教学设计一、项目背景介绍随着出租车的普及,计程计费器作为出租车必备的设备,主要用于计算乘客的乘车距离和费用,是一个重要的应用。
基于Field-Programmable Gate Array (FPGA)的出租车计程计费器项目,可以帮助学生在实际项目中掌握FPGA系统设计、数字电子技术、计费算法等知识,提高学生的实践能力和创新能力。
二、项目教学目标1. 了解FPGA的基本原理和应用;2. 掌握FPGA系统设计的基本流程;3. 学习数字电子技术在出租车计程计费器中的应用;4. 熟悉计费算法的设计和实现;5. 提高学生的实践能力和创新能力。
三、项目教学内容及步骤1. FPGA基础知识介绍1.1 FPGA的基本原理和结构;1.2 FPGA在数字电子系统中的应用;1.3 FPGA开发环境及工具介绍。
2. 出租车计程计费器功能设计2.1 乘车距离和时间测量模块设计;2.2 价格计算模块设计;2.3 显示模块设计。
3. FPGA系统设计3.1 硬件描述语言(Verilog/VHDL)基础知识介绍;3.2 FPGA系统设计流程;3.3 乘车距离和时间测量模块的Verilog/VHDL实现;3.4 价格计算模块的Verilog/VHDL实现;3.5 显示模块的Verilog/VHDL实现。
4. 计费算法设计与实现4.1 基于乘车距离和时间的计费算法设计;4.2 算法在FPGA系统中的实现。
5. 系统集成与测试5.1 FPGA系统集成;5.2 系统功能测试;5.3 项目演示与验收。
四、项目教学方法1. 理论讲解:介绍FPGA基础知识、出租车计程计费器功能设计、FPGA系统设计流程等内容;2. 设计实践:学生通过指导练习,完成乘车距离和时间测量模块、价格计算模块、显示模块的Verilog/VHDL实现;3. 计费算法设计与实现实践:学生在指导下设计基于乘车距离和时间的计费算法,并在FPGA系统中实现。
基于FPGA的出租车计程计费器项目教学设计本设计基于FPGA实现了一款出租车计程计费器,可以实时计算出乘客的车费并显示在数码管上。
该项目主要包括FPGA硬件设计,计算方式设计及电路实现。
一、FPGA硬件设计1. 系统组成本设计采用Xilinx公司的FPGA器件,主要由FPGA、时钟电路、驱动电路和接口电路组成。
其中,时钟电路采用quartz晶振,驱动电路为大功率数码管驱动芯片,接口电路为调节电路和键盘接口电路。
2. 系统流程图本设计的系统流程图如下:(说明:CLK为FPGA的时钟输入,K1和K2分别为计程和计费的按键接口,D为数码管显示接口,R1和R2分别为计程和计费所需的电阻,C为电容器)二、计算方式设计1. 计程计算方式计程计费是根据司机开始行驶时车上的里程表显示的公里数为起点,乘客下车时里程表上显示的公里数为终点,两者之差即为乘客所乘路程。
因此,计程计算方式为:路程(公里) = 终点里程 - 起点里程计费规则为:起步价M元(默认起步价为8元),每公里N元(默认每公里2元)。
因此,计费方式为:车费 = M + 路程× N计费计算方式为:每分钟X元(默认每分钟0.5元),因此,计费方式为:车费 = 当前时间× 每分钟单价X三、电路实现1. 时钟电路本设计采用quartz晶振作为时钟电路,其参数为30MHz。
在FPGA中设置一个50MHz 的时钟输入,通过分频电路将其分频至需要的30MHz。
2. 数码管驱动电路本设计采用MAX7219作为驱动芯片,共接入4个共阳数码管。
FPGA通过SPI接口将数码管的数据发送至MAX7219,由其驱动数码管显示车费结果。
3. 调节电路调节电路用于控制FPGA输出的电压幅值,以及提供稳定的电压和电流给FPGA器件和数码管驱动芯片。
4. 键盘接口电路键盘接口电路由输入电路和检测电路组成。
输入电路为按键输入,检测电路为检测按键信号的变化并将其传递至FPGA。
根据FPGA技术出租车计费器的设计FPGA(Field-Programmable Gate Array)技术在今天的电子设计领域中被广泛应用。
它具有灵活性、可编程性和可重构性等优点,使得它成为许多应用的理想选择,包括出租车计费器。
出租车计费器是乘客和司机之间的重要纽带,它负责计算乘客的乘车时间和里程,并据此计算出应支付的费用。
传统的出租车计费器通常是由硬件电路实现的。
然而,这种实现方式具有以下的缺点:1.难以适应不同的法定计费标准。
不同的地区和国家可能有不同的出租车计费标准,这就要求出租车计费器具有一定的可扩展性和灵活性。
而硬件电路实现通常是固定的,难以随意更改。
2.硬件电路实现复杂。
传统的出租车计费器通常需要使用多个电路组件,包括时钟、计数器、状态机等等。
而这些电路组件的设计和布线非常复杂,容易出现错误。
3.硬件电路实现不易维护。
一旦出现故障或需要更新,就需要重新设计和制造新的电路板,增加维护成本和周期。
为了解决这些问题,可以使用FPGA技术来设计出租车计费器。
通过将计费器的逻辑功能实现在FPGA芯片上,可以实现高度灵活、可编程和可重构的计费器。
首先,FPGA技术可以为计费器提供高度的可扩展性和灵活性。
使用FPGA芯片,可以将计费算法和计费标准的实现以软件的形式加载到FPGA 芯片上。
这意味着可以根据需要,随时更改计费算法和计费标准,以适应不同的地区和国家的法定计费标准。
这为出租车计费器的应用提供了更高的可定制性和可适应性。
其次,FPGA技术可以简化计费器的硬件电路设计。
使用FPGA芯片,可以将多个电路组件集成到一个单一的芯片上。
这种集成可以大大简化计费器的硬件设计和布线,减少错误和故障的风险。
同时,FPGA技术还提供了高级的图形化开发工具,如Vivado和Quartus,使得设计人员可以更快更轻松地完成计费器的设计和验证。
最后,FPGA技术可以提高计费器的可维护性。
使用FPGA芯片,可以通过简单地更新芯片上的软件,而无需重新设计和制造新的电路板。
基于FPGA的出租车计程计费器项目教学设计1. 引言1.1 项目背景出租车计程计费器在现代城市交通中扮演着至关重要的角色,为乘客提供方便、快捷和准确的计费服务。
随着科技的不断发展,传统的计程计费器已经逐渐无法满足市场的需求。
本课题将基于FPGA技术设计和实现一款高性能的出租车计程计费器,以提升其计费精度和效率。
本项目的目标是利用FPGA技术设计出一款功能强大、性能优越的出租车计程计费器,并将其应用于实际交通场景中。
通过本项目,学生可以深入了解FPGA在嵌入式系统设计中的应用,提升其硬件设计和编程能力,同时也能为出租车行业的智能化发展做出贡献。
1.2 项目目的项目目的是通过基于FPGA的出租车计程计费器项目教学设计,帮助学生深入了解FPGA技术,并掌握计程计费器系统的设计和实现方法。
通过这个项目,学生将学习到FPGA技术的基本原理和应用,培养他们的电路设计能力和问题解决能力。
通过实际操作和项目实践,学生将能够提高他们的团队合作能力和创新意识。
通过对项目的评估和教学效果分析,可以及时发现和解决学生在学习过程中遇到的问题,进一步提高教学质量和学生的学习成果。
最终,希望通过这个项目的教学实践,为学生奠定良好的基础,帮助他们在未来的学习和工作中取得更好的成就。
2. 正文2.1 FPGA技术介绍FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,通过用户编程来配置其内部逻辑电路,从而实现特定的功能。
FPGA具有灵活性高、可重构性强等优点,因此被广泛应用于数字系统的设计和实现中。
在FPGA中最基本的单元是可编程逻辑单元(CLB),它由查找表(LUT)、触发器和多路器等组成,用于实现逻辑电路的功能。
FPGA 还包含了输入输出块(IOB)、时序管理器(CMT)等功能模块,以满足不同应用的需求。
FPGA的编程通常通过硬件描述语言(HDL)来实现,主要使用Verilog和VHDL两种语言。
出租车计价器的FPGA设计O 引言FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种高密度可编程逻辑器件,它支持系统可编程,通过写入不同的配置数据就可以实现不同的逻辑功能。
使用FPGA来设计电子系统,具有设计周期短、易于修改等明显特点,特别适合于进行科学实验、样机研制和电子产品的小批量生产。
本文针对FPGA器件,用EDA工具软件Max+P1usⅡ,设计了一种出租车的计价器,它可以以十进制数的形式,直观地显示出租车行驶的里程和乘客应付的费用,具有一定的实际应用价值。
1 系统设计要求所要设计的出租车计价器,要求能够显示里程数和乘客应付的费用,其中里程数精确到0.1km,乘客应付的费用精确到O.1元,显示必须以十进制的形式来进行。
出租车的计费标准为:起步价6元,里程在3 km以内均为起步价;里程在3~7 km之间时,每行驶1 km增加1.6元;超过7 km时,每行驶1 km增加2.4元。
2 系统设计方案该系统的设计可以采用分立元件来搭建,也可以通过单片机来设计,而使用可编程FPGA来设计,具有设计周期短、易于修改等明显特点,而且随着可编程逻辑器件和EDA软件的飞速发展,越来越多的电子系统采用FPGA来设计,一旦该系统达到一定的量产规模,也比较容易转化为ASIC芯片设计。
因此,基于FP GA来设计一个出租车的计价器。
本系统在EDA工具软件MAX+plusⅡ中,采用硬件描述语言Verilog HDL和原理图设计相结合的方法,进行各个模块的设计,最终将各个模块组成整个系统。
出租车能够显示行驶的里程,可以通过车轮的转动产生脉冲,然后通过计数器对脉冲进行计数来实现。
假设出租车每行驶2 m就产生一个脉冲。
由于里程数要精确到O.1 km,也就是100m,因此每经过50个脉冲就要输出一个新的脉冲信号,这里称为100 m脉冲信号,作为里程计数器的时钟信号,可以通过一个模为50的计数器进行分频而得到。
fpga课程设计出租车计费一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握FPGA的基本知识和出租车计费系统的原理。
技能目标要求学生能够使用FPGA设计并实现一个出租车计费系统。
情感态度价值观目标要求学生培养对电子工程和FPGA技术的兴趣和热情,提高他们的问题解决能力和创新意识。
二、教学内容教学内容将根据课程目标进行选择和,确保内容的科学性和系统性。
教学大纲将明确教学内容的安排和进度。
教材的章节将包括FPGA的基本概念和原理,出租车计费系统的原理和设计方法。
具体的教学内容将包括FPGA的硬件结构和编程语言,出租车计费系统的算法和实现,以及相关的实验和案例分析。
三、教学方法教学方法将多样化,以激发学生的学习兴趣和主动性。
将采用讲授法来传授基本概念和原理,讨论法来促进学生之间的交流和思考,案例分析法来提供实际案例的分析和解决,以及实验法来进行实际操作和验证。
通过多种教学方法的结合,将能够全面培养学生的知识、技能和思维能力。
四、教学资源教学资源的选择和准备将根据教学内容和教学方法的需要进行。
教材将是主要的教学资源,将提供基础知识的学习和理解。
参考书将提供更深入的内容和额外的学习资源。
多媒体资料将用于辅助教学,如PPT演示和视频讲解。
实验设备将是重要的教学资源,将用于学生的实验操作和验证。
教学资源的选择和准备将确保能够支持教学内容和教学方法的实施,丰富学生的学习体验。
五、教学评估教学评估将设计合理的评估方式,包括平时表现、作业和考试等,以客观、公正地全面反映学生的学习成果。
平时表现将根据学生的课堂参与、提问和小组讨论等情况进行评估。
作业将布置相关的设计任务和练习题,要求学生在规定时间内完成,并进行批改和反馈。
考试将包括笔试和实践操作两部分,以测试学生对知识的掌握和应用能力。
评估结果将作为学生学习评价的重要依据,以激励学生的学习积极性和进步。
六、教学安排教学安排将规定教学进度、教学时间和教学地点等,以确保在有限的时间内完成教学任务。
基于FPGA的出租车计程计费器项目教学设计一、项目背景计程车是城市交通中广泛存在的一种公共交通工具。
而计程车计价器则是计程车为乘客计价而使用的计量设备。
为了更好地实现计程车计价的准确性,本项目选取FPGA为开发平台,利用FPGA高速计算的特性,开发一个基于FPGA的出租车计程计费器。
二、项目设计1. 系统功能与架构本项目基于FPGA开发,主要由以下模块组成:(1)时钟模块:利用FPGA内置的PLL模块产生稳定的时钟信号。
(2)计时模块:利用时钟信号进行计时并输出当前时间。
(3)里程计算模块:监测车速并根据时间和车速信息计算行驶里程。
(4)费用计算模块:利用里程和起步价、里程单价等信息计算应收费用。
(5)LCD显示模块:将最终计费结果显示在LCD屏幕上。
2. 系统接口设计本项目需要与计费器外部的以下设备进行连接:(1)车速传感器:用于监测车速信息。
(2)计价器外部按钮/旋钮:用于设置起步价、里程单价等信息。
系统的流程主要包括以下步骤:(1)启动计程计费器,并设置起步价、里程单价等参数。
(2)开始计费器计价服务。
(4)根据设定的计价方式计算应收费用。
三、项目实现1. 硬件实现本系统的硬件部分主要包括FPGA芯片、LCD显示屏、车速传感器等。
其中,车速传感器通过FPGA的GPIO接口连接,LCD显示屏通过FPGA的SPI接口连接。
四、教学思路本项目适用于FPGA开发的初学者,重点在于让学生掌握FPGA芯片的使用方法和Verilog HDL语言的应用。
教学流程如下:(1)FPGA基础知识介绍介绍FPGA发展历程、FPGA基础结构、FPGA的编程思想等。
(2)FPGA开发环境构建介绍FPGA开发环境的构建方法,包括开发软件的安装、设备库文件的导入等。
(3)Verilog HDL语言基础介绍Verilog HDL语言的基本语法、数据类型、运算符、语句等。
(4)计程计费器项目开发按照项目设计,在FPGA开发环境中逐步搭建计程计费器系统,并进行相应的调试和优化。
EDA课程设计目标1.掌握用Verilog HDL语言的设计方法;2.掌握Verilog HDL语言程序的基本结构,学习编写简单的Verilog HDL设计实用程序;3.了解Quartus II软件的基本使用方法,数字电路系统的设计流程,掌握QuartusII的使用方法;4.在Quartus II环境下,对其设计功能进行编程、仿真、并下载到EDA试验箱的FPGA芯片,验证其设计的正确性。
1 、设计任务及要求设计一个出租车计价器,要求显示里程和金额。
(1)出租车启动和停驶由司机控制;(2)行程小于基本里程时,显示起步价,基本里程设3公里,起步价设5元;(3)行程大于基本里程时,每多行一公里,在起步价上加2元;(4)当出租车等待时,由司机按下等候键,每等待一分钟加1元,不足一分钟的按一分钟计算;(5)此处用脉冲信号模拟轮胎的转数,设每计一个脉冲汽车前进100米,系统中所需脉冲均由50MHz晶振分频提供。
2、设计原理及总体框图(1)设计总体框图图1.总设计框图(2)设计总原理图图2.设计总原理图设计总原理:测控FPGA芯片通过采集速度传感器脉冲信号WCLK进行行驶里程计算,利用外部脉冲信号CLK1产生标准时钟信号,用来计算等待时间,最后根据行驶里程、等待时间来计算计价值。
并用译码电路显示行驶里程、等待时间和计价值。
3、程序设计1.VHDL语言简单介绍VHDL 的英文全名是Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言,被认为是标准的硬件描述语言,有专家认为,在新世纪中,VHDL与Verilog HDL语言将承担起几乎全部的数字系统设计任务。
VHDL 主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL 的语言形式和描述风格与句法十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦内部开发完成后,其他的设计可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL 系统设计的基本点。
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。
VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。
另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。
VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以用多种不同的器件结构来实现其功能。
VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
基于以上种种优点,VHDL作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。
2、模块及相应程序说明(1)消除抖动模块module xiaodou(clk,kaishi,ks,zanting,zt,jieshu,js); //消抖模块input clk,kaishi,jieshu,zanting; //clk为全局时钟50MHZ,按键的输入分别是:开始,结束,暂停output ks,js,zt; //输出的是开始、结束、暂停的有效信号reg ks_reg1,zt_reg1,js_reg1;reg ks_reg2,zt_reg2,js_reg2; //ks_reg1,ks_reg2分别是扫描得到的输入信号reg ks,zt,js;reg [25:0] count1; //计数器always @( posedge clk)begincount1<=count1+1'b1;if(count1==500000) //扫描频率100Hzbeginks_reg1<=kaishi;zt_reg1<=zanting;js_reg1<=jieshu;count1<=0;endks_reg2<=ks_reg1;zt_reg2<=zt_reg1;js_reg2<=js_reg1;ks<=ks_reg2&(!ks_reg1);zt<=zt_reg2&(!zt_reg1);js<=js_reg2&(!js_reg1); //当扫描得到的两个信号不同时,说明按键按下则输出高电平脉冲endendmodule消除因其他原因导致输出无效的信号引起系统误启动。
(2)状态模块module zhuangtai(clk,ks,zt,js,state); //状态模块input clk,ks,zt,js; //输入的是开始、暂停、结束的有效信号output state;reg [1:0]state; /*state是不同的运行状态,0时显示hello及led8,1时运行并显示路程模块及led6,2时运行并显示时间模块及led10*/initialbeginstate=0; //初始时显示stste0及led8endalways @ (posedge clk)beginif(ks==1) state=1; //按下开始键后,state转换到1if((!state==0)&&zt==1) //当state非0时,每次按暂停,state加1;同时确保暂停键只在路程或时间模块有效beginstate=state+1;while(state>2); state=1; //保证按下暂停时只在路程和时间模块之间转换endif(js==1) state=0; // 按下结束键时,转到state0endendmodule控制计价器正常工作,停车等待,等不同工作状态下的计费。
(3)行车速度模块module sudu(clk,clksd); //速度模块input clk; //输入的是50MHz脉冲output clksd; //输出的是100Hz的模拟速度脉冲reg clksd;reg [27:0]count2; //计数器always@ (posedge clk )begincount2=count2+1;if(count2==12500000) begin clksd=~clksd; count2=0;end //每6249000翻转一次,即周期是0.25s,4Hzendendmodule(4)时间模块module shijian( clk,state,min,sec); //时间模块input clk;input [1:0]state;output [6:0]min;output [6:0]sec; //输出的是等待时间的分和秒reg [6:0]sec;reg [6:0]min;reg [25:0] count3; //计数器always @(posedge clk)beginif(state==0) //state为0时,分和秒置零beginmin<=0;sec<=0;endif(state==2) //state为2时,运行时间的累计begincount3=count3+1'b1;if(count3==49999999) //每计数50 000 000次,计秒一次begincount3=0;sec<=sec+1'b1;endif(sec>59) //每60秒,分加1beginmin<=min+1'b1;sec<=0;endendendendmodule在停车等待时开始计时,记录停车等待的时间长短,当再次开始行车时停止计时,恢复正常计费。
(5)行车路程模块module lucheng( clksd,state,lck,lcm); //路程模块input clksd; //输入的事模拟速度脉冲input [1:0]state;output [6:0]lck; //输出以千米为基数的整数部分output [6:0]lcm; //输出以十米为基数的小数部分reg [6:0]lck;reg [6:0]lcm;always @(posedge clksd )beginif(state==0) //当state为0时,使两个输出都置零beginlck<=0;lcm<=0;endif(state==1) //当state为1时,进行路程的累计beginlcm<=lcm+1'b1;if(lcm>99) //小数部分每99向整数部分进1beginlck<=lck+1'b1;lcm<=0;endendendendmodule记录行车的路程长短,输出以千米为基数的整数部分以及输出以十米为基数的小数部分,在停车等待时暂停记录,恢复正常行车状态是恢复路程记录。
(6)总价模块module zongjia(clk,min,lck,zj); /*总价模块,起步价4元,包含3公里,超过3公里每累计1公里1元,不到1公里不算,等待时间每累计1分钟1元,不到一分钟不计算*/input clk;input [6:0]min,lck; //输入路程的整千米数和时间的整分数output zj;reg [7:0]zj;always @(clk)beginif(lck<3)zj=5+min*1; //3公里内,总价为4+等待时间的整分数*1elsezj=5+(lck-3)*1+min*1; //3公里外,总价为4*路程减二+等待时间的整分数*1endendmodule价格显示模块,起步行驶不超过3公里只收起步价4元(包含3公里),超过3公里每多行1公里价格增加1元。
(7)显示模块module led_drive(clk,state,sec,lck,lcm,zj,ksled,ztled,jsled,a,b,dp); input clk;input [1:0]state;input [6:0]sec,lck,lcm;input [7:0] zj;output a,b,dp,ksled,ztled,jsled;reg[0:7]c;reg [3:0] i;reg dp,ksled,ztled,jsled;reg [0:6] a; //a数码管选段reg [0:7] b; //b数码管选位reg [0:6] mem[0:9]; //数码管显示内容reg [17:0] count4 ; //扫描计数器initialbegin //显示从0~9mem[0]=7'b0000001;mem[1]=7'b1111001;mem[2]=7'b0010010;mem[3]=7'b0000110;mem[4]=7'b1001100;mem[5]=7'b0100100;mem[6]=7'b0100000;mem[7]=7'b0001111;mem[8]=7'b0000000;mem[9]=7'b0000100;i=0;endalways @(posedge clk)begincount4=count4+1'b1;if(count4==100000) //计数器计数起到分频作用,降低扫描频率实现稳定的动态显示begini=i+1'b1;count4=0;endcase(state)0:case(i) //显示state为0时的状态及led0:begin a=8'b1111111;b=8'b01111111;dp=1;end1:begin a=8'b1001000;b=8'b10111111;dp=1;end2:begin a=8'b0110000;b=8'b11011111;dp=1;end4:begin a=8'b1110001;b=8'b11110111;dp=1;end5:begin a=7'b0000001;b=8'b11111011;dp=1;end6:begin a=8'b1111111;b=8'b11111101;dp=1;end7:begin a=8'b1111111;b=8'b11111110;dp=1;end8:begin ksled=0;ztled=0;jsled=1;endendcase1:case(i) //显示state为1时的状态及led0:begin a=mem[lck/10];b=8'b01111111;dp=1;end1:begin a=mem[lck%10];b=8'b10111111;dp=~dp;end2:begin a=mem[lcm/10];b=8'b11011111;dp=1;end3:begin a=mem[lcm%10];b=8'b11101111;dp=1;end4:begin a=7'b1111110;b=8'b11110111;dp=1;end5:begin a=mem[zj/100];b=8'b11111011;dp=1;end6:begin a=mem[zj/10];b=8'b11111101;dp=1;end7:begin a=mem[zj%10];b=8'b11111110;dp=1;end8:begin ksled=1;ztled=0;jsled=0;endendcase2: case(i) //显示state为2时的状态及led0:begin a=7'b1111111;b=8'b01111111;dp=1;end1:begin a=7'b1111111;b=8'b10111111;dp=~dp;end2:begin a=mem[sec/10];b=8'b11011111;dp=1;end3:begin a=mem[sec%10];b=8'b11101111;dp=1;end4:begin a=7'b1111110;b=8'b11110111;dp=1;end5:begin a=mem[zj/100];b=8'b11111011;dp=1;end6:begin a=mem[zj/10];b=8'b11111101;dp=1;end8:begin ksled=0;ztled=1;jsled=0;endendcaseendcaseif(i>8)i=0; //位选循环endendmodule通过数码管,显示对应的等待时间,行车路程,最终价格。