基于FPGA的出租车计费系统设计(VHDL代码-各个模块均调试通过)_第1页
基于FPGA的出租车计费系统设计(VHDL代码-各个模块均调试通过)_第2页
基于FPGA的出租车计费系统设计(VHDL代码-各个模块均调试通过)_第3页
基于FPGA的出租车计费系统设计(VHDL代码-各个模块均调试通过)_第4页
基于FPGA的出租车计费系统设计(VHDL代码-各个模块均调试通过)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

--PAGE4--PAGE32.3出租车计费系统FPGA处,利用FPGA租车计费系统的设计要求和FPGA求和系统所具有的功能,出租车计费器设计总框图如图2-5所示。主控部分采用了FPGA的芯片,使用VHDL语言进行编程,这样能具有更强的这次设计的由FPGA来实现出租车计费系统主要设计思想:主要分为信号输确定应用FPGA现主控的出租车计费系统2-5示,其主控部分为有输入信号的作用。通过将路程和车费转换为4的十进制数,便于8数码管LED数码管译码和动态扫描显示两部分组数码管控制及译码显示模块将十进制的输入信号用七段数码管显示由七段发光二极管组成数码显示器,利用字段的不同组合,可分别显示0~9。本设计中,要求输出的段信号为低电平有效[]。3功能模块的设计与实现计费功能,计费的标准为;起步价为8即三公里内为8超过三公里每公里2当总费用达到或40元时,每公里加收50%,为4元/公里;遇到红灯或乘客需要停车等待时,每20S收费1元;此外,本次设计的计费器能够用预置数据;并且可以现场模拟汽车行驶、停止、暂停等状态;显示功能出租车计费器系统框译码速度档译码速度档 控制(速度计费/复 计图3-13-2FPGA各功能模块的实分频模块速度模块--6--5计程模块计时模块计费模块显示模块分频模为了得到500HZ验需求脉冲,那么则需要利用CycloneII中提供的50MHZ时钟脉冲来进行分频,程序见附录1-P27fenpin[9]。图3- feipin模块的元件符速度模就是看汽车的档位,然后根据速度信号sp定出行驶100m需要的时钟clk个数kinside.同时由cnt对clk行计cnt=kinside时,把clkout号置1,cnt0。程序见1-P27-28speed。图3- 对引脚进行设置,图3-4为speed模块的引脚分配,其中输出口clkout,clkout1003-5speed如图3-5以看出,当sp位设为7,即速度最大档,定义四个时钟周期,每四个周期clkout输出为’1’,就是行驶100米,结果符合设计要求计程模Kilometers块主要是用于记录出租车行驶的的距离,根据speed程输出的信号clkout定行进的距离。一个clkout冲相当于行进100m,所以只要记录clkout的脉冲数目即可确定共行进的距离。程序见附录1-P28kilometers3-6kilometers图3-6为kilometers模块的引脚分配speed模块输出的clkout可以判断--PAGE10--PAGE93-7kilometers由仿真图可以看出当来一个clkout,就代表行驶了100米,通过对clkout的计数可以知道具体的行驶里程。例如输出10个clkout,就行驶了1公里。当reset高电平时,不计里程。仿真正确。计时模,time通过对速度信号sp判断决定是否开始记录时间。当sp=0(0)时,开始记录时间。当时间达到足够长(20s)时则产生timecount冲,并重新计时。一个timecount冲相当于等待的时间达到了设定的时间计费的长度这里仿真器件提供的是50M时钟频率,经过分频后得到500hz,20s计数值为10000HZ。程序见附录1-P28-29time[10]。3-8time即暂停。一个timeout示暂停了20s。3-9time图3-9可以看出,由于clk设置周期为10ns,所以clk看得不适很清楚,,由仿真图上可以看出将近10us的时候,time出现脉冲,输出一个timeout,即1000时钟周期,timeout出‘1’,符合设计要求,仿真正确。3-2timetimecountT1stop1,T0sp0T1计费模Kmmoney模块又可分两个进程,kmmoney1进程和kmmoney2进程。一个进程用来根据条件确定enable和price另一个主要用于确定最后的总价格Start为启动信号。当行驶距离3里后,enable号变为1,此时若路程计费信号clkout输出一个脉冲则进行行程计费enable信号为1过程中timecountkmmoney1进程:根据条件对enable和price赋值。当记录的距离达到3公里后enable变为1,开始进行每公里收费总费用大于40元后price由原来的两元每公里变为4每公里。kmmoney2程:在每个时钟周期判断timecountclkout值。当1时,则在总费用上加上相应的费用。程序见附录1-P29-30kmmoney。3-10kmmoney3-10中的kmmoney块脚分配:count1\count2\count3别表示计费的而timecount号输入表示汽车暂停了规定时间,需在总费用上加一元。3-11kmmoney从图3-11可以看出,当行驶里程超过三公里,但总计费用在40元以内公里收费为2元3-12kmmoney从图3-12仿真图可以看出,当行驶里程超过三公里,且计费总费用超过元后,每公里收费变为4元3-13kmmoney总费用上加1,这里为了方便观察,waittime的很小。显示模本次设计采用的是共阴译码显示器来作为实验的显示模块,而且是利用静态显示的过程。数码管显示译码模块的功能是用来显示输入的行驶里程和总计费用,它可采用LED高可靠性、易于扩展和升级等特点,但是普通液晶显示屏存在亮度低、对复杂驱动电路设计相对复杂,因此本设计的显示电路仍使用通用的LED数码管。它是由七段可发光的二极管组成的为了使七段数码管能够显示出所要表--PAGE28--PAGE27里,数码管显示译码模块的输入是编码器的B1—B44输出,输出是用来驱动数码管的驱动信号,它们是低电平有效的信号,因此采用共阴极LED示器。程序见附录1-P30-31display[11]。3-14displaycount和kmcn分别是费用和路程的输入,然后在led数码管上的输出。ff clkoutkmcnt1[3..0]resetkmcnt2[3..0] count1[3..0]count2[3..0]count3[3..0]kmcnt1[3..0]kmcnt2[3..0]kmcnt3[3..0] clkin 总体调试与结果总体电把前面实现的各个功能模块组合起来后得到总电路如图4-1所示图4-1得到的总电路时序仿真图如图4-2所示图4- 计费输出为008,就是8。图4- 从图4-3中可以看出,当汽车行驶的时候,当行驶里程超过三公里的时候每公里收2元图4- 从图4-4中可以看出,当汽车行驶的时候,当行驶里程超过三公里的时候且总费用超过40元的时候,每公里收4元调试过首先在Assignments菜单下,点击Pins命令,启动PinPlanner工具。在这个工具中,我们可以为我们的电路的端子分配器件的引脚。在AllPins表格中,双击NodeName列的newnode单元,输入端子的名字。在同一行的脚配置图如图4-5所示[12]。图4- 图4- 调试结果说明和结态由于设备所限无法从照片中看出停止和暂停的演示只能看到计费情况图4- 图4-7出租车计费器收费过程图4- 图4-9出租车计费器收费过程图4- 调试结论时,按8元收费;在超过3公里,总费用未40元时,超过3公里的那部费用按每公里2元收费;在总费用超过40时,则按每公里4元收费5展开始对超出3公里后就按两元每公里收费的问题时误以为3.1公里的时候就升的。还有就是在进位的问题上,开始想当然的依然任何位都是逢91,当是在我们这个出租车计费系统中在个位向十位进位是逢101,那是因为在个位还是9时候,十分位还要计数,这就要求在十分位计数完,向个位进1后。网查资料发现方法可以用case句进行译码,一个数码管一个进程,但是这种调用的程序是千奇百怪,各种写法都有,仿真后问题很多,后来在edappt发通过此次数字系统设计的实践,让我们对VHDL语言程序设计有了更深入的6在本次毕业设计课题研究过程期间我学到了quartusII用软件的专业知表示深深的敬意和由衷的感谢7参考文杨晓慧等.基于FPGAEDA/SOPC术与VHDL[M].北京:国防工业出版社,200710.工业出版社,20078.付扬.出租车计价器的FPGA实现[J].微计算机信息,2008,45(7),64-郑争兵.基于FPGA多功能能计价器的设计[J].自动化技术与应用,20081. 林愿.基于CPLD/FPGA出租车计费器系统的设计实现[J].国外电子元器StephenBrown,ZvonkoVranesic.FundamentalsofDigitalLogicwithVerilogDesign(2ndEdition)[M].NewYork:McGraw-Hill,2007,5.Ming-BoLin.DigitalSystemDesignsandPractices:UsingVerilogHDLandFPGAs[M].NewYork:McGraw-Hill,2008,8.文小伟.高速铁路实现机车信号主体化的解决方案[J].中国西部科褚振东,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,徐建华.机车信号记录器数据分析处理系统的设计与实现[J].铁道通信信号,2006,42(12):4-6.DSP的移频机车信号分析研究与实现[D]大1(8)1libraryuseuseieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityfeesystemisport(clkin:instd_logic;reset:instd_logic;start:instd_logic;stop:insp:instd_logic_vector(2downto0);led0,led1,led2,led3,led4,led5,led6,led7:outstd_logic_vector(6downto0));endarchitecturebehavioroffeesystemissignalenable:std_logic;signalsignalprice:std_logic_vector(3downto0);signalkm:std_logic_vector(11downto0);signalcnt:integerrange0to6;signalcash:std_logic_vector(11downto0);signalcount1:std_logic_vector(3downto0);signalcount2:std_logic_vector(3downto0);signalcount3:std_logic_vector(3downto0);signalkmcnt1:std_logic_vector(3downto0);signalkmcnt2:std_logic_vector(3downto0);signalkmcnt3:std_logic_vector(3downto0);signaltimecount:std_logic;signalbcd:std_logic_vector(3downto0);signalcounter:integerrange0to499999;signalt:std_logic;signalprocedurefam(signalbcd:instd_logic_vector(3downto0);signalled:outstd_logic_vector(6downto0))iscasebcdwhen"0000"=>led<="1000000";--040hwhen"0001"=>led<="1111001";--179hwhen"0010"=>led<="0100100";--224hwhen"0011"=>led<="0110000";--330hwhen"0100"=>led<="0011001";--419hwhen"0101"=>led<="0010010";--512hwhen"0110"=>led<="0000010";--602hwhen"0111"=>led<="1111000";--778hwhen"1000"=>led<="0000000";--800hwhen"1001"=>led<="0010000";--9whenothers=>led<="1000000";endcase;endprocedurefam;fenpin:

if(clkin'eventandclkin='1')thenifcounter=499999thent<=notelsecounter<=counter+1;endif;endif;endprocesstypestate_typeis(s0,s1);variable variablecnt:integerrange0to variablekinside:integerrange0to casesp when"000" when"001" when"010"when"011"when"100"when"101"when"110"when"111"=>kinside:=4;endcase;ifreset='1'then elsifclk'eventandclk='1' cases_statewhen ifstart='1'then else endwhen 初始化ifstop='1'then elsifsp="000"then elsifcnt=kinsidethencnt:=0;clkout<='1'; 满else endif;endcase;endif;endprocess ifreset='1'then elsifclkout'eventandclkout='1' 满ifkm_reg(3downto0)="1001"thenelsekm_reg(3downto0):=km_reg(3downto endifkm_reg(7downto4)="1010" elsekm_reg:=km_reg;endif;endkmcnt1<=km_reg(3downto kmcnt2<=km_reg(7downto endprocesstypestate_typeis(t0,t1,t2);variablet_state:state_type;variablewaittime:integerrange0to ifreset='1'then elsif(clk'eventandclk='1')thencaset_stateiswhent0 ifstart='1'then else endif;whent1=>ifsp="000"then elsewaittime:=0; endif;whent2=> ifwaittime=10000 elsifstop='1'then elsifsp="000"then elsetimecount<='0'endif;endcase;endif;endprocess

-其他情况转为t1 cash为总额,kmcnt2ifcash>="000001000000"then elseprice<="0010";endif;

( elseenable<='0';endendprocesskmmoney1;variab

温馨提示

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

评论

0/150

提交评论