名称:出租车计价设计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公里产生一次脉冲 );
源代码
扫描文章末尾的公众号二维码