《VHDL——出租车计价器》由会员分享,可在线阅读,更多相关《VHDL——出租车计价器(13页珍藏版)》请在金锄头文库上搜索。
1、该系统利用 VHDL 语言、 PLD 设计出租车计费系统,以 MAX+PLUS 软件作为开发平台,设计了出租车计费器系统程序并进行了程序仿真。使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目。关键词 : 出租车计费器;计数器;VHDL语言; MAX+PLUS ;一、实验任务及要求1.能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00 元,并在车行3 公里后再按 2 元/公里,当计费器计费达到或超过一定收费 ( 如 20 元 )时,每公里加收 50%的车费,车停止不计费。2. 实现预置功能:能预置起步费、每公里收费、车行加费里程。3. 实现模拟功能:能模拟
2、汽车启动、停止、暂停、车速等状态。4. 设计动态扫描电路:将车费显示出来,有两位小数。5. 用 VHDL 语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。6. 各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。7. 完成电路全部设计后,通过系统实验箱下载验证设计的正确性。二、实验原理系统顶层框图:车速选择起 /停开关基本速率车速控制模块Reset里程动态显示计费动扫描时钟态显示显示输出显示输出计费器按里程收费,每100 米开始一次计费。各模块功能如下:(1) 车速控制模块当起停键为启动状态时(高电平) ,模块根据车速选择和基本车速发出响应频率的脉
3、冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。(2) 里程动态显示模块其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1 公里)。(3) 计费动态显示模块其初值为 10 元,当里程超过3 公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来, 每来一个脉冲 (代表运行了 0.5 公里)其数值加 1 元,当收费超过 20 时数值加元。1.5三、出租车计费系统的实现3.1 系统的总体模块图:3.2 系统各功能模块的实现:( 1)模块 MS的实现模块
4、MS ,输入端口CK0 、 CK1 为两个不同的时钟信号,来模拟汽车的加速和匀速,JS 加速按键。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MS ISPORT(CK0:IN STD_LOGIC;CK1:IN STD_LOGIC;JS:IN STD_LOGIC;CLK_OUT:OUT STD_LOGIC);END MS;ARCHITECTURE ONE OF MS ISBEGINPROCESS(JS, CK0,CK1)BEGINIF JS=0 THEN CLK_OUT=CK0;ELSE CLK_OUT0);ELSIF CLKEVENT AND
5、 CLK=1 THENIF STO=1 THEN STATE:=00;CQI:=CQI;ELSIF ENABLE =1 THENCQI:=CQI+1;IF CQI30 AND CQI=80 THEN STATE:=10;ELSESTATE:=11;END IF;END IF;END IF;ST=STATE;END PROCESS;END ONE;( 3)模块 PULSE的实现该模块实现将时钟信号5 分频功能。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PULSE ISPORT(C
6、LK0:IN STD_LOGIC;FOUT:OUT STD_LOGIC);END PULSE;ARCHITECTURE ONE OF PULSE ISBEGINPROCESS(CLK0)VARIABLE CNT:STD_LOGIC_VECTOR(2 DOWNTO 0);VARIABLE FULL :STD_LOGIC;BEGINIF CLK0EVENT AND CLK0=1 THENIF CNT=100 THENCNT:=000 ;FULL:=1;ELSECNT:=CNT+1;FULL:=0;END IF;END IF;FOUTQ1:=Q1;Q2:=Q2;Q3:=Q3;WHEN 01= Q1:
7、=0000;Q2:=0000;Q3:=0001;WHEN 10= IF Q21001 THENQ2:=Q2+1;ELSEQ2:=0000;IF Q3 IF Q10101 THENQ1:=Q1+5;ELSEQ1:=0000;END IF;IF Q1=0101 THENIF Q21001 THENQ2:=Q2+1;ELSEQ2:=0000;IF Q31001 THENQ3:=Q3+1;END IF;END IF;ELSEIF Q21001 THENQ2:=Q2+2;ELSEQ2:=0001;IF Q3NULL;END CASE;END IF;C1=Q1;C2=Q2;C3=Q3;END PROCESS;END ONE;( 5)模块 SCAN_LED的实现该模块实现显示车费功能。BT 为选位信号, SG 译码信号。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED ISPORT(DI1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);DI3:IN