• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

出租车计费器带设计报告VHDL代码Quartus仿真

08/26 11:17
334
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240910191PD52.docx

共1个文件

名称:出租车计费器带设计报告VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

出租车计费器带设计报告

1.出租车计费器一般都是按公里计费,要求是起步价3 元,准行1 公里,以后1 元/公里。显示部分的七段数码管扫描时钟选择时钟模块的1kHz。一个出租车计费器,有两个计数单位,一个用来计公里,另外一个用来计费用。在出租车的轮子上都有传感器,用来记录车轮转动的圈数,而车轮子的周长是固定的,所以知道了圈数自然也就知道了里程。在这个设计中,用实验箱直流电机模拟出租车轮子,通过传感器,可以得到电机每转一周输出一个脉冲波形,转动一圈认为是行走1米,所以每旋转1000 圈,认为车子前进1 公里。

2.用按键模块的S1来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。

3.用七段数码管显示要求为前4个显示里程,后3个显示费用。

提示:首先在复位信号的作用下将所有用到的寄存器进行清零,然后开始设定到起步价记录状态,在此状态时,在起步价规定的里程里都一直显示起步价,直到路程超过起步价规定的里程时,系统转移到每公里计费状态,此时每增加一公里,计费器增加相应的费用。

1.quartusII9.0和13.0均有

2.VHDL

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

设计文档:

1. 工程文件

2. 程序文件

原理图

代码

3. 程序编译

4. RTL图

5. 仿真图

整体仿真图(顶层模块)

分频模块

状态机模块

数码管控制模块

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--控制模块
ENTITY?ctrl?IS
???PORT?(
??????clk???????????????:?IN?STD_LOGIC;--时钟
??????rst??????????????:?IN?STD_LOGIC;--复位信号
??????start_key?????????:?IN?STD_LOGIC;--启动信号,行程开始
??????pulse_in??????:?IN?STD_LOGIC;--1公里脉冲
??????mileage????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--里程
??????money??????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--合计费用
???);
END?ctrl;
ARCHITECTURE?behave?OF?ctrl?IS
--定义状态
???TYPE?state_type?IS?(S0,S1,S2);??--?定义状态
???SIGNAL?state:?state_type;????--?创建信号
???SIGNAL?all_money???:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000";--总价钱
???SIGNAL?all_mileage???????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000";--里程
???SIGNAL?sec_10???:?STD_LOGIC?:=?'0';
???SIGNAL?cnt?:?integer?:=?0;
BEGIN
--起步价3?元,准行1?公里,以后1?元/公里
--状态机
???PROCESS?(clk,?rst)
???BEGIN
??????IF?(rst?=?'0')?THEN
?????????state?<=?S0;--复位
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?state?IS
????????????WHEN?S0?=>--空闲状态
???????????????IF?(start_key?=?'0')?THEN--按下起动键start,汽车起动
??????????????????state?<=?S1;
???????????????ELSE
??????????????????state?<=?S0;--空闲状态
???????????????END?IF;
????????????WHEN?S1?=>--起步价状态
???????????????IF?(all_mileage?>=?"0000000000000001")?THEN--大于1.0公里
??????????????????state?<=?S2;
???????????????ELSE
??????????????????state?<=?S1;
???????????????END?IF;
????????????WHEN?S2?=>--车行驶?1.0公里后按每公里1元计费
??????????????????state?<=?S2;
????????????WHEN?OTHERS?=>
???????????????state?<=?S0;
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???PROCESS?(clk,?rst)
???BEGIN
??????IF?(rst?=?'0')?THEN
?????????all_money?<=?"0000000000000000";--清零
?????????money?<=?"0000000000000000";--清零
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????money?<=?all_money;--输出合计费用
?????????CASE?state?IS
????????????WHEN?S0?=>--空闲状态
???????????????IF?(start_key?=?'0')?THEN--按下起动键start,汽车起动
all_money?<=?"0000000000000011";--显示起步价3元,1公里
???????????????ELSE
??????????????????all_money?<=?"0000000000000000";
???????????????END?IF;
????????????WHEN?S1?=>--起步价状态
???????????????all_money<=all_money;
????????????WHEN?S2?=>--车行驶?1.0公里后按每公里1元计费
???????????????IF?(pulse_in?=?'1')?THEN
??????????????????all_money?<=?all_money?+?"0000000000000001";--每公里1元计费
???????????????END?IF;
?????????END?CASE;
??????END?IF;
???END?PROCESS;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1065

  • 2-240910191PD52.docx
    下载

相关推荐