《基于FPGA的出租车计费器.doc》由会员分享,可在线阅读,更多相关《基于FPGA的出租车计费器.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录摘要1Abstract1第一章 引言21.1课题背景21.2本文的主要工作2第二章 FPGA、VHDL介绍42.1 FPGA现状及发展42.2 FPGA的结构与特点42.2.1 FPGA基本结构52.2.2 FPGA的特点62.3 VHDL设计优点6第三章 出租车计费器的设计73.1出租车计费器的总体设计73.1.1出租车计费标准73.1.2 总体框架设计73.2出租车计费器主要模块设计83.2.1 速度模块93.2.2 计程模块93.2.3 计时模块103.2.4 计费模块10第四章 整体电路设计114.1 整体电路图114.2 电源电路124.3 启动/停止按键电路124.4 自动清
2、零部分13第五章 系统仿真与下载实现135.1 Quartus软件介绍145.1.1软件特点145.1.2 Quartus设计流程:145.2仿真结果155.2.1整体仿真155.2.2速度模块仿真155.2.3计程模块仿真165.2.4计时模块仿真165.2.5 计费模块仿真175.3设计测试17第六章 总结及展望18致谢19主要参考文献19基于FPGA的出租车计费器设计摘要:随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了很多方便。利用它进行产品开发,可以降低研发成本,缩短研发周期。本文介绍了一种采用FPGA
3、芯片进行出租车计费器的设计方法,描述了研究该课题的意义和应用价值;说明了Altera公司的FPGA结构原理及其主要运用;介绍了超高速集成电路硬件描述语言的主要功能和设计;讲解了出租车计费器的系统原理和功能。本文主要采用了Altera公司的可编程逻辑芯片EPC2C35F672C8为核心控制,并附加一定外围电路组成出租车计费器,使用目前流行的VHDL语言进行设计,具有移植性强的特点,便于升级及可重复使用。利用Quartus6.0对所设计的出租车计费器的VHDL代码进行仿真,并在FPGA数字实验系统上实现了该控制。 关键字: FPGA, VHDL, Quartus, 出租车计费器Design of
4、Taxi Meter Based on FPGAABSTRACT:With the rapid development of EDA technology, the design and tools of electronic system have deeply changed. And the large-scale programmable logic device CPLD/FPGA appearance to make convenience for designer. By using it to research and develop, it will help deviser
5、 to reduce cost, shorten cycle. This essay introduces a design of taxi meter by using FPGA chip, describes the significance and importance to research this, explain makeup elements of FPGA which is made by Altera Company, introduce the main function and design of Very-High-Speed Integrated Circuit H
6、ardware Description Language, interpret the taxi meter principle and functions of the system. This essay mainly use the EPC2C35F672C8 for core control, and add some outside circuit to make a taxi meter. It is designed with VHDL Language and it can be migrated easier. This make the product much more
7、convenience to repeat use. By using Quartus6.0 to emulate taxi meter VHDL code, the PFGA digital experiment system can be controlled.Key Words: FPGA, VHDL, Quartus, Taxi fare Registers第一章 引言1.1课题背景几年来,出租车行业发展迅速,全国大大小小的出租车公司已有数千家,基于出租车的附属品市场前景也是十分广阔。传统的出租车计费器大多是由单片机实现的,发展使用也是十几年了,在稳定性、成本、制造工艺、使用习惯等方面
8、都具有一些优势,但在运营过程中系统不是很稳定,容易造成死机的现象。传统计费器的不足点:1. 产品更新周期长:传统的计费器利用微控器,大部分功能依靠单片机实现。但单片机的程序不通用,不同芯片指令集不相同,因此设计研发比较困难,周期很长。2. 计价方式不灵活:每次计价标准修改都需要重新烧录芯片,使得每次价格调整都成为很费力的事情,很难适应社会发展的需要。本设计基于FPGA的出租车计费器主要由Altera公司的Cyclone型系列芯片EPC2C35F672C8及一些外部控制电路组成。使用软件Quartus和超高速硬件描述语言VHDL来实现计价标准灵活设定。FPGA在电子设计领域中价格低廉,有良好的发
9、展趋势,它的出现必定会占领大部分数字器件市场。1.2本文的主要工作面对出租车行业日益迅猛的发展趋势及对计费器更高的灵活性的要求,本设计希望尝试一些新的方法来予以解决。 (1).利用FPGA取代传统微控器随着FPGA等数字可编程器件的出现解决了传统电子设计不能完成的任务,利用FPGA来实现出租车计费器,可行性很高,而且电路简单,大大减少外围器件,可以用软件完全仿真,灵活度高,可以设计一些复杂的系统,而且编好的系统可以在不同的FPGA或CPLD芯片上通用。FPGA能完成任何数字器件的功能,使用FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。同时由于FPGA的功能完全
10、取决于VHDL语言编写的程序,不拘泥于某种芯片的特殊指令,更加提高了产品的更新换代能力。 (2).完成基于FPGA的出租车计费器的设计出租车计费器系统是VHDL语言的实际应用,利用VHDL语言设计出来的出租车计费器系统将实现计程模块、计时模块以及动态扫描模块等设计方法与技巧。计程模块将用计数器来完成,计数器对脉冲数计数,然后提供给程序数据。通过不同的信号,然后用比较器可以让我们确定出租车是在车行计程还是车停计时。再将数据传输到计费模块,通过多种条件判定,最后确定输出值,然后相加确定最后的费用,并显示出来。第二章 FPGA、VHDL介绍2.1 FPGA现状及发展FPGA是现场可编程门阵列(Fie
11、ld Programmable Gate Array)的简称。它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA起源于美国的Xilinx公司,该公司于1985年推出了世界上第一块FPGA芯片。在这二十年的发展过程中,FPGA的硬件体系结构和软件开发工具都在不断的完善,日趋成熟。从最初的1200个可用门,90年代时几十万个可用门,发展到目前数百万门至上千万门的单片FPGA芯片,Xilinx、Altera等世界顶级厂商已经将FPGA器件的集成度
12、提高到一个新的水平。FPGA结合了微电子技术、电路技术、EDA技术,使设计者可以集中精力进行所需逻辑功能的设计,缩短设计周期,提高设计质量。目前世界上有十几家生产CPLD/FPGA的公司,最重要的几家是Altera、Xilinx、Lattice和Actel。Actel公司生产的FPGA广泛应用于通信等领域,该公司的部分FPGA系列采用了繁荣死结构,可以应用于航空航天、军事领域。另外一些FPGA采用了Flash工艺制造。Xilinx公司目前有8款FPGA的DSP。其中Sparten-3A DSP为低端产品,高端的Virtex-DSP分为两个产品线:Virtex-4 SX,采用了65nm工艺的Vi
13、rtex-5 SXT。所以Xilinx的产品从21最多到352个GMAC/s(千兆乘加/秒),以提供不同范围的性能,同时也增大在存储器方面的带宽。因此最低速产品可以运行到250MHz,告诉产品运行到550MHz;MAC单元从84到640。Altera公司的高密度Stratix器件拓展FPGA的DSP性能。嵌入式DPS模块运行在550Hz,这些器件可达每秒492千兆乘加(GMAC)的性能,并结合良好的逻辑结构于速度优化的互联。Stratix器件可以引脚完全兼容地移植到HardCopy结构化ASIC,从而保证客户的设计功能没有任何改变。Altera的新一代结构化ASIC芯片,逻辑相当于多达220万
14、ASIC门,DSP模块相当于额外的140万门,还有集成超过8Mbits的嵌入式存储器。2.2 FPGA的结构与特点 2.2.1 FPGA基本结构目前生产FPGA的主要公司有Altera、Xilinx、Lattice和Actel,生产的FPGA品种和型号繁多,尽管这些FPGA的集体结构和性能指标各有特色,但它们都有一个共同之处,即由逻辑功能块排成阵列,并有可编程的互连资源连接这些逻辑功能块,从而实现不同的设计。典型的FPGA通常包含三类基本资源:可编程逻辑功能块、可编程输入/输出块和可编程互联资源,基本结构如图2-1所示。 图2-1 FPGA基本结构 2.2.2 FPGA的特点FPGA使用的是可
15、编程的查找表(Look Up Table,LUT)结构,LUT是可编程的最小逻辑结构单元。大部分FPGA采用基于SRAM的查找表逻辑形成结构,就是用SRAM(静态随机存储器)来构成逻辑函数发生器。一个N输入查找表(LUT)可以实现N个输入变量的任何逻辑功能。目前市场上有三种基本FPGA编程技术:SRAM、反熔丝、Flash。其中SRAM是迄今为止应用范围最广的架构,主要因为它速度快且具有可重编程能力,而繁荣死FPGA只具有一次可编程(One Time Programmable,OTP)能力。基于Flash的FPGA是FPGA领域比较新的技术,也能提供重编程功能。 2.3 VHDL设计优点利用V
16、HDL语言设计数字逻辑硬件系统具有多方面的优点。1 VHDL可以用来描述逻辑设计的结构,比如逻辑设计中有多少个子逻辑,而这些子逻辑是如何连接的。2 VHDL并不十分关心一个具体逻辑是靠何种电路实现的,设计者主要把精力集中电路所能实现的功能上。3 VHDL采用类似于高级语言的语句格式完成对硬件行为的描述,所以我们称VHDL为行为描述语言。4 VHDL所给出的逻辑的模拟与调试为设计者提供了最大的空间,用户甚至不必编写任何测试向量便可进行源代码级的调试。5 设计者可以非常方便地比较各种方案的可行性和优劣,大大降低了设计的难度。并且设计者的原始描述是非常简练的硬件描述,经过EDA工具处理最终生成付诸生
17、产的电路描述或版图参数描述的工艺文件。6 VHDL语言具有良好的可读性,VHDL语言中的设计尸体(Design Entity)、程序包(Package)、设计库(Library)为设计人员重复利用别人的设计成果提供了技术手段。第三章 出租车计费器的设计3.1出租车计费器的总体设计 3.1.1出租车计费标准车起步开始计费,首先显示起步价,起步费为3.00元,车在行驶3km以内,只收起步价。车行驶超过3km后,每公里2元,车费依次累加。当总费用达到或超过40元时,每公里收费4元。当遇到红灯或客户需要停车等待时,则按时间计费,计费单价为每20秒收费1元。3.1.2 总体框架设计系统流程介绍:分析系统
18、设计要求不难得知,整个出租车计费系统按功能主要分为速度模块、计程模块、计时模块和计费模块,其系统结构图如图3-1所示。图3-1 出租车计费器系统结构图系统接收到reset信号后,总费用变为3元,同时其他计数器、寄存器等全部清零。系统接收到start信号后,首先把部分寄存器赋值,总费用不变,单价price寄存器通过对总费用的判断后赋为2元。其他寄存器和计数器等继续保持为0。速度模块:通过对速度信号sp的判断,决定变量kinside的值。Kinside即是行进100m所需要的时钟周期数,然后每行进100m,则产生一个脉冲clkout。计程模块:由于一个clkout信号代表行进100m,故通过对cl
19、kout计数,可以获得共行进的距离kmcount。计时模块:在汽车启动后,当遇到顾客等人或红灯时,出租车采用计时收费的方式。通过对速度信号sp的判断决定是否开始记录时间。当sp=0时,开始记录时间。当时间达到足够长时产生timecount脉冲,并重新计时。一个timecount脉冲相当于等待的时间达到了时间计费的长度。这里选择系统时钟频率为500Hz,20s即计数值为1000。计费模块由两个进程组成。其中,一个进程根据条件对enable和price赋值:当记录的距离达到3公里后enable变为1,开始进行每公里收费,当总费用大于40元后,则单价price由原来的2元每公里编程4元每公里;第二个
20、进程在每个时钟周期判断timeout和clkout的值。当其为1时,则在总费用上加上相应的费用。3.2出租车计费器主要模块设计从上述设计方案中我们可以大致得到出租车计费器的系统框图,如图3-2所示。其中clk为输入时钟脉冲,时钟上升沿有效;reset为复位信号,start为开始计费信号,stop为停止计费信号,均高电平有效;SP2.0表示出租车状态(停止或不同形式速度);kmcnt和count信号则分别输出出租车行驶的里程和花费。 图3-2 出租车计费器系统框图3.2.1 速度模块速度模块首先根据start信号判断是否开始计费,然后根据输入的速度档位sp2.0的判断,确定行驶100m所需要的时
21、钟数,每前进100m,输出一个clkout信号。同时由cnt对clk进行计数,当cnt等于kinside时,把clkout信号置1,cnt清0。其模块框图如图3-3。图3-3 速度模块框图3.2.2 计程模块此模块主要用于记录行进的距离,其模块框图如图3-4所示。通过对clkout信号的计数,可以计算行驶的距离kmcount。一个clkout脉冲相当于行进100m所以只要记录clkout的脉冲数目即可确定共行进的距离。Kmcount1为十分位,kmcount2为个位,kmcount3为十位,分别为十进制数。图3-4 计程模块框图3.2.3 计时模块速度模块主要用于计时收费,记录计程车速度为0的
22、时间(如等待红灯),其模块框图如图3-5所示。通过对sp信号的判断,当sp=0,开始记录时间。当时间达到足够长时,产生timecount脉冲,并重新计时。图3-5 计时模块框图3.2.4 计费模块计费模块如图3-6所示,可分为kmmoney1和kmmoney2两个进程。Kmmoney1用于产生enable和price信号。当记录距离达到3km后,enable信号为1,开始进行每公里收费。当总费用大于40元后,单价price由原来的2元变成4元,用作计时收费。通过对sp信号的判断,当sp=0,开始记录时间。当时间达到足够长时,产生timecount脉冲,并重新计时。Kmmoney2用于判断tim
23、ecount和clkout的值,当其为1时,总费用加1。最终输出为总费用。图3-6 计费模块框图第四章 整体电路设计4.1 整体电路图整体RTL电路如图4-1。硬件电路由Cyclone电路板组成,clk为时钟周期信号,由试验箱产生,start/stop是启动停止按键电路,reset为自动清零电路。电源又AD-DC开关电源供电。图4-1 整体RTL门电路4.2 电源电路电源采用了是比较流行的开关电源,AD-DC开关电源,输入115VAC到230VAC,输出+5V(4A)。使用开关电源的好处就是比较节省能源,它的转换效率很高,可达85%以上,稳压范围宽,除此之外,还具有稳压精度高、不使用电源变压器
24、等特点。4.3 启动/停止按键电路如图4-2所示,采用双刀双路开关,一路开关用于清零部分,由于显示部分特殊要求,即计费停止后屏幕上荏苒要保持计费的所有信息,只有当下次计费启动时才清零从新开始计费。另外两路开关,其中一路用于启动指示和启动/停止输出信号给FPGA芯片的I/O口。当按下键后,清零部分和启动计费部分同时进行,但清零只是瞬间的,计费指示灯两起。再次按下键后,开关换到另外的两路,空车指示灯亮起。图4-2启动/停止按键电路4.4 自动清零部分由于显示部分的特殊要求,即计费停止后屏幕上仍然要保持计费的所有信息,只有当下次计费启动时才清零从新开始计费。VHDL语言的特殊性,不能在一个结构中用两
25、个不同的动作使其赋值。所以必须要有一个瞬间清零的信号,当FPGA的清零I/O端口为“1”时就自动清零。使用电容的充放电功能来实现,按键断开时清零输出端为接地,按键闭合时电容充电清零端为高电平,充完电后清零端输出又为低电平,当按键断开后,通过一个2k欧姆的电阻放电,为下次充电做好准备。如图4-3所示。图4-3 自动清零电路第五章 系统仿真与下载实现5.1 Quartus软件介绍 5.1.1软件特点Quartus是Altera公司自行设计的一个完全集成化、易学易用的可编程逻辑设计环境,它提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:1 可利用原理图、结构框图、Ver
26、ilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;2 芯片(电路)平面布局连线编辑;3 LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;4 功能强大的逻辑综合工具;5 完备的电路功能仿真与时序逻辑仿真工具;6 定时/时序分析与关键路径延时分析;7 可使用SignalTap逻辑分析工具进行嵌入式的逻辑分析;8 支持软件源文件的添加和创建,并将它们连接起来生成编程文件;9 使用组合编译方法可一次完成整体设计流程;10 自动定位编译错误;11 高效的期间编程与验证工具;12 可读入标准的EDIF网表文件、VHDL网表文
27、件、和Verilog网表文件;13 能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件; 5.1.2 Quartus设计流程:1 设计输入:完成器件的硬件描述,包括文本编辑器、块与符号编辑器、MegaWizard插件管理器、约束编辑器和布局编辑器等工具;2 综合:包括分析和综合器、辅助工具和RTL查看器等工具;3 不惧连线:将设计综合后的网表文件映射到实体器件的过程,包括Fitter工具、约束编辑器、布局图编辑器、芯片编辑器和增量布局连线工具;4 时序分析;5.2仿真结果5.2.1整体仿真对电路整体进行仿真,得出如下仿真波形图5-1。图中,当复位信号reset为高电平时,系统
28、所有寄存器、计数器都清零;当开始计费信号start信号有效时,计费器开始计费,根据出租车行驶的速度sp2.0的取值计算所用花费和行驶里程;当停止计费信号有效时,计费器停止工作。 图5-1 出租车计费器仿真波形图5.2.2速度模块仿真速度模块的仿真波形图如图5-2所示。该模块根据出租车所处的运行状态和不同的形式速度,对相应数目的时钟周期进行计数,车每行驶100m时输出信号clkout输出高电平。图5-2 速度模块仿真波形图5.2.3计程模块仿真计程模块的仿真波形如图5-3所示。图中,当reset信号有效时,系统复位清零;否则,对输入信号clkout进行十进制计数。图5-3计程模块仿真波形图5.2
29、.4计时模块仿真计时模块的仿真波形图如图5-4所示。预设1000个时钟周期为20s,对时钟周期进行计数,每计1000个时钟周期输出高电平,指示计时20秒。图5-4 计时模块仿真波形图5.2.5 计费模块仿真计费模块的仿真波形图如图5-5所示。当reset信号有效时,系统复位清零;否则,当计时计费信号timecount和计程计费信号clkout为高电平时,按照一定计费规则进行计费。图5-5计费模块仿真功能图 综上所述,本设计的出租车计费器完全符合系统设计的要求,实现了出租车计费器所需的各项基本功能。5.3设计测试利用Quartus6.0对所设计出租车计费器的VHDL代码进行了仿真,并在Cyclo
30、ne型可编程数字实现系统上实现了该控制。该数字实现系统分成两部分,一是FPGA的下载板,它主要包括所使用的芯片、RS-232接头、接脚转换插槽等;另一部分是I/O实验板,它主要包括显示、脉冲输出等。出租车计费器的各部分利用数字实验系统所附的RS-232连接线将计算机中的VHDL代码设计的内容烧录到该实验系统的EPC2C35F672C8芯片中进行测试,测试结果基本实现了总费用=起费用+(里程-3km)里程单价+等待时间等待单价的出租车计费模式。第六章 总结及展望本文论述了基于FPGA的出租车计费器设计,分别介绍了整个系统和各个模块的设计,使用FPGA芯片、VHDL硬件描述语言作为设计手段,利用自
31、顶向下的模块化设计思路,通过在Quartus软件下进行的模拟仿真,并进行相应的硬件下载调试,证明所设计的系统完成了出租车计费器的功能,各项技术指标符合预定标准,具有一定实用性。由于本人在经验水平上的欠缺,设计中可能存在很多不足,请各位老师予以指证!近年来,FPGA在通信、控制、数据计算等领域得到了广泛的应用,利用FPGA来设计电子产品可减少电子系统的开发风险和开发成本;缩短了上市时间;通过在系统编程、远程在线重构等技术降低维护升级成本。并且,FPGA器件的成本越来越低,Actel公司发布第三代的基于Flash的可编程逻辑方案,这些新的FPGA芯片最低价将达到1.5美元,代表全球最低成本的FPG
32、A。这些都说明可编程器件已成为现在及未来很长一段时间的主流,用它来实现的出租车计费器省去很多外围电路,稳定,简单有效,将来必然可以设计出更多更强大的功能,提高产品竞争力。未来基于FPGA平台的出租车计费器将会有更低的成本、更小的体积、更安全、更精确和更多功能。致谢本次设计从选题到最后完成,都得到了指导老师付敏老师的悉心指导。付老师渊博的知识、严谨的治学态度和诲人不倦的精神永远是我学习的榜样。同时,感谢论文指导组的刘海力老师和郭仟老师对选题的分析。在系统设计过程中,我也遇到了较多的困难,我十分感谢我的朋友和老师给与我的帮助和支持,使我能顺利完成本系统的设计与实现。主要参考文献1 刘韬,楼兴华.
33、FPGA数字电子系统设计与开发实例导航M. 北京:人民邮电出版社,2005.6, 2736.2 王辉,殷颖,陈婷,俞一鸣. MAX+plus和Quartus应用于开发技巧M. 北京:机械工业出版社,2007.1,293316.3 焦敏. FPGA 在出租车计费器上的应用研究J;中国科技信息,2009(9):145146.4 茅丰. 基于FPGA 的出租车计费器J;电子技术应用,2007.3.5 廖艳秋. FPGA 的出租车计费器J;电子科技大学,2008.10.6 吴冬梅,吴延海,邓玉玖. 基于CPLD/FPGA 的出租车计费器J;电子技术应用,2004(11):7173.7 黄智伟. FPG
34、A 系统设计与实践M.,北京:电子工业出版社,2005,200217.8 黄建新,刘迈,谭克俊. 基于FPGA芯片设计出租车计费器的研究J. 吉林化工学院学报,2003(03):5255.9 候伯亨,顾新. VHDL 硬件描述语言与数字逻辑电路设计M. 西安:西安电子科技大学出版社,2000.10 姜雪松,VHDL设计实例与仿真M.北京:机械工业出版社,2007.1,91103.11 王彦芳,王小平,王彦永等.用可编程逻辑器件实现专用数字集成电路的功能设计J.半导体情报,2000,37(5)4851.12 张立,张光新,柴磊等. FPGA 在多功能计费器系统中的应用J. 仪器仪表学报,2005
35、,26(8):.13 林愿. 基于CPLD/FPGA 的出租车计费器系统的设计实现J. 国外电子元器件,2007(07):2629.14 周润景,图雅,张丽敏. 基于Quartus II 的FPGA/CPLD 数字系统设计实例J. 北京:电子工业出版社,2007.15 刘欲晓,方强,黄宛宁.EDA技术与VHDL电路开发应用实践M;北京:电子工业出版社,2009(4),175186.16 英Jone Wulenskl. VHDL Digtal System DesignM,北京:电子工业出版社,2004,10105.17 San Jose. MAX+PLUS II Introduction US
36、AM:Altera Corporation,2004,5269.附录 VHDL程序1) Speed模块library ieee; -加载库文件use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speed isport( -定义输入输出端口clk :in std_logic;reset:in std_logic;start:in std_logic;stop :in std_logic;sp :in std_logic_vector(2 downto 0);clkout:out std_logic);end sp
37、eed;architecture rtl of speed isbeginprocess(clk,reset,start,stop,sp) -敏感信号发生变化时,启动进程type state_type is(s0,s1); -枚举类型;variable s_state:state_type; variable cnt:integer range 0 to 28;variable kinside:integer range 0 to 30;begincase sp is -速度选择when000=kinside:=0; -停止状态或空档when001=kinside:=28; -第一档when0
38、10=kinside:=24; -第二档when011=kinside:=20;-第三档when100=kinside:=16;-第四档when101=kinside:=12;-第五档when110=kinside:=8;-第六档when111=kinside:=4;-第七档end case;if reset=1then-复位清零s_state:=s0;elsif clkevent and clk=1then-时钟上升沿到达时,状态转换case s_state iswhen s0=cnt:=0;clkoutclkout=0;if stop=1thens_state:=s0;-相当于无客上车el
39、sif sp=000thens_state:=s1;-有客上车但车速为0,即刚上车还未起步elsif cnt=kinside thencnt:=0;clkoutwaittime:=0;timecountif sp=000thent_state:=t2;elsewaittime:=0;t_state:=t1;end if;when t2=waittime:=waittime+1;-等待时间加1timecount=0;if waittime=1000 thentimecount=1;-产生一个时间计费脉冲waittime:=0;elsif stop=1thent_state:=t0;elsif s
40、p=000thent_state:=t2;elsetimecount=0;t_state:=t1;end if;end case;end if;end process;end rtl;3) Kilometers模块library ieee; -加载库文件use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity kilometers isport(-定义输入输出端口clkout,reset:in std_logic;kmcnt1:out std_logic_vector(3 downto 0);kmcnt2:out st
41、d_logic_vector(3 downto 0);kmcnt3:out std_logic_vector(3 downto 0);end kilometers;architecture rtl of kilometers isbeginprocess(clkout,reset)-启动进程variablekm_reg:std_logic_vector(11 downto 0);beginif reset=1then-复位清零km_reg:=0;elsif clkoutevent and clkout=1then-时钟上升沿到达时进行计程if km_reg(3 downto 0)=1001then-对应里程十分位km_reg:=km_reg+0111;-十分位向个分位进位elsekm_reg(3 downto