名称:出租车计价设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
任务及要求:
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。并最终完成电路的编程调试。
具体要求如下:
1.实现计费功能,计费标准为:按行驶里程计费,起步价为7元,并在车行3Km后按2元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
2.现场模拟功能:能模拟汽车起动、停止、暂停以及加速等状态。
3.用BCD码将车费和路程显示出来。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
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公里产生一次脉冲 ??????);
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=592