




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
论文:出租车计费器XX大学物联网工程学院 Verilog HDL项目设计报告 题 目 出租车计费器_ 专 业 电子科学与技术_ 学 号 1562910227、1562910209 授课班号 629275801_ 学生姓名 XXX、XXX_ 指导教师 XX、齐XX_ 摘要 本次课设我们采用可编程逻辑器件(FPGA/Verilog)进行对出租车计费器的设计。本设计实现了出租车计费器所需的一些基本功能,计费金额包括起步价、里程计费等。该设计采用模块化设计,在VIVADO2015.4软件平台下,采用Verilog HDL 硬件描述语言描述和模拟仿真了分频模块、计程模块、计费模块,译码显示模块,完成了出租车计费器仿真设计实现。关键词:出租车计价器,Verilog HDL,同步脉冲,数码显示 Abstract This class set we use programmable logic device (FPGA/Verilog) to design a taxi meter. The design and implementation of some of the basic functions required for taxi billing, billing amount including starting price, mileage and so on. The design uses the modular design in ISE software platform, using Verilog HDL hardware description language description and Simulation of frequency module, meter module, billing module, decoding module, realizes the design of Taximeter simulation. Key words: taximeter, Verilog HDL,Sync pulse, digital display 目录 一、方案设计 二、模块设计 三、仿真调试 四、总结五、参考文献 六、附录 一、方案设计 1、设计目标 完成简易出租车计价器设计,选做停车等待计价功能。(1)起步8元/3公里,此后1元/550米;(2)里程指示信号为每前进50米一个高电平脉冲,上升沿有效;(3)前进里程开始之前显示价钱,精确到0.1元;2、设计原理 出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从8开始计算。再根据行驶里程按以上的标准计费。若在行驶状态,则计程器开始加计数, 当路程超过三公里后,计费器以每50米/0.1元累加。出租车到达目的地停止后,停止计费器,显示总费用。根据课程设计要求计价器可根据车轮转数计算路程,每一个脉冲是代表50米,当一个脉冲到里程计算模块,计价器增加0.1元,则经过十一个脉冲后是每550米,一共经历11个状态,价格增加1.0元。二、模块设计 1、分频模块 将时钟信号进行分频,分出的频率供后面的计程模块和计价模块用,以及后面的数码显示扫描模块都会用到。此模块的功能是对总的时钟进行分频,分出的频率是让计数器用的,因为总的时钟是50K的。设计该模块的时候用了一个16位的计数器,当计数器计到500的时候产生时钟。always(posedge clk or posedge rst)/frequency division if(rst) begin clk0=0;count=0;end else if(count=500) begin clk0=clk0;count=0;end else count=count+1; 2、同步脉冲信号处理模块 同步脉冲信号处理模块主要完成对脉冲start的同步处理,本部分采用三个D触发器和一个与门完成对start信号的同步处理,处理之后在clk上升沿检测start信号的高低电平。always(posedge clk or posedge rst)/signal porcessing if(rst) pulse1,pulse2,pulse3=0; else begin pulse1=pulse0; pulse2=pulse1; pulse3=pulse2; end always(*) begin pulse=pulse2&(pulse3); /SYNC pulse end 3、计程模块 此模块的功能是计算出租车行驶的路程。在出租车启动并行驶的过程中(即复位/启动信号rst为1),当时钟clk是上升沿的时候且输入一个正脉冲时,系统即对路程计数器的里程计数器进行加计数。always(posedge clk or posedge rst)/distance if(rst) meter=0; else if(pulse) begin if(meter=5) meter=0; else meter=meter+5; end always(posedge clk or posedge rstn) if(rst) kmeter_4,kmeter_3,kmeter_2,kmeter_1=0; else if(pulse) begin if(meter=5) if(kmeter_l=9) if(kmeter_2=9) if(kmeter_3=9) if(kmeter_4=9) begin kmeter_l=0;kmeter_2=0;kmeter_3=0;kmeter_4=0;end else begin kmeter_l=0;kmeter_2=0;kmeter_3=0;kmeter_4=kmeter_4+1;end else begin kmeter_l=0;kmeter_2=0;kmeter_3=kmeter_3+1;end else begin kmeter_l=0;kmeter_2=kmeter_2+1;end else begin kmeter_l=kmeter_l+1;end end 4、计费模块 费用计数器模块用于出租车启动后,根据行驶路程计算费用。当出租车停车时,时钟rst用于将费用计数器复位为起步价8.0元;当车处于行驶状态时,且满3公里后路程每满50米,费用计数器加0.1元;always(posedge clk or posedge rst)/money if(rst) begin money_4,money_3,money_l=0; money_2=8;money=11b00101001101) / =2950m if(money_l=9) if(money_2=9) if(money_3=9) if(money_4=9) begin money_l=0;money_2=0;money_3=0;money_4=0;money=1; end else begin money_l=0;money_2=0;money_3=0;money_4=money_4+1;money=1; end else begin money_l=0;money_2=0;money_3=money_3+1;money=1;end else begin money_l=0;money=1;money_2=money_2+1;end else begin case(money) 1:money_l=1; 2:money_l=2; 3:money_l=3; 4:money_l=4; 5:money_l=5; 6:money_l=5; 7:money_l=6; 8:money_l=7; 9:money_l=8; 10:money_l=9; 11:money_l=0; endcase money=money+1; end end 5、数码管显示模块 数码管显示模块为四位数码管,设置一个开关,当为低电平其中四位显示公里数,当为高电平时四位显示价钱数,精度分别为 0.1km 和 0.1 元,此模块需要将计数值通过译码电路将数据译码为数码管显示的数据即可 always(posedge clk or posedge rst)/display if(rst) state=0; else if(state=23) state=0; else state=state+1; always(posedge clk or posedge rst) if(rst) begin display=8b11000000;en=4b0000;variable=0;end else begin case(variable) 0:begin display6:0=7b1000000;end 1:begin display6:0=7b1111001;end 2:begin display6:0=7b0100100;end 3:begin display6:0=7b0110000;end 4:begin display6:0=7b0011001;end 5:begin display6:0=7b0010010;end 6:begin display6:0=7b0000010;end 7:begin display6:0=7b1111000;end 8:begin display6:0=7b0000000;end 9:begin display6:0=7b0010000;end default:begin display=8b11111111;en=0&state=1)begin display7=1;variable=money_l;en=3&state=4)begin display7=0;variable=money_h;en=6&state=7)begin display7=1;variable=money_hh;en=9&state=10)begin display7=1;variable=money_hhh;en=4b0111;end else begin en=4b1111;variable=0&state=1)begin display7=1;variable=kmeter_l;en=3&state=4)begin display7=0;variable=kmeter_h;en=6&state=7)begin display7=1;variable=kmeter_hh;en=9&state=10)begin display7=1;variable=kmeter_hhh;en=4b0111;end else begin en=4b1111;variable=10;end end default:begin display=8b11111111; en=4b1111;end endcase end end 三、设计仿真与调试 1、仿真 计价电路由于计价要求精确到 0.1元,而每 550m计价一元且每 50m来一个脉冲;即每一个脉冲大约为九分钱,因此本次计价按四舍五入法计价,同时为了满足出租车计价的现实性,故需每次计价最终结果要比实际值多 0.1元。出租车计价应该是在三公里以内始终显示八元,而当刚好是三公里时应当显示 8.1 元,即在 2.95km时就开始计价,之后再按照脉冲采用四舍五入法来计价,并且每 11 个脉冲计价 1元,这样就满足了出租车计价的现实性。2、调试 电路用数码管显示行走里程数和价钱数,由于没有行走 50m的脉冲信号,故采用按键模拟出租车行走 50m的脉冲信号。用数码管显示里程数和价钱。(1) 三公里以内 价格为8元 里程数 (2) 三公里以外 4.1公里 价格10.1元 3、验收结果 验收时老师要求将起步价改为7元,复位信号端口改成任意指定端口。改变起步价只需将计费模块中 begin money_4,money_3,money_l=0; money_2=8;money=1;end 这条语句中的money_2=8改成money_2=7即可。而改变端口需改变约束文件的端口定义,将其改为指定端口的端口号即可。四、总结 这次课程设计经历了两周的时间,从中我们学到了很多。我们不仅巩固了学过的知识,而且学到了很多在书本上所没有学到过的知识,经历了仿真与开发板的验证,在开发板上初步达到了设计的任务要求。这次设计进一步加深了我们对verilog 的了解。中途也遇到一些问题,例如仿真时遇到了困难,想要的结果不能再波形上得到正确的显示,后来,经过屡次的调试之后,才发现在写代码之前对信号的考虑不足。这次课设中我懂得了理论与实际相结合很重要。仅凭理论知识远远不够,只有把所学的理论知识与实践想结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。我们设计的过程中发现了自己的不足之处,以后还需加以改进。总的来说,这次设计还算成功,尽管在设计中遇到了很多问题,我们都十分努力地化解问题。我们不仅学到了知识,而且锻炼了自己的能力,让自己对以后的路有了更加清楚的认识。五、参考文献 夏宇闻.verilog数字系统设计教程.北京航天航空大学出版社 六、附录 1、主程序 module taxi(clk,pulse0,rst,turn,display,en); input clk,rst,pulse0,turn; /clk0=100MHZ ASYNC pulse0 output7:0display; output3:0en; wire clk,rstn,pulse0; reg7:0display; reg3:0en; reg clk0,pulse1,pulse2,pulse3,pulse; reg2:0meter; reg5:0state; reg15:0count; reg3:0 variable,money,kmeter_1,kmeter_2,kmeter_3,kmeter_4,money_1,money_2,money_3,money_4; always(posedge clk or posedge rst)/frequency division if(rst) begin clk0=0;count=0;end else if(count=500) begin clk0=clk0;count=0;end else count=count+1; always(posedge clk or posedge rst)/signal porcessing if(rst) pulse1,pulse2,pulse3=0; else begin pulse1=pulse0; pulse2=pulse1; pulse3=pulse2; end always(*) begin pulse=pulse2&(pulse3); /SYNC pulse end always(posedge clk or posedge rst)/distance if(rst) meter=0; else if(pulse) begin if(meter=5) meter=0; else meter=meter+5; end always(posedge clk or posedge rstn) if(rst) kmeter_4,kmeter_3,kmeter_2,kmeter_1=0; else if(pulse) begin if(meter=5) if(kmeter_l=9) if(kmeter_2=9) if(kmeter_3=9) if(kmeter_4=9) begin kmeter_l=0;kmeter_2=0;kmeter_3=0;kmeter_4=0;end else begin kmeter_l=0;kmeter_2=0;kmeter_3=0;kmeter_4=kmeter_4+1;end else begin kmeter_l=0;kmeter_2=0;kmeter_3=kmeter_3+1;end else begin kmeter_l=0;kmeter_2=kmeter_2+1;end else begin kmeter_l=kmeter_l+1;end end always(posedge clk or posedge rst)/money if(rst) begin money_4,money_3,money_l=0; money_2=8;money=11b00101001101) / =2950m if(money_l=9) if(money_2=9) if(money_3=9) if(money_4=9) begin money_l=0;money_2=0;money_3=0;money_4=0;money=1; end else begin money_l=0;money_2=0;money_3=0;money_4=money_4+1;money=1; end else begin money_l=0;money_2=0;money_3=money_3+1;money=1;end else begin money_l=0;money=1;money_2=money_2+1;end else begin case(money) 1:money_l=1; 2:money_l=2; 3:money_l=3; 4:money_l=4; 5:money_l=5; 6:money_l=5; 7:money_l=6; 8:money_l=7; 9:money_l=8; 10:money_l=9; 11:money_l=0; endcase money=money+1; end end always(posedge clk or posedge rst)/display if(rst) state=0; else if(state=23) state=0; else state=state+1; always(posedge clk or posedge rst) if(rst) begin display=8b11000000;en=4b0000;variable=0;end else begin case(variable) 0:begin display6:0=7b1000000;end 1:begin display6:0=7b1111001;end 2:begin display6:0=7b0100100;end 3:begin display6:0=7b0110000;end 4:begin display6:0=7b0011001;end 5:begin display6:0=7b0010010;end 6:begin display6:0=7b0000010;end 7:begin display6:0=7b1111000;end 8:begin display6:0=7b0000000;end 9:begin display6:0=7b0010000;end default:begin display=8b11111111;en=0&state=1)begin display7=1;variable=money_l;en=3&state=4)begin display7=0;variable=money_h;en=6&state=7)begin display7=1;variable=money_hh;en=9&state=10)begin display7=1;variable=money_hhh;en=4b0111;end else begin en=4b1111;variable=0&state=1)begin display7=1;variable=kmeter_l;en=3&state=4)begin display7=0;variable=kmeter_h;en=6&state=7)begin display7=1;variable=kmeter_hh;en=9&state=10)begin display7=1;variable=kmeter_hhh;en=4b0111;end else begin en=4b1111;variable=10;end end default:begin display=8b11111111; en=4b1111;end endcase end end endmodule 2、测试文件程序 module taxi_test; reg clk0,rstn,pulse0,turn; wire 7:0display; wire 3:0en; wire 3:0 variable; wire 3:0 kmeter_l; wire pulse; taxi taxi(.clk0(clk0),.rstn(rstn),.pulse0(pulse0),.turn(turn),.display(display),.en(en),.variable(variable),.kmeter_l(kmeter_l),.pulse(pulse); initial turn=1; always #10 turn=turn; initial clk0=0; always #0.001 clk0=clk0; initial begin rstn=0; #1 rstn=1; #1 rstn=0; end initial begin pulse0=0; while(1) begin #1 pulse0=1; #1.5pulse0=0; end #0.05 $finish; end endmodule 3、约束文件程序 set_propertyIOSTANDARDLVCMOS33get_portsdisplay7 set_propertyIOSTANDARDLVCMOS33get_portsdisplay6 set_propertyIOSTANDARDLVCMOS33get_portsdisplay5 set_propertyIOSTANDARDLVCMOS33get_portsdisplay4 set_propertyIOSTANDARDLVCMOS33get_portsdisplay3 set_propertyIOSTANDARDLVCMOS33get_portsdisplay2 set_propertyIOSTANDARDLVCMOS33get_portsdisplay1 set_propertyIO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民爆岗前安全培训内容课件
- 宠物防治考试题库及答案
- 油田新质生产力发展路径与建议
- 现存安全问题剖析讲解
- 医护关系的理想境界
- 新质生产力紫金山实验室
- 煤炭行业新质生产力发展的误区与对策
- 关于社会实践的活动策划方案
- 综合办公领域的新质生产力应用
- 符合新质生产力要求的核心要素
- 安全标准化台帐汇编优质资料
- 法考客观题历年真题及答案解析卷一(第1套)
- 第一单元 项目2:走进IC卡收费系统-初始信息系统 课件 高中信息技术必修2
- GB/T 36964-2018软件工程软件开发成本度量规范
- GB/T 13667.3-2013钢制书架第3部分:手动密集书架
- 贝恩咨询模板课件
- 被巡察单位需提供资料清单(模版)
- 《大学物理》教学全套课件
- 林下经济的主要模式课件
- JJF 1076-2020-数字式温湿度计校准规范-(高清现行)
- GB 24427-2021 锌负极原电池汞镉铅含量的限制要求
评论
0/150
提交评论