EDA课程设计论文出租车计费系统verilog语言.doc

上传人:sccc 文档编号:4855664 上传时间:2023-05-20 格式:DOC 页数:24 大小:746.53KB
返回 下载 相关 举报
EDA课程设计论文出租车计费系统verilog语言.doc_第1页
第1页 / 共24页
EDA课程设计论文出租车计费系统verilog语言.doc_第2页
第2页 / 共24页
EDA课程设计论文出租车计费系统verilog语言.doc_第3页
第3页 / 共24页
EDA课程设计论文出租车计费系统verilog语言.doc_第4页
第4页 / 共24页
EDA课程设计论文出租车计费系统verilog语言.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《EDA课程设计论文出租车计费系统verilog语言.doc》由会员分享,可在线阅读,更多相关《EDA课程设计论文出租车计费系统verilog语言.doc(24页珍藏版)》请在三一办公上搜索。

1、华东交通大学课程设计 摘 要摘 要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。 而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。而采用FPGA进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针

2、对计费模式的切换,通过软件编程就可以轻易而举的实现。避免了机械开关带来的不稳定因素。设计好之后,用1602液晶显示器,显示你想要显示的数据。关键词: 出租车计价器 控制 1602目 录绪 论3第一章 系统设计41出租车计费系统的概述:42设计的意义43统设计要求4第二章 系统设计方案5第三章 主要模块61 时间模块:62路程模块:73计费模块:84速度模块:95总的框图为:10第四章 硬件实现111系统的调试方法112系统调试的软/硬件113 系统调试显示结果11小 结13谢 辞14参考文献:15附 录16程序:1624 绪 论 近年来,我国出租汽车行业迅猛发展,出租汽车已成为我国城市公共交通

3、的重要组成部分和现代化城市必备的基础设施,成为人们工作、生活中不可缺少的交通工具。它对繁荣经济、促进发展、方便群众、改善交通起到了积极作用。出租汽车对我国人民物质和文化生活影响之大、作用之广是前所未有的。出租汽车行业的服务水平和程度已经成为现代化的重要标志。出租汽车服务行业和出租汽车计价器紧密相关,因为出租汽车必须安装出租汽车计价器才能投入营运。出租汽车计价器是一种能根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并直接显示车费值的计量器具。计价器是出租汽车的经营者和乘坐出租汽车的消费者之间用于公平贸易结算的工具,因而计价器量值准确与否,直接关系到经营者和消费者的经济利益,用户不仅要求计费器

4、性能稳定,计费准确,有防作弊功能;同时还要求其具有车票资料打印、IC卡付费、语音报话、和电脑串行通信等功能,而这些与电子技术的发展是分不开的。二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、SSI、MSI到LSI、VLSI以及UVLSI的过程。同时为了提高系统的可靠性与通用性,微处理器和专业集成电路(ASIC)逐渐取代了通用全硬件LSI电路,而ASIC以其体积小、重量轻、功耗低、速度快、成本低、保密性好而脱颖而出。 第一章 系统设计1出租车计费系统的概述: 在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。汽车计价器

5、是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。2设计的意义 在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。出租车计价器是出租车营运收费的专用智能化仪表,随着电子

6、技术的发展,出租车计价器技术也在不断进步和提高。国内出租车计价器已经经历了4 个阶段的发展。从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器。出租车计价器计费是否准确、出租车司机是否作弊才是乘客最关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。因此怎样设计出一种既能有效防止司机作弊又能方便司机的计价器尤为重要。因此, 本文以FPGA为核心设计一款多功能出租车计价器,该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。它比市场上的一些计价器使用更方便

7、,功能更全,还具有有效防止司机作弊和系统稳定性好的优点。3统设计要求里程显示,显示方式为XXX.X,单位为km精确到0.1km;里程单价显示,显示方式为X.XX,单位为元/km,起步价10元,根据每天不同的时间段有两种情况:当时间段为06:0023:00时单价为1.40元/km,其他时间段单价为1.80元/km。 第二章 系统设计方案系统的大致框图: 图1第一步:把板子上的时钟50M的晶振分频为1HZ。这样有利于以后模块的调用。第二步:出租车上一般都有时间,所以把时间模块给设计好,在这里就需要了第一步已经设计好的分频1HZ的时钟,调用设计出时间,显示小时,分钟,秒。第三步:用板子上的2个按键控

8、制加速和减速,起始速度为2,按下加速键或者减速键,相应的显示会变化且路程和计费也会变化。第四步:路程和总费进行相应的变化,在1602上显示。第三章 主要模块1 时间模块: 图1现在的出租车都会显示时间,由于时间的不一样,计费的标准也不一样。所以时间模块是必要得要的。在设计时间模块时,由于FPGA版上的晶振是50M,第一步要做的就是分频,分频是FPGA最简单的,分频成为1HZ,这样时间显示时间就变的很简单了。部分代码为:always (posedge clk_1hz)beginif(miao=59)begin miao=0; if(fen=59)begin fen=0; if(shi=23) s

9、hi=0; else shi=shi+1;end else fen=fen+1;end else miao=miao+1;end时间模块仿真波形:图2注释:仿真的波形的时钟晶振为50M2路程模块:车行驶的是速度初始值这里是给定的,通过clk,使行驶的路程在线性的增大。行驶的总路程等于速度乘于时间。图3部分代码为:always (posedge clk_1hz)/路程begin way10000) way=0;end里程仿真波形: 图43计费模块: 在数据的计算和处理中,注意了一些数据关系的转换、换算和放大,数据关系的转换、换算是为了便于控制程序的设计,而数据的放大则避免了浮点数的运算,数据放大

10、后的还原是通过显示数据时在对应的数码管处显示小数点来处理。系统中很多模块的verilog程序设计中,均涉及多个控制信号,多个控制信号的作用是通过嵌套的条件语句完成的,这些条件信号的作用时机(是先作用还是后作用)和作用方式(是高、低电平还是上升沿、下降沿)非常有技巧,特别值得揣摩与注意。 计费是分时间段的,当时间段为06:0023:00时单价为1.40元/km,其他时间段单价为1.80元/km。由于FPGA中的计算不能直接用小数点计算,所以在这里把价格扩大10倍,显示时在除以10。 图5部分代码为:always (posedge clk_1hz)/计费beginif(flag=1) money=

11、money+speed*14; else money=money+speed*18;end计费模块仿真波形: 图6期中的flag是用来判断是06:0023:00还是其他的时间。flag为1时,时间短为06:0023:00,计费的标准为单价为1.40元/km;对应的当flag为0时,其他的时间段的单价为1.80元/km。4速度模块:刚开始的起始速度是2,这里我用了2个按键,一个是加速,一个是减速。随着加速键的按下,显示模块的速度相应会加一,路程也会随着增长,计费的费用也会增长。图7速度模块的仿真波形: 图8sw1_n为加速键,按下加速键,speed加一;sw2_n为减速键,按下减速键,速度相应的

12、减一。5总的框图为: 图9 通过1602显示在开发板上。 第四章 硬件实现1系统的调试方法 本系统既含有FPGA自编程硬件设计电路,又含有单片机控制电路的设计,整个系统比较复杂,因此我们采用自底向上的调试方法,也就是先进行各个单元电路的软件仿真和硬件调试,在各个单元电路调试好后再进行系统联调,最后进行硬件的编程固化及系统的组装。2系统调试的软/硬件 (1) 设计开发软件:MAX+plus 10.0,伟福6000(WAVE 6000 for windows)。 (2) 主要设备:PIV 计算机21EDA实验开发系统。3 系统调试显示结果 将程序分配好管脚,下载到FPGA板子上,通过板子可以看到1

13、602显示的如图1所示:图1 初始化状态时,里程(S)是等于100.0,总费用(M)为000.0,第一行T代表时间,中间有个0代表是单价为1.80元/km,初始速度为2;当按2下加速键,速度为4,如图2:图2按加速键如图3:图3 由于速度的变化,里程和总费用都会相应的变化,这贴近现实生活。现实生活中车子的速度随时都会变化,因此在这里增加了可以改变速度的模块,这样显的更逼真。 小 结 出租车计费器系统的设计已经全部完成,对于这个星期自己收获也蛮多的,一些模块搞不懂,现在搞懂了。对于一个项目来说,可能你觉得很难,因为看起来挺复杂的,没有思路,但只要你把该项目的主要功能分析一下,然后我们去攻破每一个

14、模块,在把这些模块组合在一起,最后达到了要求。这样更有调理,也很简单,有利于我们去设计,去分析。 在设计中遇到了很多的技术问题,自己调试很久还是调不通时,就和他们讨论,但和他们还是调不通,这只能叫学长帮忙了。大四的学长他们很厉害,几乎我遇到的困难,他们都能解决,在此我们应该向大四的学长好好学习,他们是我们的好榜样。 总之在这次的EDA课设中,自己受益匪浅,在摸索该如何设计使之实现所需功能的过程中,特别有趣,培养了我的设计思维,不懂就找书籍看看,攻破不懂的,增加了实际操作能力.在让我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐. 这次EDA课程设计,虽然短暂但是让我得到多方面的提高,尤

15、其是思维,一个人的思维很重要,这有利于将来的发展。 谢 辞 在这里我要感谢我的老师朱路,朱老师上课的思路很清晰,很有调理。这样也吸引我对EDA的兴趣,朱老师在上课讲的内容很生动,举的例子也很符合题意,这样更有利于我的学习。当自己有不懂问朱老师时,朱老师很热情的分析给我听,这样有利于我的理解,总之很感谢朱老师。参考文献:(1)潘松,黄继业编著 .EDA技术实用教程 ,2005 ,科学出版社(2)徐志军,徐光辉编著 . CPLD/FPGA的开发与应用 ,电子工业出版社,2001.1 (3) (4) 刘欲晓,方强,黄宛宁编著EDA技术与VHDL电路开发应用实践,电子工业出版社 附 录程序:modul

16、e LED1602 (clk, rs, rw, en,dat,sw1_n,sw2_n,rst_n); input clk; /系统时钟输入50Minput sw1_n,rst_n,sw2_n; output 7:0 dat; /LCD的8位数据口 output rs,rw,en; /LCD的控制脚 reg e; reg 7:0 dat; reg rs; reg 15:0 counter; reg 5:0 current,next; reg clkr; reg 1:0 cnt; /定义了LCD状态机需要的状态。 parameter set0=6h0; parameter set1=6h1; pa

17、rameter set2=6h2; parameter set3=6h3; parameter set4=6h4; parameter set5=6h5; parameter set6=6h6; parameter set7=6h7; parameter dat0=6h7; parameter dat1=6h8; parameter dat2=6h9; parameter dat3=6hA; parameter dat4=6hB; parameter dat5=6hC; parameter dat6=6hD; parameter dat7=6hE; parameter dat8=6hF; pa

18、rameter dat9=6h10; parameter dat10=6h12; parameter dat11=6h13; parameter dat12=6h14; parameter dat13=6h15; parameter dat14=6h16; parameter dat15=6h17; parameter dat16=6h18; parameter dat17=6h19; parameter dat18=6h1A; parameter dat19=6h1B; parameter dat20=6h1C; parameter dat21=6h1D; parameter dat22=6

19、h1E; parameter dat23=6h1F; parameter dat24=6h20; parameter dat25=6h21; parameter dat26=6h22; parameter dat27=6h24; parameter dat28=6h25; parameter dat29=6h26; parameter dat30=6h27; parameter dat31=6h28; parameter dat32=6h29; parameter dat33=6h2A; parameter nul=6hF1; parameter set41=6h34; /-1602显示的频率

20、转换-always (posedge clk) /da de shi zhong pinlv begin counter=counter+1; if(counter=16h000f) clkr=clkr; end always (posedge clkr) begin current=next; case(current) /LCD1602的资料上面介绍的地址第一行的起始地址是00H /第二行的其实地址是40H,他这个是没有加上最高位那个1 /所以我们实际的编程是地址第一行的起始地址是00H+80H= 0x80 /实际的编程是地址第二行的起始地址是40H+80H= 0xC0 /这里要注意 /

21、case 0:addr=0x80; break; /所以我们实际的编程是地址第一行的起始地址是00H+80H= 0x80 / case 1:addr=0xC0; break;/实际的编程是地址第二行的起始地址是40H+80H= 0xC0 set0: begin rs=0; dat=8h38; next=set1; end /*设置8位格式,2行,5*7* set1: begin rs=0; dat=8h0C; next=set2; end /*整体显示,关光标,不闪烁*/ set2: begin rs=0; dat=8h06; next=set3; end /*设定输入方式,增量不移位*/ s

22、et3: begin rs=0; dat=8h01; next=dat0; end /*清除显示*/ set5: begin rs=0; dat=8h80; next=dat0; end /显示第一行 dat0: begin rs=1; dat=T; next=dat1; end dat1: begin rs=1; dat=:; next=dat2; end dat2: begin rs=1; dat=shi2+8h30; next=dat3; end dat3: begin rs=1; dat=shi1+8h30;next=dat4; end dat4: begin rs=1; dat=:;

23、 next=dat5; end dat5: begin rs=1; dat=fen2+8h30; next=dat6; end dat6: begin rs=1; dat=fen1+8h30; next=dat7; end dat7: begin rs=1; dat=:;next=dat8; end dat8: begin rs=1; dat=miao2+8h30; next=dat9; end dat9: begin rs=1; dat=miao1+8h30;next= dat10 ; end dat10: begin rs=1; dat= ; next=dat11; end dat11:

24、begin rs=1; dat=flag+8h30; next=dat30; end dat30: begin rs=1; dat= ; next=dat31; end dat31: begin rs=1; dat=s; next=dat32; end dat32: begin rs=1; dat=; next=dat33; end dat33: begin rs=1; dat=speed+8h30; next=set4; end set4: begin rs=0; dat=8hC0; next=dat12; end /显示第二行 dat12: begin rs=1; dat=S; next=

25、dat13; end dat13: begin rs=1; dat=:;next=dat14; end dat14: begin rs=1; dat=wb+8h30; next=dat15; end dat15: begin rs=1; dat=ws+8h30; next=dat16; end dat16: begin rs=1; dat=wg+8h30; next=dat17; end dat17: begin rs=1; dat=.; next=dat18; end dat18: begin rs=1; dat=wf+8h30; next=dat19; end dat19: begin r

26、s=1; dat= ; next=dat20; end dat20: begin rs=1; dat= ; next=dat21; end dat21: begin rs=1; dat=M; next=dat22; end dat22: begin rs=1; dat=:; next=dat23 ; end dat23: begin rs=1; dat=mb+8h30; next=dat24; end dat24: begin rs=1; dat=ms+8h30; next=dat25; end dat25: begin rs=1; dat=mg+8h30; next=dat26; end d

27、at26: begin rs=1; dat=.; next= dat27; enddat27: begin rs=1; dat=mj+8h30; next=set5; end/next=nul时,不会刷新数据,只能为当前数据 nul: begin rs=0; dat=8h00; / 把液晶的E 脚 拉高 if(cnt!=2h2) begin e=0;next=nul;cnt=cnt+1; end else begin next=dat0; e=1; end end default: next=set0; endcase end assign en=clkr|e; assign rw=0; /-

28、定义变量-reg flag; reg3:0 miao1,fen1; reg3:0 miao2,fen2;reg 3:0 shi1, shi2;reg 4:0shi;reg 5:0fen,miao;reg 27:0count;reg clk_1hz;initial clk_1hz=1;initial shi=13;initial fen=45;initial miao=39;/-分频时间为1秒-always (posedge clk)beginif(count=24999999)begin clk_1hz=clk_1hz;count=0;end else count=count+1;end/-时

29、间显示*-always (posedge clk_1hz)beginif(miao=59)begin miao=0; if(fen=59)begin fen=0; if(shi=23) shi=0; else shi=shi+1;end else fen=fen+1;end else miao=miao+1;end/-时间转换-always (posedge clk_1hz)begin miao1=miao%10; miao2=miao/10; fen1=fen%10; fen2=fen/10; shi1=shi%10;shi2=6&shi=23) flag=1; else flag=0;en

30、d/*测距与计费的定义变量*reg 7:0speed;/suduinitial speed=2;reg 16:0way;/路程/initial way=1100;initial money=100;reg 15:0money;/金额reg 3:0mb,ms,mg,mj,wb,ws,wg,wf;/*测距与计费*/-路程的转换-/-money的是转换-*/always (posedge clk_1hz)/路程begin way10000) way=0;endalways (posedge clk_1hz)/计费beginif(flag=1) money=money+speed*14; else m

31、oney=money+speed*18;endalways (clk_1hz)begin /*-路程的计算转换-*/ wb=way/1000; ws=way/100%10; wg=way/10%10; wf=way%10; /*-money的是转换-*/ mb=money/1000;ms=(money-mb*1000)/100;mg=(money-mb*1000-ms*100)/10;mj=(money-mb*1000-ms*100-mg*10);end/*-按键加减速-*/*-按键消抖-*/reg key_rst; always (posedge clk or negedge rst_n)

32、if (!rst_n) key_rst = b1; else key_rst = sw1_n,sw2_n;reg 1:0key_rst_r; /每个时钟周期的上升沿将key_rst信号锁存到key_rst_r中always ( posedge clk or negedge rst_n ) if (!rst_n) key_rst_r = b1; else key_rst_r = key_rst; /当寄存器key_rst由1变为0时,key_an的值变为高,维持一个时钟周期 wire 1:0 key_an = key_rst_r & ( key_rst);/-reg19:0 cnt1;/计数寄存

33、器always (posedge clk or negedge rst_n) if (!rst_n) cnt1 = 20d0;/异步复位else if(key_an) cnt1 =20d0; else cnt1 = cnt1 + 1b1; reg 1:0low_sw;always (posedge clk or negedge rst_n) if (!rst_n) low_sw = 1b1; else if (cnt1 = 20hfffff) /满20ms,将按键值锁存到寄存器low_sw中 cnt = 20hfffff low_sw = sw1_n,sw2_n; /-reg 1:0 low_

34、sw_r; /每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中always ( posedge clk or negedge rst_n ) if (!rst_n) low_sw_r = 1b1; else low_sw_r = low_sw; /当寄存器low_sw由1变为0时,led_ctrl的值变为高,维持一个时钟周期 assign key = low_sw_r & ( low_sw); wire 1:0 key;always (posedge clk or negedge rst_n) if (!rst_n) begin speed = speed; / speed = speed; end else begin/某个按键值变化时 if ( key0 ) speed =speed+1; /加速 else if ( key1 ) speed=speed-1; /减速 /else speed=speed;endendmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号