eda课程设计vhdl语言的简易出租车计费器设计

唐 山 学 院 《EDA技术》课 程 设 计

题 目 简易出租车计费器设计 系 (部) 信息工程系 班 级 12电本 班 姓 名 学 号 4120208XXX 指导教师 郭耀华 周剑利 吕宏丽

2015 年 7 月 6 日至 7 月 12 日 共 1 周 2015年 7 月 8 日 课程设计成绩评定表 出勤 情况 出勤天数

缺勤天数 成 绩 评 定

出勤情况及设计过程表现(20分) 课设答辩(20分) 设计成果(60分) 硬件调试 设计说明书

总成绩(100分) 提问 (答辩) 问题 情况

综 合 评 定

指导教师签名: 年 月 日 目录 1 引言.............................................................. 1 2 计费器的设计...................................................... 2 2.1 设计内容 .................................................... 2 2.2设计要求..................................................... 2 2.3 设计原理 .................................................... 2 2.4 各模块的设计 ................................................ 3 2.4.1 分频模块............................................... 3 2.4.2 计程模块............................................... 4 2.4.3 计费模块............................................... 4 2.4.4 顶层模块............................................... 5 3 仿真.............................................................. 6 4 引脚的锁定........................................................ 7 5总结 .............................................................. 8 参考文献............................................................ 9 附录............................................................... 10 课程设计说明书

1 1 引言 出租车计费器是出租车营运收费的智能化仪表,是使出租车市场规范化、标准化的重要设备。一种功能完备,简单易用,计量准确的出租车计价器是加强出租车行业管理,提高服务质量的必需品。在科技高度发展的今天,集成电路和计算机应用得到了高速发展。本设计就采用VHDL描述语言,设计出租车计价系统的软件结构,通过QuartusⅡ9.0软件下进行仿真,再在试验箱进行硬件仿真,实现了模拟的简易的出租车计费器。 编写程序所用的VHDL语言全名为Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE-1076(简称87版)之后,各EDA公司相继推出自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,简称93版。VHDL和Verilog作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。 对程序进行编译及仿真用到的的QuartusⅡ9.0软件是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 QuartusⅡ9.0可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片平面布局连线编辑;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;自动定位编译错误;此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 课程设计说明书

2 2 计费器的设计 2.1 设计内容 (1)设计一个简易的出租车计费系统,实现计价功能,计费标准为按行程里程收费,起步价为6.00元,当里程小于3公里时,按照起价计费,车行超过3公里后在按1.2元/公里收费。 (2)实现车辆行驶的模拟:能模拟汽车的启动,停止,暂停等状态。 (3)计费器显示部分设计:用LED数码管实时显示车费和汽车行驶里程,用两位数字显示汽车行驶里程,显示方式为“XX”,单位为km。计程范围为0—99km,计程分辨率为1km;用四位数字显示总费用,显示方式为“XX.X”,单价为元。计价范围为0—99.9元,计价分辨率为0.1元。 (4)此计费器要设有一个由司机控制的整体复位控制,设定车轮转一圈输出一个脉冲,100个脉冲对应1公里。 2.2设计要求

(1)根据任务要求确定电路各功能模块 (2)写出设计程序 (3)给出时序仿真结果 (4)实现硬件调试 2.3 设计原理

设计系统的输入信号:时钟脉冲clk,开始计费信号start,复位信号rst,暂停信号stop。输出信号:显示总费用cost0 ~cost3,显示计程km0和km1。设计两个脉冲cost_clk和mile_clk,其中cost_clk通过分频模块分成8个clk上升沿的脉冲,用来计费,mile_clk是96个clk上升沿的脉冲,用来计程。两个控制输入开关start、stop;控制过程为:start作为计费开始开关,当start为高电平时,stop为低电平时,系统开始根据输入的情况计费。当出租车开始行驶时,mile_clk脉冲到来,进行行驶计程;如果行驶路程小于3公里,则费用显示为起步价6.00元,如果行程大于3公里,则cost_clk开始工作,每来一脉冲则加在起步价上加0.1元。如需停车等待,就把stop变为高电平,恢复行驶时,把stop变为低电平,继续计程与计费。当按下rst键,计程与计费显示都清零。 该设计有三个模块:分频模块、计程模块、计费模块。 系统结构框图如图2-1所示: 课程设计说明书 3 图2-1 2.4 各模块的设计

2.4.1 分频模块 为方便计费和计程,需要对clk脉冲进行分频。因为计费是1.2元每公里,所以0.1元约为83.3米,设计要求一个脉冲是10米,所以把cost_clk分频成每8个clk上升沿对应一个cost_clk上升沿;mile_clk分频成每96个clk上升沿对应一个mile_clk上升沿。 系统模块图2-2如下:

图2-2 课程设计说明书

4 2.4.2 计程模块 计程模块的功能是计算并输出出租车行驶公里数,及输出使能信号en来表示是否大于三公里。 当计费信号start为高电平且复位信号rst为低电平时,mile_clk每来一个上升沿,计程器低位k0就加1,当k0满9时,进位,高位k1加1,k0清零,k1满9清零,因此计程器的计程范围是0~99km,满量程后自动归零。当行驶里程大于3km时,使能信号en变为高电平,小于3km时en为低电平。stop为暂停信号,当stop为高电平时,计量模块停止计数并显示当前里程数。 系统模块图2-3如下:

图2-3 2.4.3 计费模块 计费模块的功能是根据前两个模块的输出,根据公里数是否大于3公里,分别计费。 定义c2、c1、c0分别表示费用的十元、元、角的输出。当en为低电平即行程在3公里以内时,c2c1c0显示为0000 0110 0000,代表起步价6.0元;当en为高电平即行程超过3公里时,超过的里程按1.2元每公里计费,每来一个cost_clk上升沿,c2c1c0在6.0元的基础上以0.1元为基数进行累加。当暂停信号stop为高电平时,c2c1c0停止计费,并显示当前费用。最后把c2c1c0信号给cost2~cost0,送至数码管译码显示。 系统模块图2-4如下:

合集下载

EDA课程设计报告--出租车计价器

EDA课程设计报告--出租车计价器

EDA课程设计报告--出租车计价器课程设计课程设计名称:出租车计价器专业班级学生姓名:学号:指导教师:课程设计时间:1 设计任务及要求出租车计价器根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并在行程中同步显示车费值。

从起步开始,行程3公里内,且等待累计时间2分钟内,起步费10元;3公里以外以每公里1.6元计费,等待累计时间2分钟外以每分钟1.5元计费。

并能显示行驶公里数、等待累计时间、总费用。

设计的主要技术指标:(1)计价范围:0—999.9元计价分辨率:0.1元(2)计程范围:0—99公里计程分辨率:1公里(3)计时范围:0—59分计时分辨率:1分本次设计中假设出租车的速度传感器具有出租车每行驶1Km提供1000个脉冲信号的特性。

当行驶速度小于等于6KM/h时为等待。

本设计的最终任务是显示出租车的等待时间和行驶里程,并计算出所需费用。

根据要求需要进行如下分工,首先要有一个分频模块(FPQ)产生系统工作用的基准信号1HZ,供系统中的有关模块计时用。

其次要有一个判断等待与否的模块(DDPB),再者就是要有计时和计程模块(DDSJ和LCJS),最后要有计费模块和显示译码模块(JFZ和YIMA)。

2设计原理及总体框图(1)设计总体框图图1总设计框图(2)设计总原理图图2设计总原理图设计总原理:测控FPGA芯片通过采集速度传感器脉冲信号WCLK进行行驶里程计算,利用外部脉冲信号CLK1产生标准时钟信号,用来计算等待时间,最后根据行驶里程、等待时间来计算计价值。

并用译码电路显示行驶里程、等待时间和计价值。

3 程序设计1.VHDL语言简单介绍VHDL语言(VHSIC Hardware Description Language,甚高速集成电路硬件描述语言)是一种设计、仿真、综合的标准硬件描述语言,是对可编程逻辑器件进行开发与设计的重要工具,其优点是:支持自上而下和基于库的设计,支持范围广,具有多层次描述系统硬件功能的能力。

EDA_出租车计价器03_上传

EDA_出租车计价器03_上传

课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 出租车计价器的设计初始条件:本设计利用QuartusⅡ软件编写VHDL代码,运用EDA实验箱上的FPGA、数码管、LED灯、拨码开关、3/8译码器、系统20MHz时钟等硬件资源,实现简易的出租车计价器的相关功能。

要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)1、课程设计工作量:2周。

2、技术要求:①设计一个出租车计价器。

要求显示行驶里程、停车时间和计费值。

②出租车的起步价为3元,当里程行驶到1km后,费用为4元;当里程行驶到1.5km后,费用为5元;,当里程行驶到2km后,费用为6元;当里程行驶到2.5km后,费用为7元;当里程行驶到3km后,费用为8元;此后每公里计费为0.7元。

当计费达到20元后,每公里加收50%的车费。

停车每达3分钟,增加0.7元。

3、查阅至少5篇参考文献。

按《武汉理工大学课程设计工作规范》要求撰写设计报告书。

全文用A4纸打印,图纸应符合绘图规范。

时间安排:1.2011 年1 月10 日集中,作课设具体实施计划与课程设计报告格式的要求说明。

2.2011 年1 月11 日,查阅相关资料,学习电路的工作原理。

3.2011 年1 月12 日至2011 年 1 月16 日,方案选择和程序设计设计。

4.2011 年1 月17 日至2011 年 1 月20 日,电路调试和设计说明书撰写。

5.2011 年1 月21 日上交课程设计成果及报告,同时进行答辩。

课设答疑地点:鉴主13楼电子科学与技术实验室。

指导教师签名:年月日系主任(或责任教师)签名:年月日摘要本文介绍了一种采用单片FPGA芯片进行出租车计费器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使出租车计费器体积更小功能更强大。

本设计实现了出租车计费器所需的一些基本功能,计费包括起步价、行车里程计费、等待时间计费,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。

多功能数字钟、出租车计费系统--EDA课程设计报告

多功能数字钟、出租车计费系统--EDA课程设计报告

E D A课程设计报告课程名称EDA技术课题名称多功能数字钟、出租车计费系统学院电气信息学院专业通信工程目录一、多功能数字钟的总体设计 (4)1.1多功能数字钟的理论设计 (4)1.2方案设计具体化 (4)二.出租车计费系统的逻辑功能实现 (5)2.1 系统的总体框图 (5)2.2多功能数字钟各功能实现的具体化 (5)2.2.1调节时间 (5)2.2.2时分秒的显示 (5)2.2.3整点报时 (6)三.多功能数字信号钟在VHDL语言中的功能实现 (6)四.仿真结果 (10)五.硬件仿真结果 (11)六、出租车计费系统的总体设计 (12)6.1 出租车计费系统理论设计 (12)6.2方案设计具体化 (12)七、出租车计费系统的逻辑功能实现 (14)7.1 系统的总体框图 (14)7.2 各模块功能的实现 (14)7.2.1记里程模块设计 (14)7.2.2计费模块设计 (15)7.2.3显示模块设计 (15)八、出租车计费系统的在VHDL语言中的实现 (16)8.1 计费记里程的功能实现 (16)8.2数码管显示的功能实现 (18)九.仿真结果 (19)十.结论 (20)十一.心得体会 (20)一、多功能数字钟的总体设计1.1多功能数字钟的理论设计多功能数字钟应该具有的功能有:显示时一分一秒、整点报时,小时和分钟可调等基本功能。

整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时。

需要注意的是,小时的范围是从0-23时。

1.2方案设计具体化在设计中为了显示的方便,分钟和秒钟可以用一个3位的二进制码显示十位,用一个四位的二进制码显示个位,对于小时因为它的范围是从0~23,所以可以用一个2位的二进制码显示十位,用4位二进制码显示个位。

设计中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号。

任务书及报告模板--出租车简易计费器设计VHDL语言

任务书及报告模板--出租车简易计费器设计VHDL语言

课程设计报告书题目出租车简易计费器设计课程设计任务书课题题目摘要----------------jifei---------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jifei isport ( clk,rst,en,en1:in std_logic;lc0,lc1,lc2,lc3:out std_logic_vector(3 downto 0);jj0,jj1,jj2,jj3:out std_logic_vector(3 downto 0));end jifei;architecture lab10_4 of jifei issignal Q00:std_logic_VECTOR(3 DOWNTO 0);--jifei0 signal Q01:std_logic_VECTOR(3 DOWNTO 0);--jifei1 signal Q02:std_logic_VECTOR(3 DOWNTO 0);--jifei2 signal Q03:std_logic_VECTOR(3 DOWNTO 0);--jifei3 signal Q1:integer range 0 to 10000;--JIZONGLUCHENG signal Q10:std_logic_VECTOR(3 DOWNTO 0);--lc0 signal Q11:std_logic_VECTOR(3 DOWNTO 0);--lc1 signal Q12:std_logic_VECTOR(3 DOWNTO 0);--lc2 signal Q13:std_logic_VECTOR(3 DOWNTO 0);--lc3 signal Q2:integer range 0 to 10000;--jidengdaishijianbeginprocess ( clk, rst)beginif clk'event and clk='1' thenif en='1' thenif en1='1' then --JILUCHENGQ1<=Q1+1;if Q10= "1001" THENQ10<="0000" ;IF Q11="1001" THENQ11<="0000";if Q12= "1001" THENQ12<="0000" ;IF Q13="1001"THENQ13<="0000";ELSEQ13<=Q13+1;END IF;ELSEQ12<=Q12+1;END IF;ELSEQ11<=Q11+1;END IF;ELSEQ10<=Q10+1;END IF; --JILUCHENGJIESUIF Q1<=3 THEN --JISUANLUCHENGFEIYONGQ00<="0101";ELSEif Q00= "1001" THENQ00<="0000" ;IF Q01="1001" THENQ01<="0000";if Q02= "1001" THENQ02<="0000" ;IF Q03="1001"THENQ03<="0000";ELSEQ03<=Q03+1;END IF;ELSEQ02<=Q02+1;END IF;ELSEQ01<=Q01+1;END IF;ELSEQ00<=Q00+1;END IF; --LUCHENG FEIYONG JISUANJIESUEND IF;ELSEQ2<=Q2+1;IF Q2>5 THEN --JISUANDENGDAISHIJANDFEIYONGif Q00= "1001" THENQ00<="0000" ;IF Q01="1001" THENQ01<="0000";if Q02= "1001" THENQ02<="0000" ;IF Q03="1001"THENQ03<="0000";ELSEQ03<=Q03+1;END IF;ELSEQ02<=Q02+1;END IF;ELSEQ01<=Q01+1;END IF;ELSEQ00<=Q00+1;END IF;END IF;END IF;END IF;END IF;IF RST='0' THENQ00<="0000";Q01<="0000";Q02<="0000";Q03<="0000";Q1<=0;Q2<=0;Q10<="0000";Q11<="0000";Q12<="0000";Q13<="0000";END IF;LC0<=Q10;LC1<=Q11;LC2<=Q12;LC3<=Q13;JJ0<=Q00;JJ1<=Q01;JJ2<=Q02;JJ3<=Q03;end process;end lab10_4;首行空两个中文字符;文字采用小四、宋体;行间距:多倍行距1.3;字数:200-400字左右关键词课题相关关键词,以分号间隔目录课程设计任务书............................................. 错误!未定义书签。

eda出租车计费器设计总结

eda出租车计费器设计总结

eda出租车计费器设计总结EDA出租车计费器设计总结引言在现代都市生活中,出租车已经成为人们出行的重要交通工具之一。

为了保证乘客和司机的权益,出租车计费器的设计显得尤为重要。

本文将对EDA出租车计费器的设计进行总结和说明。

一、计费模式的选择EDA出租车计费器采用了基于距离和时间的复合计费模式。

这种模式能够更准确地反映出乘客乘坐出租车的实际消费情况,同时也能够保证司机的收入。

二、计费规则的制定1. 距离计费规则:EDA出租车计费器根据乘客的行程距离进行计费。

起步价为10元,包含了2公里的距离。

超过2公里后,每增加1公里加收2元。

这样的计费规则既能够保证司机的基本收入,又能够避免乘客因短途行程而支付过高的费用。

2. 时间计费规则:在乘客在行程过程中遇到交通拥堵等情况时,EDA出租车计费器会根据乘客在车上的时间进行计费。

每分钟加收0.5元,以此来弥补司机因交通拥堵而浪费的时间和精力。

三、计费器的显示和操作1. 显示屏:EDA出租车计费器配备了大尺寸的液晶显示屏,能够清晰地显示乘客的行程信息和当前的计费金额。

显示屏还会提示乘客是否需要打印行程发票。

2. 操作按钮:计费器上设有简洁明了的操作按钮,乘客可以根据需要选择打印发票、查询行程历史等功能。

四、人性化设计1. 声音提示:EDA出租车计费器设置了人性化的声音提示功能,例如乘客上车后会有欢迎提示音,乘客下车后会有计费金额的语音播报等,这样能够提升乘客的使用体验。

2. 灵敏度调节:计费器的控制面板上还设置了灵敏度调节按钮,乘客可以根据自己的需求,自行调节按键的灵敏度,以便更好地操作计费器。

五、结算方式EDA出租车计费器支持多种支付方式,包括现金支付、刷卡支付、二维码支付等。

这样的设计能够方便乘客进行结算,提高支付的便捷性。

六、结论通过以上的总结和说明,可以看出EDA出租车计费器的设计考虑了乘客和司机的实际需求,既能够保证司机的收入,又能够提供方便快捷的支付方式给乘客。

基于VHDL语言的出租车计价器

基于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;。

用VHDL语言开发的出租车计费系统设计

用VHDL语言开发的出租车计费系统设计
0 引言
出租车计价系统较多的是利用单片机进行控制,但较易被私自改装,且
故障率相对较高,且不易升级;而FPGA具有高密度、可编程及有强大的软件支
持等特点,所以设计的产品具有功能强、可靠性高、易于修改等特点。

本文正是基于FPGA,设计了一种出租车的计费系统,它可以直观地显
示出租车行驶的里程和乘客应付的费用。

1 系统功能设计
所设计的计价器的计费标准为:车在行驶3 km以内,只收起步价9.0元;车行驶超过3 km后,按每公里2元计费。

行驶路程达到或超过9 km后,车费按
每公里3.0元开始计费。

车遇红灯或中途暂停时,每3分钟计0.5元。

若停止(rst)则车费清零,等待下一次计费的开始。

要求能够显示里程数和乘客应付的
费用,其中里程数精确到0.01 km,乘客应付的费用精确到0.1元,显示范围为:里程为0~99.99公里,费用为0~999.9元。

2 系统设计方案
基于FPGA的出租车计费系统的组成如3 各模块设计
设计FPGA控制部分,包括控制计价模块,BCD转换模块,动态扫描译
码模块以及分频模块。

采用混合设计的方法,各子部分用VHDL编程,顶层部
分用原理3.1 控制计价模块(jijia)
控制计价模块由里程计费模块、等待计费模块、总价模块组成。

里程计费模块,主要对传感器公里脉冲信号pulse计数(20m一个脉冲),
计算出租车本次交易行驶的路程以及里程费用。

每数到50个pulse为1 km,总。

基于EDA技术的出租车计费器设计说明

1 出租车计价器的设计概论1.1 概述计费器是以传感器为纽带,对输入信号进行分析处理,最后通过显示器显示出来。

计费器出现于上世纪的六十年代,真正应用于我国出租车市场则是八十年代初期,对于我国来说,当时也是交通业发展的一个初期,而计费器的出现无疑是给出租车行业的发展起到了无可替代的推动作用,毫不夸张的说,计费器是出租车发展的一个最大动力。

现在基本上全国所有的出租车都装备了计费器,据调查现在的出租车计费器大多采用一单片机为核心的计费系统,这种系统不仅价格实惠,而且制作方面也相对简单,但是它也有很多不足之处;而本次设计的一EDA技术为核心出租车计费器设计,它相对来说根据有优势,所以以后的出租车计费器的发展必定有EDA的一席之地,现在的行业发展也正说明了这一点,设计者们正在不断寻找一种能克服以单片机为主导的计费器的弊端的新的出租车计费器,而EDA现在已经成为设计者们设计的首选。

出租车计费器开始向数字可编程器件的方向发展。

传统的出租车计费器的不足点:1. 产品升级时间相对较长:传统的计费器所采用的是微处理控制器,它的很多功能都是要借助单片机来实现。

但单片机的程序并不能被很多芯片所接受,每种芯片的程序指令都不相同,因此对于设计者们来说开发较困难,时间也就相对拉得过长。

2. 计费方式不够灵活:当使用者每次要更改计费方式的时候都要重新烧录程序到芯片中去,这样就导致计费系统不够稳定,很难适应出租车行业的发展。

现在的基于EDA的出租车计费器的优点:1. 采用自顶向下的设计方法2. 采用系统早期仿真3. 多种设计描述方法4. 高度集成化的EDA开发系统5. PLD在线系统编程能力6. 可实现单片系统集成,减少产品体积,重量,综合成本7. 提高产品可靠性8. 提高产品的保密程度和竞争能力9. 降低电子产品的功耗10. 提高电子产品的工作速度这次设计我们所采纳的就是以EDA技术为基础的的出租车计费器设计,它主要由Altera公司的Cyclone型系列芯片EP1C6Q240C8及一些外部控制电路所构成。

出租车计费器的设计

目录1 引言 12 EDA技术简介 23 FPGA简介 34 总体设计 54.1 总体设计思想 54.1.1 分频模块 54.1.2控制模块 54.1.3计量模块 54.1.4译码显示模块 64.2 时序仿真图及延时分析 64.3 VHDL源代码 85 设计总结 11参考文献 121 引言随着出租车行业的发展,对出租车计费器的要求也越来越高,用户不仅要求计费器性能稳定,计费准确。

利用VHDL语言设计出租车计费系统,使其实现计费以及预置和模拟汽车启动、停止、等待等功能设计出动态扫描电路显示车费数目,突出了其作为硬件描述语言的良好的可能性、可移植性和易理解等优点。

此程序通过下载到芯片EP1K30TC144-3后,可应用于实际的出租车系统中。

本文针对FPGA器件,用EDA工具软件Max+P1usⅡ,设计了一种出租车的计价器,它可以以十进制数的形式,直观地显示出租车行驶的里程和乘客应付的费用,具有一定的实际应用价值。

2 EDA技术简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

现在对EDA的概念或范畴用得很广,包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。

目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。

例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。

出租车计费器VHDL语言

《数字逻辑电路》课程设计——出租车计费器的设计计算机学院软件工程1401赵雷3140608027出租车计费器的设计一、系统设计任务及要求(1)能实现计费功能,计费标准为:按行驶里程收费,起步价为7.00元,并在车行3千米后再按2元/千米,当总费用达到或超过40元时,每千米收费4元,客户端需要停车等待时按时间收费,计费单价每20秒1元。

(2)设计动态扫描电路:以十进制显示出租车行驶的里程与车费,在数码管上显示(前四个显示里程,后三个显示车费)。

(3)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。

(4)完成电路全部设计后,通过系统试验箱下载验证设计的正确性。

二、系统设计方案根据系统设计设计要求不难得知,整个出租车计费系统按功能主要分为速度选择模块、计程模块、计时模块、计费模块4个模块。

车速控制模块计数器模块译码模块动态扫描电路模块顶层原理图1.速度模块:通过对速度信号sp的判断,决定行使的路程,这里是通过速度信号来模拟一个变量的取值。

如kinside变量,其含义是行进100m所需的时钟周期数,然后每行进100m,则产生一个脉冲clkout来驱动计费模块。

VHDL语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Taxi_part1 isport(clk,reset,start,stop:in std_logic;sp :in std_logic_vector(2 downto 0);clkout :out std_logic);end Taxi_part1;architecture behavior of Taxi_part1 isbeginprocess(clk,reset,stop,start,sp)type state_type is(s0,s1);variable s_state:state_type;variable cnt:integer range 0 to 1400;variable kinside:integer range 0 to 1400;begincase sp iswhen "000"=> kinside:=0;when "001"=> kinside:=1400;when "010"=> kinside:=1200;when "011"=> kinside:=1000;when "100"=> kinside:=800;when "101"=> kinside:=600;when "110"=> kinside:=400;when "111"=> kinside:=200;end case;if(reset='1') then s_state:=s0;elsif(clk'event and clk='1') thencase s_state iswhen s0=>cnt:=0;clkout<='0';if(start='1') then s_state:=s1;else s_state:=s0;end if;when s1=>clkout<='0';if(stop='1') then s_state:=s0; --相当于无客户上车elsif(sp="000") then s_state:=s1; ---有客户上车,但车速位0,即客户刚上车还未起步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 behavior;2.计程模块:由于一个clkout信号代表行进100m,故通过对clkout计数,可以获得共行进的距离kmcount。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档