出租车计价设计VHDL代码Quartus仿真

本文详细描述了一种使用VHDL语言在Quartus环境中实现的出租车计费系统,包括里程计费规则、BCD码显示以及模拟汽车状态的功能。通过CPLD技术和EDA编程,展示了计费模块、显示模块和速度脉冲模块的代码实现和仿真过程。
摘要由CSDN通过智能技术生成

名称:出租车计价设计VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

任务及要求

CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。并最终完成电路的编程调试。具体要求如下:

1.实现计费功能,计费标准为:按行驶里程计费,起步价为7元,并在车行3Km后按2元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。

2.现场模拟功能:能模拟汽车起动、停止、暂停以及加速等状态。

3.用BCD码将车费和路程显示出来。

1. 工程文件

2. 程序文件

3. 程序编译

4. 仿真图

Testbench

4.1 整体仿真

4.2 显示模块

4.3 速度脉冲模块

4.4 计费模块

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
--出租车计费
ENTITY taxi_fee IS
   PORT (
      clk        : IN STD_LOGIC;--256Hz基准频率CLOCK0
      reset      : IN STD_LOGIC;--复位信号,低有效 
      stop       : IN STD_LOGIC;--本次行程结束,停止计费,高有效
      start      : IN STD_LOGIC;--启动信号,行程开始,高有效 
      Speed      : IN STD_LOGIC_VECTOR(1 DOWNTO 0);--00:暂停等待;01:低速;10:中;,11:高速
      Kmmoney_L  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--合计费用 HML=xxx (BCD码显示)
      Kmmoney_M  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--合计费用 HML=xxx (BCD码显示)
      Kmmoney_H  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--合计费用 HML=xxx (BCD码显示)
      
      Kmcount_H  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--总路程,里程范围为HL=0~99(BCD码显示)
      Kmcount_L  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)--总路程,里程范围为HL=0~99(BCD码显示)
   );
END taxi_fee;
ARCHITECTURE trans OF taxi_fee IS
--模块例化
   COMPONENT display IS
      PORT (
         clk        : IN STD_LOGIC;
         reset      : IN STD_LOGIC;
         totel_money : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
         mileage    : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
         Kmmoney_L  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
         Kmmoney_M  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
         Kmmoney_H  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
         Kmcount_H  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
         Kmcount_L  : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
      );
   END COMPONENT;
--模块例化   
   COMPONENT speed_pulse IS
      PORT (
         clk        : IN STD_LOGIC;
         reset      : IN STD_LOGIC;
         Speed      : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
         one_kilometre : OUT STD_LOGIC
      );
   END COMPONENT;
--模块例化
COMPONENT taxi_state IS
   PORT (
      clk              : IN STD_LOGIC;
      reset            : IN STD_LOGIC;
      
      stop             : IN STD_LOGIC;
      start            : IN STD_LOGIC;
      Speed            : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
      one_kilometre    : IN STD_LOGIC;
      mileage_out      : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
      totel_money_out  : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
   );
   END COMPONENT;
   
--信号定义
   SIGNAL one_kilometre   : STD_LOGIC;
   SIGNAL totel_money     : STD_LOGIC_VECTOR(15 DOWNTO 0);
   SIGNAL mileage         : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
   --速度脉冲产生模块
   U_speed_pulse : speed_pulse
      PORT MAP (
         clk             => clk,--标准时钟,256hz 
         reset           => reset,--复位信号,低有效 
         Speed           => Speed,--00:暂停等待
         one_kilometre   => one_kilometre--1公里产生一次脉冲
      );
源代码

 扫描文章末尾的公众号二维码

电子设计课设报告-基于CYCLONE FPGA设计出租车计价器+Quartus9.1工程源码, 1.引言: 随着EDA技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。本文介绍了一个以Altera公司可编程逻辑芯片cyclone2系列的EP2C5T144C8的fpga芯片为控制核心、附加一定外围电路组成的出租车计费器系统。随着社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛。 2.系统规范: 2.1 出租车计价器的要求: 该计价器的计费系统:行程 3公里(不含3公里)内,且等待累计时间2分钟内(不含2分钟),起步费为10元;3公里外以每公里1.6元计费,等待累计时间2分钟外以每分钟以1.5元计费。 并能显示行驶公里数、等待累计时间、总费用。 主要技术指标 计价范围:0~999.9元 计价分辨率: 0.1元 计程范围:0~99公里 计程分辨率: 1公里 计时范围:0~59分 计时分辨率: 分 2.2 ,系统组成框图: 出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器和时间计数器从0开始计数,费用计数器从6开始计算。再根据行驶里程或停止等待的时间按以上的标准计费。若在行驶状态,则计程器开始加计数,当路程超过二公里后,计费器以每公里1.6元累加。若出租车停止等待状态,则计时器开始加计数,当时间超过三分钟后,计费器以每分钟1.2元累加。出租车到达目的地停止后,停止计费器,显示总费用。 根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其本系统组成框图如下所示。其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间 和总费用,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总费用等信息。系统框图如下所示: .各模块设计: 本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。为了便于显示,这里的路程、时间和费用计数器均用十六进制表示。 (1)顶层模块 /*顶层模块变量定义 reset 0为复位,1为启动 stop 0为运行,1为停止 start 0为暂停,1为行驶 clk_count 为轮胎传感器发出的表示转一圈的脉冲信号,实验时用为1024hz时钟信号 clk_1khz 系统工作的主要时钟信号,实验用1024hz时钟信号 clk 时间模块的时钟信号,实验用8hz时钟信号 timeh,timel 分钟的十位和个位 distanceh,distancel 公里的十位和个位 bai,shi,ge,xiao 费用的十位和个位 */ module taxi(reset,start,stop,clk0,seg1,seg2,seg3,seg4,change,); input reset,start,stop,change,clk0; output [6:0] seg1,seg2,seg3,seg4; wire time_enable,distance_enable,select_clk,km,clk_count,clk,clk_1khz; reg [3:0]view1,view2,view3,view4; wire [3:0] timeh,timel,bai,ge,shi,xiao,distanceh,distancel; time_count u8(clk,reset,start,stop,timel,timeh,time_enable); km_count u1(.clk_count(clk_count),.reset(reset),.start(start),.km(km)); distance u2(.clk_1khz(clk_1khz),.start(start),.reset(reset),.stop(stop),.distancel(distancel),.distanceh(distanceh),.km(km),.distance_enable(distance_enable)); select_clk u3(.clk_1khz(clk_1khz),.reset(reset),.start(start),.stop(stop),.time_enable(time_enable),.km(km),.select
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值