出租车计费系统的设计.doc_第1页
出租车计费系统的设计.doc_第2页
出租车计费系统的设计.doc_第3页
出租车计费系统的设计.doc_第4页
出租车计费系统的设计.doc_第5页
免费预览已结束,剩余35页可下载查看

下载本文档

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

文档简介

摘要出租车计费系统的设计摘要本设计为一个多功能出租车计费系统,能够实现各种计费功能以及预置起步费,每千米收费,通过动态扫描电路,将车费和路程显示出来。本设计主要研究在EDA工具软件平台上,利用硬件描述语言VHDL语言设计,以Quartus II软件作为开发平台,采用自顶向下的设计方法,由各个基本模块一起构建了一个基于FPGA的出租车计费系统。系统主芯片采用ALTERA公司的EP1K100QC208-3。系统由分频模块,里程计数模块,计费模块及动态扫描模块组成。通过对所设计的程序进行编译及仿真,然后下载到FPGA/CPLD芯片上进行验证,结果显示本系统能够完成各种计费功能将车费和路程显示出来,同时能够准确的模拟汽车启动,停止,暂停状态。关键词:计费系统;硬件描述语言;FPGA;显示26AbstractThe design of taxi billing systemAbstractThe design is for a multi-function taxi meter billing system. It can complete a variety of billing functions and can be charged by one kilometer. The fare and distance will be displayed by dynamic scanning circuit.This design uses hardware description language VHDL. It researches on the EDA software platform and the design uses the software of Quartus II as a development platform, using top-down design method. This taxi meter billing system based on FPGA is made up of four basic blocks. The main chip of the system is EP1K100QC208-3 which is made by the company of ALTERA .The system is made up of frequency module, mileage count module, billing module and dynamic scanning module. The program we designed can be compiled and simulation, then it can be downloaded to the FPGA / CPLD chip. The results show that the system can complete a variety of fare functions and will be displayed at the same time. Its also able to simulate the taxi start, stop and suspend state.Keyword: Billing system; hardware description language; FPGA; display目录目录摘要IAbstractII第一章 绪论11.1选题背景11.1.1 课题相关技术发展11.1.2 课题研究的必要性21.2 课题研究内容3第二章 FPGA简介42.1 FPGA概述42.2 FPGA基本结构42.3 FPGA系统设计流程52.3.1 设计输入(原理图/HDL文体编辑)52.3.2 综合62.3.3 适配62.3.4 时序仿真与功能仿真62.3.5 编程下载72.3.6 硬件测试7第三章 总体设计方案83.1 设计要求83.2 设计原理8第四章 单元电路设计104.1 分频模块104.2 里程计数模块124.3 计费模块144.4 动态扫描模块184.5 顶层模块22结论25参考文献26致谢27附录28第一章 绪论第一章 绪论目前,现代电子产品几科渗透了社会的各个领域,产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。其中专用集成电路设计技术的日趋进步和完善,推动了数字系统的迅速发展。而电子产品技术发展的代表就是电子设计自动化设计(Electronic Design Automation )。本设计采用的VHDL是硬件描述语言的一种,VHDL不仅可以作为系统模拟的建模工具,而且可以作为电路系统的设计工具,可以利用软件工具将VHDL源码自动地转化为文体方式表达的基本逻辑元件连接图。并且具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。本论文采用ISP器件和VHDL语言开发出一套出租车计费系统,该计费系统的可靠性高、成本低、通用性强;该系统在不改变硬件电路的前提下,具有可以重构系统的功能,采用完全相同电路结构,只要根需求在VHDL程序中设置各参数,就可以适应不同计费标准的需要,还可根据需求增加其他功能。1.1选题背景本节将从FPGA嵌入式应用开发技术与计费器技术发展的客观实际出发,通过对该技术发展状况的了解,以及课题本身的需要,指出研究基于FPGA芯片设计出租车计费系统的必要性。1.1.1 课题相关技术发展EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段。现在数字设计依靠手工已经无法满足设计要求,设计工作需要在计算机上采用EDA技术完成。EDA技术以计算机硬件和系统软件为基本工作平台,采用EDA通用支撑软件和应用软件包,在计算机上帮助电子设计工程师完成电路的功能设计、逻辑设计、性能设计、时序测试直至PCB的自动设计等。在EDA软件的支持下、设计者完成对系统功能的描述,由计算机软件进行处理得到设计结果。利用EDA设计工具,设计者可以预知设计结果,减少设计的盲目性,极大地提高设计的效率。EDA技术包括电子电路设计的各个领域:即从低频电路到高频电路、从线性电路到非线性电路、从模拟电路到数字电路、从分立电路到集成电路的全部设计过程,涉及电子工程师进行产品开发的全过程,以及电子产品生产的全过程中期望由计算机提供的各种辅助工作。EDA技术中现代数字系统的都是采用“自顶向下”的设计方法,从系统设计入手,在顶层进行功能方框图的划分和结构设计;在方框图一级进行仿真,纠错,并用硬件描述语言对高层次的系统行为进行描述;在功能一级进行验证,然后用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。“Topdown”设计方法有利于在早期发现产品结构设计中的错误,提高设计的一次成功率。用硬件描述语言进行电路与系统的设计是当前EDA技术的一个重要特征。硬件描述语言突出优点是:语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的复用和继承等。与原理图输入设计方法相比较,硬件描述语言更适合规模日益增大的电子系统。硬件描述语言使得设计者在比较抽象的层次上描述设计的结构和内部特征,是进行逻辑综合优化的重要工具。目前最常用的IEEE标准硬件描述语言有VHDL和Verilog-HDL。不难理解,EDA技术发展到现在已不是某一学科的分支,或某种新的技能技术,它应该是一门综合学科。它融合多学科于一体,又渗透于各学科之中。它打破了软件和硬件间的壁垒,使计算机的软件技术与硬件实现、设计效率和产品性能合二为一,它代表了电子设计技术和应用技术的发展方向。1.1.2 课题研究的必要性 出租车计费器是出租车中最重要的工具,具有良好性能的计费器无论是对出租车司机还是乘客来说都是很必要的。因此,出租车计费器的研究也是十分有应用价值的。传统国内外出租车计费器多数由单片机实现,升级繁琐,成本高,硬件电路复杂,容易在运营过程中产生干扰,影响系统的使用;并且由于分立器件多,必然造成电源功耗大,芯片易发热,影响芯片的使用寿命。基于FPGA的出租车计费器不仅可以解决电子系统小型化、低功耗、高可靠性等问题,而且其开发周期短、开发软件投入少、芯片价格不断降低,所以基于FPGA的出租车计费器已成首选。随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。现在各大中城市出租车行业都已普及自动计费器,所以计费器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计费器的普及也是毫无疑问的,所以未来汽车计费器的市场还是十分有潜力的。1.2 课题研究内容本课题主要研究在EDA工具软件平台上,利用硬件描述语言VHDL语言设计出租车计费系统,以Quartus II软件作为开发平台,设计了出租车计费器系统程序并进行了程序仿真。使其实现计费,预置起步费以及模拟汽车启动、停止、暂停等功能,并能动态扫描显示车费和里程。第二章 FPGA简介第二章 FPGA简介2.1 FPGA概述FPGA(Field Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA几乎能完成任何数字器件的功能,工程师可以通过传统的原理图输入法或者用硬件描述语言来设计一个数字系统。通过软件仿真验证设计的正确性,可以根据需要随时修改设计而不用改变硬件电路,大大的缩短了设计时间,同时提高了系统的可靠性。这些优点使得FPGA技术在20世纪90年代后得到了高速的发展,同时也大大的推动了EDA软件和硬件描述语言HDL的进步。2.2 FPGA基本结构FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列组成,并由可编程的互联资源连接这些逻辑功能块来实现不同的设计。 FPGA一般由三种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这三种可编程电路是:可编程逻辑块(Configurable Logic Block,CLB)、输入/输出模块(I/O Block,IOB)和互联资源(Interconnect Resource,IR)。可编程逻辑块(CLB)是实现逻辑功能的基本单元,它们通常规则地排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源(IR)包括各种长度的连线线段和一些可编程连接开关,它们将各个CLB之间或CLB、IOB之间以及IOB之间连接起来,构成特定功能的电路。FPGA的功能由逻辑结构的配置数据决定。工作时,这些配置数据存放在片内的SRAM或熔丝图上。基于SRAM的FPGA器件,在工作前需要从芯片外部加载配置数据,配置数据可以存储在片外的EPROM或其他存储体上。用户可以控制加载过程,在现场修改器件的逻辑功能,即所谓的现场编程。FPGA结构的主要优点有:(1)FPGA中除了极少的几个引脚以外,大部分引脚都可编程的IOB相连,且均可根据需要设置成输入端或输出端。(2)每个CLB中都包含组合逻辑电路和存储电路两部分,可以设置成规模不大的组合逻辑电路或时序逻辑电路。(3)在CLB之间配备了丰富的连线资源。这些互联资源包括不同类型的金属线、可编程的开关矩阵和可编程的连接点,从而使CLB更易设计成各种应用型电路。FPGA存在的主要缺点有:(1)信号传输延迟时间不是确定的且速度慢(2)由于FPGA中的编程数据存储器是一个静态随机存储器,断电时数据将随之丢失,因此,每次开始工作时都要重新装载编程数据,并需要配备保存编程数据的EPROM。(3)FPGA的编程数据不便于保密。2.3 FPGA系统设计流程一般来说,一个较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块间的接口,然后各个模块再细分去具体实现,这就是自顶向下的设计方法。目前,这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转化成针对某种工艺优化的网络表,使工艺转化变得容易。FPGA/CPLD系统设计的流程如图2-1所示:图形输入/HDL文体编辑综合FPGA/CPLD适配时序与功能门级仿真FPGA/CPLD编程下载FPGA/CPLD器件和电路系统图2-1 应用于FPGA/CPLD的开发流程图2.3.1 设计输入(原理图/HDL文体编辑)图形输入通常包括原理图输入、状态图输入和波形力输入三种常用方法。其中以原理图输入为主,在原理图编辑绘制完成后,原理图编辑器将对输入的图形文件进行排错,之后再将其编译成适用于逻辑综合的网表文件。HDL文本输入与传统的计算机软件语言编辑输入基本一致。就是将使用了某种硬件描述语言的电路设计文本,如VHDL或Verilog的源程序,进行编辑输入。应用HDL的文本输入方法克服了上述原理图输入法存在的所有弊端,为EDA技术的应用和发展打开了一个广阔的天地。目前有些EDA输入工具可以把图形的直观与HDL的优势结合起来。如,在原理图输入方式中,连接用VHDL描述的各个电路模块,直观地表示系统的总体框架,再用自动HDL生成工具生成相应的VHDL或Verilog程序。但总体上看,纯粹的HDL输入设计仍然是最基本、最有效和最通用的输入方法。2.3.2 综合当输入的HDL文件在EDA工具中检测无误后,首先面临的是逻辑综合,在综合之后,HDL综合器一般都可以生成一种或多种文件格式网表文件,在这种网表文件中用各自的格式描述电路的结构。整个综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。由此可见,综合器工作前,必须给定最后实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,成为相应的映射关系。2.3.3 适配 适配器也称为结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、逻辑布局布线操作。适配完成后可以利用适配所产生的仿真文件作精确的时序仿真,同时产生可用于编程的文件。2.3.4 时序仿真与功能仿真 在编程下载前必须利用EDA工具对适配生成的结果进行模拟测试,就是所谓的仿真。有两种不同级别的仿真测试:(1)时序仿真,就是接近真实器件运行特性的仿真,仿真文件中已包含了器件硬件特性参数,因而,仿真精度高。综合后所得的EDIF等网表文件通常作为FPGA适配器的输入文件,产生的仿真网表文件中包含了精确的硬件延迟信息。(2)功能仿真,是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求,仿真过程不涉及任何具体器件的硬件特性。通常的做法是,首先进行功能仿真,等确认设计文件所表达的功能满足设计者原有意图时,即逻辑功能满足要求后,再进行综合,适配和时序仿真,以便把握设计项目在硬件条件下的运行情况。2.3.5 编程下载 把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以便进行硬件调试和验证。 通常,将对CPLD的下载称为编程,对FPGA中的SRAM进行直接下载的方式称为配置,但对于反熔丝结构和Flash结构的FPGA的下载和对FPGA的专用配置ROM的下载仍称为编程。2.3.6 硬件测试 最后是将含有载入了设计的FPGA或CPLD的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情况,以排除错误,改进设计。第三章 总体设计方案第三章 总体设计方案3.1 设计要求本设计要实现出租车计费功能,起步费为6.00元,并在车行2km后按1.9元/km增加。当计费达到或超过一定收费(如20元)时,每千米加收50%的车费,当夜间行驶时,每千米加收50%的车费,车停止计费结束。实现预置起步费,每千米收费。现场模拟汽车启动,停止,暂停的状态。动态扫描电路,将车费和路程显示出来,并有两位小数。3.2 设计原理计费系统结构框图如图3-1所示:车轮传感器计数器A车轮脉冲clk计数器B车轮脉冲clk计数器C10m脉冲oclk2计数器D100m脉冲oclk1译码/动态扫描电路计费数据行驶路程数 据里程显示 收费显示图3-1 出租车计费系统结构框图(1)车轮每转一圈送出一个脉冲,车轮直径以520mm为例,车轮周长为1634mm,即每送一个车轮脉冲,汽车行驶1634mm。计数器A和计数器B分别对车轮传感器送来的车轮脉冲clk进行计数分频,汽车每行驶10m,计数器A输出一个“10m脉冲信号oclk2”,汽车每行驶100m,计数器B输出一个“100m脉冲信号oclk1”。(2)计数器C:对输入的10m脉冲oclk2进行累加,输出实际公里数据给动态扫描模块。(3)计数器D:一方面对输入的100m脉冲oclk1进行累加,另一方面在开始时输出起步费数据,而当超出起步价时就自动在起步价的基础上每增加一个100m脉冲就增加相应的费用,而当总计费值达到或超过一定的收费时或者是夜间行车时,能按新的收费标准进行收费。(4)译码/动态扫描电路模块将路程与费用的数值译码后用动态扫描的方式驱动8只数码管,即所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示。(5)数码管显示将千米数和计费金额均用4位LED数码管显示(2位整数,2位小数)。将图3-1中所示计数器A,计数器B,计数器C,计数器D,译码动态扫描作为底层模块分别用VHDL设计,顶层再用元件例化法(或原理图法)将底层装配在1块FPGA芯片中,配合外围的车轮传感器、7段数码管显示器,构成出租车计费器整个应用系统。第四章 单元电路设计第四章 单元电路设计4.1 分频模块由于里程计数是每10m计数一次,计费是每100m计数一次,所以要对车轮传感器送来的车轮脉冲clk进行计数分频,分频系数分别为6和60。分频电路的逻辑框图如4-1所示。图4-1 分频电路模块该电路的VHDL程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;USE ieee.std_logic_arith.ALL;ENTITY speed IS -实体取名speed PORT ( -端口描述 clk,start : IN std_logic; -clk 车轮脉冲,start 启动暂停开关 oclk1,oclk2 : OUT std_logic -oclk1 100m脉冲,oclk2 10m脉冲 );END speed;ARCHITECTURE behave OF speed IS -结构体名称behaveSIGNAL mode1: std_logic_vector(5 downto 0); -mode1,mode2为分频系数 SIGNAL mode2: std_logic_vector(5 downto 0);SIGNAL temp1: std_logic_vector(5 downto 0); -temp1,temp2为6位,记录计数值SIGNAL temp2: std_logic_vector(5 downto 0);BEGIN mode1=111100 ; -分频系数为60 mode2=000110 ; -分频系数为6PROCESS(start,clk) BEGIN IF rising_edge (clk)THEN -若clk的上升沿来到,则 IF start=1 THEN -若有start=1,则 IF temp1=(mode1) then -若temp=(mode1),则 temp10); -temp1=“000000” ELSE -否则 temp1=temp1+1; -加1计数 END IF; IF temp2=(mode2) then temp20); ELSE temp2=temp2+1; END IF; END IF; END IF;END PROCESS;oclk1=1 WHEN (temp1=mode1)ELSE0; -当temp1=mode1时oclk=1,否则=0oclk2=1 WHEN (temp2=mode2)ELSE0;END behave;程序说明:当启动暂停键为启动状态(高电平)时,模块发出相应频率的脉冲驱动里程计数模块和计费模块进行计数;当处于暂停状态,暂停发出脉冲,此时里程计数模块和计费模块相应地停止计数。仿真结果及分析:当start=1时,开始计数到有6个车轮脉冲时,送出一个10m oclk2脉冲(如图4-2),计数到60个车轮脉冲时,送出一个100m oclk脉冲(如图4-3),而在start=0时,计数暂停直到start=1才继续计数。仿真结果满足设计要求。图4-2 10m oclk2脉冲输出图4-3 100m oclk1输出4.2 里程计数模块由分频模块发出的脉冲作为计数脉冲,并将计数动态显示出来,每来一个脉冲,里程值加0.01(每收到一个脉冲代表运行了0.01公里)。逻辑框图如图4-4所示。图4-4 里程计数模块该模块的VHDL程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;USE ieee.std_logic_unsigned.all;ENTITY cdu99 ISPORT (clk,reset :IN std_logic; -clk10m输入脉冲,reset复位 count1:OUT std_logic_vector(3 downto 0); -里程数值的百分位 count2:OUT std_logic_vector(3 downto 0);-里程数值的十分位 count3:OUT std_logic_vector(3 downto 0);-里程数值的个位 count4:OUT std_logic_vector(3 downto 0);-里程数值的十位END cdu99;ARCHITECTURE aa OF cdu99 ISBEGINPROCESS(clk,reset) VARIABLE mm :std_logic_vector(15 downto 0);BEGINIF reset=1 THEN -复位时,显示为0 mm:=0000000000000000; ELSIF clkevent and clk=1 THEN IF mm(3 downto 0)=1001 THEN -十六进制转换成十进制 mm:=mm+7;ELSE mm:=mm+1;END IF; IF mm(7 downto 4)=1010 THEN mm:=mm+01100000; END IF; IF mm(11 downto 8)=1010 THEN mm:=mm+011000000000; END IF; END IF; count1=mm(3 downto 0); count2=mm(7 downto 4); count3=mm(11 downto 8); count4=mm(15 downto 12);END PROCESS;END aa;程序说明:此模块就是起了个计数的作用,当有一个10m脉冲送过来时,count1就是加1,而当count1计数到9时,其进位信号又被当作count2的计数脉冲进行十分位的计数,依此类推,前一位的进位信号作为下一位的计数脉冲进行计数。值得注意的是这个程序中要将计数值从十六进制转换成十进制,即在十六进制的数上加7或6,同时产生了相应的进位信号。此里程模块的计数范围为0km99.99km。仿真结果及分析:如图4-5所示,当reset=0时,里程模块百分位开始计数,每来一个脉冲,百分位即加1,当百分位等于9时,可以看到向十分位进位。进位情况如图4-6,图4-7。当reset=1时,所有数值清0,完成复位功能,如图4-8所示。仿真结果完全符合设计要求。图4-5 百分位开始计数 图4-6 十分位进位图4-7 个位向十位进位图4-8 复位4.3 计费模块 由分频模块发出的100m计数脉冲作为计费模块的计数脉冲。计费模块的初值为6,当里程超过2公里后,才接受分频模块发出的脉冲的驱动,每来一个脉冲其数值加0.19,当收费超过20时其数值加0.29;当在夜间行驶里,收费20以内每来一个脉冲数值加0.29,收费超过20时每来一个脉冲数值加0.38。逻辑框图如图4-9所示。图4-9 计费模块该模块的VHDL程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY count99 ISPORT (clk,reset,night :IN std_logic; -clk 100m输入脉冲,reset复位,night夜间行驶输入 judge2 :IN std_logic_vector(3 downto 0); -里程个位 judge3 :IN std_logic_vector(3 downto 0); -里程十位 count1 :OUT std_logic_vector(3 downto 0);-计费百分位 count2 :OUT std_logic_vector(3 downto 0); -计费十分位 count3 :OUT std_logic_vector(3 downto 0); -计费个位 count4 :OUT std_logic_vector(3 downto 0); -计费十位END count99;ARCHITECTURE aa OF count99 IS SIGNAL en : std_logic;SIGNAL money : std_logic_vector(7 downto 0);SIGNAL mcount: std_logic_vector(15 downto 0);BEGIN money=00111000 WHEN (mcount(15)=1)or(mcount(14)=1)or (mcount(13)=1)and(night=1) ELSE -夜间行驶且费用超过20,加0.38 00101001 WHEN (mcount(15)=1)or(mcount(14)=1)or(mcount(13)=1)or(night=1) ELSE 00011001; -计费20以内,加0.19en=0WHEN judge3=0000 and judge2(3 downto 1)=000 ELSE1;-里程超过2公里,接受100m输入脉冲驱动PROCESS(clk,reset) VARIABLE mm: std_logic_vector(15 downto 0);BEGIN IF reset=1THEN mm:=0000011000000000; -复位,计费显示为起步费6.00 ELSIF clkevent and clk=1 THEN IF en=1 THEN mm:=mm+money; -里程超过2公里 IF (mm(1)=1or(mm(3 downto 1)=000)or(mm(3 downto 2)=11)THEN mm:=mm+6;END IF; -十六进制转换成十进制 IF mm(7)=1and (not(mm(6 downto 5)=00)THEN mm:=mm+01100000;END IF; IF mm(11)=1and(not(mm(10 downto 9)=00)THEN mm:=mm+011000000000;END IF; END IF;END IF; count1=mm(3 downto 0);count2=mm(7 downto 4);count3=mm(11 downto 8);count4=mm(15 downto 12);mcount=mm;END PROCESS;END aa;程序说明:此程序在不同的计费模式下转换时需要注意转换条件的设置,不能有遗漏也不能有重复的情况。由于此模块计数在脉冲上升沿时不是每次加一,而是加一个特定的数,所以十六进制转换为十进制时需要仔细判断。计费范围099.99。仿真结果及分析:设计的起步费为6,即里程在两公里以内时,都只是算起步费,如图4-10所示。当2公里后,白天行驶时,每来一个脉冲都在起步费6的基础上加0.19,如图4-11所示。当总计费超过20时,每来一个脉冲都在原来的基础上加0.29,如图4-12所示。而当夜间行车两公里后,每公里车费也在白天的基础上增加50%,即每来一个脉冲加0.29,如图4-13所示。当夜间行车,计费超过20时,每来一个脉冲加0.38,如图4-14所示。一次计费结束,要进入下一次计费时,只要按下复位开关,使reset=1就可预置起步费,重新开始下一次计费,如图4-15所示。可以发现,仿真结果完全符合设计要求。图4-10 起步费图4-11 两公里后图4-12 计费超过20 图4-13 夜间两公里后图4-14 夜间计费超过20图4-15 复位起步费64.4 动态扫描模块 动态扫描模块中其实还包括了一个译码子模块,将里程与费用的数值通过译码器译为7段数码编码后用动态扫描的方式分别驱动各4只数码管的字段和小数点。逻辑框图如图4-16所示。图4-16 动态扫描模块该模块的VHDL程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;ENTITY scan ISPORT( clk :IN std_logic; p8 :IN std_logic_vector(3 downto 0); p7 :IN std_logic_vector(3 downto 0); p6 :IN std_logic_vector(3 downto 0); p5 :IN std_logic_vector(3 downto 0); p4 :IN std_logic_vector(3 downto 0); p3 :IN std_logic_vector(3 downto 0); p2 :IN std_logic_vector(3 downto 0); p1 :IN std_logic_vector(3 downto 0); choice :OUT std_logic_vector(7 downto 0); -显示位置选择 data :OUT std_logic_vector(7 downto 0);

温馨提示

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

评论

0/150

提交评论