ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:59.78KB ,
资源ID:5078104      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5078104.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于verilogHDL的出租车计费器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于verilogHDL的出租车计费器.docx

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

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

3、. .J.I|J.U1H.UHIIIUJ1I_OLniftjT 厂depenpiqiclr#4clksumi 1.0K2qm7 .0)azcrujmJTcout3jscourtlsinrgtlq23 qqm7.0J qTF .0 qs-.O qlF-O sumlllOl2.各个模块程序的设计1分频模块:模拟车辆行进,分1s/km档和0.1s/km档iLclk cout=1cJKIfenpinqirmodule fpq(clk,cout,k1); in put clk,k1;reg 24:0 q; output reg cout;always (posedge clk) begincase(k1

4、)0: begi n q=q+1;if (q=20000000-1) begi n cout=1;q=0;e nd else cout=0;end1:begi n q=q+1 ;if (q=2000000-1)begi n cout=1;q=0;e nd else cout=0;endendcase enden dmodule2计程兼计费模块:jsq99累计路程dejfq按规则计费,同时附带输出显示 fuckclrq|7 0clksum11 0k2ck 47.0|z. com.:对口ch埴11”切cbmk2_u I :BI:instS该模块又由两个小模块组成:.=inttjsq99 :路程显示

5、module jsq99(clr,clk,q,cout,k2);in put clk,clr,k2;output reg7:0q;output reg cout;always (posedge clk or n egedge clr) begin if(clr) q = 0;else begi n 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; endif(q=0) cout = 1; else cout = 0;e nd endenden dmoduledejfq :

6、计费module dejfq(clk,clrn,q,k2);input clk,k2;in put clrn;output reg11:0 q;reg3:0 c;always (posedge clk or n egedge clrn)beginif(clr n) begi n c=0;q=0;e ndelse beg inif(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:4+1;e nd if(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1; end e

7、ndelse if(c10)beginq3:0=q3:0+4;q7:4=q7:4+2;if(q3:09)begin q3:0=q3:0-10;q7:4=q7:4+1;e nd if(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1;end endif(c14) c=11;e ndendend en dmodule3选择器:选择显示时间或费用 ,拨下拨码开关显示路程和费用,拨上显示时钟。module xzq(k,qm,qf,qs,q,q1,sum);in put k;in put7:0 qm,qf,qs,q1;in put11:0 sum;output reg 23:

8、0 q;alwaysbeginif (k=0) beg inq7:0=q1;q11:8=0;q23:12=sum;e ndelse q23:0=qs,qf,qm;enden dmodule4clk即4Qlrnj叩.QJ-c*ficnm?3ins 12.(:iiin.“ideq7.gDnjwi7-_J 矽i| 、旷一二TI DGUt_is w 呻.”|*r时间模块:24小时时钟,可以显示时分秒,可以校准。jsq24?iclkqm7 0qs7. 0 i.1 , R clrnIib r |Jff a 8- fcoutcout_1s1 J JFjs一一;instlJ 该模块又由几个小模块组成modul

9、e clkge n(clk,cout); 两千万分频器in put 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;endendmodulemodule cnt60(clk,clrn,j,q,cout);/60 进制计数器 input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkAj or n egedge cl

10、r n)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,clrn,j,q,cout);/24 进制计数器input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkAj or negedge clrn)beginif (clrn) q=0;else be

11、ginif (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 Isd(clk,q,k2);input clk,k2;output reg11:0 q;reg 7:0 d;in itial q=1;always (posedge clk)if(k2=0)beginif(d=23) d=0;else d=d+1;if(d=11)beginif(q=12b111111111111) q=

12、12b0111111111111;else q=q11)beginif(q=12b000000000000) q=1;else q=q1;endenden dmodule3.制作与调试过程1新建工程,输入程序,生成模块2各模块波形模拟3进行各模块间连线4引脚锁定5下载硬件验证调试:最初计费时选择乘法,但占用资源过多,而且在数码管显示时出现 进制,所以转换成加法,成功解决问题。4.结论通过硬件验证,我的系统已经达到设计要求,同时附加了时钟和流水灯显示两个小功能,可以通过拨码开关选择显示时间和费用。 但由于是初次实践,所以 选用了以前上课的模块,导致程序过于臃肿,总体来说还是可以的。5.实训心得体

13、会为期两周的实训结束了,这是我首次将EDA课程学习到的知识运用到实际当 中。在实训过程中我遇到许多的困难,特别是将16进制转换成0-9的16进制输 出到数码管这个地方,困扰了我数天的时间,通过查找资料我采用将乘法转换成 加法的方法避开了问题,同时也降低了资源占用率,我在这一点上明白了,想要 得到一个优异的程序,我们必须善于发现问题改正问题,同时要有一颗持之以恒 的心。虽然在实训中遇到了一些我们不能完成的问题, 但也能在问题中提高很多专业知识,当然也离不开老师的悉心教导。6.参考文献1数字逻辑电路基础,江国强,电子工业出版社2纟EDA技术与应用,江国强,电子工业出版社附录:仿真波形图(部分模块)

14、程序清单module fpq(clk,cout,k1); 分频模块in put 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;end else cout=0;end1: begin q=q+1 ;if (q=2000000-1) begin cout=1;q=0;end else cout=0;end endcase end endmodulemodule jsq99(clr,clk,q,cout,k2);/

15、 计程 input clk,clr,k2;output reg7:0q; output reg cout; always (posedge clk or negedge clr) beginif(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 end end endmodule module dejfq(clk,clrn,q,k2);/ 计费

16、input clk,k2;input clrn;output reg11:0 q;reg3:0 c;always (posedge clk )beginif(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:4+1;endif(q7:49)begin q7:4=q7:4-10;q11:8=q11:8+1; end endelse if(c10) begin q3:0=q3:0+4;q7:4=q7:4+2;if(q3:09)begin q3:

17、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 clk)beginif (q=20000000-1) q=0;else q=q+1;if (q=20000000-1) cout=1;else cout=0;endendmodulemodule cnt60(clk,clrn,j,

18、q,cout);/60 进制计数器input clk,clrn,j;output reg7:0 q;output reg cout;always (posedge clkAj or n egedge clr n)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;end end endmodulemodule cnt24(clk,clrn,j,q,cout);/24 input clk,clrn

19、,j;output reg7:0 q;output reg cout;always (posedge clkAj or n egedge clr n) beginif (clrn) q=0;else beginif (q=h23) q=0;else q=q+1;if (q3:0=ha) begin q3:0=0; q7:4=q7:4+1; endif (q=h23) cout=1;else cout=0;endendendmodule module xzq(k,qm,qf,qs,q,q1,sum);/input k;input7:0 qm,qf,qs,q1;input11:0 sum;outp

20、ut reg 23:0 q;alwaysbeginif (k=0) beginq7: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)beginif(d=23) d=0;else d=d+1;进制计数器选择器if(d=11)beginif(q=12b111111111111) q=12b0111111111111;else q=q11)beginif(q=12b000000000000) q=1;else q=q1;endend endmodule

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1