1、设计要求 设计一个出租车计价器。该计价器的计费系统:行程 3公里内,且等待累计时间2分钟内,起步费为10元;3公里外以每公里1.6元计费,等待累计时间2分钟外以每分钟以1.5元计费。并能显示行驶公里数、等待累计时间、总费用。主要技术指标 计价范围:0999.9元 计价分辨率:0.1元 计程范围:099公里 计程分辨率:1公里 计时范围:059分 计时分辨率:分系统组成 它由外部输入模块、FPGA模块、显示模块三部分组成。FPGA时钟信号计费/复位公里脉冲控制器分频器等待信号计费计时计程译码显示模块设计 1.分频模块 2.控制模块 3.计量模块 4.译码模块 5.显示模块1.分频模块 分频模块对
2、频率为240Hz的输入脉冲进行分频,得到的频率为16Hz,15Hz和1Hz的三种频率。2.控制模块 控制模块是系统的核心部分,对计价器的状态进行控制。3.计量模块完成下面3个功能:计价功能 计时功能 计程功能 计价部分:行程 3公里内,且等待累计时间2分钟内,起步费为10元;3公里外以每公里1.6元计费,等待累计时间2分钟外以每分钟1.5元计费。计时部分:计算乘客的等待累计时间。计时器的量程为59分,满量程自动归零。计程部分:计算乘客所行驶的公里数。计程器的量程为99公里,满量程自动归零。4.译码模块 计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示。计时数
3、据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示。计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示。5.显示模块 计价数据在以百元、十元、元、角为单位对应的数码管上显示。计时数据在以分为单位对应的数码管上显示。计程数据在以公里为单位的数码管上显示显示。出租车计价器程序设计与仿真出租车计价器电路符号 电梯程序端口定义entity taxi isport(clk_240:in std_logic;-频率为240Hz的时钟 start:in std_logic;-计价使能信号 stop:in std_logic;-等待信号 fin:in std_logic;-公里脉
4、冲信号 cha3,cha2,cha1,cha0:out std_logic_vector(3 downto 0);-费用数据 km1,km0:out std_logic_vector(3 downto 0);-公里数据 min1,min0:out std_logic_vector(3 downto 0);-等待时间 end taxi;电梯程序中间信号定义signal f_15,f_16,f_1:std_logic;-频率为15Hz,16Hz,1Hz的信号signal q_15:integer range 0 to 15;-分频器signal q_16:integer range 0 to 14
5、;-分频器signal q_1:integer range 0 to 239;-分频器signal w:integer range 0 to 59;-秒计数器 signal c3,c2,c1,c0:std_logic_vector(3 downto 0);-制费用计数器signal k1,k0:std_logic_vector(3 downto 0);-公里计数器signal m1:std_logic_vector(2 downto 0);-分的十位计数器 signal m0:std_logic_vector(3 downto 0);-分的个位计数器signal en1,en0,f:std_l
6、ogic;-使能信号 注:仿真图中秒跟分的关系为3进制,即w为2时就归0;出租车总行驶里程为5公里,等待累计时间为4分钟,总费用为16.2 元。出租计价器程序仿真图-开头部分注:行驶公里数为4时,f得到16个计价脉冲数,计价器加16。既等效于加1.6元。注:等待累计时间为3分钟时,f得到15个计价脉冲。计价器的数值增加15。即等效于加1.5元。feipin:process(clk_240,start)if clk_240event and clk_240=1 then if start=0 then q_15=0;q_16=0;f_15=0;f_16=0;f_1=0;f=0;else if q
7、_15=15 then q_15=0;f_15=1;-得到频率为15Hz的信号 else q_15=q_15+1;f_15=0;end if;-得到16Hz和1Hz的信号方法与上面相同 if en1=1 then f=f_15;-此IF语句得到计费脉冲f elsif en0=1 then f=f_16;else f=0;end if;end if;end if;process(f_1)elsif stop=1 then if w=59 then w=0;-此IF语句完成等待计时 if m0=1001 then m0=0000;-此IF语句完成分计数 if m1=101 then m1=000;else m1=m1+1;end if;else m00000001then en1=1;-此IF语句得到en1使能信号 else en1=0;end if;else w=w+1;en1=0;end if;