名称:出租车计费器VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
综合训练内容要求
设计一个满足日常生活所需功能的出租车计费器
该计费器能实现计费功能。车起步开始计费,首先显示起步价,起步费为1000元,车在行驶3km以内,只收起步价。车行驶超过3km后,每km2元,车费依次累加。当费用达到或超过40元时,每km收费4元。当遇到红灯或客户需要停车等待时,则按时间计费为每20s收费1元
实现计费器预置功能,能够预置起步费、每公里收费、车行加费里程、计时收费等
1. 工程文件
2. 程序文件
原理图
代码
3. 程序编译
4. RTL图
5. 仿真图
整体仿真图
速度控制模块
状态机控制模块
显示模块
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --状态机控制模块 ENTITY taxi_state IS PORT ( clk_in : IN STD_LOGIC;--时钟100Hz reset_n : IN STD_LOGIC;--复位信号 start_n : IN STD_LOGIC;--启动信号,行程开始 stop_n : IN STD_LOGIC;--中途暂停 pulse_kilometre : IN STD_LOGIC;--1公里产生一次脉冲 mileage_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--里程 totel_money_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)--合计费用 ); END taxi_state; ARCHITECTURE behave OF taxi_state IS --定义状态 TYPE State_type IS (s_idle, s_starting_price, s_mileage_price, s_highmileage_price ,s_stop_1,s_stop_2,s_stop_3); -- 定义状态 SIGNAL state: State_Type; -- 创建信号 SIGNAL totel_money : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";--总价钱 SIGNAL mileage : STD_LOGIC_VECTOR(15 DOWNTO 0) := "0000000000000000";--里程 SIGNAL ten_seconds : STD_LOGIC := '0'; SIGNAL count_seconds : integer := 0; BEGIN mileage_out <= mileage;--输出 PROCESS (clk_in, reset_n) BEGIN IF (reset_n = '0') THEN--复位 mileage <= "0000000000000000"; ELSIF (clk_in'EVENT AND clk_in = '1') THEN IF (state = s_starting_price OR state = s_mileage_price OR state = s_highmileage_price) THEN IF (pulse_kilometre = '1') THEN--1公里里程加1 mileage <= mileage + "0000000000000001"; ELSE mileage <= mileage; END IF; END IF; END IF; END PROCESS; --每20秒收取1元 PROCESS (clk_in, reset_n) BEGIN IF (reset_n = '0') THEN count_seconds <= 0; ten_seconds <= '0'; ELSIF (clk_in'EVENT AND clk_in = '1') THEN IF (state = s_stop_1 OR state = s_stop_2 OR state = s_stop_3) THEN--停车等待 IF (count_seconds >= 200) THEN--20秒 count_seconds <= 0; ten_seconds <= '1';--20秒信号 ELSE count_seconds <= count_seconds + 1;--计数 ten_seconds <= '0'; END IF; END IF; END IF; END PROCESS;
源代码
扫描文章末尾的公众号二维码