EDA出租车计价器的设计说明
出租车自动计费器EDA设计

6.7出租车自动计费器设计6.7.1 设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用三位数码管显示金额,最大值为999.9元,最小计价单元为0.1元,行程3公里内,且等待累计时间3分钟内,起步费为8元,超过3公里,以每公里1.6元计费,等待时间单价为每分钟1元。
用两位数码管显示总里程。
最大为99公里,用两位数码管显示等待时间,最大值为59。
6.7.2原理描述根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块计量模块、译码和动态扫描显示模块,其系统框图如图6-63所示,各模块功能如下:图6-63出租车自动计费器系统框图1分频模块分频模块对频率为240的输入脉冲进行分频,得到的频率为16,10和1的三种频率。
该模块产生频率信号用于计费,每个1脉冲为0.1元计费控制,10信号为1元的计费控制,16信号为1.6元计费控制。
2 计量控制模块计量控制模块是出租车自动计费器系统的主体部分,该模块主要完成等待计时功能、计价功能、计程功能,同时产生3分种的等待计时使能控制信号1, 行程 3公里外的使能控制信号0。
其中计价功能主要完成的任务是:行程 3公里内,且等待累计时间3分钟内,起步费为8元;3公里外以每公里1.6元计费,等待累计时间3分钟外以每分钟1元计费;计时功能主要完成的任务是:计算乘客的等待累计时间,计时器的量程为59分,满量程自动归零;计程功能主要完成的任务是:计算乘客所行驶的公里数。
计程器的量程为99公里,满量程自动归零。
3 译码显示模块该模块经过8选1选择器将计费数据(4位码)、计时数据(2位码)、计程数据(2位码)动态选择输出。
其中计费数据4~ 1~送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示,最大显示为59秒;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。
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简易出租车计价器设计

程后自动归零。
(4) 译码显示模块
Page 4
该模块经过8选1选择器将计费数据(4位BCD码)、
计时数据(2位BCD码)、计程数据(2位BCD码)动态
显示输出。其中计费数据jifei4~jifei1送入显示译码模块进
行译码,最后送至以百元、十元、元、角为单位对应的数
码管上显示,最大显示为999.9元;计时数据送入显示译
码模块进行译码,最后送至以分为单位对应的数码管上显
示,最大显示为59分;计程数据送入显示译码模块进行译
码,最后送至以公里为单位的数码管上显示,最大显示为
99公里。其系统组成框图如图2.1所示。
Page 5
时钟信 分频器 计费
号
显
等待信
号
控
计时
公里脉
制
示
冲
器
计费/
计程
复位
Page 6
3 出租车计费器的层次化设计方案
(1) 分频模块 分频模块对频率为240Hz的输入脉冲进行分频,产生频率为16Hz、 15Hz、1Hz的3种频率。该模块产生频率信号用于计费,每个1Hz脉 冲为0.1元计费控制,15Hz为1.5元的计费控制,16Hz信号1.6元计费 控制。 (2) 控制模块 计价器控制模块主要完成对计价器状态的控制。
Page 3
(3) 计量模块
计量模块完成计价、计时和计程功能。
计价部分:行程在3公里内,而且等待累计时间小于2分钟,起步费为
10元;3公里外以每公里按1.6元计费,等待累计时间超过2分钟按每分钟1.5
元计费。
计时部分:计算乘客的等待累计时间。计时器的量程为59分钟,满量
程后自动归零。
计程部分:计算乘客所行驶的公里数。计程器的量程为99千米, 满量
eda课程设计出租车计费器

eda课程设计出租车计费器计程车计费器近年来,随着出行需求的增加,计程车成为现代都市生活中不可或缺的交通工具。
然而,随之而来的问题是如何准确计算乘客的乘车费用,以避免价格争议和不公平的情况发生。
因此,设计一个高效准确的出租车计费器成为了必备的需求。
本文将介绍一个EDA课程设计的出租车计费器,并详细阐述其功能和设计理念。
首先,出租车计费器需要具备自动计算乘车时间和里程的功能。
乘客上车后,计费起始点记录下当前的时间和里程数,当乘客下车时,计费器会根据乘车时间和里程数自动计算出乘车费用。
这样的设计方案使得计费过程更加便捷,无需司机或乘客自行计算费用,提升了计费的准确性和公正性。
其次,出租车计费器还需要考虑不同的计费规则和策略。
在不同地区和国家,计费规则可能会有所不同。
例如,在某些地方,计费可能以里程为主,而在另一些地方,计费可能以时间为主。
因此,计费器需要能够灵活调整计费策略,以适应不同的地区和客户需求。
除了基本的计费功能,出租车计费器还可以增加一些附加功能,以提升用户体验。
例如,可以添加语音导航功能,为乘客提供实时导航路线,让乘客更加便捷地到达目的地。
同时,也可以添加多种支付方式,如现金、刷卡、移动支付等,以满足不同乘客的支付需求。
这些附加功能的添加可以为乘客提供更加便利的乘车体验,提升出租车的竞争力。
此外,出租车计费器还需要注重安全性和可靠性。
计费器需要具备防伪造和防篡改功能,以防止不法分子通过篡改计费器数据来进行欺诈行为。
同时,计费器需要保证数据的准确性和可靠性,以便相关部门对出租车运营情况进行监管和统计。
这些安全性和可靠性的保障是出租车计费器设计的重要组成部分。
总之,EDA课程设计的出租车计费器是一个非常重要的工具,它能够准确计算乘车费用,提升用户体验,保证计费的公正性和准确性。
设计一个高效准确的出租车计费器是一个复杂的过程,需要考虑到不同地区和国家的计费规则,同时也需要注重安全性和可靠性。
希望通过持续的研发和创新,能够设计出更加先进的出租车计费器,为乘客提供更好的出行体验。
EDA出租车计费器设计

1.出租车计费器的总体设计1.1 出租车计费设计该出租车计费器按下开关S1后开始计费和计里程数,分为白天和夜晚。
当拨动开关K2为0时,系统使用程序设置的起步价,白天起步价是3元,准行2公里,以后2元/公里;夜晚起步价是9元,准行2公里,以后3元/公里。
当拨动开关K2为1时,可由矩阵键盘输入起步价0~9元。
当路程大于200公里时,价格会在原来的基础上加50元。
1.2 基本设计思想时钟输入为一个1KHz的系统时钟,直流电机模块每转一圈输出一个脉冲信号给CPU,另外用按键模块的S1 来作为整个系统的复位按钮,每复位一次,计费器从头开始计费。
直流电机模块用来模拟出租车的车轮子,每转动一圈认为是行走1 米,所以每旋转1000 圈,认为车子前进1 公里。
系统设计是需要检测电机的转动情况,每转1000圈,分频模块输出一个下降沿信号。
车费和里程数在一个8位7段数码管上显示,前4位显示里程,后4位显示费用。
路程的单价由16*16点阵显示,拨动开关K1为0时,2元/公里,点阵显示2;拨动开关K2为1时,3元/公里,点阵显示3。
2.出租车计费器的总体实现2.1 系统总体框图该出租车计费器由一个VHDL程序构成,不同功能的实现分别是多个进程控制,主要进程有:分频模块进程:将每1000个电机脉冲转化为1个输出脉冲;计程模块进程:记录已行里程;计费模块进程:计算应付车费;4*4矩阵键盘进程:设置起步价;数码管显示进程:将已行里程和应付车费显示在数码管上; 16*16点阵显示进程:显示当前状态的每公里单价。
图2-1 系统框图2.2 程序流程图(2)计程模块图2-3 计程模块(3) 计费模块图2-4 计费模块2.3 出租车计费器各功能的实现(1)分频模块:直流电机motor每输出1000个脉冲,分频器glclk输出一个下降沿脉冲,表示电机已走1公里,meter1加1.if rst='0' thencount<=0;temp<='0';elsif (motor'event and motor='1') thenif count>499 thencount<=0;temp<=not temp;elsecount<=count+1;end if;end if;glclk<=temp;(2)计程模块:glclk的下降沿来临时,路程的个位加1,满9往高位进一,同时低位归0。
eda课程设计出租车计费器

eda课程设计出租车计费器一、引言随着城市化进程的加速,出租车已成为人们出行的重要交通工具之一。
出租车计费器作为出租车运营的核心设备,其设计的合理性和精确性直接关系到乘客和司机的利益。
因此,设计一款高效、准确的出租车计费器具有重要的实际意义。
本次EDA课程设计,我们以出租车计费器为研究对象,对其进行模拟设计。
二、计费器功能需求分析出租车计费器应具备以下基本功能:1.起步价计费:按照规定的起步价格进行计费。
2.里程计费:根据行驶里程计算费用,一般按每公里单价进行累加。
3.等待时间计费:在等待或红绿灯等情况下,应按设定的单价计算费用。
4.计费显示:将乘客应支付的总费用实时显示在计费器上。
5.声音提示:在计费过程中,应有声音提示,如“谢谢”等。
6.夜间服务费:在夜间或特殊时间段,可设定额外服务费用。
7.故障保护:当计费器出现故障时,应能够自动进入保护模式,停止计费。
三、计费器系统设计基于上述功能需求,我们设计了以下出租车计费器系统:1.主控模块:采用微控制器作为核心控制单元,负责接收传感器信号、计算费用、控制显示和声音输出等功能。
2.里程传感器:用于检测出租车的行驶里程,一般通过轮速传感器实现。
里程数据被传送到主控模块进行计算。
3.时间传感器:用于检测出租车的运行时间,可选用霍尔传感器等实现。
时间数据也需传送到主控模块进行处理。
4.显示模块:选用液晶显示屏(LCD),用于显示总费用、行驶里程、时间等信息。
通过主控模块驱动LCD显示。
5.声音提示模块:选用蜂鸣器作为声音输出设备,由主控模块控制发出提示音。
6.夜间服务费模块:通过软件编程实现夜间服务费的设定和计算。
主控模块根据时间传感器信号判断是否进入夜间模式。
7.故障保护模块:在系统检测到故障时,如计费器出现异常过热或长时间无里程/时间信号,主控模块将自动进入保护模式,停止计费并发出报警信号。
四、计费算法设计根据上述功能需求和系统设计,我们采用以下计费算法:1.起步价费用 = 起步价 * 计费时间(3分钟)2.里程费用 = 每公里单价 * 行驶里程3.等待时间费用 = 单价 * 等待时间(秒)4.总费用 = 起步价费用 + 里程费用 + 等待时间费用 + 夜间服务费(如有)5.每公里单价、起步价、等待时间单价、夜间服务费等参数均可根据实际需求进行设定。
EDA实训出租车计费

姓名满眼皆是繁华指导教师:2013 年 7 月 8 日实训题目:出租车计费器的设计1 系统设计1.1 设计要求1.1.1 设计任务设计并制作一台出租车计费器。
1.1.2 性能指标要求①用EDA实训仪的I/O设备和PLD芯片实现出租车计费器的设计。
②出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统首先显示起步价(如7.0),车行驶2km以内,只收起步价7元。
③出租车行驶超过2km后,按增加的每公里1.6元在7.0元的基础上增加。
④出租车行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
⑤出租车达到目的地后,(用一个按钮)计程和计费数据清零,为下一次计费开始。
1.2 设计思路及设计框图出租车计费器的整体结构包括:分频模块,计数模块,计费模块。
另外我还加了扩展功能:选择模块,计时模块。
不计价时,可以切换到显示时分秒。
这个功能需要选择模块和计时模块共同来实现。
通过分频模块产生一个脉冲信号模拟汽车的启动与停止,然后通过计数模块,计算出一共所行驶的路程,最后通过记价模块,将所行驶的路程计算出相对应的价钱。
计费显示起步价7元,2km之内为起步价,以后每1km在起步价7元的基础上增加1.6元;超过10km以后,每1km增加2.4元。
通过数学公式计算出费用,这就是费用计算模块。
结合生活中的出租车计费器,分别有3km以内,10km以内以及超过10Km 以后的计费标准。
我设计用拨码开关来实现清零与车速的转换,并通过数码管来显示路程与车费。
车轮每转一圈就是一个脉冲,因此,脉冲频率的快慢就是车速的快慢,这就是车速的计算;把车轮每转一圈 4米的话,每来一个脉冲路程就加4米,这就是路程的计算;当路程的百位向千位进位时就产生一个脉冲也就是路程又走了1公里。
于是便实现了车行驶3km以内,只收起步价7元。
行驶超过3km后,按每公里1.6元在7.0元的基础上增加。
行驶超过10km后(或超过20元路费),每公里加收50%的车费,即车费变为每公里2.4元。
eda出租车计费器设计总结

eda出租车计费器设计总结EDA出租车计费器设计总结引言在现代都市生活中,出租车已经成为人们出行的重要交通工具之一。
为了保证乘客和司机的权益,出租车计费器的设计显得尤为重要。
本文将对EDA出租车计费器的设计进行总结和说明。
一、计费模式的选择EDA出租车计费器采用了基于距离和时间的复合计费模式。
这种模式能够更准确地反映出乘客乘坐出租车的实际消费情况,同时也能够保证司机的收入。
二、计费规则的制定1. 距离计费规则:EDA出租车计费器根据乘客的行程距离进行计费。
起步价为10元,包含了2公里的距离。
超过2公里后,每增加1公里加收2元。
这样的计费规则既能够保证司机的基本收入,又能够避免乘客因短途行程而支付过高的费用。
2. 时间计费规则:在乘客在行程过程中遇到交通拥堵等情况时,EDA出租车计费器会根据乘客在车上的时间进行计费。
每分钟加收0.5元,以此来弥补司机因交通拥堵而浪费的时间和精力。
三、计费器的显示和操作1. 显示屏:EDA出租车计费器配备了大尺寸的液晶显示屏,能够清晰地显示乘客的行程信息和当前的计费金额。
显示屏还会提示乘客是否需要打印行程发票。
2. 操作按钮:计费器上设有简洁明了的操作按钮,乘客可以根据需要选择打印发票、查询行程历史等功能。
四、人性化设计1. 声音提示:EDA出租车计费器设置了人性化的声音提示功能,例如乘客上车后会有欢迎提示音,乘客下车后会有计费金额的语音播报等,这样能够提升乘客的使用体验。
2. 灵敏度调节:计费器的控制面板上还设置了灵敏度调节按钮,乘客可以根据自己的需求,自行调节按键的灵敏度,以便更好地操作计费器。
五、结算方式EDA出租车计费器支持多种支付方式,包括现金支付、刷卡支付、二维码支付等。
这样的设计能够方便乘客进行结算,提高支付的便捷性。
六、结论通过以上的总结和说明,可以看出EDA出租车计费器的设计考虑了乘客和司机的实际需求,既能够保证司机的收入,又能够提供方便快捷的支付方式给乘客。
EDA课程设计—出租车计价器

燕山大学EDA课程设计报告书题目:出租车计价器姓名:班级: 12级通信工程1班学号:成绩:一、设计题目及要求要求:1.2 Km起计价,起始价5元,每公里1.2元;2.传感器输出脉冲为0.5m/个(用适当频率的时钟信号代替即可);3.每0.5km改变一次显示,且钱数提前显示(例如运行到2Km时,应显示5.6元);4. 分别用三位数码管显示公里数和钱数,另可设置其他必要的按钮。
二、设计过程及内容1.题目分析该题模拟出租车计价器,显示路程及对应价格,要求每经0.5km更新显示,传感器输出脉冲为0.5m/个,即每经过1000个脉冲,路程增加了0.5km,价格增加0.6元。
其中,价格起始价5元,即需要价格在路程2km 之前显示固定值5元。
二者分别用三位数码管显示,分析可知,路程的小数位显示0或5,在5→0时,向个位进位;价格的小数位依次显示6、2、4、8、0,在6→2,8→4,4→0的转变中,产生进位,价格的个位从起始价5开始计数。
2.设计总述依据设计要求出租车计价器型可分为四个模块:分频模块,路程计数模块,价格计数模块和二者的显示模块。
①分频模块分频模块功能是每经过1000个脉冲,即0.5km,输出一个脉冲信号,并且产生一控制输出,该控制信号在2km前,输出为0,而在2km处及2km之后输出1,该控制信号控制价格计数器从2km处开始累加钱数。
②路程计数模块路程计数模块的功能是显示路程,路程包含了十位,个位和小数位,其中,小数位显示0或5,并在固定位置5→0处向个位进位,十位个位为常规0~99计数器。
③价格计数模块价格计数模块的功能是显示与路程对应的价格,且价格提前显示。
价格同样包含十位,个位和小数位,其中小数位依次显示6、2、8、4、0,并在6→2,8→4,4→0时,向个位产生进位,价格的个位为从5开始计数的10进制计数器,在9→0时产生向十位的进位,十位是常规的0~9计数器。
④路程、价格显示模块路程、价格显示模块的功能是使用试验箱中的6个数码管(编号为1~6的数码管)显示路程和价格,使用编号为3、2、1的数码管显示路程,使用编号为6、5、4的数码管显示价格。
EDA课程设计出租车计价器

目录1引言 (1)2 EDA技术简介 (2)3 VHDL语言简介 (3)4 设计要求及其背景 (5)5 系统设计 (6)5.1分频模块 (6)5.2 控制模块 (6)5.3 计量模块 (6)5.4 译码显示模块 (6)6 软件调试及硬件仿真 (8)6.1 软件调试 (8)6.2 硬件连接及调试 (10)7 结束语 (11)参考文献 (12)附录 (13)1引言出租车是现代人类的重要交通工具,而出租车的计费系统的安全性和先进性是人们普遍关心的问题,要求计费器性能稳定,计费准确,以及预防司机作弊行为等等都关系到乘客的切身利益。
因此,设计出符合人们普遍要求及放心的产品具有重要的意义。
本设计采用Altera公司的QuartusⅡ软件作为开发平台,以VHDL作为程序设计设计的语言,设计了出租车计费器系统的程序,并进行了程序仿真。
使其实现了计费、计时和记录行车里程的功能,并利用动态扫描显示车费总额。
计费系统在各大、中城市出租车中使用越来越广泛。
针对现有计费系统通用性差的缺陷,采用VHDL语言可以开发出租车计费系统,该计费系统的可靠性高,成本低,通用性强。
该系统在不改变硬件电路的前提下,具有可以重建系统的功能,采用完全相同电路结构,只要根据各地区的需求在VHDL程序中设置个别参数,就可以适应各地区出租车不同计费标准的需要,还可根据各地区需求增加其他功能。
2 EDA技术简介EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA 出租车计费器

目录第一章引言 (1)1.1 设计背景 (1)1.2 设计任务与要求 (1)1.21 设计任务 (1)1.22 设计要求 (1)第二章系统方案设计 (2)2.1 出租车计费器工作原理 (2)2.2 基本设计思想 (2)第三章主要功能的实现 (3)3.1 具体模块功能设计 (3)3.2 具体模块实现 (4)3.21 车速控制模块 (4)3.22 里程计数模块 (4)3.23 计费计数模块 (4)3.24 动态扫描模块 (4)3.3 总模块 (4)第四章程序调试及局部仿真结果 (6)4.1 车速控制模块仿真结果 (6)4.2 测试结果展示 (6)第五章结束语 (8)参考资料 (9)附件 (10)第一章引言1.1 设计背景随着出租车行业的发展,对出租车计费器的要求也越来越高。
最近几年出租车行业发展迅速,在全国有几千家出租车公司。
因此出租车计费器市场是庞大的。
而出租车计费器成为不可缺少的一部分。
信息社会的现代电子产品,性能越来越高,复杂度越来越大,更新步伐也越来越快。
实现这种进步的主要原因就是微电子技术和电子技术的发展。
而电子技术的发展后者的核心就是电子设计自动化EDA (Electronic Design Automatic)技术。
EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。
由美国国防部提出的VHDL(Very High Speed Integrated CIRCUIT HARDWARE DESCRIPTION Language)即超高速集成电路硬件描述语言,采用高层次的、自顶向下的设计方法来描述硬件,非常适合当前集成化、大规模的需要。
基于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及一些外部控制电路所构成。
EDA课程设计-简易出租车计价器设计

EDA 课程设计[RTX于2012/2/22]简易出租车计价器设计要求:●计价器按1.2元/公里计费,超过10公里后,则按1.8元/公里收费。
●起步价6元(3公里),超过3公里后,计价累加0.6元,10公里内以后每过0.5公里累加0.6元。
●过10公里后, 计价累加0.9元, 以后每过0.5公里累加0.9元。
●公里数4位数字显示,精确到0.1公里; 出租车计价4位数字显示,精确到0.1元。
●即:一.设计方案二.硬件部分:(1)硬件环境: 东南大学SE-5型EDA试验箱,其中核心元件是Altera公司的EPF10K10LC84-4):三.软件部分:(1)软件环境: Altera公司的MAX+plusII(2)程序源代码:1.顶层设计:2.各元件源代码:元件kms2money--kms2money.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;--0.1公里表示为1, 0.1元表示为1entity kms2money isport( rst, clk, enf, dispclk :in std_logic;data4 :out std_logic_vector(3 downto 0);ctl8 :out std_logic_vector(7 downto 0));--data4 :按dispclk的上升沿周期性的依次输出kms3,kms2,kms1,kms0,mon3,mon2,mon1,mon0--ctl8 :分别为控制动态扫描显示的8个LED的使能端,高电平使能end kms2money;architecture art_kms2money of kms2money issignal kms3,kms2,kms1,kms0:std_logic_vector(3 downto 0);--公里百位,十位,个位,十分位signal mon3,mon2,mon1,mon0:std_logic_vector(3 downto 0);--金额百位,十位,个位,十分位begin------------------------------------------------------------------------------------------------------ dynctl:process(dispclk,kms3,kms2,kms1,kms0,mon3,mon2,mon1,mon0) --动态显示--dispclk上升沿依次来临时data4依次为kms3,kms2,kms1,kms0,mon3,mon2,mon1,mon0,周而复始variable times:std_logic_vector(2 downto 0); --3位可表征8种状态,非'0'且非'1'除外beginif dispclk'event and dispclk='1' thentimes:=times+1;case times iswhen "000"=> data4<=kms3; ctl8<="10000000";--使能左起第1位LEDwhen "001"=> data4<=kms2; ctl8<="01000000";--使能左起第2位LEDwhen "010"=> data4<=kms1; ctl8<="00100000";--使能左起第3位LEDwhen "011"=> data4<=kms0; ctl8<="00010000";--使能左起第4位LEDwhen "100"=> data4<=mon3; ctl8<="00001000";--使能左起第5位LEDwhen "101"=> data4<=mon2; ctl8<="00000100";--使能左起第6位LEDwhen "110"=> data4<=mon1; ctl8<="00000010";--使能左起第7位LEDwhen "111"=> data4<=mon0; ctl8<="00000001";--使能左起第8位LEDwhen others=> data4<="ZZZZ";ctl8<="00000000";--无效为高阻都不选中end case;end if;end process;------------------------------------------------------------------------------------------------------ kmsdisp:process(rst,clk) --clk每来一次上升沿认为公里数加0.1公里,即加1beginif rst='1' then kms3<="0000";kms2<="0000";kms1<="0000";kms0<="0000";--初始数据elsif clk'event and clk='1' thenif enf='1' thenif kms0="1001" then --按十进制相加规律加1kms0<="0000";if kms1="1001" thenkms1<="0000";if kms2="1001" thenkms2<="0000";if kms3="1001" then kms3<="0000";else kms3<=kms3+1;end if;else kms2<=kms2+1;end if;else kms1<=kms1+1;end if;else kms0<=kms0+1;end if;end if;end if;end process;------------------------------------------------------------------------------------------------------ mondisp:process(rst,clk)variable kms: std_logic_vector(15 downto 0); --公里数的十六进制值或二进制值variable times:std_logic_vector(2 downto 0);--记录clk上升沿的次数,即有几个0.1公里beginif rst='1'then mon3<="0000";mon2<="0000";mon1<="0110";mon0<="0000";kms:=(others=>'0');times:="000";elsif clk'event and clk='1' thenif enf='1' thentimes:=times+1;if times=1 thenkms:=kms+5; --kms可能为0,5,10,..,6,65,...(5的倍数)--kms+1(0.1公里)与kms+5在价格的角度上看是等价的--XXX.1-XXX.5公里均按XXX.5公里看待,XXX.6-XXX.9公里均按(XXX.9+0.1)看待If kms<=30 then mon3<="0000";mon2<="0000";mon1<="0110";mon0<="0000";--不超过3公里,收起步价6.0元elsif kms<=100 then --超过3公里不超过10公里,每0.5公里金额加0.6元;--------------------------------------------------------if mon0>3 then --按十进制相加规律加6mon0<=mon0-4; --XXX4-XXX9加6后为YZW0-YZW5if mon1="1001" thenmon1<="0000";if mon2="1001" thenmon2<="0000";if mon3="1001" then mon3<="0000";else mon3<=mon3+1;end if;else mon2<=mon2+1;end if;else mon1<=mon1+1;end if;else mon0<=mon0+6; --XXX0-XXX3加6后为XXX6-XXX9end if;--------------------------------------------------------else --超过10公里,每0.5公里金额加0.9元;--------------------------------------------------------if mon0>0 then --按十进制相加规律加9mon0<=mon0-1; --XXX1-XXX9加9后为YZW0-YZW8if mon1="1001" thenmon1<="0000";if mon2="1001" thenmon2<="0000";if mon3="1001" then mon3<="0000";else mon3<=mon3+1;end if;else mon2<=mon2+1;end if;else mon1<=mon1+1;end if;else mon0<=mon0+9; --XXX0加9后为XXX9end if;--------------------------------------------------------end if;elsif times=5 then times:="000";--每计数5次clk就重新计数以便下次"循环"使用--times=0,2,3,4时参数不变,而只在times=1时一笔带过,被包含了.times=0与times=5是等效的end if;end if;end if;end process;------------------------------------------------------------------------------------------------------end art_kms2money;3.元件seg7bcd--seg7bcd.vhdlibrary ieee;use ieee.std_logic_1164.all;entity seg7BCD isport( turn_on :in std_logic;x :in std_logic_vector(3 downto 0);y :out std_logic_vector(6 downto 0));--声明:-- 共阴极7段显示-- turn_on :显示使能开关,高电平有效-- x :4位BCD码,x(3)为最高位,x(0)为最低位-- y :7段显示码,y(6)..y(0)对应g f e d c b aend seg7BCD;architecture art_seg7BCD of seg7BCD isbeginprocess(x,turn_on)beginif turn_on='1' thencase x is --"gfedcba"when "0000"=>y<="0111111";--0when "0001"=>y<="0000110";--1when "0010"=>y<="1011011";--2when "0011"=>y<="1001111";--3when "0100"=>y<="1100110";--4when "0101"=>y<="1101101";--5when "0110"=>y<="1111101";--6when "0111"=>y<="0000111";--7when "1000"=>y<="1111111";--8when "1001"=>y<="1101111";--9when others=>y<="ZZZZZZZ";--无效end case;else y<="0000000";--熄灭end if;end process;end art_seg7BCD;3.仿真结果4.管脚绑定Port Num Name---------------------------------------- [+]LedEN[7..0]LedEN7 80LedEN6 81LedEN5 83LedEN4 3LedEN3 72LedEN2 73LedEN1 78LedEN0 79---------------------------------------- [+]g2a[6..0]g2a6 6 gg2a5 7 fg2a4 8 eg2a3 9 dg2a2 10 cg2a1 11 bg2a0 16 a---------------------------------------- [+]inputCLK 1 CP1dispCLK 43 CP2RST 28 K1nPause 29 K25.下载程序---------------------------------------------------------------------------------------------------------------------- 本程序十分简易,仅供交流与学习。
EDA课程设计出租车计费器

EDA技术课程设计说明书出租车计费器设计院、部:电气与信息工程学院学生姓名:杨建雄指导教师:职称专业:电气工程及其自动化班级:电气本 1202班完成时刻: 2021年6月20日摘要本文介绍了一种采纳单片FPGA芯片进行出租车计费器的设计方式,要紧论述如何利用新兴的EDA器件取代传统的电子设计方式,利用FPGA的可编程性,简练而又多变的设计方式,缩短了研发周期,同时使出租车计费器体积更小功能更壮大。
本设计实现了出租车计费器所需的一些大体功能,计费包括起步价、行车里程计费、等待时刻计费,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。
要紧包括采纳了FPGA芯片,利用VHDL语言进行编程,使其具有了更强的移植性,加倍利于产品升级。
关键词:VHDL;计费器;QuartusⅡ;FPGA目录设计要求 ................................................. 错误!未定义书签。
一、方案论证与对照 ....................................... 错误!未定义书签。
、方案一.............................................. 错误!未定义书签。
、方案二.............................................. 错误!未定义书签。
、方案对照与选择...................................... 错误!未定义书签。
二、要紧模块设计 ......................................... 错误!未定义书签。
、速度模块............................................ 错误!未定义书签。
、计程模块............................................ 错误!未定义书签。
EDA课程设计出租车计价器

初始化:设置计价器 参数,如起步价、单 价、里程等
输入:获取乘客上车 地点、下车地点等信 息
计算:根据输入的信 息,计算车费
输出:显示车费结果, 并提示乘客支付
结束:乘客支付后, 结束计价器程序
计时模块设计
功能:记录出租车行驶时间
实现方法:使用定时器或系统时间 获取时间,并记录在数据库中
添加标题
添加标题
绿色化:EDA技术将更加绿色化,能够更 好地保护环境和资源
THANKS
汇报人:
EDA课程设计出租车计 价器
,a click to unlimited possibilities
汇报人:
目录
01 添 加 目 录 项 标 题 03 E D A 技 术 应 用 05 计 价 器 软 件 程 序 设 计 07 总 结 与 展 望
02 计 价 器 系 统 概 述 04 计 价 器 硬 件 电 路 设 计 06 计 价 器 系 统 测 试 与 验 证
计价器系统的基本组成
计价器硬件:包括显示屏、键盘、打印机等 计价器软件:包括操作系统、计价器应用软件等 数据存储:包括计价器数据、交易记录等 通信模块:用于与出租车管理系统进行数据传输和通信
计价器的工作原理
计价器通过GPS定位获取 车辆位置信息
根据行驶距离和时间计算 车费
计价器显示车费信息,包 括起步价、里程费、等待 费等
Part Four
计价器硬件电路设 计
硬件电路设计概述
计价器硬 件电路设 计主要包 括:主控 芯片、显 示屏、键 盘、传感 器等部分。
主控芯片 负责控制 整个系统 的运行, 包括数据 处理、显 示控制、 键盘输入 等。
显示屏用 于显示计 价信息, 如里程、 时间、金 额等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术课程设计任务书1 概述 (1)2 总体设计 (2)2.1 设计要求 (2)2.2 设计思路 (2)2.3 设计流程图 (2)2.4 总体设计封装图 (4)2.5 各信号说明 (4)3 模块设计 (5)3.1秒分频模块 (5)3.2控制模块 (5)3.3计量模块 (5)3.3.1计价部分 (5)3.3.2计时部分 (5)3.3.3计程部分 (5)3.4译码显示模块 (5)4程序调试运行 (6)5硬件验证 (8)5.1引脚锁定 (8)5.2硬件验证情况 (8)6 总结及体会 (9)参考文献 (10)附录(程序源代码) (11)随着我国国民经济生产总值的增加以及人民生活水平的提高,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普通的交通工具。
出租车计价器是出租车营运收费的专用智能化仪表,是使出租车市场规化、标准化的重要设备。
一种功能完备,简单易用,计量准确的出租车计价器是加强出租车行业管理,提高服务质量的必需品。
本设计采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路,得到一种出租车计价系统的软件结构,通过QuartusⅡ软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求。
该设计虽然功能简单,智能化水平比较低,但仍具有一定的实用性。
该设计是在VHDL的基础上对出租车计价器进行设计来实现其基本功能的,与以往的基于单片机的数模混合电路相比,FPGA具有稳定性好、抗干扰能力强、电路实现简单、程序简单等优点,且非常适合做为出租车计价器的控制核心,所以选择用VHDL来对计价器进行设计来实现其功能。
出租车计价器的实现将大大改善人们出行时因为讨价还价而带来的烦恼,从而使人们的心情比较愉悦。
本设计是对出租车计价器的四个模块进行分析的,综述如下:分频模块:分频模块是其它模块的基础,输入时钟选为32Hz,分频后的时钟频率为1Hz,为后续模块提供基本时钟。
等待时间模块:该模块针对乘客确认下车前的等待而言,比如堵车、中途下车的情况,通过1Hz脉冲计数,每一分钟计时加一,最大计时时间显示为99分钟。
路程模块:该模块是对车辆行驶路程进行计数,以1Hz时钟为基础,检测行程脉冲,路程模块中有部变量来判断路程,当大于3公里、20公里时,分别有相应的使能信号对此作出记录,最大路程显示为99公里。
计费模块:该模块是基于等待时间模块和路程模块对费用进行控制的。
通过部使能信号分别计算3公里以、3-20公里以及20公里以后的费用。
本设计是基于VHDL进行编程,然后在Qu artusⅡ进行波形仿真,实现出租车计价器的基本功能。
2 总体设计2.1 设计要求(1)起步价为8.00元,起步公里为3公里;(2)超过3公里,每公里按1元收费;(3)单程行驶里程超过20公里,每公里租价加收50%;(4)等候时间超过1分钟,每分钟按这公里的租价计算。
要求显示里程、计费及等候时间。
乘客上车后,按下启动键,开始计费,除非同一乘客往返用那个车,否则按下单程键,这样行驶里程超过20公里时,每公里加收50%,既每公里租费1.5元;计费显示为3位整数、1位小数。
2.2 设计思路输入2个时钟信号,分别模拟时间和路程。
对等待时间、路程计数,进而统计费用。
系统结构框图如图2-1。
图2-1自动计价器的系统方框图 上图中,计数器1对分频后的1Hz 脉冲计数,计数60次,计数器加1,对应等待时间,计数器2对车速脉冲计数,其上升沿到来计数加1,对应里程。
2.3 设计流程图设计流程图如图2-2所示。
控制器图2-2系统设计流程图乘客上车后,按下启动按钮,计价器开始工作,首先进入初始化状态,即计程从0开始,计费从8开始。
再根据单程信号判断是否为单程,进而确定计费方式。
单程:里程计数器开始计数,当路程超过3公里时,计费开始累加,按1元每公里计算,路程超过20公里时每公里1.5元。
当路程超过3公里有等待时,按下等待信号,每等待1分钟费用与当前计费方式相同。
往返:每公里1元,等待计费为每分钟1元。
乘客下车后,按下复位键,则所有计数器进入初始状态。
2.4 总体设计封装图总体设计封装图如图2-3所示。
图2-3 系统封装图2.5 各信号说明输入信号: clk:系统时钟信号;mile:车速时钟;start::启动信号,当start=1时,出租车启动,计数器开始计数;否则计数器停止计数;single:单程信号,单程时由司机输入;stop:等待信号,处于等待状态时由司机输入;输出信号:km1,km2:里程,单位为公里;min1,min2:等待时间,单位为分钟;price1,price2,price3,price4:费用,单位为元,其中price1表示小数位。
3 模块设计3.1秒分频模块秒分频模块对频率为240Hz的输入脉冲进行分频,得到的频率为16Hz,15Hz 和1Hz的三种频率。
该模块产生频率信号用于计费,每个1HZ脉冲为0.1元计费控制,15HZ信号为1.5元的计费控制,16Hz信号为1.6元计费控制。
3.2控制模块控制模块是系统的核心部分,对计价器的状态进行控制。
3.3计量模块计量模块完成计价、计时、计程功能。
3.3.1计价部分行程3公里,起步费为8元;3公里外以每公里1元计费,等待累计时间1分钟外以每分钟1元计费。
20公里外以每公里1.5元计费,等待累计时间1分钟外以每分钟1.5元计费。
计费数据送入显示译码模块进行译码,最后送至以百元、十元、元、角为单位对应的数码管上显示。
3.3.2计时部分计时部分用于计算乘客的等待累计时间。
计时器的量程为59分,满量程自动归零。
即时数据送入显示译码模块进行译码,最后送至以分为单位对应的数据管上显示。
3.3.3计程部分计程部分用于计算乘客所行使的公里数。
计程器的量程为99公里,满量程自动归零。
计程数据送入显示译码模块进行译码,最后送至以公里为单位对应的数据管上显示。
3.4译码显示模块译码显示模块完成计价、计时、计程数据显示。
该模块经过8选1选择器将计费数据(4位BCD码)、计时数据(2位BCD码)、计程数据(2位BCD码)动态选择输出。
其中计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;计时数据送入显示译码模块进行译码,最后送至分为单位对应的数码管上显示,最大显示为99分钟;计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。
4程序调试运行图4-1 单程行驶示意图启动键、单程键有效,由图4-1可知,3公里之计费显示为8元;3-20公里之间每公里1元累计;超过20公里每公里1.5元累计。
图4-2 单程行驶中途等待示意图启动键、单程键有效,行驶一段时间等待信号有效,等待后继续行驶。
由图4-2可知,3公里之计费显示8元,3-20公里之间每公里1元累加,中间等待信号有效,每等待一分钟按此时每公里的费用计算,里程计数器停止计数,等待时间到,里程计数器继续计数。
图4-3 单程行驶到达目的地示意图启动键、单程键有效,乘客到达目的地下车。
如图4-3所示。
图4-4 双程行驶示意图启动键有效,乘客乘车完成双程行驶。
由图4-4可知,3公里之计费显示为8元;3-20公里之间每公里1元累计;超过20公里每公里1元累计。
5硬件验证5.1引脚锁定做硬件验证之前需要清楚实验板上各键与各信号的情况,参照资料得出本设计中各引脚的对应情况如下,本设计下载时选择模式5。
引脚锁定如图5-1。
图5-1 引脚锁定图5.2硬件验证情况做好引脚锁定后,打开硬件箱的电源,数码管有正确的数字显示,硬件箱与计算机开始验证。
操作运行实验结果完全符合要求。
通过仿真验证表明,本文所设计的出租车计价器能够正常地显示行驶的里程数和乘客应付的费用,符合预定的计费标准和功能要求。
6 总结及体会通过为期一周的课程设计,出租车计价器系统的设计已基本完成,能按预期的效果模拟汽车启动、等待、停止、复位等功能,并显示车费数目等待时间及行驶路程。
出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及CPLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。
在本次设计中还存在很多不足,可以改进的地方目前有以下几点:一、该设计虽然实现了基本的计费和计程,但是很多问题并没有解决,如本设计只实现了一种车速的计费。
若要实现出租车的不同档位下的计程计费,还需要进一步讨论。
二、该设计智能化水平较低,启动、等待、复位等信号需要人为输入,若在实际中出现操作偏差,会导致计费不准确。
通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并在使用过程中对它有了更深的体会。
对编程过程中可能遇到的问题有了一定的了解和解决方法,在理论学习和编程练习以及硬件测试方面都获得了较大的收获,对于今后进行程序设计有很大的帮助。
期间要感我的老师的悉心指导以及同学们的大力帮助。
在此次设计过程中确实遇到了很多困难,但是再大的困难只要有勇气去征服它,那就不是什么困难了。
此外,通过本次课程设计,我还有了一定的对学习上的体会,知识的真实魅力其实是在于它因为应用于实践中而产生的实际的生产价值,或者说是给人们带来的巨大的方便,因为它有用了所以我们学起来会更有动力,更能往深里去研究。
参考文献[1] Volei A. Pedroni. 《VHDL数字电路设计教程》.电子工业,2010.[2] 松,黄继业.《EDA技术实用教程》.科学,2010.6.[3] 江海.《EDA技术课程设计》.华中科技大学,2009.5.[3] 鲍可进,念强,不贿等.《数字逻辑电路设计》.清华大学,2004.[4] 王道宪,贺名臣,伟.《VHDL电路设计技术》.国防工业,2004.[5] 黄仁欣.《EDA技术实用教程》.清华大学,2006.[6] 徐向民.《数字系统设计及VHDL实践》.机械工业,2007.附录(程序源代码)出租车计价器源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hu isport(clk:in std_logic;start,single:in std_logic;stop,mile:in std_logic;min1,min2:out std_logic_vector(3 downto 0);km1,km2:out std_logic_vector(3 downto 0);price1,price2,price3,price4:out std_logic_vector(3 downto 0)); end;architecture bhv of hu issignal start_r:std_logic;signal clk1hz:std_logic;signal q:integer range 0 to 299;signal second:integer range 0 to 59;signal p1,p2,p3,p4:std_logic_vector(3 downto 0);signal k1,k2:std_logic_vector(3 downto 0);signal m1,m2:std_logic_vector(3 downto 0);signal en0,en1,f_wait,f:std_logic;beginmin1<=m1; min2<=m2;km1<=k1; km2<=k2;price1<=p1; price2<=p2;price3<=p3; price4<=p4;U1:process(clk)beginif(clk'event and clk='1')thenif q=255 thenq<=0;clk1hz<='1';elseq<=q+1;clk1hz<='0';end if;end if;end process;U2:process(clk1hz)beginif start='0' thenf_wait<='0';m1<="0000";m2<="0000";elsif(clk1hz'event and clk1hz='1')then if stop='1' thenif second=6 thensecond<=0;f_wait<='1';if m1="1001" thenm1<="0000";if m2="0101" thenm2<="0000";elsem2<=m2+'1';end if;elsem1<=m1+'1';end if;elsef_wait<='0';second<=second+1;end if;elsef_wait<='0';end if;end if;end process;U3:process(clk1hz)beginif(clk1hz'event and clk1hz='1')thenstart_r<=start;end if;end process;f<=f_wait when stop='1' elsemile when en0='1' else'0';U4:process(start,mile)beginif start='0' thenk1<="0000"; k2<="0000";en0<='0'; en1<='0';elsif(mile'event and mile='1')thenif stop='0' thenif k1="1001" thenk1<="0000";if k2="1001" thenk2<="0000";elsek2<=k2+'1';end if;elsek1<=k1+'1';end if;if k1="0011" thenen0<='1';end if;if k2="0001" and k1="1001" and single='1' then en1<='1';end if;elsek1<=k1;k2<=k2;end if;end if;end process;U5:process(start,f)beginif start='0' thenp1<="0000";p2<="0000";p3<="0000";p4<="0000";elsif start='1' and start_r='0' then p1<="0000";p2<="1000";p3<="0000";p4<="0000";elsif(f'event and f='1')thenif en1='0' thenif p2="1001" thenp2<="0000";if p3="1001" thenp3<="0000";if p4="1001" thenp4<="0000";elsep4<=p4+'1';end if;elsep3<=p3+'1';end if;elsep2<=p2+'1';end if;elseif(p1="0101" and p2="1000") or p2="1001" then if(p2="1001" and p1="0101")thenp1<="0000";p2<="0001";elsif(p2="1001" and p1="0000") thenp1<="0101";p2<="0000";elsif(p2="1000" and p1="0101")thenp1<="0000";p2<="0000";end if;if p3="1001" thenp3<="0000";if p4="1001" thenp4<="0000";elsep4<=p4+'1';end if;elsep3<=p3+'1';end if;elsif p1="0000" thenp1<="0101";p2<=p2+'1';elsep1<="0000";p2<=p2+"0010";end if;end if;end if;end process;end bhv;。