出租车计费器的FPGA实现

上传人:s****a 文档编号:229001813 上传时间:2023-08-22 格式:DOCX 页数:24 大小:350.13KB
收藏 版权申诉 举报 下载
出租车计费器的FPGA实现_第1页
第1页 / 共24页
出租车计费器的FPGA实现_第2页
第2页 / 共24页
出租车计费器的FPGA实现_第3页
第3页 / 共24页
资源描述:

《出租车计费器的FPGA实现》由会员分享,可在线阅读,更多相关《出租车计费器的FPGA实现(24页珍藏版)》请在装配图网上搜索。

1、華场浚歩衣摩可编程逻辑器件电路设计课程设计报告出租车计费器的FPGA实现华南农业大学工程学院摘要出租车计费系统利用VHDL语言,以MAX+PLUSII软件作为开发平台而设计。系统包括 五大模块主控模块、分频模块、里程模块、计费模块和显示模块;预置和模拟汽车 启动、停止、计费、暂停等功能,并动态扫描显示车费与里程。关键词: 出租车计费系统 VHDL 语言 MAX+PLUSI FPGA 数字系统目录1方案比较与选择(须详细阐述创新点或新见解)12底层文件仿真与分析42.1底层文件仿真42.2底层文件分析43顶层文件仿真与分析73.1顶层文件仿真73.2顶层文件分析74硬件验证分析85课程设计心得9

2、Abstract10参考文献11附录(源代码)1方案比较与选择1.1方案一数码管显示图1图2出租车计费器方案一原理框图1.1.1出租车计费器方案一原理基于CPLD/FPGA的出租车的组成如图1所示。各部分主要的功能如下:(1)A计数器对车轮的传感器送来的脉冲信号进行计数(每转一圈送一个脉冲)。不 同车型的车轮可能不一样,通过“设置1”对车型做出选择,以实现对不同车型直径的车 进行调整。(2)B计数器对百米脉冲进行累加,并输出实际的公里数的BCD码给出译码动态扫 描模块。每计,满500送出一个脉冲给出C计数器。“设置2”实现起步公里数预制。(3)C计数器实现步长可变(即单价可调)的累加计数,每5

3、00米计费一次。“设置 3”用来完成超价加费,起步价预制等。(4)译码/动态扫描见路程与费用的数字译码后动态扫描的方式驱动数码管。(5)数 码管显示将公里数和计费金额平均用四位数码管显示(三位整数,1为小数)1.1.2出租车计费器方案一优点根据车型的车轮直径来进行脉冲调整,因为实际车轮大小并非完全一致,需要根据实 际大小而重新设置;起步价调整。起步价调整解决了由于地域的同步而导致起步价的不 同,从而是出租车计费系统有更广和广阔的市场,同时也解决了由于起步价调整而更换 计费系统的问题。1.1.2出租车计费器方案一缺点计费系统的精度不高,里程计费精度太低,在设计过程中设置车轮的直径过于复杂, 不利

4、于系统的完成。1.2方案二图2出租车计费器方案二原理框图1.2.1出租车计费器方案二原理基于FPGA设计的出租车计费器系统如图2所示,各模块功能如下:(1)分频模块:分频模块主要采用的是加法分频电路,该分频器为十分频电路,并且 分频器带有“开始“/” “清零”端(ENABLE3为高电平是开始),将分频得CLK2用于里程 计费模块的脉冲。(2)车态模块:车态模块主要利用状态机原理。将出租车计费系统设置成四个状态, STATE二“00”实现的是清零操作;STATE二“01”是显示在行驶3km以内,只收起步价7.00 元状态;STATE= “10”是车行驶超过3km后,按每公里2.2元计费;STAT

5、E= “11 ”行驶 路程达到或超过9km后(车费达到20元),每公里加收50%的车费,车费变成按每公里3.3 元开始计费。并把每一状态传输给计费模块。(3)控制模块:控制模块属于整个出租车系统的顶层文件,负责这个系统,T_CLR 是清零键,即归零显示;T_STO是暂停信号;T_ENABLE是使能信号,是启动 键,T_ENABLE二0时启动计费器。(4)里程模块:里程模块的一个基准时钟,实现加0.1公里,并将十进制数转化成 四位 BCD 码,传输给显示电路显示。(5) 计费模块:计费模块接收来自车态模块的状态信号和分频电路的十分频脉冲作 基准时钟。计费模块设置了四个状态,第一个状态保持属于清零

6、状态,第二状态保持显 示“007.0”,第三个状态实现一个脉冲加 2.2,第四个状态是一个脉冲加 3.3。将十进制 的计费转化成BCD传输给显示模块。(6) 显示模块:显示模块是由七段LED数码译码和动态扫描两部分组成。采用的是共 阴极数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费毒药 用一位小数点来表示,所以须要设置一个控制小数点的变量,即程序中的DP。这段程序 所示的是在数码管的第二、六个数码管后面的显示小数点,实现了路程和车费都用 1 位 小数点表示的功能,要主要的是选择的扫描频率不合适,可能会出现小数点闪动的情况 但只要扫描频率不少于24HZ,人眼就感觉不到数码管

7、的闪烁。数码管控制及译码显示模 块将 BCD 信号的输入用七段数码管显示,由七段发光二极管组成数码显示,利用字段的 不同组合,可表示 0-9 十个数字。1.2.2 出租车计费器方案二优点 方案二继承了方案一优点,并有效的解决了方案一的精度低的缺点,并且在原件设计 上容易实现。1.2.2 出租车计费器方案二缺点系统的模块过多,不利于顶层文件的实现。1.2.2 出租车计费器方案二可行性系统各个模块的设计相对于方案一容易,特别是分频模块和车态模块。2.底层文件仿真与分析2.1出租车计费器系统电路FENPINLKOBLCLRLK2TOP图3出租车计费器系统电路2.1.1分频模块分析及仿真图分频电路实现

8、的功能是:将里程模块的基准时钟进行十分频,即CLK0每来四个脉冲,该模块即将一个脉冲发出,作为计费模块的基准时钟,如图4所示。2.1.2车态模块分析及仿真当车处于暂停时,车费保持值不变,定义此时ST的状态值为00;当车程小于3公里时,定义此时ST的状态值为01;车程大于3公里小于9公里时,定义此时ST的状态值 为10;车程大于9公里时,定义此时ST的状态值为11,如图5所示。 chetai. scf - fwefon EditorUMReJ431.Jns| +|*| lime:823.妣Inlerza337.5ns2jD.ODValue:Q bOC.uns GOC.Ons沪盹少E何LE-朗昴S

9、TD2ffUlW状态从0跳变到 1,跳变时间过 短,未能显示0Z状态从0跳变到1,1到2,跳变时间过、短,未能显示0、1unUIIllT” f 1一 J乙衣dnnjnmnnnnjW图5车态模块仿真图2.1.3计费模块仿真当车程在3公里内时车费保持7元不变;当车程大于3公里小于9公里时,每来一个 驱动脉冲相当于车前进了 1公里,即车费要加2.2元;当车程大于9公里每来一个脉冲 车费要加3.3元,如图6所示。里程模块是每一个脉冲到来,相当于车向前走了 0.1公里,所以车程自加一公里,如图7所示。+ lima 3巨飞Ref: 208.5ns血開! 48.5nshjyv询血 I哑.蚯31.0nsSjD

10、.DnsDO.OnsBOD:_:_s1111o此鮎1辭D3可正丽垂更駆注頑隧交番dD30M3【2 N 、 灿:rJo;舂W叽,亠人、丄每来个脉冲二眺DD十0J-ENABLE11图7里程模块仿真图2.1.5显示模块仿真采用8位动态扫描显示车费和车程,其中DI1-DI4是计费输入,DI5DI6是里程输 入,WEI是接入74LS138译码器,SG是数码管的七段显示接口。当DI1-DI8输入“41753452”, WEI二0时,第一个数码管应该显示4,对应数码管译码为“1100110”;当WEI二1 时,第二个数码管应该显示1,对应数码管译码“0000110”,转为十进制是6如图8 所示。图8显示模块

11、仿真图2.1.6顶层文件仿真与分析顶层文件为出租车计费器控制模块,有五个输入端口,分别是T_CLR清零信号,低电 平清零;T_ENABLE为使能信号,当使能信号为高电平时,开始计费,里程;T_STO为暂 停信号,高电平有效;T_WEI是控制74LS138译码器的控制端,进行数码管的位选择,T_SG 是控制数码管的段,实现数码管显示内容;T_DOT是第二位与第六位的小数点段,如图9、 图10所示。Name: 一- T_CLR _T_ENABLE 一LSTO _T_CLKO 一T_CLK2T_wejOT_SGT JOTW:30帀 Tme:|2.E52LS0.0 ns匚500.0ns I.OubT_

12、wei使数码 管逐位输出3.0us j.Sus 4.0us4. bus 5.00n1m弊mILTm1mm1mmImLTB:OC000(。辺 01D uM J 1DD(1C1 )(1 啦:则 I D1u(即K他;00111111C1111110Start |竹/1星3山0111111F7 End 113 1274dmI IM即胡:|0 1nw图10是所指部分放大图图9顶层文件仿真图teA3EName rf-T CLRValue13 1?38us13 1J35us13 1532us13.1629un1T_CLKOibT_CLK2寸 T_SGp T_DOTb aoiD01图10顶层文件仿真图局部放大

13、图n m1001111位为T wei 为 001 时,是第一位数码官显示,计费最高4. 硬件验证分析程序代码在MAXPLUSII成功编写和仿真完毕,然后拷入FPGA。硬件验证步骤及遇到的问 题:(1)装FPGA实验箱驱动。由于实验前没有装驱动,结果当configure时,电脑显 programing hardware is busy。(2)在配置的时候,应该注意.sof文件用于利用编程电缆Byt eBlas ter进行配3置而 pof用于配置EPROM. (EPROM只能写入一次),所以在设计的时候,线可用编3程电缆调试无误后,在写入EPROM中.(3)代码下载成功后,发现数码管不能显示。原因

14、是:把数码管的引脚在显示模块 设置,而真正下载到实验箱的代码是顶层模块,导致数码管毫无显示。正确是将端口设 置全部设置在顶层模块中。(4)在动态扫描中,小数点设置成了动态扫描的障碍。解决方法是,将DP独立设置 一位,不需要动态扫描。因为小数点是不变的。计费与里程的时钟不同步,导致计费和 里程显示不同步。出现,里程显示不变化,而计费开始。(5)当使能信号开始时,并非显示 000.0 007.0,有乱码出现的情况,解决方法是 设置初始化代码。总体看来,这次硬件调试是很成功的,虽然中间遇到困难,都被一一解决,收获很大。5. 课程设计心得这次课程设计中,我们主要是运用VHDL语言设计了一个出租车计费器

15、,并且用层次 化的设计方法来实现这个电路。在程序编写结束后,我们还对该程序进行了调试, 能按 预期的效果进行模拟汽车启动、停止、暂停等功能,基本完成课程设计的要求。通过此次课程设计,我们更进一步的深入了解了 VHDL设计语言,并通过使用对它有 了更深的体会。对于编程过程中可能遇到的问题有了一定的了解,也明白了其中的一些 注意事项,对于下次进行编程设计有很大的帮助和提高。这次课程设计的最大收获在于我们学会了如何在软件仿真成功的基础上在实验箱上 调试出我们所要的结果。总之,这次实验不仅仅加强了我的动手编程能力,也大大加强了团队合作以及设计 能力,使我在理论学习和编程练习方面都获得了较大的收获Abs

16、tractTaxi billing system using VHDL language, in order to MAX + PLUSI software is designed as a development platform. System consists of five modules - main control module, sub-frequency module, mileage module, billing module and display module; presets and analog auto start, stop, billing, and paus

17、e functions, and dynamically scan shows fare and mileage.Keywords:Taxibillingsystem VHDLlanguage MAXPLUSI FPGA digitalsystem参考文献1 .潘松,黄继业.EDA技术实用教程.科学出版社.2005.2:145156.2 .候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学.2004.11:4548.附录(源代码)一、10分频模块源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UN

18、SIGNED.ALL;ENTITY fenpin IS-10分频模块PORT(CLK0:IN STD_LOGIC;FOUT:OUT STD_LOGIC;ENABLE3:IN STD_LOGIC);END fenpin;ARCHITECTURE ONE OF fenpin ISBEGINPROCESS(CLK0,ENABLE3)VARIABLE CNT:STD_L0GIC_VECT0R(3 DOWNTO 0);-变量 entVARIABLE FULL :STD_LOGIC;BEGINIF ENABLE3=0 THENCNT:=1001;ELSIF CLK0EVENT AND CLK0=1 THE

19、N -一个基准时钟为0.1公里IF CNT=1001 THENCNT:=0000 ;FULL:=1;ELSECNT:=CNT+1;FULL:=0;END IF;END IF;FOUT0);ELSIF CLKEVENT AND CLK=1 THENIF STO=1 THEN STATE:=00;CQI:=CQI;-暂停ELSIF ENABLE =1 THENCQI:=CQI+1;IF CQI30 AND CQI=90 THEN STATE:=10;-大于3公里小于9 公里ELSESTATE:=11;-大于9公里END IF;END IF;END IF;STQ1:=Q1;Q2:=Q2;Q3:=Q3

20、;Q4:=Q4; -停止状态时,车费保持不变WHEN 01= Q1:=0000;Q2:=0111;Q3:=0000;Q4:=0000;-小于3公 里时显示007.0元WHEN 10= IF Q11000 THEN-大于3公里小于9公里时车费各位显示Q1:=Q1+2;-每来一个脉冲,相当于前进1公里,车费加2.2元IF Q21000 THENQ2:=Q2+2;ELSE Q2:=Q2-8;IF Q31001 THENQ3:=Q3+1;ELSE Q3:=0000;IF Q41001 THENQ4:=Q4+1;ELSE Q4:=0000;END IF;END IF;END IF;ELSEQ1:=000

21、0;IF Q20111 THENQ2:=Q2+3;ELSE Q2:=Q2-7;IF Q31001 THENQ3:=Q3+1;ELSE Q3:=0000;IF Q4 IF Q10111 THEN -车程大于9公里时车费各位显示,每来一个脉冲,车费加3.3元Q1:=Q1+3;IF Q20111 THENQ2:=Q2+3;ELSE Q2:=Q2-7;IF Q31001 THENQ3:=Q3+1;ELSE Q3:=0000;IF Q41001 THENQ4:=Q4+1;ELSE Q4:=0000;END IF;END IF;END IF;ELSEQ1:=Q1-7;IF Q20101 THENQ2:=Q

22、2+4;ELSE Q2:=Q2-6;IF Q31001 THENQ3:=Q3+1;ELSE Q3:=0000;IF Q4NULL;END CASE;END IF;END IF;C1=Q1;C2=Q2;C3=Q3;C4=Q4;END PROCESS;END ONE;四、计程模块源代码USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jichen IS -计算路程的模块PORT(CLK_CLK:IN STD_LOGIC; -一个脉冲来相当于走了0.1公里CLR2:IN STD_LOGIC; -清零信号ST1:IN

23、STD_LOGIC;ENABLE1:IN STD_LOGIC;C5:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);C6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);C7:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);C8:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-以上4位为路程的四位显示位 END jichen;ARCHITECTURE ONE OF jichen ISBEGINPROCESS(CLK_CLK,CLR2,ST1,ENABLE1)VARIABLE Q5: STD_LOGIC_VECTOR(3

24、DOWNTO 0);VARIABLE Q6: STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE Q7: STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE Q8: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF CLR2=0 THEN Q5:=0000;Q6:=0000;Q7:=0000;Q8:=0000;ELSIF CLK_CLKEVENT AND CLK_CLK=1 THENIF ST1=1 THEN Q5:=Q5;Q6:=Q6;Q7:=Q7;Q8:=Q8;-如果停止,保持原 来路程ELSIF ENABLE1 =1

25、 THEN-计费使能信号IF Q51001THENQ5:=Q5+1;-来一个时钟,路程加0,1公里ELSEQ5:=0000;IF Q61001 THENQ6:=Q6+1;ELSEQ6:=0000;IF Q71001 THENQ7:=Q7+1;ELSEQ7:=0000;IF Q81001 THENQ8:=Q8+1;END IF;END IF;END IF;END IF;END IF;END IF;C5=Q5;C6=Q6;C7=Q7;C8=Q8;END PROCESS;END ONE;五、显示模块源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEE

26、E.STD_LOGIC_UNSIGNED.ALL;ENTITY display IS-8位数码管动态显示模块PORT(DI1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-以上四位为车费DI5:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI6:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI7:IN STD_LOGIC_

27、VECTOR(3 DOWNTO 0);DI8:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-以上四位为路程CLK2:IN STD_LOGIC;SG:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-段选BT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-位选DOT:OUT STD_LOGIC;wei:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END display;ARCHITECTURE ONE OF display ISSIGNAL CNT4 :STD_LOGIC_VECTOR(2 DOWNTO 0);SI

28、GNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINP1:PROCESS(CLK2)VARIABLE SQ :STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF CLK2EVENT AND CLK2=1 THENIF SQ=111 THEN SQ:=000;ELSESQ:=SQ+1;END IF;END IF;CNT4BT=00000001;A=DI1;DOTBT=00000010;A=DI2;DOTBT=00000100;A=DI3;DOTBT=00001000;A=DI4;DOTBT=00010000;A=DI5;DOTBT=00100000;A=DI6;DOTBT=01000000;A=DI7;DOTBT=10000000;A=DI8;DOTNULL;END CASE;END PROCESS P2;weiSGSGSGSGSGSGSGSGSGSGNULL;END CASE;END PROCESS P3;END ONE ;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!