基于verilog-HDL的出租车计费器.doc

上传人:知****量 文档编号:86270422 上传时间:2023-04-14 格式:DOC 页数:13 大小:450.04KB
返回 下载 相关 举报
基于verilog-HDL的出租车计费器.doc_第1页
第1页 / 共13页
基于verilog-HDL的出租车计费器.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《基于verilog-HDL的出租车计费器.doc》由会员分享,可在线阅读,更多相关《基于verilog-HDL的出租车计费器.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 EDA技术与应用实训报告学 号 姓 名 指导教师:江国强 杨艺敏 2011 年 4 月 28 日实训题目:出租车计费器1.系统设计1.1 设计要求1.1.1 设计任务设计并制作一台出租车计费器。1.1.2 技术要求 用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。 出租车行驶超过2km后,按每公里1.6元在7.0元的基础上增加。 出租车行驶超过10km后(或超过20元路费),每公里加收50的车费,即车费变为每公里2.4元。 出租车达到目的地后,(用一个按钮

2、)计程和计费数据清零,为下一次计费开始。1.2 方案比较最初计费模块选择乘法,但占用资源过多,所以选择分段加法来解决1.3 方案论证1.3.1 总体思路整个系统主要由计程兼计费模块组成,另外添加计时器和流水灯模块作为附加功能,最后由选择模块选择输出费用或时间,分频模块作为路程模拟输入。1.3.2 设计方案分频器将实训仪的时钟转换成1s或0.1s的脉冲模拟行进一公里,将脉冲输入计程兼计费模块进行路程累加和计费,同时输出路程数和费用。流水灯则按行进路程进行亮灭,附加的时钟功能可以查看时间。最后由选择模块进行费用和时间间的切换。2各个模块程序的设计分频模块:模拟车辆行进,分1s/km档和0.1s/k

3、m档module fpq(clk,cout,k1);input clk,k1;reg 24:0 q;output reg cout;always (posedge clk)begincase(k1) 0: begin q=q+1;if (q=20000000-1) begin cout=1;q=0;endelse cout=0;end 1: begin q=q+1 ;if (q=2000000-1)begin cout=1;q=0;endelse cout=0;endendcaseendendmodule 计程兼计费模块:jsq99累计路程dejfq按规则计费,同时附带输出显示该模块又由两个小

4、模块组成:jsq99:路程显示module jsq99(clr,clk,q,cout,k2);input clk,clr,k2;output reg7:0q;output reg cout;always (posedge clk or negedge clr)begin if(clr) q = 0;else begin if(k2=0) begin if(q=h99) q = 0; else q = q+1; if(q3:0=ha)begin q3:0 = 0;q7:4 = q7:4+1;end if(q=0) cout = 1; else cout = 0;end endendendmodu

5、ledejfq:计费module dejfq(clk,clrn,q,k2);input clk,k2;input clrn;output reg11:0 q;reg3:0 c;always (posedge clk or negedge clrn)begin if(clrn) begin c=0;q=0;end else begin if(k2=0) begin if(c14) c=c+1; if(c=2) q7:4=7; else if(c9)begin q3:0=q3:0-10;q7:4=q7:4+1;end if(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+

6、1; endend else if(c10) begin q3:0=q3:0+4;q7:4=q7:4+2; if(q3:09)begin q3:0=q3:0-10;q7:4=q7:4+1;end if(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1;end endendif(c14) c=11;endendendmodule选择器:选择显示时间或费用,拨下拨码开关显示路程和费用,拨上显示时钟。module xzq(k,qm,qf,qs,q,q1,sum); inputk; input7:0qm,qf,qs,q1; input11:0 sum; output reg

7、 23:0q;always begin if (k=0) begin q7:0=q1;q11:8=0;q23:12=sum;end else q23:0=qs,qf,qm; endendmodule时间模块:24小时时钟,可以显示时分秒,可以校准。该模块又由几个小模块组成module clkgen(clk,cout);/两千万分频器input clk;reg 24:0 q;output reg cout;always (posedge clk)beginif (q=20000000-1) q=0;else q=q+1;if (q=20000000-1) cout=1;else cout=0;e

8、ndendmodule module cnt60(clk,clrn,j,q,cout);/60进制计数器input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkj or negedge clrn)beginif (clrn) q=0;else beginif (q=h59) q=0;else q=q+1;if (q3:0=ha) beginq3:0=0; q7:4=q7:4+1; endif (q=h59) cout=1;else cout=0;endendendmodulemodule cnt24(clk,clr

9、n,j,q,cout);/24进制计数器input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkj or negedge clrn)beginif (clrn) q=0;else beginif (q=h23) q=0;else q=q+1;if (q3:0=ha) beginq3:0=0; q7:4=q7:4+1; endif (q=h23) cout=1;else cout=0;endendendmodule流水灯模块:通过亮灭提示行进状态module lsd(clk,q,k2);input clk,k2;ou

10、tput reg11:0 q;reg 7:0 d;initial q=1;always (posedge clk) if(k2=0) begin if(d=23) d=0; else d=d+1; if(d=11) begin if(q=12b111111111111) q=12b0111111111111; else q=q11) begin if(q=12b000000000000) q=1; else q=q1; endendendmodule3制作与调试过程新建工程,输入程序,生成模块各模块波形模拟进行各模块间连线引脚锁定下载硬件验证调试:最初计费时选择乘法,但占用资源过多,而且在数码

11、管显示时出现16进制,所以转换成加法,成功解决问题。4结论通过硬件验证,我的系统已经达到设计要求,同时附加了时钟和流水灯显示两个小功能,可以通过拨码开关选择显示时间和费用。但由于是初次实践,所以选用了以前上课的模块,导致程序过于臃肿,总体来说还是可以的。5实训心得体会为期两周的实训结束了,这是我首次将EDA课程学习到的知识运用到实际当中。在实训过程中我遇到许多的困难,特别是将16进制转换成0-9的16进制输出到数码管这个地方,困扰了我数天的时间,通过查找资料我采用将乘法转换成加法的方法避开了问题,同时也降低了资源占用率,我在这一点上明白了,想要得到一个优异的程序,我们必须善于发现问题改正问题,

12、同时要有一颗持之以恒的心。虽然在实训中遇到了一些我们不能完成的问题,但也能在问题中提高很多专业知识,当然也离不开老师的悉心教导。6参考文献数字逻辑电路基础,江国强,电子工业出版社EDA技术与应用,江国强,电子工业出版社附录:仿真波形图(部分模块)路程兼计费模块: 程序清单module fpq(clk,cout,k1);/ 分频模块input clk,k1;reg 24:0 q;output reg cout;always (posedge clk)begincase(k1) 0: begin q=q+1;if (q=20000000-1) begin cout=1;q=0;endelse co

13、ut=0;end 1: begin q=q+1 ;if (q=2000000-1)begin cout=1;q=0;endelse cout=0;endendcaseendendmodule module jsq99(clr,clk,q,cout,k2);/计程input clk,clr,k2;output reg7:0q;output reg cout;always (posedge clk or negedge clr)begin if(clr) q = 0;else begin if(k2=0) begin if(q=h99) q = 0; else q = q+1; if(q3:0=h

14、a)begin q3:0 = 0;q7:4 = q7:4+1;end if(q=0) cout = 1; else cout = 0;end endendendmodulemodule dejfq(clk,clrn,q,k2);/计费input clk,k2;input clrn;output reg11:0 q;reg3:0 c;always (posedge clk )begin if(clrn) begin c=0;q=0;endif(k2=0)beginif(c14) c=c+1;if(c=2) q7:4=7;else if(c9)begin q3:0=q3:0-10;q7:4=q7:

15、4+1;endif(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1; endendelse if(c10) begin q3:0=q3:0+4;q7:4=q7:4+2;if(q3:09)begin q3:0=q3:0-10;q7:4=q7:4+1;endif(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1;endendif(c14) c=1;endendendmodulemodule clkgen(clk,cout);/两千万分频器input clk;reg 24:0 q;output reg cout;always (posedge

16、 clk)beginif (q=20000000-1) q=0;else q=q+1;if (q=20000000-1) cout=1;else cout=0;endendmodule module cnt60(clk,clrn,j,q,cout);/60进制计数器input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkj or negedge clrn)beginif (clrn) q=0;else beginif (q=h59) q=0;else q=q+1;if (q3:0=ha) beginq3:0=0;

17、q7:4=q7:4+1; endif (q=h59) cout=1;else cout=0;endendendmodulemodule cnt24(clk,clrn,j,q,cout);/24进制计数器input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkj or negedge clrn)beginif (clrn) q=0;else beginif (q=h23) q=0;else q=q+1;if (q3:0=ha) beginq3:0=0; q7:4=q7:4+1; endif (q=h23) cout=

18、1;else cout=0;endendendmodulemodule xzq(k,qm,qf,qs,q,q1,sum);/选择器 inputk; input7:0qm,qf,qs,q1; input11:0 sum; output reg 23:0q;always begin if (k=0) begin q7:0=q1;q11:8=0;q23:12=sum;end else q23:0=qs,qf,qm; endendmodulemodule lsd(clk,q,k2);/流水灯input clk,k2;output reg11:0 q;reg 7:0 d;initial q=1;always (posedge clk) if(k2=0) begin if(d=23) d=0; else d=d+1; if(d=11) begin if(q=12b111111111111) q=12b0111111111111; else q=q11) begin if(q=12b000000000000) q=1; else q=q1; endendendmodule

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁