名称:出租车计费器带设计报告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
334