出租车计费系统VHDL
出租车计价器代码VHDL

SIGNAL I:INTEGER RANGE 0 TO 5 :=0; --当状态从go/wait转到idle时,希望将价格等持续显示5秒。
ELSIF (SA='1' AND SB='0') THEN STATE<=GO;
W2<="0000"; W1<="0000"; W0<="0000"; K2<="0000"; K1<="0000"; K0<="0000"; I<=0; FIN<='1'; CLK3S<='0';COUNT3S<=0; --此刻进入go状态已经一秒。
ELSE
STATE<=GO;
W2<=W2; W1<=W1; W0<=W0; K2<=K2; K1<=K1; K0<=K0;I<=I+1;
END IF;
ELSIF (SA='1' AND SB='0') THEN STATE<= GO;
END IF;
END IF;
END PROCESS U1;
U2:PROCESS(CLK1HZ) --有限状态机设计模块
BEGIN
IF RST='1' THEN W2<="0000"; W1<="0000"; W0<="0000"; K2<="0000"; K1<="0000"; K0<="0000"; I<=0; FIN<='0';
(VHDL实验报告)出租车计费器的设计

电子科技大学成都学院学院标准实验报告(实验)课程名称数字电路EDA设计与应用姓名乱弹的枇杷学号 1240830专业电气工程及其自动化指导教师张一、实验名称出租车计费器的设计二、实验目的1、了解出租车计费器的工作原理。
2、学会用V HDL 语言编写正确的七段码管显示程序。
3、数量掌握用V HDL 编写复杂功能模块。
4、进一步数量状态积在系统设计中的应用。
三、实验原理出租车计费器一般都是按公里计费,通常是起步价xx元(xx元可以行走x公里),然后再是xx元/公里。
所以要完成一个出租车计费器,就要有两个计数单位,一个用来计公里,另外一个用来计费用。
通常在出租车的轮子上都有传感器,用来记录车轮转动的圈数,而车轮子的周长是固定的,所以知道了圈数自然也就知道了里程。
在这个实验中,就要模拟出租车计费器的工作过程,用直流电机模拟出租车轮子,通过传感器,可以得到电机每转一周输出一个脉冲波形。
结果的显示用8个七段码管,前四个显示里程,后三个显示费用。
在设计VHDL程序时,首先在复位信号的作用下将所有用到的寄存器进行清零,然后开始设定到起步价记录状态,在此状态时,在起步价规定的里程里都一直显示起步价,直到路程超过起步价规定的里程时,系统转移到每公里计费状态,此时每增加一公里,计费器增加相应的费用。
为了便于显示,在编写过程中的数据用BCD码来显示,这样就不存在数据格式转换的问题。
比如表示一个三位数,那么就分别用四位二进制码来表示,当个位数字累加大于9时,将其清零,同时十位数字加1,依此类推。
四、实验内容本实验要完成的任务就是设计一个简单的出租车计费器,要求是起步价3元,准行1公里,以后1元/公里。
显示部分的七段码管扫描时钟选择时钟模块的1KHz,电机模块的跳线选择GND端,这样通过旋钮电机模块的电位器,即可达到控制电机转速的目的。
另外用按键模块的S1来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。
直流电机用来模拟出租车的车轮子,没转动一圈认为是行走1米,所以每旋转1000 圈,认为车子前进1公里。
基于VHDL语言的出租车计费系统的设计综述

基于VHDL语言的出租车计费系统的设计摘要本文通过对VHDL的初步学习并掌握了其基本知识后,以FPGA做主控芯片来实现基于VHDL语言的出租车计费的目的。
基于出租车行业的需求,传统的出租车计费器发展使用了十几年,在稳定性、成本、以及使用习惯上都具有一些优势。
本系统由FPGA和一些外围器件组成,具有操作简单,显示明了,功能强大的特点。
使用1602液晶模组作为显示器,可以显示数字、字母、中文、图片等,使系统信息一目了然。
本方案充分发挥人性化的特点。
本系统涉及到的理论知识有:VHDL知识、LCD液晶显示器的工作原理和使用方法,出租车计费系统的原理和实现方法等等。
关键词:1602液晶模组;FPGA; VHDLTAXI BILLING BASED ON VHDLABSTRACTBased on FPGA preliminary study and master its basics, in order to achieve the controlling chip FPGA based on VHDL taxi billing purposes.Based on the taxi industry demand, the traditional taxi meter development using ten years, in stability, cost, and the use of custom has some advantages. The system consists of single-chip FPGA and some peripheral devices, has the advantages of simple operation, display clear, powerful features. The use of 1602 LCD module as the display, can display numbers, letters, Chinese, pictures, make the system message stick out a mile. The proposal to give full play to the characteristics of human nature. The system relates to the theory of knowledge: VHDL, LCD liquid crystal display work principle and using method of billing system of a taxi, the principle and the realization method.Key words: 1602 LCD module;FPGA;VHDL目录1 前言--------------------------------------------------------------------------------------1 2系统设计2.1 总体设计构思---------------------------------------------------------------------2 2.2出租车计价器存在的问题------------------------------------------------------2 2.3问题的修改------------------------------------------------------------------------32.4 设计要求---------------------------------------------------------------------------33 硬件部分3.1 FPGA简介-------------------------------------------------------------------------4 3.2 工作原理---------------------------------------------------------------------------43.3 LCD的简介-----------------------------------------------------------------------54 软件部分4.1 VHDL语言的介绍----------------------------------------------------------------7 4.2 VHDL语言的特点-----------------------------------------------------------------7 4.3 主程序代码------------------------------------------------------------------------84.4 部分仿真------------------------------------------------------------------------------------------195 总结--------------------------------------------------------------------------------------22 6参考文献----------------------------------------------------------------------------------23 7 致谢---------------------------------------------------------------------------------------24第一章前言汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车最重要的工具。
基于vhdl出租车计价器设计说明书

摘要该系统利用VHDL语言,以QuartusII软件作为开发平台,设计了出租车计程计价表,具有车型设置、起步里程设置、起步价设置、分时计价设置、里程显示、计费显示、计时显示、点阵数码管显示汉字及数字钟的报时及发光二极管花色显示等功能。
并进行了程序仿真、动态扫描等步骤。
关键词:VHDL语言、QuartusII软件、仿真目录一、设计任务说明 ---------------------------------------------- - - 2 -二、设计任务要求 ------------------------------------------------ - 2 -三、设计内容 ------------------------------------------------------ - 3 -(一)里程计价部分 ---------------------------------------- - 3 - (二)计时部分 ----------------------------------------------- - 7 - (三)数码管显示部分 ------------------------------------- - 10 - (四)点阵显示部分 ---------------------------------------- - 15 - (五)数字钟的报时及发光二极管花色显示部分---- - 17 - (六)整体电路连接部分 ---------------------------------- - 18 -四、整体电路图 -------------------------------------------------- - 22 -五、硬件实验结果图 -------------------------------------------- - 23 -六、心得体会 ----------------------------------------------------- - 23 -一、设计任务说明设计一个出租车计程计价表,具有车型设置、起步里程设置、起步价设置、分时计价设置、里程显示、计费显示、计时显示、点阵数码管显示汉字及数字钟的报时及发光二极管花色显示等功能。
(整理)出租车计费系统VHDL.

EDA课程设计:出租车计费系统学生姓名:所在班级:指导老师:完成时间:一、课程设计目的1、综合运用EDA技术,独立完成一个课题的设计,考察运用所学知识,解决实际问题的能力;2、结合理论知识,考察阅读参考资料、文献、手册的能力;3、进一步熟悉EDA技术的开发流程,掌握文件编辑、编译、仿真、下载验证等环节的实现方法和应用技巧;二、课程设计要求实际中出租车的计费工作原理一般分成3个阶段:(1)车起步开始计费。
首先显示起步价(本次设计起步费为7.00元),车在行驶3 km 以内,只收起步价7.00元。
(2)车行驶超过3 km后,按每公里2.2元计费(在7.00元基础上每行驶1 km车费加2.2元),车费依次累加。
(3)行驶路程达到或超过9 km后(车费达到20元),每公里加收50%的车费,车费变成按每公里3.3元开始计费。
车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。
若停止则车费清零,等待下一次计费的开始三、基本设计思想1、根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。
①计数器A完成车费百位。
②计数器B完成车费十位和个位。
③计数器C完成车费角和分。
④计数器D完成计数到30(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100 m的功能。
2、行驶过程中车费附加50%的功能:由比较器实现。
3、车费的显示:由动态扫描电路来完成。
用专用模块来实现,完成数据的输入即动态数据的显示。
4、通过分析可以设计出系统的顶层框图如图3.1所示:图3.1 系统的顶层框图四、出租车计费系统的实现1、系统的总体框图2、程序流程图图4.2程序流程图3、系统各功能模块的实现(1)模块JIFEI的实现:图 4.3 模块模块JIFEI见图4.3。
输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键。
VHDL语言的出租车计费器设计说明

用VHDL语言设计出租车计价器1个报价近年来,出租车行业发展迅速。
全国有数千家出租车公司,出租车计价器市场巨大。
随着电子科学技术的不断发展,特别是集成电路的飞速发展,电子设计自动化已经成为主要的设计手段。
随着EDA技术的蓬勃发展和FPGA等数字可编程器件的出现,数字出租车计价器的设计变得更加简单,性能更加稳定,可以实现更加复杂的功能。
此外,利用EDA软件可以方便地在计算机上实现设计和仿真。
本设计基于VHDL(FPGA)语言,是电子设计领域最具活力和前景的技术,未来必将取代一些过时的数字元件。
1.1课程设计的目的随着电子技术的不断发展和进步,集成电路的设计方法也在不断更新。
今天,传统的手工设计过程已经被先进的电子设计自动化(EDA)工具所取代。
只有基于硬件描述语言和逻辑综合的子项下的电路设计方法,才能满足集成电路系统设计日益复杂的要求,缩短设计周期,满足集成电路系统设计日益迫切的要求。
在这种情况下,传统的出租车计价器的设计方法已经跟不上现在的节奏,过去的出租车计价器的功能也远远不能满足实际需要。
以往出租车计价器的不稳定和功能短是大家开始寻找功能更强大、性能更稳定、价格更低廉的新型出租车计价器的缺点。
大规模可编程逻辑器件和VHDL硬件描述语言的出现使这一切成为可能。
本设计的研究目标和意义是使用价格低廉、性能稳定、价格低廉、扩展性强的出租车计价器,满足当前出租车市场的需求,从而解决当前出租车计价器存在的一系列问题。
1.2课程设计要求1.它可以实现充电功能。
收费标准为:按里程收费,起步费10.00元,车库3公里后再按2元/公里收费。
计价器收费或超过一定收费(如20元)时,每公里收取车费的50%,车停止收费。
2.实现预设功能:可以预设起步费,每公里收费,车行里程。
3.实现模拟功能:可以模拟汽车的启动、停止、暂停、速度等状态。
4.设计一个动态扫描电路:用两位小数显示票价。
5.用VHDL语言设计一个满足上述功能要求的出租车计价器,并用层次化设计方法设计电路。
基于VHDL_的出租车计费器的设计

基于VHDL 的出租车计费器的设计目前以硬件描述语言(Verilog 或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA 上进行测试,是现代IC 设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
本设计是一种采用FPGA芯片进行出租车计费器,主要分为分频模块、计量模块、计费模块、控制模块等模块,利用FPGA的可编程性,简洁又多变的设计方法,缩短了研发周期。
主要采用了FPGA芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品的升级。
一、设计任务与要求(1)、能够实现计费功能费用的计算是按行驶里程收费,设出租车的起步价是5.00元,当里程小于3km里时,按起步价收费;当里程大于3km时每公里按1.3元计费。
等待累计时间超过2min,按每分钟1.5元计费。
所以总费用按下式计算:总费用=起步价+(里程-3km)*里程单价+等候时间*等候单价(2)、能够实现显示功能●显示汽车行驶里程:用四位数字显示,显示方式为“XXXX”,单价为km。
计程范围为0~99km,计程分辨率为1km。
●显示等候时间:用两位数字显示分钟,显示方式为“XX”。
计时范围为0~59min,计时分辨率为1min。
●显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。
计价范围为999.9元,计价分辨率为0.1元。
二、设计原理根据设计要求,系统的输入信号clk,计价开始信号Start,等待信号Stop,里程脉冲信号fin。
基于VHDL语言的出租车计价器

(基于VHDL语言)出租车计价器自己做的大作业经过测试完全通过,不过里面的时间脉冲以及里程脉冲的时钟信号都比较难搞,不过可以修改其中的值来满足你们提供的时钟脉冲题目要求:(1)行程3公里内(包括3公里),且等待累计时间2分钟内(包括2分钟),起步费为10元;(2)3公里外(不包括3公里)以每公里2元,等待累计时间2分钟外(不包括2分钟)以每分钟以1.0元计费;(3)能显示行驶公里数、等待累计时间和最后的总费用;(4)本计费器的显示范围为0~99元,计价分辨率为1元;计程器显示范围为0~99公里,分辨率为1公里;计时器的显示范围是分钟的显示范围是0—99,分辨率为1分钟。
秒的显示范围是0—59。
分辨率为1秒本出租车计价器的设计共分4个模块:判断模块、时间模块、里程模块、计费模块。
总的设计图如图1所示:计价开始控制判断模块library ieee;use ieee.std_logic_1164.all;--entity judge isport(sclk,sta,lclk: in std_logic;dge: out std_logic);end;architecture beh of judge isbeginprocess(sta,lclk,sclk)variable a: integer range 0 to 64;beginif sta='1' thenif lclk'event and lclk='1' thena:=a+1;end if;if sclk'event and sclk='1' thenif a=0 thendge<='0';--shijian processelsedge<='1';--licheng processend if;end if;if sclk='1' thena:=0;end if;elsedge<='Z';end if;end process;end;时间模块library ieee;use ieee.std_logic_1164.all;--entity time_count isport(sta,sclk,dge: in std_logic;t_count: out std_logic;minge: out integer range 0 to 10;minshi: out integer range 0 to 10); end;--architecture beh of time_count is beginprocess(sta,sclk,dge)variable count: integer range 0 to 60; variable ge: integer range 0 to 10; variable shi: integer range 0 to 10; variable t_c: std_logic;beginif sta='1' thenif dge='0' thenif sclk'event and sclk='1' then count:=count+1;if count=1 thent_c:='0';end if;if count=60 thencount:=0;ge:=ge+1;if ge>2 thent_c:='1';elsif ge>0 thent_c:='1';end if;if ge=10 thenge:=0;shi:=shi+1;if shi=10 thenshi:=0;end if;end if;end if;end if;end if;elsege:=0;shi:=0;t_c:='0';end if;minge<=ge;minshi<=shi;t_count<=t_c;end process;end;里程模块library ieee;use ieee.std_logic_1164.all; --entity time_count isport(sta,sclk,dge: in std_logic;t_count: out std_logic;minge: out integer range 0 to 10;minshi: out integer range 0 to 10); end;--architecture beh of time_count is beginprocess(sta,sclk,dge)variable count: integer range 0 to 60; variable ge: integer range 0 to 10; variable shi: integer range 0 to 10; variable t_c: std_logic;beginif sta='1' thenif dge='0' thenif sclk'event and sclk='1' then count:=count+1;if count=1 thent_c:='0';end if;if count=60 thencount:=0;ge:=ge+1;if ge>2 thent_c:='1';elsif ge>0 thent_c:='1';end if;if ge=10 thenge:=0;shi:=shi+1;if shi=10 thenshi:=0;end if;end if;end if;end if;end if;elsege:=0;shi:=0;t_c:='0';end if;minge<=ge;minshi<=shi;t_count<=t_c;end process;end;计费模块library ieee;use ieee.std_logic_1164.all;--entity price_count isport(sta,t_count,d_count: in std_logic;mge,mshi: out integer range 0 to 10); end;--architecture beh of price_count issignal t_ge,t_shi: integer range 0 to 10; signal d_ge,d_shi: integer range 0 to 10; begin--process(sta,t_count)variable tshi: integer range 0 to 10:=1; variable tge: integer range 0 to 10;beginif sta='1' thenif t_count'event and t_count='1' then tge:=tge+1;if tge=10 thentge:=0;tshi:=tshi+1;if tshi=10 thentshi:=0;end if;end if;end if;elsetge:=0;tshi:=1;end if;t_ge<=tge;t_shi<=tshi;end process;--process(sta,d_count)variable dge,dshi: integer range 0 to 10; beginif sta='1' thenif d_count'event and d_count='1' then dge:=dge+2;if dge=10 thendge:=0;dshi:=dshi+1;if dshi=10 thendshi:=0;end if;end if;end if;elsedge:=0;dshi:=0;end if;d_ge<=dge;d_shi<=dshi;end process;--process(d_ge,d_shi,t_ge,t_shi) variable cge: integer range 0 to 1; variable ge,shi:integer range 0 to 10; beginge:=d_ge+t_ge;if ge>=10 thenge:=ge-10;cge:=1;elsecge:=0;end if;shi:=d_shi+t_shi+cge;mge<=ge;mshi<=shi;end process;end;显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity display isport(CLK:in std_logic;sminge,sminshi: in integer range 0 to 10;skmge,skmshi: in integer range 0 to 10;smge,smshi: in integer range 0 to 10;weixuan:OUT std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0)); end;architecture one of display issignal cnt1:std_logic_vector(22 downto 0);signal S:std_logic_vector(2 downto 0);signal sel:std_logic_vector(2 downto 0);beginprocess(CLK)beginif CLK'event and CLK='1' THEN cnt1<=cnt1+1;end if;END PROCESS;S<=cnt1(5 downto 3);--300hzsel<="000" when S="000" else"001" when S="001" else"010" when S="010" else"011" when S="011" else"100" when S="100" else"101" when S="101" else"110" when S="110" else"111" when S="111" else"ZZZ";weixuan<=sel;process(sel,sminshi,sminge,skmshi,skmge,smshi,smge) variable num:integer range 0 to 10;begincase sel ISwhen"000"=>num:=sminge;when"001"=>num:=sminshi;when"011"=>num:=skmge;when"100"=>num:=skmshi;when"110"=>num:=smge;when"111"=>num:=smshi;when others=>num:=0;end case;case num ISwhen 0=>seg<="00111111";when 1=>seg<="00000110";when 2=>seg<="01011011";when 3=>seg<="01001111";when 4=>seg<="01100110";when 5=>seg<="01101101";when 6=>seg<="01111101";when 7=>seg<="00000111";when 8=>seg<="01111111";when 9=>seg<="01101111";when others=>seg<="00000000";end case;end process;end one;元件例化模块library ieee;use ieee.std_logic_1164.all;--entity comp isport(sclk,lclk,sta,dclk: in std_logic;weixuan:OUT std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0)); end;--architecture beh of comp is--component judge isport(sclk,sta,lclk: in std_logic;dge: out std_logic);end component;--component time_count isport(sta,sclk,dge: in std_logic;t_count: out std_logic;minge: out integer range 0 to 10;minshi: out integer range 0 to 10);end component;--component distance_count isport( sta,lclk,dge: in std_logic;kmge,kmshi: out integer range 0 to 10;d_count: out std_logic);end component;--component price_count isport(sta,t_count,d_count: in std_logic;mge,mshi: out integer range 0 to 10);end component;--component display isport(CLK:in std_logic;sminge,sminshi: in integer range 0 to 10;skmge,skmshi: in integer range 0 to 10;smge,smshi: in integer range 0 to 10;weixuan:OUT std_logic_vector(2 downto 0);seg:out std_logic_vector(7 downto 0));end component;--signal w,x,y: std_logic;signal time_ge,time_shi:integer range 0 to 10;signal pri_ge,pri_shi:integer range 0 to 10;signal dis_ge,dis_shi:integer range 0 to 10;--beginU1: judge port map(sta=>sta,sclk=>sclk,lclk=>lclk,dge=>w);U2: time_count port map(sta=>sta,sclk=>sclk,dge=>w,t_count=>x,minge=>time_ge,minshi=>time_shi);U3: distance_count port map(sta=>sta,lclk=>lclk,dge=>w,d_count=>y,kmge=>dis_ge,kmshi=>dis_shi);U4: price_count port map(sta=>sta,t_count=>x,d_count=>y,mge=>pri_ge,mshi=>pri_shi);U5: display port map(dclk,time_ge,time_shi,dis_ge,dis_shi,pri_ge,pri_shi,weixuan,seg);end;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA课程设计:出租车计费系统学生姓名:所在班级:指导老师:完成时间:一、课程设计目的1、综合运用EDA技术,独立完成一个课题的设计,考察运用所学知识,解决实际问题的能力;2、结合理论知识,考察阅读参考资料、文献、手册的能力;3、进一步熟悉EDA技术的开发流程,掌握文件编辑、编译、仿真、下载验证等环节的实现方法和应用技巧;二、课程设计要求实际中出租车的计费工作原理一般分成3个阶段:(1)车起步开始计费。
首先显示起步价(本次设计起步费为7.00元),车在行驶3 km 以内,只收起步价7.00元。
(2)车行驶超过3 km后,按每公里2.2元计费(在7.00元基础上每行驶1 km车费加2.2元),车费依次累加。
(3)行驶路程达到或超过9 km后(车费达到20元),每公里加收50%的车费,车费变成按每公里3.3元开始计费。
车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。
若停止则车费清零,等待下一次计费的开始三、基本设计思想1、根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。
①计数器A完成车费百位。
②计数器B完成车费十位和个位。
③计数器C完成车费角和分。
④计数器D完成计数到30(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100 m的功能。
2、行驶过程中车费附加50%的功能:由比较器实现。
3、车费的显示:由动态扫描电路来完成。
用专用模块来实现,完成数据的输入即动态数据的显示。
4、通过分析可以设计出系统的顶层框图如图3.1所示:图3.1 系统的顶层框图四、出租车计费系统的实现1、系统的总体框图图4.1 系统总体框图2、程序流程图3、系统各功能模块的实现(1)模块JIFEI的实现:模块JIFEI见图4.3。
输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键。
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;图 4.3 模块车开始启动里程不计数里程计数里程显示计费器计数车费显示车跑完一次后车费、里程清零YESYESYESNON图4.2程序流程图entity jifei isport (clk,start,stop,pause,js:in std_logic; chefei,luc:out integer range 0 to 8000);end jifei;architecture rtl of jifei isbeginprocess(clk,start,stop,pause,js)variable a,b:std_logic;variable aa:integer range 0 to 100;variable chf,lc:integer range 0 to 8000; variable num:integer range 0 to 9;beginif(clk'event and clk='1')thenif(stop='0')thenchf:=0;num:=0;b:='1';aa:=0;lc:=0;elsif(start='0')thenb:='0';chf:=700;lc:=0;elsif(start='1' and js='1'and pause='1')then if(b='0')thennum:=num+1;end if;if(num=9)thenlc:=lc+5;num:=0;aa:=aa+5;end if;elsif(start='1'and js='0'and pause='1')thenlc:=lc+1;aa:=aa+1;end if;if(aa>=100)thena:='1';aa:=0;elsea:='0';end if;if(lc<300)thennull;elsif(chf<2000 and a='1')thenchf:=chf+220;elsif(chf>=2000 and a='1')thenchf:=chf+330;end if;end if;chefei<=chf;luc<=lc;end process;end rtl;(2)模块X的实现:模块X见图4.4。
该模块把车费和路程转化为4位十进制数,daclk的频率要比clk 快得多图4.4 模块Xlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity x isport(daclk:in std_logic;ascore,bscore:in integer range 0 to 8000;age,ashi,abai,aqian,bge,bshi,bbai,dqian:out std_logic_vector(3 downto 0)); end x ;architecture rtl of x isbeginprocess(daclk,ascore)variable comb1:integer range 0 to 8000;variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto 0);beginif(daclk'event and daclk='1')thenif(comb1<ascore)thenif(comb1a=9 and comb1b=9 and comb1c=9)thencomb1a:="0000";comb1b:="0000";comb1c:="0000";comb1d:=comb1d+1;comb1:=comb1+1;elsif(comb1a=9 and comb1b=9)thencomb1a:="0000";comb1b:="0000";comb1:=comb1+1;comb1c:=comb1c+1;elsif(comb1a=9)thencomb1a:="0000";comb1b:= comb1b+1;comb1:= comb1+1;elsecomb1a:= comb1a+1;comb1:= comb1+1;end if;elseashi<= comb1b;age<= comb1a;abai<= comb1c;aqian<= comb1d;comb1:=0;comb1a:="0000";comb1b:="0000";comb1c:="0000";comb1d:="0000";end if;end if;end process;process(daclk,bscore)variable comb2:integer range 0 to 8000;variable comb2a,comb2b, comb2c,comb2d:std_logic_vector(3 downto 0); beginif(daclk'event and daclk='1')thenif(comb2<bscore)thenif(comb2a=9 and comb2b=9 and comb2c=9)thencomb2a:="0000";comb2b:="0000";comb2c:="0000";comb2d:=comb2d+1;comb2:=comb2+1;elsif(comb2a=9 and comb2b=9)thencomb2a:="0000";comb2b:="0000";comb2:= comb2+1;comb2c:= comb2c+1;elsif(comb2a=9)thencomb2a:="0000";comb2b:=comb2b+1;comb2:=comb2+1;elsecomb2a:= comb2a+1;comb2:= comb2+1;end if;elsebshi<=comb2b;bge<=comb2a;bbai<=comb2c;bqian<=comb2d;comb2:=0;comb2a:="0000";comb2b:="0000";comb2c:="0000";comb2d:="0000";end if;end if;end process;end rtl;(3)模块XXX1的实现:模块XXX1见图4.5。
经过该八进制模块将车费和路程显示出来。
图4.5 模块XXX1library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity XXX1 isport(c:in std_logic_vector(2 downto 0);dp:out std_logic;a1,a2,a3,a4,b1,b2,b3,b4:in std_logic_vector(3 downto 0); d:out std_logic_vector(3 downto 0));end XXX1;architecture rtl of xxx1 isbeginprocess(c,a1,a2,a3,a4,b1,b2,b3,b4)variable comb:std_logic_vector(2 downto 0);begincomb:=c;case comb isWhen"000"=>d<=a1;dp<='0';When"001"=>d<=a2;dp<='0';When"010"=>d<=a3;dp<='1';when"011"=>d<=a4;dp<='0';When"100"=>d<=b1;dp<='0';when"101"=>d<=b2;dp<='0';when"110"=>d<=b3;dp<='1';when"111"=>d<=b4;dp<='0';when others=>null;end case;end process;end rtl;(4)模块SE的实现:4.6模块SE见图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity se isport(clk:in std_logic;a:out std_logic_vector(2 downto 0));end se;architecture rtl of se isbeginprocess(clk)variable b:std_logic_vector(2 downto 0); beginif(clk'event and clk='1')thenif(b="111")thenb:="000";elseb:=b+1;end if;end if;a<=b;end process;end rtl;(5)模块DI的实现:4.7模块DI见图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity di isport(d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0));end di;architecture rtl of di isbeginprocess(d)begincase d isWhen"0000"=>q<="0111111"; when"0001"=>q<="0000110"; when"0010"=>q<="1011011"; when"0011"=>q<="1001111";when"0100"=>q<="1100110";when"0101"=>q<="1101101";when"0110"=>q<="1111101";when"0111"=>q<="0100111";when"1000"=>q<="1101111";when others=>q<="1101111";end case;end process;end rtl;4、系统仿真(1)模块X的仿真结果:将车费和路程转换成4位的十进制如图4.8所示:输入端为:Daclk, ascore, bscore输出端为:Age, ashi, aqian, abai, bge, bshi, bqian, bbai;图4.8 模块X仿真波形图(2)模块JIFEI的仿真结果:该模块是模拟汽车的启动、停止、暂停、加速按键,如图4.9所示:输入端口为:stop, start, pause, js;输出端口为:clk, b;图4.9 模块JIFEI仿真波形图(3)模块XXX1的仿真结果:该模块是将车费和路程显示出来如图4.10所示输入端为:c, a1,a2,a3,a4,b1,b2,b3,b4;输出端为:dp,d;图4.10 模块XXX1仿真波形图(4)模块SE的结果验证:模块SE仿真如图4.11所示:输入端为:clk输出端为:a图4.11模块SE仿真波形图(5)模块DI的结果验证:模块DI仿真的结果如图4.12所示输入端为:d输出端为:q图4.12 模块DI仿真波形图五、结论出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。