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

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

06/13 08:24
468
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-231229101401913.doc

共1个文件

名称:出租车计价器VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

要求:

1.该出租车计价器,计费包括起步价、等待时间计费、里程计费、燃油附加费四部分。

2.白天计价模式:起步价为90元,3km之内按起步价计费,超过3km,每km增加2元,等待时间单价为每分钟0.1元,燃油附加费2.0元。

3.夜晚计价模式:起步价为10.0元,3km之内按起步价计费,超过3km,每km增加2元,等待时间单价为每分钟0.1元,燃油附加费20元。

4.用两位数码管显示总里程,最大值为99km,用两位数码管显示等待时间,最大值为59min,用四个数码管显示总费用,最大值为9999元。

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

演示视频:

设计文档:

1. 工程文件

2. 程序文件

顶层电路

3. 程序编译

4. RTL图

5. 仿真图

顶层

Keyin模块

Speed模块

Times模块

Kmmoney模块

部分代码展示:

library?ieee;?--加载库文件
use?ieee.std_logic_1164.all;
use?ieee.std_logic_unsigned.all;
entity?keyin?is
port(?????????????--定义输入输出端口
clk50MHZ??:in?std_logic;--输入时钟50MHZ
reset:in?std_logic;--复位信号,低电平复位
key_on:in?std_logic;--开始计费按键
key_off:in?std_logic;--停止计费按键
key_kong:in?std_logic;--空档按键
key_up:in?std_logic;--空档按键
moshi:in?std_logic;--
key_start:out??std_logic;--开始计费信号
key_stop?:out??std_logic;--停止计费信号
sp???:out?std_logic_vector(2?downto?0);?--档位,key_speed0,空,加减档
????????clk_1khz_out:out??std_logic;
????????clk_1hz_out:out??std_logic;
????????mode?:out??std_logic
);
end??;
architecture?rtl?of?keyin?is
signal?spp??:?std_logic_vector(2?downto?0):="000";
signal?CLK100HZ,CLK1kHZ,CLK1HZ:std_logic;
signal?key?:std_logic_vector(4?downto?0);
signal?bai:std_logic;
begin
key<=key_on?&?key_off?&?key_kong?&?key_up?&?moshi?;
----------------分频程序----------------------------
PROCESS(clk50MHZ,reset)
?VARIABLE??Q1??:integer?range?0?to?500000;?--定义标准逻辑位矢量数据类型
?VARIABLE??Q2??:integer?range?0?to?500000;?--定义标准逻辑位矢量数据类型
?VARIABLE??Q3??:integer?range?0?to?50000000;?--定义标准逻辑位矢量数据类型
??BEGIN????
??if?reset='0'then
CLK100HZ<='0';
CLK1kHZ<='0';
CLK1HZ<='0';
Q1?:=0;
Q2?:=0;
Q3?:=0;
??ELSIF??RISING_EDGE(clk50MHZ)?THEN??
???IF?Q1>=9?--50?000?000?/((249+1)*2)=100??HZ50m/100=x,x/2-1=??249999
then?Q1?:=0;
CLK100HZ<=NOT?CLK100HZ;--10ms
ELSE
Q1?:=?Q1?+?1?;
???END?IF;
???IF?Q2>=2??--50?000?000?/100x,x/2-1??HZ??24999
then?Q2?:=0;
CLK1kHZ<=NOT?CLK1kHZ;--1ms
ELSE
Q2?:=?Q2?+?1?;
???END?IF;
??????IF?Q3>=24??--50?000?000?/((24999+1)*2)=1??HZ??24999999
then?Q3?:=0;
CLK1HZ<=NOT?CLK1HZ;--1s
ELSE
Q3?:=?Q3?+?1?;
???END?IF;
????END?IF;
?????clk_1hz_out<=CLK1HZ;
?clk_1khz_out<=CLK1kHZ;
?END?PROCESS;?
---------------------------------------------------
process(CLK100HZ,reset)????--敏感信号发生变化时,启动进程
variable?keyflag:std_logic:='0';
begin
if?reset='0'then--复位清零
spp<="000";--速度清0
keyflag:='0';
key_start<='0';
key_stop<='0';
bai<='1';
elsif?CLK100HZ'event?and?CLK100HZ='1'then--时钟上升沿到达时,状态转换
if(key="11111")thenkeyflag:='0';?end?if;
?if(keyflag='0')then?
if(key_on='0')then?--开始计费
keyflag:='1';--保持按键按下标志
key_start<='1';--开始计费
key_stop<='0';spp<="001";
elsif(key_off='0')then?--停止计费
keyflag:='1';--保持按键按下标志
key_start<='0';--?
key_stop<='1';--停止计费
elsIF(key_kong='0')then?--空档按下
keyflag:='1';--保持按键按下标志
spp<="000";--速度清0
elsIF(key_up='0')then?--
keyflag:='1';--保持按键按下标志
spp<="001";--
elsif(moshi='0')then--白天夜间模式切换
keyflag:='1';--保持按键按下标志
bai<=NOT?bai;
end?if;
end?if;
end?if;
sp?<=spp;
mode?<=bai;
end?process;
end?rtl;

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

  • 2-231229101401913.doc
    下载

相关推荐