




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安邮电学院科研训练报告基于fpga的出租车计价器设计院系:电子工程学院姓名: 专业班级:微电子(05)学号: 81目录摘要21引言:22系统规范:22.1,出租车计价器的要求:22.2 ,系统组成框图:23 .各模块设计:33.1分频模块:33.1.1,计数器的分频模块:33.1 .3,计数器的分频模块veriloghdl源代码:43.1 .4,仿真的结果:43.1.5,数码管的分频模块:43.1 .6 ,具体框图:43.1 .7,数码管的分频模块veriloghdl源代码:53.2,计程模块:53.2.1,计程模块的框图:53.2.2计程模块的veriloghdl源代码:53.2.3计程模
2、块的仿真结果:63.3计时模块:73.3.1,计时模块的框图:73.3.2,计时模块的veriloghdl源代码:73.3.3计时模块的仿真结果:83.4,控制模块:83.4.1, 控制模块的框图:93.4.2,控制模块的veriloghdl源代码:93.4.3,控制模块的仿真结果:93.5,计费模块:93.5.1计费模块的框图:93.5.2,计费模块的veriloghdl源代码如下所示:103.5.3,计费模块的仿真结果:103.6,数码管显示模块:113.6.1,数码管显示模块的框图:113.6.2,数码管显示的veriloghdl源代码:113.7,顶层模块:133.7.1,顶层模块的v
3、eriloghdl源代码:134.验证方案:144.1,验证的流程图:144.2,验证的veriloghdl源代码:154.3,系统仿真:155.综合:175.1, quartus ii软件综合的报表:175.2,综合的rtl级电路:176. 结束语:187.参考文献:18基于fpga的出租车计价器设计2系统规范:2.1,出租车计价器的要求: 行程3公里内(包括3公里),且等待累计时间2分钟内(包括2分钟),起步费为10元; 3公里外(不包括3公里)以每公里2元,等待累计时间2分钟外(不包括2分钟)以每分钟以1.0元计费。 能显示行驶公里数、等待累计时间和最后的总费用。本计费器的显示范围为09
4、9元,计价分辨率为1元;计程器显示范围为099公里,分辨率为1公里;计时器的显示范围是分钟的显示范围是099, 辨率为1分钟。秒的显示范围是059。辨率为1秒。2.2 ,系统组成框图:出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器和时间计数器从0开始计数,费用计数器从10开始计算。再根据行驶里程或停止等待的时间按以上的标准计费。若在行驶状态,则计程器开始加计数,当路程超过三公里后,计费器以每公里2元累加。若出租车停止等待状态,则计时器开始加计数,当时间超过两分钟后,计费器以每分钟1元累加。出租车到达目的地停止后,停止计费器,显示总费用。根据出租车计费器的工作过程
5、,本系统采用分层次、分模块的方式设计,其本系统组成框图如下所示。其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总费用等信息。系统框图如下所示:3 .各模块设计:本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。为了便于显示,这里的路程、时间和费用计数器均用十六进制表示。3.1分频模块:3.1.1,计数器的分频模块:3.1 .2 ,计数器的分频模块具体框图: 此模块的功能是对总的时钟进行分频,分出的频率是让
6、计数器用的,因为总的时钟是50m的。设计该模块的时候用了一个32位的计数器,当计数器计到25_000000的时候产生时钟。在仿真的时候为了方便观察设计了一个8分频的电路。当下载的时候用的是2hz的时钟 。3.1 .3,计数器的分频模块veriloghdl源代码:module div(clk_50m,clk,reset);/ 端口的定义input clk_50m,reset;/ 总的时钟是50moutput clk;/分频后输的时钟 reg clk;reg 31:0 count;/32位的计数器always (posedge clk_50m or negedge reset)/异步复位begin
7、 if(!reset) begin clk=d0; count=32d0;endelse if(count=32d25_000000)/ 判断计时器记到了25_000000吗 begin count=32d0;/计到25_000000计数器清零 clk=clk;/输出的时钟取反 end/end begin else count=count+1d1;/ 没计到25_000000计数器加一end/end alwaysendmodule / 结束分频模块3.1 .4,仿真的结果: 从波形可以看出当reset为低电平的时候clk为零,当为高电平的时候clk的高电平占了clk_50m的八个周期,低电平也
8、占了clk_50m的八个周期。3.1.5,数码管的分频模块:3.1 .6 ,具体框图: 此模块的功能是对总的时钟进行分频,分出的频率是让数码管用的,因为总的时钟是50m的。设计该模块的时候用了一个32位的计数器,当计数器计到50_000的时候产生时钟。在仿真的时候为了方便观察设计了一个8分频的电路。3.1 .7,数码管的分频模块veriloghdl源代码:module div1(clk_50m,clk1,reset);/ 端口的定义input clk_50m,reset;/ 总的时钟是50moutput clk1;/分频后输的时钟 reg clk1;reg 31:0 count;/32位的计数
9、器always (posedge clk_50m or negedge reset)/异步复位begin if(!reset) begin clk1=d0; count=32d0;endelse if(count=32d50_000)/ 判断计时器记到了50_000吗 begin count=32d0;/计到50_000计数器清零 clk1=clk1;/输出的时钟取反 end/end begin else count=count+1d1;/ 没计到50_000计数器加一end/end alwaysendmodule / 结束分频模块3.2,计程模块:3.2.1,计程模块的框图:此模块的功能是计
10、算出租车行驶的路程。在出租车启动并行驶的过程中(即复位/启动信号reset为0,行驶/停止信号start为1),当时钟clk是上升沿的时候,系统即对路程计数器distance的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲distance_enable。3.2.2计程模块的veriloghdl源代码:module distancemokuai(clk,start,reset,distance,distance_enable);/端口的定义input clk,start,reset;output 7:0 distance;/ 输出的公里reg 7:0 distance;outpu
11、t distance_enable;/ 控制计费的公里信号reg distance_enable;always(posedge clk or negedge reset)/异步复位begin if(!reset)/低电平复位 begin distance=8d0; end else if(start)/ start 高电平有效 begin if(distance3:0=9)/判断distance的低四位计到了9没有 begin distance3:0=4d0;/计到9清零 if(distance7:4=9) /判断distance的高四位计到了9没有 distance7:4=4d0;/ /计到
12、9清零 else distance7:4= distance7:4+1d1;/ distance的高四位没有计到9的时候加一 end/end begin else distance3:0=distance3:0+1d1;/ distance的低四位没有计到9的时候加一 end/end startend/end always/*产生distance_enable信号*/always(posedge clk or negedge reset)beginif(!reset)begin distance_enable8d1)/ 公里大于三的时候 begin distance_enable=1d1;/输
13、出distance_enable信号 end/end beginend/end alwaysendmodule/结束计程模块3.2.3计程模块的仿真结果:从波形图可以看出在时钟的控制下当reset为低电平的时候distance,distance为零,当reset为高电平且start为高电平的时候distance开始计数,当计到大于三的时候输出了distancedistance_enable为高电平。3.3计时模块:3.3.1,计时模块的框图:此模块用于计算停车等待的时间。在出租车行进中,如果车辆停止等待,计数器则在1 hz信号clk的上升沿进行加计数,每60次产生进位脉冲使分钟计数器位进行加计
14、数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志time_enable正脉冲信号。3.3.2,计时模块的veriloghdl源代码:module timemokuai(clk,reset,start,s,m,time_enable);/ 端口的定义input clk,reset,start;output 7:0 s;/输出的秒output 7:0 m;/输出的分output time_enable;/输出的控制计费的信号reg 7:0 s;reg 7:0 m;wire time_enable; always(posedge clk or negedge reset)/异步复位begin
15、if(!reset)/低电平有效begin/复位s=8d0;m=8d0;endelse if(!start)/start 信号低电平有效beginif(s3:0=9)/ 秒的低四位是9 begin s3:0=4d0;/清零 if(s7:4=5) / 秒的高四位是5 begin s7:4=4d0; /清零 if(m3:0=9) / 分的低四位是9 begin m3:0=4d0; /清零 if(m7:4=9) / 分的高四位是9 m7:4=4d0; /清零 else m7:4=m7:4+1d1; / 分的高四位不是9加一endelse m3:0=m3:0+1d1; /分的低四位不是9加一endel
16、se s7:4=s7:4+1d1; / 秒的高四位不是5加一endelse s3:08d2)&(s7:0=8d0)?1d1:1d0;/产生time_enable信号。 endmodule/结束计时模块3.3.3计时模块的仿真结果:两分钟之内(包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为低电平的时候时间计数但是费用没有计数,time_enable为低电平。两分钟之外(不包括两分钟)的仿真结果如下所示:从波形图可以看出在clk的控制下当start为低电平reset为低电平的时候时间计数当时间大于二分钟的时候费用计数,time_enable为输出高
17、电平。3.4,控制模块:3.4.1, 控制模块的框图:控制模块用于为计费模块提供时钟,当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable,3.4.2,控制模块的veriloghdl源代码:module control(start,distance_enable,time_enable,select_clk);input start,distance_enable,time_enable;output select_clk;/输出选择的时钟信号wire select_clk;/*当st
18、art高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable*/assign select_clk=start?distance_enable:time_enable; endmodule/结束控制模块3.4.3,控制模块的仿真结果:公里计费的仿真结果如下所示:从波形图可以看出当start高电平的时候输出的信号是distance_enable。时间计费的仿真结果如下所示:从波形图可以看出当start低电平的时候输出的信号是time_enable。3.5,计费模块:3.5.1计费模块的框图:费用计数器
19、模块用于出租车启动后,根据行驶路程和等待时间计算费用。当出租车停车时,时钟select_clk用于将费用计数器复位为起步价10元;当车处于行驶状态且满3公里时,select_clk信号选择distans_enable,此后路程每满1公里,费用计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。3.5.2,计费模块的veriloghdl源代码如下所示:module feemokuai(select_clk,reset,fee,clk);input select_clk,reset,clk;output7
20、:0 fee;/输出的费用reg 7:0 fee;always(posedge clk or negedge reset)/异步复位begin if(!reset)/低电平有效 begin fee=8h10;/起步为十元 end else if(select_clk=1d1) begin if(fee3:0=4d9)/费用的低四位是不是计到了9 begin fee3:0=4d0;/计到9清零 if(fee7:4=4d9)/ 费用的高四位是不是计到了9fee7:4=4d0; /计到9清零 else fee7:4=fee7:4+1d1;/ 费用的高四位没有计到9加1endelse fee3:0=f
21、ee3:0+1d1;/ 费用的低四位没有计到9加1end/end beginend/end alwaysendmodule /结束计费模块3.5.3,计费模块的仿真结果:公里计费的仿真结果如下所示:时间计费的仿真结果如下所示:两分钟之内(包括两分钟)的计费仿真结果如下所示:两分钟之外(不包括两分钟)的仿真结果如下所示:3.6,数码管显示模块:3.6.1,数码管显示模块的框图:数码管有两种显示方式动态显示与静态显示,由于在本文中用到了七个数码管所以选择了动态显示,在时钟的控制下,当reset为高电平的时候把费用,公里,时间译码输出。3.6.2,数码管显示的veriloghdl源代码:module
22、 scan_led(clk1,dig,seg,distance,s,m,fee);input clk1;input7:0 distance,fee;/输入的公里,费用。input7:0 s;/输入的秒input7:0 m;/输入的分。output7:0 dig; / 译码结果output7:0 seg;/ 数码管的选择。reg 7:0 r_dig;/ 译码结果输出寄存器reg 7:0 r_seg; /数码管的选择寄存器。reg 3:0 disp_dat;reg3:0 a;assign dig=r_dig;assign seg=r_seg;always(posedge clk1)begin a=
23、a+1d1;/数码管的选择endalways(posedge clk1)begincase(a) 4d0: disp_dat=distance7:4;/公里的高四位用第一个数码管显示4d2: disp_dat=m7:4; /时间分的高四位用第三个数码管显示。4d3: disp_dat=m3:0; /时间分的低四位用第四个数码管显示4d4: disp_dat=s7:4; /时间秒的高四位用第五个数码管显示。4d5: disp_dat=s3:0; /时间秒的低四位用第六个数码管显示。4d6: disp_dat=fee7:4;/费用的高四位用第七个数码管显示。4d7: disp_dat=fee3:0
24、; /费用的低四位用第八个数码管显示。default: disp_dat=4b1010;endcasecase(a)4d0:r_dig=8b01111111;/ 选择第一个数码管4d1:r_dig=8b10111111;/ 选择第二个数码管4d2:r_dig=8b11011111; / 选择第三个数码管4d3:r_dig=8b11101111; / 选择第四个数码管4d4:r_dig=8b11110111; / 选择第五个数码管4d5:r_dig=8b11111011; / 选择第六个数码管4d6:r_dig=8b11111101; / 选择第七个数码管4d7:r_dig=8b11111110
25、; / 选择第八个数码管default:r_dig=8b11111111;endcaseend/ *译码结果*/always(disp_dat)begin case(disp_dat) 4h0: r_seg=8hc0;/ 显示0 4h1: r_seg=8hf9;/ 显示1 4h2: r_seg=8ha4;/ 显示2 4h3: r_seg=8hb0;/ 显示3 4h4: r_seg=8h99;/ 显示4 4h5: r_seg=8h92;/ 显示5 4h6: r_seg=8h82;/ 显示6 4h7: r_seg=8hf8;/ 显示7 4h8: r_seg=8h80;/ 显示8 4h9: r_se
26、g=8h90;/ 显示9 default: r_seg=8hbf;endcaseendendmodule/结束译码模块3.7,顶层模块:各模块设计仿真实现后,可分别创建成元件符号。顶层就是将各分模块用verilog hdl语言或者是图形方法连接起来,便可实现系统电路。3.7.1,顶层模块的veriloghdl源代码:module taximeter(clk_50m, reset,start,seg,dig);/ 端口的定义input clk_50m,reset,start;/总的时钟信号,复位信号,开始信号output7:0 seg,dig;/数码管的输出wire 7:0distance;/公
27、里wire 7:0 s;/秒wire 7:0 m;/分wire7:0 fee;/费用wire clk;/计数时钟wire distance_enable;/公里控制费用的信号wire time_enable;/时间控制费用的信号wire select_clk;/控制信号wire clk1;/数码管的时钟/*模块的调用*/div u0(.clk_50m(clk_50m),.clk(clk),.reset(reset);/调用计数分频模块div1 u1(.clk_50m(clk_50m),.clk1(clk1),.reset(reset);/调用数码管分频模块distancemokuai u2(.
28、clk(clk),.start(start),.reset(reset),.distance(distance),.distance_enable(distance_enable);/调用计程模块timemokuai u4(.clk(clk),.reset(reset),.start(start),.s(s),.m(m), .time_enable(time_enable);/调用计时模块control u3(.start(start),.distance_enable(distance_enable),.time_enable(time_enable),.select_clk(select_
29、clk);/调用控制模块feemokuai u5(.reset(reset),.fee(fee),.select_clk(select_clk),.clk(clk);/调用计费模块scan_led (.clk1(clk1),.dig(dig),.seg(seg),.distance(distance),.s(s),.m(m),.fee(fee);/调用数码管显示模块endmodule/结束顶层模块4.验证方案:4.1,验证的流程图:设计规范结束 testbench的创建验证规范 不满足运行,调试检查验证规范 不合格所有测试都满足覆盖要求 合格 验证规范结束满足 创建回归测试4.2,验证的veriloghdl源代码:timescale 1ns/100ps/时间的单位与时间的精度module taximeter_tb;/验证的模块名字reg clk_50m,reset,start;/输入wire7:0 distance;/输出的公里wire 7:0 s;/输出的秒wire 7:0 m;/输出的分wire 7:0 fee;/输出的费用always #10 clk_50m=clk_50m;/时钟的周期是20initialbegin/激励 reset=0; clk_50m=0; #1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 颌下痈的临床护理
- 2025二手房买卖合同模板
- 深圳初一生物试卷及答案
- 陕西去年高考试卷及答案
- 厦门上年中考试卷及答案
- 2025授权店特许合同协议样本
- 农药抗病虫害效果研究考核试卷
- 糖果的糖果品牌故事与品牌价值塑造考核试卷
- 2025物业租赁合同范本
- 电子元器件在智能手表中的应用考核试卷
- 高考英语单词3500记忆短文40篇
- PE管安装施工方案
- 童装陈列手册
- 十二指肠癌学习课件
- 电动自行车骑行安全与维护
- 社区获得性肺炎教学查房课件
- 2024年国家电投招聘笔试参考题库含答案解析
- JCT2166-2013 夹层玻璃用聚乙烯醇缩丁醛(PVB)胶片
- 建设工程竣工消防验收记录表
- 完整版融资方案ppt样本
- 话剧教学讲解课件
评论
0/150
提交评论