欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:4146474       资源大小:728.50KB        全文页数:24页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    摘 要摘 要:出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。 而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。而采用FPGA进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程就可以轻易而举的实现。避免了机械开关带来的不稳定因素。设计好之后,用1602液晶显示器,显示你想要显示的数据。关键词: 出租车计价器 控制 1602目 录绪 论3第一章 系统设计41出租车计费系统的概述:42设计的意义43统设计要求4第二章 系统设计方案5第三章 主要模块61 时间模块:62路程模块:73计费模块:84速度模块:95总的框图为:10第四章 硬件实现111系统的调试方法112系统调试的软/硬件113 系统调试显示结果11小 结13谢 辞14参考文献:15附 录16程序:16 绪 论 近年来,我国出租汽车行业迅猛发展,出租汽车已成为我国城市公共交通的重要组成部分和现代化城市必备的基础设施,成为人们工作、生活中不可缺少的交通工具。它对繁荣经济、促进发展、方便群众、改善交通起到了积极作用。出租汽车对我国人民物质和文化生活影响之大、作用之广是前所未有的。出租汽车行业的服务水平和程度已经成为现代化的重要标志。出租汽车服务行业和出租汽车计价器紧密相关,因为出租汽车必须安装出租汽车计价器才能投入营运。出租汽车计价器是一种能根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并直接显示车费值的计量器具。计价器是出租汽车的经营者和乘坐出租汽车的消费者之间用于公平贸易结算的工具,因而计价器量值准确与否,直接关系到经营者和消费者的经济利益,用户不仅要求计费器性能稳定,计费准确,有防作弊功能;同时还要求其具有车票资料打印、IC卡付费、语音报话、和电脑串行通信等功能,而这些与电子技术的发展是分不开的。二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、SSI、MSI到LSI、VLSI以及UVLSI的过程。同时为了提高系统的可靠性与通用性,微处理器和专业集成电路(ASIC)逐渐取代了通用全硬件LSI电路,而ASIC以其体积小、重量轻、功耗低、速度快、成本低、保密性好而脱颖而出。 第一章 系统设计1出租车计费系统的概述: 在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。2设计的意义 在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。国内出租车计价器已经经历了4 个阶段的发展。从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器。出租车计价器计费是否准确、出租车司机是否作弊才是乘客最关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。因此怎样设计出一种既能有效防止司机作弊又能方便司机的计价器尤为重要。因此, 本文以FPGA为核心设计一款多功能出租车计价器,该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。它比市场上的一些计价器使用更方便,功能更全,还具有有效防止司机作弊和系统稳定性好的优点。3统设计要求里程显示,显示方式为XXX.X,单位为km精确到0.1km;里程单价显示,显示方式为X.XX,单位为元/km,起步价10元,根据每天不同的时间段有两种情况:当时间段为06:0023:00时单价为1.40元/km,其他时间段单价为1.80元/km。 第二章 系统设计方案系统的大致框图: 图1第一步:把板子上的时钟50M的晶振分频为1HZ。这样有利于以后模块的调用。第二步:出租车上一般都有时间,所以把时间模块给设计好,在这里就需要了第一步已经设计好的分频1HZ的时钟,调用设计出时间,显示小时,分钟,秒。第三步:用板子上的2个按键控制加速和减速,起始速度为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) shi<=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 way<=way+speed; if(way>10000) way<=0;end里程仿真波形: 图43计费模块: 在数据的计算和处理中,注意了一些数据关系的转换、换算和放大,数据关系的转换、换算是为了便于控制程序的设计,而数据的放大则避免了浮点数的运算,数据放大后的还原是通过显示数据时在对应的数码管处显示小数点来处理。系统中很多模块的verilog程序设计中,均涉及多个控制信号,多个控制信号的作用是通过嵌套的条件语句完成的,这些条件信号的作用时机(是先作用还是后作用)和作用方式(是高、低电平还是上升沿、下降沿)非常有技巧,特别值得揣摩与注意。 计费是分时间段的,当时间段为06:0023:00时单价为1.40元/km,其他时间段单价为1.80元/km。由于FPGA中的计算不能直接用小数点计算,所以在这里把价格扩大10倍,显示时在除以10。 图5部分代码为:always (posedge clk_1hz)/计费beginif(flag=1) money<=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为减速键,按下减速键,速度相应的减一。5总的框图为: 图9 通过1602显示在开发板上。 第四章 硬件实现1系统的调试方法 本系统既含有FPGA自编程硬件设计电路,又含有单片机控制电路的设计,整个系统比较复杂,因此我们采用自底向上的调试方法,也就是先进行各个单元电路的软件仿真和硬件调试,在各个单元电路调试好后再进行系统联调,最后进行硬件的编程固化及系统的组装。2系统调试的软/硬件 (1) 设计开发软件:MAX+plus 10.0,伟福6000(WAVE 6000 for windows)。 (2) 主要设备:PIV 计算机21EDA实验开发系统。3 系统调试显示结果 将程序分配好管脚,下载到FPGA板子上,通过板子可以看到1602显示的如图1所示:图1 初始化状态时,里程(S)是等于100.0,总费用(M)为000.0,第一行T代表时间,中间有个0代表是单价为1.80元/km,初始速度为2;当按2下加速键,速度为4,如图2:图2按加速键如图3:图3 由于速度的变化,里程和总费用都会相应的变化,这贴近现实生活。现实生活中车子的速度随时都会变化,因此在这里增加了可以改变速度的模块,这样显的更逼真。 小 结 出租车计费器系统的设计已经全部完成,对于这个星期自己收获也蛮多的,一些模块搞不懂,现在搞懂了。对于一个项目来说,可能你觉得很难,因为看起来挺复杂的,没有思路,但只要你把该项目的主要功能分析一下,然后我们去攻破每一个模块,在把这些模块组合在一起,最后达到了要求。这样更有调理,也很简单,有利于我们去设计,去分析。 在设计中遇到了很多的技术问题,自己调试很久还是调不通时,就和他们讨论,但和他们还是调不通,这只能叫学长帮忙了。大四的学长他们很厉害,几乎我遇到的困难,他们都能解决,在此我们应该向大四的学长好好学习,他们是我们的好榜样。 总之在这次的EDA课设中,自己受益匪浅,在摸索该如何设计使之实现所需功能的过程中,特别有趣,培养了我的设计思维,不懂就找书籍看看,攻破不懂的,增加了实际操作能力.在让我体会到了设计的艰辛的同时,更让我体会到成功的喜悦和快乐. 这次EDA课程设计,虽然短暂但是让我得到多方面的提高,尤其是思维,一个人的思维很重要,这有利于将来的发展。 谢 辞 在这里我要感谢我的老师朱路,朱老师上课的思路很清晰,很有调理。这样也吸引我对EDA的兴趣,朱老师在上课讲的内容很生动,举的例子也很符合题意,这样更有利于我的学习。当自己有不懂问朱老师时,朱老师很热情的分析给我听,这样有利于我的理解,总之很感谢朱老师。参考文献:(1)潘松,黄继业编著 .EDA技术实用教程 ,2005 ,科学出版社(2)徐志军,徐光辉编著 . CPLD/FPGA的开发与应用 ,电子工业出版社,2001.1 (3) (4) 刘欲晓,方强,黄宛宁编著EDA技术与VHDL电路开发应用实践,电子工业出版社 附 录程序:module 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=6'h0; parameter set1=6'h1; parameter set2=6'h2; parameter set3=6'h3; parameter set4=6'h4; parameter set5=6'h5; parameter set6=6'h6; parameter set7=6'h7; parameter dat0=6'h7; parameter dat1=6'h8; parameter dat2=6'h9; parameter dat3=6'hA; parameter dat4=6'hB; parameter dat5=6'hC; parameter dat6=6'hD; parameter dat7=6'hE; parameter dat8=6'hF; parameter dat9=6'h10; parameter dat10=6'h12; parameter dat11=6'h13; parameter dat12=6'h14; parameter dat13=6'h15; parameter dat14=6'h16; parameter dat15=6'h17; parameter dat16=6'h18; parameter dat17=6'h19; parameter dat18=6'h1A; parameter dat19=6'h1B; parameter dat20=6'h1C; parameter dat21=6'h1D; parameter dat22=6'h1E; parameter dat23=6'h1F; parameter dat24=6'h20; parameter dat25=6'h21; parameter dat26=6'h22; parameter dat27=6'h24; parameter dat28=6'h25; parameter dat29=6'h26; parameter dat30=6'h27; parameter dat31=6'h28; parameter dat32=6'h29; parameter dat33=6'h2A; parameter nul=6'hF1; parameter set41=6'h34; /-1602显示的频率转换-always (posedge clk) /da de shi zhong pinlv begin counter=counter+1; if(counter=16'h000f) clkr=clkr; end always (posedge clkr) begin current=next; case(current) /LCD1602的资料上面介绍的地址第一行的起始地址是00H /第二行的其实地址是40H,他这个是没有加上最高位那个1 /所以我们实际的编程是地址第一行的起始地址是00H+80H= 0x80 /实际的编程是地址第二行的起始地址是40H+80H= 0xC0 /这里要注意 / case 0:addr=0x80; break; /所以我们实际的编程是地址第一行的起始地址是00H+80H= 0x80 / case 1:addr=0xC0; break;/实际的编程是地址第二行的起始地址是40H+80H= 0xC0 set0: begin rs<=0; dat<=8'h38; next<=set1; end /*设置8位格式,2行,5*7* set1: begin rs<=0; dat<=8'h0C; next<=set2; end /*整体显示,关光标,不闪烁*/ set2: begin rs<=0; dat<=8'h06; next<=set3; end /*设定输入方式,增量不移位*/ set3: begin rs<=0; dat<=8'h01; next<=dat0; end /*清除显示*/ set5: begin rs<=0; dat<=8'h80; 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+8'h30; next<=dat3; end dat3: begin rs<=1; dat<=shi1+8'h30;next<=dat4; end dat4: begin rs<=1; dat<=":" next<=dat5; end dat5: begin rs<=1; dat<=fen2+8'h30; next<=dat6; end dat6: begin rs<=1; dat<=fen1+8'h30; next<=dat7; end dat7: begin rs<=1; dat<=":"next<=dat8; end dat8: begin rs<=1; dat<=miao2+8'h30; next<=dat9; end dat9: begin rs<=1; dat<=miao1+8'h30;next<= dat10 ; end dat10: begin rs<=1; dat<=" " next<=dat11; end dat11: begin rs<=1; dat<=flag+8'h30; 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+8'h30; next<=set4; end set4: begin rs<=0; dat<=8'hC0; next<=dat12; end /显示第二行 dat12: begin rs<=1; dat<="S" next<=dat13; end dat13: begin rs<=1; dat<=":"next<=dat14; end dat14: begin rs<=1; dat<=wb+8'h30; next<=dat15; end dat15: begin rs<=1; dat<=ws+8'h30; next<=dat16; end dat16: begin rs<=1; dat<=wg+8'h30; next<=dat17; end dat17: begin rs<=1; dat<="." next<=dat18; end dat18: begin rs<=1; dat<=wf+8'h30; next<=dat19; end dat19: begin rs<=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+8'h30; next<=dat24; end dat24: begin rs<=1; dat<=ms+8'h30; next<=dat25; end dat25: begin rs<=1; dat<=mg+8'h30; next<=dat26; end dat26: begin rs<=1; dat<="." next<= dat27; enddat27: begin rs<=1; dat<=mj+8'h30; next<=set5; end/next<=nul时,不会刷新数据,只能为当前数据 nul: begin rs<=0; dat<=8'h00; / 把液晶的E 脚 拉高 if(cnt!=2'h2) 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; /-定义变量-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/-时间显示*-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<=shi/10; end /-价格选项-always (miao)begin if(shi>=6&&shi<=23) flag<=1; else flag<=0;end/*测距与计费的定义变量*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 way<=way+speed; if(way>10000) way<=0;endalways (posedge clk_1hz)/计费beginif(flag=1) money<=money+speed*14; else money<=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) 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;/计数寄存器always (posedge clk or negedge rst_n) if (!rst_n) cnt1 <= 20'd0;/异步复位else if(key_an) cnt1 <=20'd0; else cnt1 <= cnt1 + 1'b1; reg 1:0low_sw;always (posedge clk or negedge rst_n) if (!rst_n) low_sw <= 1'b1; else if (cnt1 = 20'hfffff) /满20ms,将按键值锁存到寄存器low_sw中 cnt = 20'hfffff low_sw <= sw1_n,sw2_n; /-reg 1:0 low_sw_r; /每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中always ( posedge clk or negedge rst_n ) if (!rst_n) low_sw_r <= 1'b1; 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

    注意事项

    本文(EDA课程设计(论文)出租车计费系统verilog语言.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开