基于FPGA出租车计费器设计报告(verilog)

合集下载

基于FPGA编程的出租车计价器报告

基于FPGA编程的出租车计价器报告

课程设计题目学院专业班级姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:主要任务:1、课程设计工作量:1周。

2、技术要求:①设计一个符武汉市合现行计价标准的TAXI计价器。

计价方案见附件。

②确定设计方案,按功能模块设计分电路,画出总体电路原理图,阐述基本原理。

③用Quartus软件完成设计,下载至开发板上运行。

④查阅至少5篇参考文献。

⑤按《武汉理工大学课程设计工作规范》要求撰写设计报告书。

全文用A4纸打印。

时间安排:1、年月初作课设具体实施计划与课程设计报告格式的要求说明。

2、年月日至年月日为课程设计时间。

3、年月日完成课程设计报告与答辩。

指导教师签名:年月日系主任(或责任教师)签名:年月日目录1课程设计目的 (4)2设计任务与要求 (4)2.1设计任务 (4)2.2设计要求 (4)3系统组成 (4)4模块设计 (5)4.1秒分频模块 (5)4.2控制模块 (5)4.3计量模块 (6)4.3.1计价部分 (6)4.3.2计时部分 (6)4.3.3计程部分 (6)4.4译码显示模块 (6)5程序调试运行 (9)5.1顶层原理图 (9)5.2仿真结果 (9)6硬件验证 ................................................................ 错误!未定义书签。

6.1引脚锁定............................................................................................. 错误!未定义书签。

6.2硬件验证情况.................................................................................. 错误!未定义书签。

7、课程设计总结 (10)7.1、收获 (10)7.2、心得体会 (10)参考文献 (11)附录 (12)出租车自动计价器的设计1课程设计目的为培养学生树立正确的设计思想和实事求是的工作作风,学习运用所学基础知识理论、专业知识、基本技能去分析和解决工程技术实际问题,提高学生的综合素质,使学生成为工程应用型合格人才,故进行《EDA技术及应用》的课程设计。

基于FPGA的出租车计价器设计

基于FPGA的出租车计价器设计

郑州交通职业学院《CPLD/FPGA应用》课程设计报告课程设计题目:基于FPGA的出租车计价器设计所属系别信息工程系专业班级 11大专电子信息工程技术1班姓名 XXXX学号 XXX指导教师 XXX撰写日期 2012 年 6 月一、设计任务与要求1、本课题要求设计车租车自动计价器,能基本实现自动计价的功能2、本出租车计价器的计费系统:行程3公里内,且等待累计时间2分钟内,起步费为10元;3公里外以每公里1.6元计费,等待累计时间2分钟外以每分钟1.5元计费。

并能显示行驶公里数、等待累计时间、总费用。

设计的主要技术指标如下:①、计价范围:0~999.9元 计价分辨率:0.1元 ②、计程范围:0~99公里 计程分辨率:1公里 ③、计时范围:0~59分 计时分辨率:1分二、方案设计与论证出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从9开始计算;出租车载客中途等待,等待时间计数器从0开始计数。

最后根据行驶里程或停止等待的时间的计费标准计费。

出租车到达目的地停止后,停止计费器,显示总费用。

根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其FPGA 内部具体框图如下所示。

(1) 分频模块:分频模块是其它模块的基础,输入时钟选为32Hz ,分频后的时钟频率为1Hz,为后续模块提供基本时钟。

车费 计数 模块等 待 时 间译 码 模 块输 出 控制 模块里程 计数 模块分 频器 输入信号(2)等待时间模块:该模块针对乘客确认下车前的等待而言,比如堵车、中途下车的情况,通过1Hz脉冲计数,每一分钟计时加一,最大计时时间显示为99分钟。

(3)路程模块:该模块是对车辆行驶路程进行计数,以1Hz时钟为基础,检测行程脉冲,路程模块中有内部变量来判断路程,当大于3公里、20公里时,分别有相应的使能信号对此作出记录,最大路程显示为99公里。

(4)计费模块:该模块是基于等待时间模块和路程模块对费用进行控制的。

基于FPGA的出租车计费器设计.

基于FPGA的出租车计费器设计.

湖南工程学院课程设计课程名称嵌入式系统课题名称基于CPLD的出租车计费器专业电子信息工程班级电子信息学号201213020113姓名魏震洲指导教师林愿2015年12月20日湖南工程学院课程设计任务书课程名称:嵌入式系统题目:基于CPLD的出租车计费器专业班级:电子信息学生姓名:魏震洲指导老师:林愿审批:任务书下达日期 2015 年12 月 1日设计完成日期 2015 年 12月 15日目录摘要 (1)Abstract ......................... 错误!未定义书签。

引言 (2)1.概述 (2)2.总体设计 (3)2.1设计要求 (3)2.2基本的原理方框图 (4)2.3 开发环境 (4)3.软件设计 (4)3.1总体设计 (4)3.2 各模块设计 (5)4.结果仿真 (11)4.1编译 (11)4.2管脚配置 (11)4.3程序下载 (12)5.硬件电路 (13)6. 系统使用说明 (13)结束语 (14)参考文献 (14)致谢............................. 错误!未定义书签。

附录.. (15)基于CPLD的出租车计费器摘要:本文借助QuartusⅡ9.0软件,基于大规模可编程逻辑器件FPGA,利用Verilog HDL语言,进行出租车计费器设计。

该出租车计费系统包括计数器分频模块、数码管分频模块、计程模块、计时模块、计费模块、控制模块、数码管显示模块和顶层主控模块共八大部分;分起步、里程、等待三个阶段。

该出租车计费器能够自行设定计费标准,借助CycloneⅡ系列EP20C8Q208C8N芯片的FPGA开发板,进行功能仿真,并且利用外围电路和开发板的结合,能够进行相应的硬件测试。

测试结果由2片4个相连的7段共阳极数码管驱动电路来显示。

关键词:出租车计费器;QuartusⅡ9.0软件;Verilog HDL语言;FPGA开发板引言随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定、计费准确;同时还要求其具有计价标准的灵活设定、营运额统计、密码设定等功能。

基于FPGA的出租车计程计费器项目教学设计

基于FPGA的出租车计程计费器项目教学设计

基于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. 完成项目的设计和实现后,组织学生进行成果展示和总结,评选出优秀的作品并给予奖励。

基于FPGA的出租车计费器课程设计程序

基于FPGA的出租车计费器课程设计程序

设计题目:出租车计费器一、设计实验条件QuartusII7.2二、设计目标1.实现计费功能。

按行驶里程计费,起步价为6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止和暂停时不计费;2.现场模拟汽车的起动、停止、暂停和换挡等状态;3.设计数码管动态扫描电路,将车费和路程显示出来,各有两位小数。

三、设计报告的内容1.前言伴随中国经济的腾飞,城市化的进程也随之加快。

虽然人们出行的选择趋于多样化,但是出租车作为一种重要的交通工具,也为很多人作为出行的选择。

大城市里出租车已经相当普及,但是在中小城市出租车依然处于快速发展的阶段。

出租车的计费方式也在发生变化,由只能显示里程的方式变为现在的自主计费和打印发票及语音提示的智能化方式;根据出租车行业的发展需求,国内许多生产厂商也制造出不同类型的计价器,传统的出租车计费器经过十几年的使用,在稳定性,成本等方面都具有一定的优势。

利用FPGA设计出满足出租车不同计费需求的计费器,去满足当地出租车的计费需求。

这个课题在实现计费功能的同时,也解决了传统出租车计费器系统的不足。

出租车的需求不断的增大,因此,出租车计费器的需求也将不断增大,计程车的服务也显得越来越重要,因此出租车计费器也就应运而生了。

2.设计主体(1)设计原理:假设出租车有启动键、停止键、暂停键和档位键。

启动键为脉冲触发信号,当它为一个脉冲是,表示汽车已启动,并根据车速的选择和基本车速发出相应频率的脉冲(计费脉冲)实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用来改变车速,不同档位对应着不同的车速,同时路程计数的速度也不同。

出租车计费器可分为两大模块,即控制模块和译码显示模块,系统框图如图1所示,控制模块实现了计费和路程的技术,并且通过不同的档位控制车速。

基于FPGA的出租车计费器

基于FPGA的出租车计费器

基于FPGA的出租车计费器摘要基于FPGA的出租车计费器设计摘要本文介绍了一种基于FPGA 芯片上实现出租车计价器功能的设计方法,主要阐述如何使用新兴的EDA 器件取代传统的电子设计方法,不仅实现了出租车计价器所需的一些基本功能,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。

本设计主要借助了FPGA 芯片,使用Verilog HDL语言灵活编程来实现多方面的计费,这样不仅使其不拘泥于硬件,具有更强的移植性,而且增强了实用价值,更加利于产品升级。

本设计参考成都的出租车计费标准,利用Verilog HDL语言设计出租车计价器,主要具有行驶路程动态显示计费,等待累计时间计费及最后的总费用动态显示功能,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点。

此程序通过下载到特定的芯片后,可应用于实际的出租车计费系统中。

关键词:出租车计价器; Verilog HDL语言; FPGA; Quartus II; EDAABSTRACTThis 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 chengdu's 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目录第一章绪论 (1)1.1 课题背景: (1)1.2 出租车计价器现状及发展趋势: (2)1.3 本设计的主要工作: (3)1.4 现代数字系统的设计方法 : (3)1.4.1 设计步骤: (3)1.4.2 设计优点: (5)1.5 EDA技术: (5)1.5.1 EDA技术的内涵: (5)1.5.2 EDA技术的基本特征: (6)1.5.3 EDA的基本工具: (7)1.6 EDA 技术简介: (8)第二章出租车计价器的设计 (10)2.1 出租车计价器的要求: (10)2.2 系统组成框图: (10)第三章各模块设计 (11)3.1分频模块: (11)3.1.1 计数器的分频模块: (11)3.1.2 计数器的分频模块VerilogHDL源代码: (11)3.1.3 仿真的结果: (12)3.1.4 数码管的分频模块: (12)3.1.5 数码管的分频模块VerilogHDL源代码: (12)3.2 计程模块: (13)3.2.1 计程模块的框图: (13)3.2.2 计程模块的VerilogHDL源代码: (14)3.2.3 计程模块的仿真结果: (15)3.3计时模块: (16)3.3.1 计时模块的框图: (16)3.3.2 计时模块的VerilogHDL源代码: (16)3.3.3 计时模块的仿真结果: (17)3.4控制模块: (18)3.4.1 控制模块的框图: (18)3.4.2 控制模块的VerilogHDL源代码: (18)3.4.3 控制模块的仿真结果: (19)3.5 计费模块: (19)3.5.1 计费模块的框图: (19)3.5.2 计费模块的VerilogHDL源代码如下所示: (20)3.5.3 计费模块的仿真结果: (20)3.6 数码管显示模块: (21)3.6.1 数码管显示模块的框图: (21)3.6.2 数码管显示的VerilogHDL源代码: (21)3.7 顶层模块: (23)第四章验证方案 (26)4.1 验证的流程图: (26)4.2 验证的VerilogHDL源代码: (26)4.3 系统仿真: (28)第五章结论 (30)5.1 Quartus II软件综合的报表: (30)5.2 综合的RTL级电路: (30)5.3 设计总结: (30)5.4 FPGA设计展望: (32)参考文献 (33)致谢 (34)附录 (35)外文资料(原文) (36)外文资料(译文) (44)第一章绪论1.1 课题背景:随着我国经济的迅速发展,人们生活水平的显著提高,城市交通的日趋完善,出租车逐渐成为人们日常生活不可缺少的交通工具。

基于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的出租车计费器设计报告

基于FPGA的出租车计费器设计报告

课程设计报告课程名称:电子技术课程设计学院:自动化专业:自动化自控班级:自控1201B 学号:2012100329055姓名:成绩:前言电子设计自动化(Electronics Design Automation—EDA)技术是现代电子工程领域的一门新技术。

它提供了基于计算机和信息技术的电路系统设计方法。

EDA技术就是依赖功能强大的计算机,对用电路描述语言描述的设计文件,自动地完成编译、化简、分割、综合、布线、优化、仿真等,直至实现既定的电子电路系统的功能。

EDA技术打破了软件设计和硬件设计间的壁垒,是一门综合性学科,一种新的技能技术。

它将设计效率和产品性能合二为一,代表了电子设计技术和电子应用技术的发展方向。

EDA技术是指以计算机为工作平台,融合应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动化设计。

在EDA技术应用中广泛采用自顶向下的设计方法设计电路工程项目的设计流程包括:用自然语言描述功能特性和技术指标,用硬件描述语言建立系统描述→行为描述→结构描述→逻辑描述,用计算机开发软件进行功能仿真→时序仿真→硬件测试。

设计者在整个设计过程中可根据需要,随心所欲的改变器件内部结构乃至期间外部引脚功能,可以将系统电路分解为各个模块,也可以将多个模块集合在一起,而不必顾及各个器件的技术细节。

正是采用了基于可编程器件的,利用计算机完成的自顶向下的设计方法,大大减少了功能芯片的数量,减轻了设计电路板图的工作量,缩小了整体电路的体积,提高了系统的可靠性,加快了验发的速度,降低了产品设计的成本。

VHDL的全名是Very High Speed Integrated Circuit Hardware Description Language,于83年由美国国防部发起创建,由IEEE(The Institute of Electrical and Electronics Engineers 电气与电子工程师学会)进一步发展,在87年作为“IEEE 标准1076”发布,93年被升级为“IEEE1164”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

出租车计费器一实验任务及要求1.能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(如20元)时,每公里加收50%的车费,车停止不计费。

2.实现预置功能:能预置起步费、每公里收费、车行加费里程。

3.实现模拟功能:能模拟汽车启动、停止、暂停、车速等状态。

4.设计动态扫描电路:将车费显示出来,有两位小数。

5.用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。

6.各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。

7. 完成电路全部设计后,通过系统实验箱下载验证设计的正确性。

计费器按里程收费,每100米开始一次计费。

各模块功能如下:(1) 车速控制模块当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。

(2) 里程动态显示模块其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。

(3) 计费动态显示模块其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当收费超过20时数值加1.5元。

三实验报告要求1.画出顶层原理图;2.用VHDL语言设计各子模块;3.叙述各子模块和顶层原理图的工作原理;4.给出各模块和顶层原理图的仿真波形图;5.给出硬件测试流程和结果。

四:设计说明:实际设计共五个模块,分别为分频模块(每一百米送一个脉冲以方便计数)、计算里程模块、里程取整模块(不足一公里的按一公里算)、计费模块、显示模块。

详细功能如下:1、分频模块:假设车轮每转一圈为2米,送一个脉冲,则需要50分频(共100米),同理,若知道车轮直径,即可算出分频比2、里程模块:每一百米记一次数,最大可以计999.9公里,精确到0.1公里。

3、取整模块:现实中出租车的精确度为0.1公里,计算价格的时候不足一公里的按一公里算,所以加了这一个模块,输出的是计算价格时的里程数。

4、计费模块:按行驶里程收费,起步费为11.00元(包括1元得燃油附加费),并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(20元)时,每公里加收50%的车费,车停止不计费。

5、显示模块:通过动态扫描显示车费和里程数,将十进制数转化为四位十进制数(如将9999转化为四个9)以方便显示设计流程图如下流程说明:车轮每转一圈送一个脉冲波,假设每转一圈为2米,则经过50分频器后是每100米送一个脉冲到里程计算模块,里程计算模块可以精确到0.1公里,将计算的里程数送至取整模块进行判断,若小数部分不为零则整数部分加1,即不足一公里的部分按一公里计算,取整后的里程送至计费模块计费,同时和计算的费用用过显示模块进行转化和显示顶层原理图如下:五、实验结果:通过maxplusII将sof文件下载到试验箱上,运行正常,与实验目的一致,可以通过调整输入的脉冲频率来调整计费的速度。

初始价格为11元,超过3公里每公里加收2元,价格超过20每公里3元。

六、一些问题和改进:总的来说本次试验是顺利的,过程中主要遇到了这几点问题:1、刚开始没有完全想好要用几个模块做,没画好流程图,所以模块数量显得有点多,许多模块显得有些不必要,如取整模块完全可以合并到计费模块中。

2、对其中的管脚定义太过于随意,造成很大空间的浪费,而且在使用较早的芯片时出现管脚不足的现象,这和模块过多也有很大关系。

一些改进的想法:1、在本次设计中,假设车轮每转一圈为2米,刚好50分频,但是显然现实中不会刚好每圈2米,极可能出现有小数的分频,所以分频器需要改进,或者使用其他模块使得没100送一个脉冲。

2、将里程数送到显示模块时,已经是经过取整,所以没有小数部分,但是里程模块的小数部分又不能和整数部分一起送到显示模块进行转化,所以需要想办法将小数和整数部分合并且不影响取整。

3、可以再加上按时间收费的模块以便出租车在较长时间等待的过程中也能计费附:程序清单1、module FDIV ( CLK, K); //分频器设计input CLK ;output K ;reg[12:0] count ; reg M1 ;parameter ratio=50 ; //定义分频比为50,若是不同规格的轮胎,调整此参数always @(posedge CLK)beginif (count==ratio-1) count<=0 ; else count<= count+1 ;if (count==0) M1 <= ~M1; e lse if (count==ratio/2) M1 <= ~M1 ;endassign K=M1 ;endmodule2、module Mileage ( CLK,RST,Mile_int,Mile_dec ) ; //里程模块input CLK,RST ;output [12:0] Mile_int ;output[3:0] Mile_dec ; //定义小数和整数的里程以便取整reg [3:0] count1 ; reg [12:0] count2 ;always @(posedge CLK or posedge RST)beginif(RST) begin count1<=0 ; count2<=0 ; end //里程清零else if (count1==9) begin count1<=0 ;count2<=count2+1 ; end else count1 <= count1+1 ; //每一个脉冲小数里程加1,满十后整数部分加1endassign Mile_dec=count1 ; assign Mile_int=count2 ;endmodule3、module quzheng ( M_int,M_dec,Mile ) ; //取整模块input [12:0] M_int ; //输入的里程整数input [3:0] M_dec ; //输入的里程小数output [12:0] Mile ;reg [12:0] Mile ;always @ ( M_int,M_dec )beginif (M_dec !=0) Mile <= M_int+1 ; //不满一公里的,按一公里计算,即整数部分加一else Mile <= M_int ; //为零则整数不变endendmodule4、module Fare ( CLK,RST,Mile,T_fare ) ; //计费模块parameter S_price=10 , Fuel=1; //起步价10元,燃油附加费1元input CLK,RST ;input [12:0]Mile ; //取整后的里程输入output [12:0] T_fare ; //总的车费reg [12:0] Q1 ;always @ (posedge CLK or posedge RST)beginif(RST) Q1<=0 ;else if(Mile<=3) Q1 <= S_price+Fuel ; //小于3公里,起步价11元else if(Q1<20) Q1 <= S_price+Fuel+2*(Mile-3) ; //大于11小于20元每公里加收2元else Q1 <= S_price+Fuel+3*(Mile-3) ;//大于20元每公里加收3元endassign T_fare = Q1 ;endmodule5、显示模块module deceder (scan,seg7,dp,clk20mhz,money_in,distance_in);output[7:0] scan; //数码管地址选择信号output[6:0] seg7; //7段显示控制信号output dp; //小数点input clk20mhz; //系统时钟20MHZinput [12:0] money_in; //车费input [12:0] distance_in; //路程reg[7:0]scan;reg[6:0]seg7;reg dp;reg clk1khz; //1KHZ分频时钟,用于扫描数码管地址reg[3:0] data;reg[3:0] m_one,m_ten,m_hun,m_tho; //车费钱数的4位十进制表示reg[3:0] d_one,d_ten,d_hun,d_tho; //路程的4位十进制表示reg[15:0] count ;reg[15:0]comb1;reg[3:0]comb1_a,comb1_b,comb1_c,comb1_d;reg[15:0] comb2;reg[3:0]comb2_a,comb2_b,comb2_c,comb2_d;reg[2:0] cnt;//1khz分频,用于扫描数码管地址always@(posedge clk20mhz)beginif(count==1'd10000)begin clk1khz<=~clk1khz;count<='d0;end elsebegin count<=count+1;end//将车费转化为4位十进制数if(comb1<money_in)beginif (comb1_a=='d9&&comb1_b=='d9&&comb1_c=='d9) begincomb1_a<='b0000;comb1_b<='b0000;comb1_c<='b0000;comb1_d<=comb1_d+1;comb1<=comb1+1;endelse if(comb1_a=='d9&&comb1_b=='d9)begincomb1_a<='b0000;comb1_b<='b0000;comb1_c<=comb1_c+1;comb1<=comb1+1;endelse if(comb1_a=='d9)begincomb1_a<='b0000;comb1_b<=comb1_b+1;comb1<=comb1+1;endelsebegincomb1_a<=comb1_a+1;comb1<=comb1+1;endendelse if (comb1==money_in)beginm_one<=comb1_a;m_ten<=comb1_b;m_tho<=comb1_d;endelse if (comb1>money_in)begincomb1_a<='b0000;comb1_b<='b0000;comb1_c<='b0000;comb1_d<='b0000;comb1<='d0;end//将路程转化为4位十进制数if(comb2<distance_in)beginif (comb2_a=='d9&&comb2_b=='d9&&comb2_c=='d9)begincomb2_a<='b0000;comb2_b<='b0000;comb2_c<='b0000;comb2_d<=comb2_d+1;comb2<=comb2+1;endelse if(comb2_a=='d9&&comb2_b=='d9)begincomb2_a<='b0000;comb2_b<='b0000;comb2_c<=comb2_c+1;comb2<=comb2+1;endelse if(comb2_a=='d9)begincomb2_a<='b0000;comb2_b<=comb2_b+1;comb2<=comb2+1;endelsebegincomb2_a<=comb2_a+1;comb2<=comb2+1;endendelse if (comb2==distance_in)begind_ten<=comb2_b;d_hun<=comb2_c;d_tho<=comb2_d;endelse if (comb2>distance_in)begincomb2_a<='b0000;comb2_b<='b0000;comb2_c<='b0000;comb2_d<='b0000;comb2<='d0;endend// 数码管动态扫描always@(posedge clk1khz)begincnt=cnt+1;endalways@(cnt)begincase(cnt)'b000:begin data<=m_one;dp<='d0;scan<='b00000001;end 'b001:begin data<=m_ten;dp<='d0;scan<='b00000010;end 'b010:begin data<=m_hun;dp<='d1;scan<='b00000100;end 'b011:begin data<=m_tho;dp<='d0;scan<='b00001000;end 'b100:begin data<=d_one;dp<='d0;scan<='b00010000;end 'b101:begin data<=d_ten;dp<='d0;scan<='b00100000;end 'b110:begin data<=d_hun;dp<='d1;scan<='b01000000;end 'b111:begin data<=d_tho;dp<='d0;scan<='b10000000;end default:begin data<='bx;dp<='bx;scan<='bx;endendcaseend//7段译码always@(data)begincase(data[3:0])4'b0000:seg7[6:0]=7'b1111110;4'b0001:seg7[6:0]=7'b0110000;4'b0010:seg7[6:0]=7'b1101101;4'b0011:seg7[6:0]=7'b1111001;4'b0100:seg7[6:0]=7'b0110011;4'b0101:seg7[6:0]=7'b1011011;4'b0110:seg7[6:0]=7'b1011111;4'b0111:seg7[6:0]=7'b1110000;4'b1000:seg7[6:0]=7'b1111111;4'b1001:seg7[6:0]=7'b1111011;default:seg7[6:0]=7'b0000000;endcaseendendmodule。

相关文档
最新文档