1、出租车计费器的FPGA实现含VHDL代码可编程逻辑器件电路设计课程设计报告出租车计费器的FPGA实现华南农业大学工程学院摘 要出租车计费系统利用VHDL语言,以MAX+PLUS软件作为开发平台而设计。系统包括五大模块主控模块、分频模块、里程模块、计费模块和显示模块;预置和模拟汽车启动、停止、计费、暂停等功能,并动态扫描显示车费与里程。 关键词: 出租车计费系统 VHDL语言 MAX+PLUS FPGA 数字系统1方案比较与选择1.1方案一图1图2出租车计费器方案一原理框图1.1.1出租车计费器方案一原理基于CPLD/FPGA的出租车的组成如图1所示。各部分主要的功能如下:(1)A计数器对车轮的
2、传感器送来的脉冲信号进行计数(每转一圈送一个脉冲)。不同车型的车轮可能不一样,通过“设置1”对车型做出选择,以实现对不同车型直径的车进行调整。(2)B计数器对百米脉冲进行累加,并输出实际的公里数的BCD码给出译码动态扫描模块。每计,满500送出一个脉冲给出C计数器。“设置2”实现起步公里数预制。(3)C计数器实现步长可变(即单价可调)的累加计数,每500米计费一次。“设置3”用来完成超价加费,起步价预制等。(4)译码/动态扫描见路程与费用的数字译码后动态扫描的方式驱动数码管。(5)数码管显示将公里数和计费金额平均用四位数码管显示(三位整数,1为小数)1.1.2出租车计费器方案一优点根据车型的车
3、轮直径来进行脉冲调整,因为实际车轮大小并非完全一致,需要根据实际大小而重新设置;起步价调整。起步价调整解决了由于地域的同步而导致起步价的不同,从而是出租车计费系统有更广和广阔的市场,同时也解决了由于起步价调整而更换计费系统的问题。1.1.2出租车计费器方案一缺点计费系统的精度不高,里程计费精度太低,在设计过程中设置车轮的直径过于复杂,不利于系统的完成。1.2方案二图2出租车计费器方案二原理框图1.2.1出租车计费器方案二原理 基于FPGA设计的出租车计费器系统如图2所示,各模块功能如下:(1)分频模块:分频模块主要采用的是加法分频电路,该分频器为十分频电路,并且分频器带有“开始“/”“清零”端
4、(ENABLE3为高电平是开始),将分频得CLK2用于里程计费模块的脉冲。(2)车态模块:车态模块主要利用状态机原理。将出租车计费系统设置成四个状态,STATE=“00”实现的是清零操作;STATE=“01”是显示在行驶3km以内,只收起步价7.00元状态;STATE=“10”是车行驶超过3km后,按每公里2.2元计费;STATE=“11”行驶路程达到或超过9km后(车费达到20元),每公里加收50%的车费,车费变成按每公里3.3元开始计费。并把每一状态传输给计费模块。(3)控制模块:控制模块属于整个出租车系统的顶层文件,负责这个系统,T_CLR是清零键,即归零显示;T_STO是暂停信号;T_
5、ENABLE是使能信号,是启动键,T_ENABLE=0时启动计费器。(4)里程模块:里程模块的一个基准时钟,实现加0.1公里,并将十进制数转化成四位BCD码,传输给显示电路显示。(5)计费模块:计费模块接收来自车态模块的状态信号和分频电路的十分频脉冲作基准时钟。计费模块设置了四个状态,第一个状态保持属于清零状态,第二状态保持显示“007.0”,第三个状态实现一个脉冲加2.2,第四个状态是一个脉冲加3.3。将十进制的计费转化成BCD传输给显示模块。(6)显示模块:显示模块是由七段LED数码译码和动态扫描两部分组成。采用的是共阴极数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费
6、毒药用一位小数点来表示,所以须要设置一个控制小数点的变量,即程序中的DP。这段程序所示的是在数码管的第二、六个数码管后面的显示小数点,实现了路程和车费都用1位小数点表示的功能,要主要的是选择的扫描频率不合适,可能会出现小数点闪动的情况。但只要扫描频率不少于24HZ,人眼就感觉不到数码管的闪烁。数码管控制及译码显示模块将BCD信号的输入用七段数码管显示,由七段发光二极管组成数码显示,利用字段的不同组合,可表示0-9十个数字。1.2.2出租车计费器方案二优点 方案二继承了方案一优点,并有效的解决了方案一的精度低的缺点,并且在原件设计上容易实现。1.2.2出租车计费器方案二缺点 系统的模块过多,不利
7、于顶层文件的实现。1.2.2出租车计费器方案二可行性 系统各个模块的设计相对于方案一容易,特别是分频模块和车态模块。 2.底层文件仿真与分析2.1出租车计费器系统电路图3出租车计费器系统电路2.1.1分频模块分析及仿真图 分频电路实现的功能是:将里程模块的基准时钟进行十分频,即CLK0每来四个脉冲,该模块即将一个脉冲发出,作为计费模块的基准时钟,如图4所示。图4分频模块仿真图2.1.2车态模块分析及仿真当车处于暂停时,车费保持值不变,定义此时ST的状态值为00;当车程小于3公里时,定义此时ST的状态值为01;车程大于3公里小于9公里时,定义此时ST的状态值为10;车程大于9公里时,定义此时ST
8、的状态值为11,如图5所示。图5车态模块仿真图2.1.3计费模块仿真当车程在3公里内时车费保持7元不变;当车程大于3公里小于9公里时,每来一个驱动脉冲相当于车前进了1公里,即车费要加2.2元;当车程大于9公里每来一个脉冲车费要加3.3元,如图6所示。图6计费模块仿真图2.1.4里程模块分析及仿真里程模块是每一个脉冲到来,相当于车向前走了0.1公里,所以车程自加一公里,如图7所示。图7里程模块仿真图2.1.5显示模块仿真采用8位动态扫描显示车费和车程,其中DI1-DI4是计费输入,DI5DI6是里程输入,WEI是接入74LS138译码器,SG是数码管的七段显示接口。当DI1-DI8输入“4175
9、3452”,WEI=0时,第一个数码管应该显示4,对应数码管译码为“1100110”;当WEI=1时,第二个数码管应该显示1,对应数码管译码“0000110”,转为十进制是6,如图8所示。图8显示模块仿真图2.1.6顶层文件仿真与分析 顶层文件为出租车计费器控制模块,有五个输入端口,分别是T_CLR清零信号,低电平清零;T_ENABLE为使能信号,当使能信号为高电平时,开始计费,里程;T_STO为暂停信号,高电平有效;T_WEI是控制74LS138译码器的控制端,进行数码管的位选择,T_SG是控制数码管的段,实现数码管显示内容;T_DOT是第二位与第六位的小数点段,如图9、图10所示。图9顶层
10、文件仿真图图10顶层文件仿真图局部放大图4.硬件验证分析程序代码在MAXPLUSII成功编写和仿真完毕,然后拷入FPGA。硬件验证步骤及遇到的问题:(1)装FPGA实验箱驱动。由于实验前没有装驱动,结果当configure时,电脑显programing hardware is busy。(2)在配置的时候 ,应该注意 3 . sof文件用于利用编程电缆 ByteBlaster进行配置 .而 3 . pof用于配置 EPROM. (EPROM只能写入一次 ),所以在设计的时候 ,线可用编程电缆调试无误后 ,在写入 EPROM中.(3)代码下载成功后,发现数码管不能显示。原因是:把数码管的引脚在显
11、示模块设置,而真正下载到实验箱的代码是顶层模块,导致数码管毫无显示。正确是将端口设置全部设置在顶层模块中。(4)在动态扫描中,小数点设置成了动态扫描的障碍。解决方法是,将DP独立设置一位,不需要动态扫描。因为小数点是不变的。计费与里程的时钟不同步,导致计费和里程显示不同步。出现,里程显示不变化,而计费开始。(5)当使能信号开始时,并非显示000.0 007.0,有乱码出现的情况,解决方法是设置初始化代码。总体看来,这次硬件调试是很成功的,虽然中间遇到困难,都被一一解决,收获很大。5.课程设计心得这次课程设计中,我们主要是运用VHDL语言设计了一个出租车计费器,并且用层次化的设计方法来实现这个电
12、路。在程序编写结束后,我们还对该程序进行了调试, 能按预期的效果进行模拟汽车启动、停止、暂停等功能,基本完成课程设计的要求。通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并通过使用对它有了更深的体会。对于编程过程中可能遇到的问题有了一定的了解,也明白了其中的一些注意事项,对于下次进行编程设计有很大的帮助和提高。这次课程设计的最大收获在于我们学会了如何在软件仿真成功的基础上在实验箱上调试出我们所要的结果。总之,这次实验不仅仅加强了我的动手编程能力,也大大加强了团队合作以及设计能力,使我在理论学习和编程练习方面都获得了较大的收获AbstractTaxi billing system
13、using VHDL language, in order to MAX + PLUS software is designed as a development platform. System consists of five modules - main control module, sub-frequency module, mileage module, billing module and display module; presets and analog auto start, stop, billing, and pause functions, and dynamical
14、ly scan shows fare and mileage.Keywords: Taxi billing system VHDLlanguage MAXPLUS FPGA digital system参考文献1.潘松,黄继业.EDA技术实用教程.科学出版社.2005.2:145156.2.候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学.2004.11:4548.附录(源代码)一、10分频模块源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fenpin
15、IS -10分频模块 PORT(CLK0:IN STD_LOGIC; FOUT:OUT STD_LOGIC; ENABLE3:IN STD_LOGIC);END fenpin;ARCHITECTURE ONE OF fenpin ISBEGIN PROCESS(CLK0,ENABLE3) VARIABLE CNT:STD_LOGIC_VECTOR(3 DOWNTO 0);-变量cnt VARIABLE FULL :STD_LOGIC; BEGIN IF ENABLE3=0 THEN CNT:=1001; ELSIF CLK0EVENT AND CLK0=1 THEN -一个基准时钟为0.1公里
16、 IF CNT=1001 THEN CNT:=0000 ; FULL:=1; ELSE CNT:=CNT+1; FULL:=0; END IF; END IF;FOUT0); ELSIF CLKEVENT AND CLK=1 THEN IF STO=1 THEN STATE:=00;CQI:=CQI;-暂停 ELSIF ENABLE =1 THEN CQI:=CQI+1; IF CQI30 AND CQI=90 THEN STATE:=10;-大于3公里小于9公里 ELSE STATE:=11;-大于9公里 END IF; END IF; END IF;STQ1:=Q1;Q2:=Q2;Q3:=
17、Q3;Q4:=Q4; -停止状态时,车费保持不变 WHEN 01= Q1:=0000;Q2:=0111;Q3:=0000;Q4:=0000;-小于3公里时显示007.0元 WHEN 10= IF Q11000 THEN -大于3公里小于9公里时车费各位显示 Q1:=Q1+2; -每来一个脉冲,相当于前进1公里,车费加2.2元 IF Q21000 THEN Q2:=Q2+2; ELSE Q2:=Q2-8; IF Q31001 THEN Q3:=Q3+1; ELSE Q3:=0000; IF Q41001 THEN Q4:=Q4+1; ELSE Q4:=0000; END IF; END IF;
18、END IF; ELSE Q1:=0000; IF Q20111 THEN Q2:=Q2+3; ELSE Q2:=Q2-7; IF Q31001 THEN Q3:=Q3+1; ELSE Q3:=0000; IF Q4 IF Q10111 THEN -车程大于9公里时车费各位显示,每来一个脉冲,车费加3.3元 Q1:=Q1+3; IF Q20111 THEN Q2:=Q2+3; ELSE Q2:=Q2-7; IF Q31001 THEN Q3:=Q3+1; ELSE Q3:=0000; IF Q41001 THEN Q4:=Q4+1; ELSE Q4:=0000; END IF; END IF;
19、 END IF; ELSE Q1:=Q1-7; IF Q20101 THEN Q2:=Q2+4; ELSE Q2:=Q2-6; IF Q31001 THEN Q3:=Q3+1; ELSE Q3:=0000; IF Q4NULL;END CASE;END IF;END IF;C1=Q1;C2=Q2;C3=Q3;C4=Q4;END PROCESS;END ONE;四、计程模块源代码USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jichen IS -计算路程的模块 PORT(CLK_CLK:IN STD_LOGI
20、C; -一个脉冲来相当于走了0.1公里 CLR2:IN STD_LOGIC; -清零信号 ST1:IN STD_LOGIC; ENABLE1:IN STD_LOGIC; C5:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C7:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); C8:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-以上4位为路程的四位显示位END jichen;ARCHITECTURE ONE OF jichen ISBEGIN PROCESS(
21、CLK_CLK,CLR2,ST1,ENABLE1) VARIABLE Q5: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE Q6: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE Q7: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE Q8: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR2=0 THEN Q5:=0000;Q6:=0000;Q7:=0000;Q8:=0000; ELSIF CLK_CLKEVENT AND CLK_CLK=1 THEN IF ST1
22、=1 THEN Q5:=Q5;Q6:=Q6;Q7:=Q7;Q8:=Q8;-如果停止,保持原来路程 ELSIF ENABLE1 =1 THEN-计费使能信号 IF Q51001THEN Q5:=Q5+1;-来一个时钟,路程加0,1公里 ELSE Q5:=0000; IF Q61001 THEN Q6:=Q6+1; ELSE Q6:=0000; IF Q71001 THEN Q7:=Q7+1; ELSE Q7:=0000; IF Q81001 THEN Q8:=Q8+1; END IF; END IF; END IF; END IF; END IF; END IF;C5=Q5;C6=Q6;C7=Q
23、7;C8=Q8;END PROCESS;END ONE;五、显示模块源代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY display IS -8位数码管动态显示模块 PORT(DI1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-以上四位为车费 DI5:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI6:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI7:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DI8:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-以上四位为路程 CLK2:IN STD_LOGIC; SG:OUT STD_LOGIC_VECTOR(6 DOWNTO
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1