




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 设计名称: 专业软件应用综合设计报告 题 目: 基于FPGA的出租车计价设计 年 级: 2013级 学生姓名: 学 号: 3320130891126 专 业: 电子信息工程 指导教师: 日期: 2015年 12 月 28 日专业软件应用综合设计报告 摘要利用FPGA设计出满足出租车不同计费需求的计费器,去满足当地出租车的计费需求。在这里我们用QuartusII9.0软件进行仿真模拟实现,所用的编程语言是VHDL File。这个课题在实现计费功能的同时,也解决了传统出租车计费器系统的不足。出租车的需求不断的增大,因此,出租车计费器的需求也将不断增大,计程车的服务也显得越来越重要,因此出租车计费
2、器也就应运而生了。 关键词FPGA;计费器;Quartus9.0;VHDL File语言目录摘要1目录 第1章 前言11.1发展概括与设计背景1第2章设计目标与主体22.1设计目标22.2设计主体22.3系统框图2第3章 主体电路与波形仿真43.1两个模块生成符号文件43.2对taxi模块进行波形仿真观察到的现象43.3对decoder模块进行波形仿真观察到的现象53.4整机电路的连接5第4章程序的设计74.1 taxi模块程序74.2 decoder模块程序9第5章总结15参考文献16第1章 前言1.1发展概括与设计背景伴随中国经济的腾飞,城市化的进程也随之加快。虽然人们出行的选择趋于多样化
3、,但是出租车作为一种重要的交通工具,也为很多人作为出行的选择。大城市里出租车已经相当普及,但是在中小城市出租车依然处于快速发展的阶段。出租车的计费方式也在发生变化,由只能显示里程的方式变为现在的自主计费和打印发票及语音提示的智能化方式;根据出租车行业的发展需求,国内许多生产厂商也制造出不同类型的计价器,传统的出租车计费器经过十几年的使用,在稳定性,成本等方面都具有一定的优势。利用FPGA设计出满足出租车不同计费需求的计费器,去满足当地出租车的计费需求。这个课题在实现计费功能的同时,也解决了传统出租车计费器系统的不足。出租车的需求不断的增大,因此,出租车计费器的需求也将不断增大,计程车的服务也显
4、得越来越重要,因此出租车计费器也就应运而生了。第2章设计目标与主体2.1设计目标1. 实现计费功能。按行驶里程计费,起步价为6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止和暂停时不计费;2. 现场模拟汽车的起动、停止、暂停和换挡等状态;3. 设计数码管动态扫描电路,将车费和路程显示出来,各有两位小数。2.2设计主体假设出租车有启动键、停止键、暂停键和档位键。启动键为脉冲触发信号,当它为一个脉冲是,表示汽车已启动,并根据车速的选择和基本车速发出相应频率的脉冲(计费脉冲)实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表
5、示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用来改变车速,不同档位对应着不同的车速,同时路程计数的速度也不同。首先设计taxi计费模块,实现计费功能。起步价为6.00元,并在车行驶3km后按1.2元/km计费,当计费器达到或超过20元时,每千米加收50%的车费,车停止和暂停时不计费。其次将输出的费用和路程作为输入,给decoder模块,完成数码管显示功能,并且对小数点等做出明确定义。2.3系统框图出租车计费器可分为两大模块,即控制模块和译码显示模块,系统框图如图2.3所示,控制模块实现了计费和路程的技术,并
6、且通过不同的档位控制车速。译码显示模块实现了十进制到4位十进制的转换,以及车费和路程的显示。控制模块计费时钟显示模块档位起动暂停停止图2.3 出租车计费器系统框图第3章 主体电路与波形仿真3.1两个模块生成符号文件电路符号,其中clk为计费时钟脉冲信号输入端,clk20MHZ为译码高频时钟信号输入端,start为汽车启动键,stop为汽车停止键,pause为汽车暂停键,speed【1.0】为档位键,scan【7.0】为数码管地址选择信号输出端,seg7【6.0】为7段显示控制信号输出端,dp为小数点信号输出端。 图3.1.1 taxi模块生成符号文件图 decoder模块生成符号文件3.2对t
7、axi模块进行波形仿真观察到的现象对控制模块taxi进行仿真后得到的功能仿真结果如图3.2所示。观察波形可知,当起动键(start)为一个脉冲时,表示汽车已起动,车费money显示起步价6.00元,同时路程distance随着计费脉冲开始计数;当停止键(stop)为1时,表示汽车熄火停止,车费money和路程distance均为0;当暂停键(pause)为1时,车费和路程停止计数;当档位键分别取0、2、3时路程的计数逐渐加快,表示车速逐渐加快。 图3.2 taxi模块波形仿真3.3对decoder模块进行波形仿真观察到的现象将扫描数码管的分频系数改小后对译码显示模块decoder的功能仿真结果
8、如图3.3所示。进行译码的时钟频率必须比计费的时钟高得多才能实时显示出车费和路程的变化,这里直接采用晶振时钟20MHz即可。 图3.3 decoder模块波形仿真3.4整机电路的连接连接整机电路我们是通过前面生成的taxi模块和decoder模块进行搭接电路的,其电路如图3.4所示。整机电路的搭接与实现,让我们更加具体和直观的看到我们对出租车计价器的仿真效果。更好的证明了仿真与实物很接近。 图3.4 整机电路图第4章程序的设计4.1 taxi模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all
9、;entity taxi isport(clk:in std_logic;-计费时钟 start:in std_logic;-汽车起动 stop:in std_logic;-汽车停止 pause:in std_logic;-汽车暂停 speedup:in std_logic_vector(1 downto 0);-档位(4个档位) money:out integer range 0 to 8000;-车费 distance:out integer range 0 to 8000);-路程end;architecture one of taxi isbeginprocess(clk,start,
10、stop,pause,speedup) variable money_reg,distance_reg:integer range 0 to 8000;-车费和路程的寄存器 variable num:integer range 0 to 9;-控制车速的计数器 variable dis:integer range 0 to 100;-千米计数器 variable d:std_logic;-千米标志位beginif stop='1'then-汽车停止,计费和路程清零 money_reg:=0; distance_reg:=0; dis:=0; num:=0;elsif start
11、='1'then-汽车起动后,起步价为6元 money_reg:=600; distance_reg:=0; dis:=0; num:=0;elsif clk'event and clk='1'then if start='0'and speedup="00"and pause='0' and stop='0'then-1档 if num=9 then num:=0; distance_reg:=distance_reg+1; dis:=dis+1; else num:=num+1; e
12、nd if; elsif start='0'and speedup="01"and pause='0' and stop='0'then-2档 if num=9 then num:=0; distance_reg:=distance_reg+2; dis:=dis+2; else num:=num+1; end if; elsif start='0'and speedup="10"and pause='0' and stop='0'then-3档 if num
13、=9 then num:=0; distance_reg:=distance_reg+5; dis:=dis+5; else num:=num+1; end if; elsif start='0'and speedup="11"and pause='0' and stop='0'then-4档 distance_reg:=distance_reg+1; dis:=dis+1; end if; if dis>=100 then d:='1' dis:=0; else d:='0' end i
14、f; if distance_reg>=300 then-如果超过3km按1.2元/千米计算 if money_reg<2000 and d='1'then money_reg:=money_reg+120; elsif money_reg>=2000 and d='1'then money_reg:=money_reg+180;-当计费器达到20元,每千米加收50%的车费 end if; end if; end if; money<=money_reg; distance<=distance_reg; end process; e
15、nd;4.2 decoder模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder isport(clk20mhz:in std_logic;-系统时钟20MHZ money_in:in integer range 0 to 8000;-车费 distance_in:in integer range 0 to 8000;-路程 scan:out std_logic_vector(7 downto 0);-数码管地址选择信号 seg7:out std_logic_ve
16、ctor(6 downto 0);-7段显示控制信号(abcdefg) dp:out std_logic);-小数点end;architecture one of decoder issignal clk1khz:std_logic;-1KHZ的分频时钟,用于扫描数码管地址signal data:std_logic_vector(3 downto 0);signal m_one,m_ten,m_hun,m_tho:std_logic_vector(3 downto 0);-钱数的4位十进制表示signal d_one,d_ten,d_hun,d_tho:std_logic_vector(3 d
17、ownto 0);-路程的4位十进制表示begin-1KHZ分频,用于扫描数码管地址-process(clk20mhz)variable count:integer range 0 to 9999;beginif clk20mhz'event and clk20mhz='1'then if count=9999 then clk1khz<=not clk1khz;count:=0; else count:=count+1; end if;end if;end process;-将车费的十进制数转化为4位十进制数-process(clk20mhz,money_in)
18、 variable comb1:integer range 0 to 8000; variable comb1_a,comb1_b,comb1_c,comb1_d:std_logic_vector(3 downto 0);beginif clk20mhz'event and clk20mhz='1'then if comb1<money_in then if comb1_a=9 and comb1_b=9 and comb1_c=9 then comb1_a:="0000" comb1_b:="0000" comb1_c:=
19、"0000" comb1_d:=comb1_d+1; comb1:=comb1+1; elsif comb1_a=9 and comb1_b=9 then comb1_a:="0000" comb1_b:="0000" comb1_c:=comb1_c+1; comb1:=comb1+1; elsif comb1_a=9 then comb1_a:="0000" comb1_b:=comb1_b+1; comb1:=comb1+1; else comb1_a:=comb1_a+1; comb1:=comb1+1;
20、end if; elsif comb1=money_in then m_one<=comb1_a; m_ten<=comb1_b; m_hun<=comb1_c; m_tho<=comb1_d; elsif comb1>money_in then comb1_a:="0000" comb1_b:="0000" comb1_c:="0000" comb1_d:="0000" comb1:=0; end if;end if;end process;-将路程的十进制转化为4位十进制数-pro
21、cess(clk20mhz,distance_in) variable comb2:integer range 0 to 8000; variable comb2_a,comb2_b,comb2_c,comb2_d:std_logic_vector(3 downto 0);beginif clk20mhz'event and clk20mhz='1'then if comb2<distance_in then if comb2_a=9 and comb2_b=9 and comb2_c=9 then comb2_a:="0000" comb2_
22、b:="0000" comb2_c:="0000" comb2_d:=comb2_d+1; comb2:=comb2+1; elsif comb2_a=9 and comb2_b=9 then comb2_a:="0000" comb2_b:="0000" comb2_c:=comb2_c+1; comb2:=comb2+1; elsif comb2_a=9 then comb2_a:="0000" comb2_b:=comb2_b+1; comb2:=comb2+1; else comb2_a
23、:=comb2_a+1; comb2:=comb2+1; end if;elsif comb2=distance_in then d_one<=comb2_a; d_ten<=comb2_b; d_hun<=comb2_c; d_tho<=comb2_d;elsif comb2>distance_in then comb2_a:="0000" comb2_b:="0000" comb2_c:="0000" comb2_d:="0000" comb2:=0; end if;end if;
24、end process;-数码管动态扫描process(clk1khz,m_one,m_ten,m_hun,m_tho,d_one,d_ten,d_hun,d_tho)variable cnt:std_logic_vector(2 downto 0);beginif clk1khz'event and clk1khz='1'then cnt:=cnt+1;end if;case cnt is when"000"=>data<=m_one;dp<='0'scan<="00000001" whe
25、n"001"=>data<=m_ten;dp<='0'scan<="00000010" when"010"=>data<=m_hun;dp<='1'scan<="00000100" when"011"=>data<=m_tho;dp<='0'scan<="00001000" when"100"=>data<=d_one;dp&
26、lt;='0'scan<="00010000" when"101"=>data<=d_ten;dp<='0'scan<="00100000" when"110"=>data<=d_hun;dp<='1'scan<="01000000" when"111"=>data<=d_tho;dp<='0'scan<="10000000"end case;end process;-7段译码-process(data)begincase data is when"0000"=>seg7<="1111110" when"0001"=>seg7<="0110000" when"0010"=>seg7<="1101101" when"0011&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年项目策划试题及答案
- 宁德叉车考试题目及答案
- 海大饲料考试题及答案
- 2025年初级游泳教员题库及答案
- 2025年陕西省事业单位工勤技能考试考试题库及参考答案
- 2025年山西省教师职称考试(数学)(小学)复习题及答案
- 雅思考试试题及答案
- 2025年低温高温电学题目及答案
- 煤矿行业发展新质生产力路径
- uoi探究课程课件
- 义务教育科学课程标准(2022年版)测试题及答案含课标解读
- 水运工程统一用表之一《浙江省港口工程统一用表》
- GB/T 13306-2011标牌
- GA 1800.6-2021电力系统治安反恐防范要求第6部分:核能发电企业
- FZ/T 13001-2013色织牛仔布
- 温医麻醉学专业英语专业英语考试参考
- 办公室主任竞聘报告课件
- 住宅小区供配电系统设计课件
- “三高”讲座-课件
- 年产12000吨水合肼(100%)项目环评报告书
- 甘肃悬索特大桥钢桁加劲梁、正交异性桥面板施工方案
评论
0/150
提交评论