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