您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 基于-VHDL语言出租车计费器设计
...3设计原理图3.1系统顶层框图计费器按里程收费,每100米开始一次计费。各模块功能如下:(1)车速控制模块当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。(2)里程动态显示模块其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。(3)计费动态显示模块其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当车速选择起/停开关基本速率Reset扫描时钟显示输出显示输出车速控制模块计费动态显示里程动态显示...收费超过20时数值加1.5元。4设计步骤VHDL设计流程图(如图4.0):图4.0VHDL设计流程图4.1程序设计图4.1系统的总体模块图(1)模块MS的实现(如图4.1.1所示)VHDL文本编辑VHDL文本编辑FPGA/CPLD适配器FPGA/CPLD编辑下载器VHDL仿真器FPGA/CPLD器件和电路系统时序与功能仿真器...图4.1.1模块MS图模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速和匀速,JS加速按键。(2)模块SOUT的实现(如图4.1.2所示)图4.1.2模块SOUT图该模块实现车行状态输出功能,其中clk为时钟信号,enable为启动使能信号,sto暂停信号,clr为清零信号,st为状态信号。(3)模块PULSE的实现(如图4.1.3所示)图4.1.3模块PULSE图该模块实现将时钟信号5分频功能。(4)模块COUNTER的结果验证(如图4.1.4所示)...图4.1.4模块COUNTER图实现汽车模拟计费功能。clr1为清零信号,si为状态信号,c1,c2,c3分别为费用的三为显示。(5)模块SCAN_LED的实现(如图4.1.5所示)图4.1.5模块SCAN_LED图该模块实现显示车费功能。BT为选位信号,SG译码信号4.2系统仿真:系统仿真是在实际系统上进行实验研究比较困难时适用的必不可少的工具,它是指通过系统模型实验去研究一个已经存在或正在设计的系统的过程,通俗地讲,就是进行模型实验。因而,系统仿真的结果决定整个课程设计任务完成的到位程度。程序输入完成后进行编译,编译完成后,可以对所进行的设计进行仿真,本课程设计的仿真平台是MAX+plusⅡ,通过对VHDL源程序进行编译检错,然后创建波形文件(后缀名为.scf),加入输入输出变量,选择适用的芯片以及设定仿真结束时间,设置好输入初值进行仿真,得到仿真波形图:1.模块MS的结果验证(如图4.2.1)...图4.2.1当JS为高电平,CLK_OUT按照CLK1输出;低电平时,按照CLK0输出2模块SOUT的结果验证(如图4.2.2)enable高电平时,每一个时钟上升沿时,CQI计数加1,若CQI=30时,state赋01,30CQI=80时,state赋10态,…..;enable低电平时,CQI计数暂停,保持不变图4.2.23模块PULSE的结果验证(如图4.2.3)每个CLK0上升沿时,CNT计数加1,加到4时在下一个时钟上升沿赋值0;cnt不为0时fout赋值高电平,否则低电平图4.2.3...4模块COUNTER的结果验证(如图4.2.4)SI为出租车状态信号:“00”表示计费值停止,Q1~Q3不变;“01”计费清零,设置为起步价10元,Q2=1,Q3=0,Q1=0;“10”正常计费,每公里1元,“11”超过20元后,每公里1.5元;Q1,Q2,Q3的信号分别赋值给C1,C2,C3图4.2.45模块SCAN_LED的结果验证(如图4.2.5)BT位选,SG译码对应数字0~9图4.2.56模块TAXI的结果验证(如图4.2.6)图4.2.64.3结果分析...出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。附录1:模块MS清单//程序名称:MS//程序功能:模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速...和匀速,JS加速按键。//程序作者:郑铿//最后修改日期:2010.12.31LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMSISPORT(CK0:INSTD_LOGIC;//慢速档的时钟信号CK1:INSTD_LOGIC;//快速档的时钟信号JS:INSTD_LOGIC;//换挡按键信号CLK_OUT:OUTSTD_LOGIC);ENDMS;ARCHITECTUREONEOFMSISBEGINPROCESS(JS,CK0,CK1)BEGINIFJS='0'THENCLK_OUT=CK0;//JS低电平,则为慢速档ELSECLK_OUT=CK1;//JS高电平,快速档ENDIF;ENDPROCESS;ENDONE;附录2:模块SOUT清单//程序名称:SOUT//程序功能:该模块实现车行状态输出功能,其中clk为时钟信号,enable为启动使能信号,sto暂停信号,clr为清零信号,st为状态信号。//程序作者:郑铿...//最后修改日期:2010.12.31LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSOUTISPORT(CLK:INSTD_LOGIC;ENABLE:INSTD_LOGIC;STO:INSTD_LOGIC;CLR:INSTD_LOGIC;ST:OUTSTD_LOGIC_VECTOR(1DOWNTO0));ENDSOUT;ARCHITECTUREONEOFSOUTISBEGINPROCESS(CLK,ENABLE,STO,CLR)VARIABLECQI:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLESTATE:STD_LOGIC_VECTOR(1DOWNTO0);BEGINIFCLR='0'THENCQI:=(OTHERS='0');//CLR低电平,CQI清零ELSIFCLK'EVENTANDCLK='1'THEN//CLK上升沿触发IFSTO='1'THENSTATE:=00;CQI:=CQI;//STO高电平时,state赋00态ELSIFENABLE='1'THEN//ENABLE高电平,CQI计数加1CQI:=CQI+1;IFCQI=30THENSTATE:=01;//CQI=30时,state赋01态ELSIFCQI30ANDCQI=80THENSTATE:=10;//30CQI=80时,state赋10态ELSESTATE:=11;//CQI80时,state赋11态ENDIF;ENDIF;...ENDIF;ST=STATE;ENDPROCESS;ENDONE;附录3:模块PULSE//程序名称:PULSE//程序功能:该模块实现将时钟信号5分频功能。//程序作者:郑铿//最后修改日期:2010.12.31LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYPULSEISPORT(CLK0:INSTD_LOGIC;FOUT:OUTSTD_LOGIC);ENDPULSE;ARCHITECTUREONEOFPULSEISBEGINPROCESS(CLK0)VARIABLECNT:STD_LOGIC_VECTOR(2DOWNTO0);VARIABLEFULL:STD_LOGIC;BEGINIFCLK0'EVENTANDCLK0='1'THENIFCNT=100THEN//CNT计数到5(“100”)CNT:=000;//CNT清零FULL:='1';//FULL高电平ELSECNT:=CNT+1;//否则计数CNT加1...FULL:='0';//FULL赋低电平ENDIF;ENDIF;FOUT=FULL;//FULL为CLK的五分频信号,赋值给FOUT做输出信号ENDPROCESS;ENDONE;附录4:模块COUNTER//程序名称:COUNTER//程序功能:实现汽车模拟计费功能。clr1为清零信号,si为状态信号,c1,c2,c3分别为费用的三为显示。//程序作者:郑铿//最后修改日期:2010.12.31LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCOUNTERIS...PORT(CLK_DIV:INSTD_LOGIC;CLR1:INSTD_LOGIC;SI:INSTD_LOGIC_VECTOR(1DOWNTO0);C1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);C2:OUTSTD_LOGIC_VECTOR(3DOWNTO0);C3:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCOUNTER;ARCHITECTUREONEOFCOUNTERISBEGINPROCESS(CLK_DIV,CLR1,SI)VARIABLEQ1:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLEQ2:STD_LOGIC_VECTOR(3DOWNTO0);VARIABLEQ3:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFCLR1='0'THENQ1:=0000;Q2:=0000;Q3:=0000;//CLR低电平,清零ELSIFCLK_DIV'EVENTANDCLK_DIV='1'THEN//CLK_DIV上升沿触发CASESIIS//SI:“00”表示计费值停止,“01”计费清零,设置为起步价10元,“10”正常计费,每公里1元,“11”超过20元后,每公里1.5元;WHEN00=Q1:=Q1;Q2:=Q2;Q3:=Q3;WHEN01=Q1:=0000;Q2:=0000;Q3:=0001;//起步价10元WHEN10=IFQ21001THENQ2:=Q2+1;ELSEQ2:=0000;IFQ31001THENQ3:=Q3+1;ENDIF;ENDIF;Q1:=0000;//正常计费时,最多到20块,每次涨一元,数字的十位和各位在增加1,角保持不变。...WHEN11=IFQ10101THEN//如果Q1位为0Q1:=Q1+5;ELSEQ1:=0000;//5毛加五毛为一块,角位归零ENDIF;//角每次增加五毛,或者归零IFQ1=0101THENIFQ21001THENQ2:=Q2+1;ELSEQ2:=0000;IFQ31001THENQ3:=Q3+1;ENDIF;//如果元位满,则像十元位进位ENDIF;//若操作后角位为5时,个位和十位一次增加1.ELSE//(若操作后角位不为5,为0)IFQ21001THENQ2:=Q2+2;//若操作后角位为0,则元位必须每次进2ELSEQ2:=0001;IFQ31001THENQ3:=Q3+
本文标题:基于-VHDL语言出租车计费器设计
链接地址:https://www.777doc.com/doc-2071630 .html