- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VHDL——出租车计价器VHDL——出租车计价器.doc
该系统利用VHDL语言、PLD设计出租车计费系统,以MAX+PLUSⅡ软件作为开发平台,设计了出租车计费器系统程序并进行了程序仿真。使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目。
关键词: 出租车计费器;计数器;VHDL语言;MAX+PLUSⅡ;
一、实验任务及要求
1. 能实现计费功能,计费标准为:按行驶里程收费,起步费为10.00元,并在车行3公里后再按2元/公里,当计费器计费达到或超过一定收费(如20元)时,每公里加收50%的车费,车停止不计费。
2. 实现预置功能:能预置起步费、每公里收费、车行加费里程。
3. 实现模拟功能:能模拟汽车启动、停止、暂停、车速等状态。
4. 设计动态扫描电路:将车费显示出来,有两位小数。
5. 用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。
6. 各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。
7. 完成电路全部设计后,通过系统实验箱下载验证设计的正确性。
二、实验原理
系统顶层框图:
车速
控制模块
计费动态显示
里程
动态显示
车速选择
起/停开关
基本速率
Reset
扫描时钟
显示输出 显示输出
计费器按里程收费,每100米开始一次计费。各模块功能如下:
(1) 车速控制模块
当起停键为启动状态时(高电平),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;当处于停止状态时暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。
(2) 里程动态显示模块
其包括计数车速控制模块发出的脉冲以及将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。
(3) 计费动态显示模块
其初值为10元,当里程超过3公里后才接受计数车速控制模块发出的脉冲的驱动,并且计数显示动态显示出来,每来一个脉冲(代表运行了0.5公里)其数值加1元,当收费超过20时数值加1.5元。
三、出租车计费系统的实现
3.1系统的总体模块图:
3.2系统各功能模块的实现:
(1)模块MS的实现
模块MS,输入端口CK0、CK1为两个不同的时钟信号,来模拟汽车的加速和匀速,JS加速按键。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MS IS
PORT(CK0:IN STD_LOGIC;
CK1:IN STD_LOGIC;
JS:IN STD_LOGIC;
CLK_OUT:OUT STD_LOGIC);
END MS;
ARCHITECTURE ONE OF MS IS
BEGIN
PROCESS(JS, CK0,CK1)
BEGIN
IF JS=0 THEN CLK_OUT=CK0;
ELSE CLK_OUT=CK1;
END IF;
END PROCESS;
END ONE;
(2)模块SOUT的实现
该模块实现车行状态输出功能,其中clk为时钟信号,enable 为启动使能信号,sto暂停信号, clr为清零信号,st为状态信号。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SOUT IS
PORT(CLK:IN STD_LOGIC;
ENABLE:IN STD_LOGIC;
STO :IN STD_LOGIC;
CLR:IN STD_LOGIC;
ST:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END SOUT;
ARCHITECTURE ONE OF SOUT IS
BEGIN
PROCESS(CLK,ENABLE ,STO,CLR)
VARIABLE CQI:STD_LOGIC_VECTOR(7 DOWNTO 0);
VARIABLE STATE:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
IF CLR=0 THEN CQI:=(OTHERS=0);
ELSIF CLKEVENT AND CLK=1 THEN
IF STO=1 THEN STATE:=00;CQI:=CQI;
ELSIF ENABLE =1 THEN
CQI:=CQI+1;
文档评论(0)