1、可编程式逻辑器件设计试验报告期末报告 出租车计费器昆明理工大学信息工程与自动化学院学生实验报告( 20122013 学年 第 2 学期 )课程名称:可编程逻辑器件 开课实验室:信自楼504 2013年5月31日 年级、专业、班计科102班学号2010104052姓名成绩实验项目名称出租车计费器指导教师江虹 教师评语该同学是否了解实验原理: A.了解 B.基本了解 C.不了解该同学的实验能力: A.强 B.中等 C.差 该同学的实验是否达到要求: A.达到 B.基本达到 C.未达到实验报告是否规范: A.规范 B.基本规范 C.不规范实验过程是否详细记录: A.详细 B.一般 C.没有 教师签名
2、: 年 月 日一、试验设计要求设计一个出租车计费器,能按路程计费,具体要求如下所述:1) 实现计费功能,计费标准为:按行驶里程计费,起步价6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每km加收50%的车费,车辆停止和暂停时不计费。2) 现场模拟汽车的起动、停止、暂停和换挡等状态。3) 设计数码管动态扫描电路,将车费和路程显示出来,各有两位小数。二、试验设计原理(1)设计该出租车有起动键、停止键、暂停键和档位键。起动键为脉冲触发信号,当其为一个脉冲时,表示汽车已起动,并根据车速的选择和基本车速发出响应频率的脉冲(计费脉冲)以此来实现车费和路程的计数,同时车费显
3、示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用于改变车速,不同的档位对应着不同的车速,同时路程计数的速度也不同。出租车计费器可分为两大模块,即控制模块和译码显示模块。系统框图如下所示。控制模块实现了计费和路程的计数,并且通过不同的档位来控制车速。译码显示模块实现十进制数到4位二进制数的转换,以及车费和路程的显示。(A)系统框图(2)电路符号出租车计费器的电路符号如下图(B)、输入信号:计费始终脉冲clk;译码高频时钟ckl20mhz;汽车启动键start;汽车停止键stop;
4、汽车暂停键pause;档位speedup1.0。输出信号:数码管地址选择信号scan7.1;7段显示控制信号seg76.0,小数点dp(B)出租车计费器的电路符号(3)设计方法:A、自底向上的混合编辑 采用混合编辑法,设计不同的模块,最后在原理图编辑器中连接各模块作为顶层设计,其电路如下图(C)所示,其中taxi为控制模块;decoder为译码和显示模块。(C)出租车计费电路图三、实验设计过程控制模块taxi的源代码:Module taxi(money,distance,clk,start,stop,pause,speedup)Input clk; /计费时钟Input start; /汽车启
5、动Input stop; /汽车停止Input pause; /汽车暂停Input1:0 speedup; /档位Output12:0 money; /车费Output12:0distance; /路程Reg12:0 money; Reg12:0 distance; Reg12:0 money_reg; / 车费寄存器Reg12:0 distance_reg /路程寄存器Reg3:0 num; /控制车速的计数器Reg12:0 dis; /千米计数器Reg d; /千米标志位Always (posedge clk)Begin If(stop) /汽车停止,计费和路程清零 Begin money
6、_reg=d0; distance_reg=d0; dis=d0; num=d0;endelse if(start) /汽车启动后,起步价为6元 begin money_reg=d600;distance_reg=d0;dis=d0;num=d0;endelse beginif (!start&!speedup&!pause&!stop) /1档 begin if(num=d9)begin num=d0;distance_reg=distance_reg+1;dis=dis+1;endelsebegin num=num+1;endendelse if (!start&speedup=b01&!
7、pause&!stop) /2档beginif(num=d9)begin num=d0;distance_reg=distance_reg+2;dis=dis+2;endelsebegin num =num+1; endendelse if (!start&speedup=b10&!pause&!stop) /3档beginif(num=d9)begin num=d0;distance_reg=distance_reg+5;dis=dis+5;endelsebegin num=num+1;endendelse if (!start&speedup=b11&!pause&!stop) /4档be
8、gin distance_reg=distance_reg+1;dis=d100)begin d=d1;dis=d0;endelsebegin d=d300) /如果超过3km则按1.2元/km计算beginif(money_regd2000&d=”d1)begin money_regd2000&d=”d1)begin money_reg=money_reg+d180;end/当计费器达到20元时,每千米加收50%的车费endmoney=money_reg;distance=distance_reg;endendmoudle(2)译码显示模块decoder的源代码:Module deceder
9、(scan,seg7,dp,clk20mhz,money_in,distance_in):Output7:0 scan; /数码管地址选择信号Output7:0 scan; /7段显示控制信号Output7:0 scan; /小数点Input clk20mhz; /系统时钟20MHzInput12:0 money_in /车费Input12:0 distance_in /路程Reg7:0scan:Reg6:0seg7;Reg dp;Reg clk 1khz; /1khz的分频时钟,用于扫描数码管地址Reg3:0data:Reg3:0m_one,m_ten,m_hun,m_tho;/钱数的4位十
10、进制数表示Reg3:0d_one,d_ten,d_hun,d_tho;/路程的4位十进制数表示Reg15:0 count:Reg15:0 comb1:Reg3:0comb1_a, comb1_b, comb1_c, comb1_d;Reg15:0 comb2;Reg3:0comb2_a, comb2_b, comb2_c, comb2_d;Reg2:0 cnt;/-1khz分频,用于扫描数码管地址Always (posedge clk20mhz)BeginIf(count=d10000) Begin clk1khz=clk1khz;count=d0;endElseBegin count=cou
11、nt+1;end/-将车费的十进制数转化为4位的十进制数If(comb1money_in)BeginIf(comb1_a=d9& comb1_=d9& comb1_c=d9)BeginComb1_a=d0000;Comb1_c=d0000;Comb1_d=d0000;Comb1_d= Comb1_d+1;Comb=comb+1;EndElse if (comb1_a=d9&comb1_b=d9)BeginComb1_a=d0000;Comb1_b=d0000;Comb1_c=comb_c+1;Comb1=comb1+1;EndElse if (comb1_a=d9)BeginComb1_a=d
12、0000;Comb1_b=comb1_b+1;Comb1 =comb1+1;EndElseBeginComb1_a=comb1_a+1;Comb1=comb1+1;EndEndElse if (comb1=money_in)begin M_one=comb1_a;M_ten=comb1_b;M_hun=comb1_c;M_thomoney_in)Begin Comb1_a=b0000;Comb1_b=b0000;Comb1_c=b0000;Comb1_d=b0000;Comb1 =d0;End/-将路程的十进制数转化为4位十进制数if(comb2distance_in)begin if (co
13、mb2_a=d9&comb2_b=d9&comb2_c=d9)beginComb2_a=b0000;Comb2_b=b0000;Comb2_c=b0000;Comb2_d=comb2_d+1;Comb2 =comb2+1;EndElse if (comb2_a=d9&comb2_b=d9)Begin Comb2_a=b0000;Comb2_b=b0000;Comb2_c=comb2_c+1;Comb2 =comb2+1;EndElse if(comb2_a=d9)Begin Comb2_a=b0000;Comb2_b=comb2_b+2;Comb2=comb2+1;endelsebegin c
14、omb2_a=comb2_a+1;comb2=comb2+1;endendelse if(comb2=distance_in)begind_one=comb2_a;d_ten=comb2_b;d_hun=comb2_c;d_thodistance_in)begincomb2_a=b0000;comb2_b=b0000;comb2_c=b0000;comb2_d=b0000;comb2_a=d0;endend/-数码管动态扫描-always(posedge clk 1khz)begincnt=cnt+1;endalways(cnt)begin case(cnt)b000:begin data=m
15、_one;dp=d0;scan=b00000001;endb001:begin data=m_ten;dp=d0;scan=b00000010;endb010:begin data=m_hun;dp=d1;scan=b00000100;endb011:begin data=m_tho;dp=d0;scan=b00001000;endb100:begin data=d_one;dp=d0;scan=b00010000;endb101:begin data=d_ten;dp=d0;scan=b00100000;endb110:begin data=d_hun;dp=d1;scan=b0100000
16、0;endb111:begin data=d_tho;dp=d0;scan=b10000000;enddefault:begin data=bx;dp=bx;scan=bx;endendcaseend/-7段译码-always(data)begincase(data3:0)4b0000:seg76:0=7b1111110;4b0001:seg76:0=7b0110000;4b0010:seg76:0=7b1101101;4b0011:seg76:0=7b1111001;4b0100:seg76:0=7b0110011;4b0101:seg76:0=7b1011011;4b0110:seg76:
17、0=7b1011111;4b0111:seg76:0=7b1110000;4b1000:seg76:0=7b1111111; 4b1001:seg76:0=7b1111011;default:seg76:0=7b0000000;endcaseendendmodule四、实验运行截图:对控制器模块Taxi进行仿真后得到的运行结构分别如下:(1)对控制模块taxi进行仿真后的到的结果图如下图(D)所示,时序仿真结果如图(E)所示。(D)控制模块功能仿真结果(E)控制模块时序仿真结果(2)将扫描书码馆的分频系数改小后,对译码显示模块decoder的功能仿真结果如F图所示,时序仿真结果如图(G)所示。
18、(G)控制模块时序仿真结果G显示模块仿真五、实验总结和分析:经过了一个学期的学习和实验认识,这次是要需要完成的设计相对难一些,我们的任务主要是运用VHDL语言设计了一个出租车计费器,设计该出租车有起动键、停止键、暂停键和档位键。起动键为脉冲触发信号,当其为一个脉冲时,表示汽车已起动,并根据车速的选择和基本车速发出响应频率的脉冲(计费脉冲)以此来实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用于改变车速,不同的档位对应着不同的车速,同时路程计数的速
19、度也不同。对我来说这个设计存在很多的问题,不过我通过对老师给的参考程序,对其进行了调试和修改,使其能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计了动态显示车费和里程的硬件电路。出租车暂停时不计费,车费保持不变,且里程也保持不变,若复位则车费和里程清零,等待下一次计费的开始。最后终于达到了实验的要求,成功的完成了设计。这次实验的最大收获是我对对软件Quartus II的应用也更加熟练。通过在设计中发现问题,并对遇到某个问题知道该从哪几方面去对其进行解析和理解。通过对软件的仿真,发现编写的问题,和解决所要解决的问题,在设计中遇到对的问题我不断的查阅资料并同老师请教,收获很多。在这次试验中,使我学到很多的东西,出租车计费器可分为两大模块,即控制模块和译码显示模块。控制模块实现了计费和路程的计数,并且通过不同的档位来控制车速。译码显示模块实现十进制数到4位二进制数的转换,以及车费和路程的显示。通过对实验原理的了解我不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次试验使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。这些对我以后的学习都有很大的帮助,对以后的思考、动手能力将有很大的改变。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1