出租车计费器设计(部分).doc_第1页
出租车计费器设计(部分).doc_第2页
出租车计费器设计(部分).doc_第3页
出租车计费器设计(部分).doc_第4页
出租车计费器设计(部分).doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.出租车计费器出租车的出现给人们的生活带来了极大的便利,日渐成为城市交通工具中重要的成员之一。本实验以日常所见的出租车计费器为设计目标,实现其计程、计时、预置、计费等功能。一、 系统设计要求设计一个满足日常生活所需功能的出租车计费器。该计费器能实现计费功能。车起步开始计费,首先显示起步价,起步费为3.00元,车在行驶3KM以内,只收起步价。车行驶超过3KM之后,没KM2元,车费依次累加。当总费用达到或超过40元时,每KM收费4元。当遇到红灯或客户需要停车等待时,则按时间计费,计费单价为每20s收费1元。实现计费器预置功能,能够预置起步费、每公里收费、车行加费里程、计时收费等。可以模拟汽车行驶、停止、暂停等状态,并根据不同状态进行计费。以十进制显示出租车行驶路程与车费。二、 系统设计方案分析系统设计要求不难得知,整个出租车计费系统按功能主要分为速度模块、计程模块、计时模块和计费模块。速度模块:通过对速度信号sp的判断,决定变量kinside的值。kinside即是进行100m所需要的时钟周期数,然后每行进100m,则产生一个脉冲clkout。计程模块:由于一个clkout信号代表行进100m,故通过对clkout计数,可以获得共行进的距离kmcount。计时模块:在汽车启动后,当遇到顾客等人或红灯时,出租车采用计时收费的方式。通过对速度信号sp的判断决定是否开始记录时间。当sp=0时,开始记录时间。当时间达到足够长时则产生timecount脉冲,并重新计时。一个timecount脉冲相当于等待的时间达到了时间计费的长度。这里选择系统时钟频率为500HZ,20s即计数值为1000。计费模块由两个进程组成。其中,一个进程根据条件对enable和price赋值:当记录的距离达到3公里后enable变为1,开始进行每公里收费,当总费用大于40元,则单价price由原来的2元每公里变为4元每公里;第二个进程在每个时钟周期判断timecount和clkout的值。当其为1时,则在总费用上加上相应的费用。三、 VHDL编程速度模块的VHDL代码如下:Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY speed ISPORT ( clk : IN STD_LOGIC; reset : IN STD_LOGIC;start: IN STD_LOGIC; stop: IN STD_LOGIC;sp: IN STD_LOGIC_VECTOR(2 DOWNTO 0);clkout: OUT STD_LOGIC; );END speed;ARCHITECTURE rtl OF speed ISBEGIN PROCESS (clk, reset, stop, start, sp) TYPE state_type IS (s0,s1); VARIABLE s_state: state_type; VARIABLE cnt: integer range 0 to 28; VARIABLE kinside: integer range 0 to 30; BEGIN CASE sp IS WHEN “000”=kinside :=0; WHEN “001”=kinside :=28; WHEN “010”=kinside :=24; WHEN “011”=kinside :=20; WHEN “100”=kinside :=16; WHEN “101”=kinside :=12; WHEN “110”=kinside :=8; WHEN “111”=kinside :=4; END CASE; IF reset=1 THEN s_state:=s0; ELSIF (rising_edge(clk) then CASE s_state is WHEN s0= cnt:=0; clkout Clkout=0;IF (stop=1) THEN s_state=s0; ELSIF sp=”000” then s_state:=s1;ELSIF cnt=kinside then cnt:=0; clkout=1;s_state:=s1;ELSE cnt:=cnt+1; s_state:=s1;END IF; END CASE; END IF; END PROCESS;END rtl;计程模块的VHDL代码如下:Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY kilometers ISPORT ( clkout, reset : IN STD_LOGIC;kmcnt1,kmcnt2,kmcnt3: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END kilometers;ARCHITECTURE rtl OF kilometers ISBEGIN PROCESS (clkout, reset) VARIABLE km_reg: STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN IF reset=1 THEN km_reg:=”000000000000”; ELSIF (rising_edge(clkout) then IF km_reg(3 DOWNTO 0)=”1001” THEN km_reg := km_reg +”0111”; ELSE km_reg(3 DOWNTO 0)= km_reg(3 DOWNTO 0)+ ”0001”;END IF; IF km_reg(7 DOWNTO 4)=”1010” THEN km_reg := km_reg +”01100000”; END IF; END IF; kmcnt1=km_reg(3 DOWNTO 0); kmcnt2=km_reg(7 DOWNTO 4); kmcnt3 waittime:=0; timecount IF (sp=”000”) THEN t_state:=t2; ELSE waittime:=0; t_state:=t1; END IF; WHEN t2= waittime:= waittime +1; timecount=0; IF waittime =1000 THEN waittime:=0; timecount=1; ELSIF stop=1 then t_state:=t0;ELSIF sp=”000” then t_state:=t2;ELSE timecount=0; t_state:=t1;END IF; END CASE; END IF; END PROCESS;END rtl;计费模块的VHDL代码如下:Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY kmmoney ISPORT ( clk, reset, timecount, clkout: IN STD_LOGIC;kmcnt2, kmcnt3, count1, count2, count3: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END kmmoney;ARCHITECTURE rtl OF kmmoney ISSIGNAL cash: STD_LOGIC_VECTOR(11 DOWNTO 0);SIGNAL price: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL enable: STD_LOGIC;BEGINkmmoney 1: PROCESS (cash,kmcnt2) BEGIN IF reset=1 THEN cash=”000000000011”; ELSIF (rising_edge(clk) then IF timecount=1 THEN reg2:”1001” THEN reg2(7 DOWNTO 0) := reg2( 7 DOWNTO 0)+”00000111”; IF reg2(7 DOWNTO 4) ”1001” THEN cash=reg2+”000001100000”; ELSE cash”00001001” THEN reg2(7 DOWNTO 0):=reg2(7 DOWNTO 0)+”00000110”+price;IF reg2(7 DOWNTO 4) ”1001” THEN cash=reg2+”000001100000”;ELSE cash=reg2; END IF; ELSE cash=reg2+price; END IF; ELSE clkout_cnt:=clkout_cnt+1; END IF; END IF; END IF; END PROCESS;count1=cash(3 DOWNTO 0);count2=cash(7 DOWNTO 4);count3=cash(11 DOWNTO 8);END rtl;顶层模块的VHDL代码如下:Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY top ISPORT ( clk, reset, start, stop: IN STD_LOGIC; sp: IN STD_LOGIC_VECTOR(2 DOWNTO 0); kmcnt1,kmcnt2,kmcnt3,count1,count2,count3: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END top;ARCHITECTURE rtl OF top ISComponent speed is PORT ( clk : IN STD_LOGIC; reset : IN STD_LOGIC;start: IN STD_LOGIC; stop: IN STD_LOGIC;sp: IN STD_LOGIC_VECTOR(2 DOWNTO 0);clkout: OUT STD_LOGIC; );End Component speed;Component times is PORT ( clk : IN STD_LOGIC; reset : IN STD_LOGIC;start: IN STD_LOGIC; stop: IN STD_LOGIC;sp: IN STD_LOGIC_VECTOR(2 DOWNTO 0);timecount: OUT STD_LOGIC; );End Component times;Component kilometers is PORT ( clkout, reset : IN STD_LOGIC;kmcnt1,kmcnt2,kmcnt3: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);End Component kilometers;Component kmmoney is PORT ( clk, reset, timecount, clkout: IN STD_LOGIC;kmcnt2, kmcnt3, count1, count2, count3: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);End Component kmmoney;Signal clktmp: STD_LOGIC; Signal timetmp: STD_LOGIC;Signal kmtmp2: STD_LOGIC_VECTOR(3 DOWNTO 0);Signal kmtmp3: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN U1: speed port map(clk, reset, s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论