资源描述
吉林大学珠海学院 毕 业 设 计基于FPGA的出租车计费器系统 的设计系 别:电子信息系专 业 名 称:电子信息科学与技术学 生 姓 名:学 号:指导教师姓名、职称:完成日期 2010 年 5 月 1日 2吉林大学珠海学院本科毕业论文(设计)开题报告选 题基于FPGA的出租车计费器系统的设计院 系电子信息系专 业电子信息科学与技术学生姓名指导教师本选题的意义及国内外发展状况: 由于现场可编程逻辑阵列FPGA具有开发简单、静态可重复编程和动态再系统编程等特点,已经成为当今应用最广泛的可编程专用集成电路之一。随着微电子技术的迅猛发展,速度更快、集成度更高的FPGA不断出现,芯片上包含的资源也越来越丰富,可实现的功能越来越强,这使得FPGA在电子电路设计中扮演的角色越来越重要。我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打发票和语音提示、按时间自主变动单价等功能。随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。在国内外,现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。研究内容:一:FPGA的概述。二:计费器总体结构与基本原理。三:FPGA的硬件设计。四:计费器系统的软件设计。五:系统仿真。研究方法、手段及步骤:1. 原理图设计:针对本设计进行相关硬件的原理设计,配合查阅网上资料2. 用Protel软件绘制原理图3. 用VHDL语言进行软件设计4. 用MAX+PLUS对出租车计费系统进行仿真参考文献:1 金西.VHDL与复杂数字系统设计M.西安:西安电子科技大学出版社,2003:107-150.2 高有堂.EDA技术及应用实践M.北京:清华大学出版社,2006:96-152.3 赵曙光,郭万有,杨颂华等.可编程逻辑器件原理、开发与应用M.西安:西安科技大学出版社,2006:56-158.4 胡振华.VHDL与FPGA设计M.北京:中国铁道出版社,2003:127-1545 刘明业,蒋敬旗,刁岚松译.硬件描述语言VERILOGM.北京:清华大学出版社,2001:89-106.6 王振红.综合电子设计与实践M.北京:清华大学出版社出版, 2005:124-145.7 王诚,吴继华,范丽珍等.ALEARA FPGA/CPLD设计(高级篇)M.北京:人民邮电出版社,2005:54-69.8 顾斌,赵明忠,姜志鹏等.数字电路EDA设计M.电子科技大学出版社,2004:263-267.9 周立功.ARM嵌入式系统基础教程M.北京:航空航天大学出版社,2005:5-22.10 周立功,夏宇闻单片机与CPLD综合应用技术M.北京:航空航天大学出版社,2003:79-98.11 求是科技.CPLD/FPGA应用开发技术与工程实践M.北京:人民邮电出版社2005:129-156.12 曹昕燕,周凤臣,捏春燕.EDA技术实验与课程设计M.北京:清华大学出版社,2006:125-145.13 Xilinx. Using Block RAM in Spartan-3 Generation FPGAsM.2005.3. 2基于FPGA的出租车计费器系统的设计摘 要随着可编程逻辑器件设计技术的发展,每个逻辑器件中门电路的数量越来越多,一个逻辑器件就可以完成本来要由很多分立逻辑器件和存储芯片完成的功能。这样做减少了系统的功耗和成本,提高了性能和可靠性。FPGA就是目前最受欢迎的可编程逻辑器件之一。该系统利用VHDL语言、PLD设计出租车计费系统,以MAX+PLUS软件作为开发平台,设计了出租车计费器系统程序并进行了程序仿真。使其实现计费以及预置和模拟汽车启动、停止、暂停等功能,并动态扫描显示车费数目关键词: FPGA, 出租车计费器,MAX+PLUS,VHDL语言3The designs of the rental car costs system on FPGAAbstractWith the development of programmable logic device (PLD) design technology, the number of logic gate in every logic device increases dramatically. The logic device can realize the functions which can also be fulfilled by many discrete devices and memory chips. The usage of PLD can reduce the power dissipation and cost of the system. It can also improve the performance and reliability. Field Programmable Gate Array (FPGA) is one of the most popular programmable logic devices. This system using the VHDL language, PLD design rental car costs the system, develops the platform by the MAX+PLUSsoftware achievement, has designed the rental car fare register system program and has carried on the procedure simulation. Causes its realization to cost as well as the initialization and the simulation automobile starts, stops, function and so on suspension, and dynamic scanning demonstration fare number.Keywords:FPGA;The rental car costs the system;MAX+PLUS;VHDL language4目 录前 言1第一章 绪 论31.1 FPGA的概述31.2 FPGA 的优越性31.3 EDA发展概况41.4 课题设计意义7第二章 总体结构与工作原理92.1 FPGA结构92.2 FPGA设计流程92.3 FPGA的硬件结构图102.4 出租车计费工作原理112.5 出租车计费器系统软件结构图11第三章 基于FPGA的硬件设计123.1 电源电路设计123.2 下载配置的电路设计123.3 FPGA芯片及其外围电路设计133.3.1 FPGA芯片133.3.2 按键和LED143.3.3 复位143.3.4 外部时钟153.3.5 滤波电容153.3.6 用户扩展接口15第四章 出租车计费器系统的软件设计174.1 系统的总体框图174.2 程序流程图184.3 系统各功能模块的实现184.3.1 信号输入模块JIFEI的实现184.3.2 数据转换模块X的实现194.3.3 显示模块XXX1的实现194.3.4 数据选择模块SE的实现204.3.5 数码管译码模块DI的实现20第五章 系统仿真215.1 信号输入模块X的仿真结果215.2 数据转换模块JIFEI的仿真结果215.3 显示模块XXX1的仿真结果225.4 数据选择模块SE的结果验证225.5 数码管译码模块DI的结果验证22结 论24附录25致 谢356前 言随着出租车行业的发展,对出租车计费器的要求也越来越高。二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展,其实现方法经历了由分立元件、SSI、MSI到LSI、VLSI以及UVLSI的过程。同时为了提高系统的可靠性与通用性,微处理器和专业集成电路(ASIC)逐渐取代了通用全硬件LSI电路,而ASIC以其体积小、重量轻、功耗低、速度快、成本低、保密性好而脱颖而出。目前,业界大量可编程逻辑器件(PLD),尤其是现场可编程逻辑器件(FPLD)被大量地应用在ASIC的制作当中。在可编程集成电路的开发过程中,以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术最新成果的电子设计自动化(EDA)技术主要能辅助进行三方面的设计工作:IC设计,电子电路设计以及PCB设计理想的可编程逻辑开发系统能符合大量的设计要求:它能够支持不同结构的器件,在多种平台运行,提供易于使用的界面,并且有广泛的特征。此外,一个设计系统应该能给设计师提供充分自由的设计输入方法和设计工具选择。Altered公司开发的MAX+PLUS开发系统能充分满足可编程逻辑设计所有要求。 MAX+PLUS设计环境所提供的灵活性和高效性是无可比拟的。其丰富的图形界面,辅之以完整的、可及时访问的在线文档,使设计人员能够轻松、愉快地掌握和使用MAX+PLUS软件。编程器是一种专门用于对可编程器(如EPROM,EEPROM,GAL,CPLD,PAL等)进行编程的专业设备PLD器件的逻辑功能描述一般分为原理图描述和硬件描述语言描述,原理图描述是一种直观简便的方法,它可以将现有的小规模集成电路实现的功能直接用PLD器件来实现,而不必去将现有的电路用语言来描述,但电路图描述方法无法做到简练;硬件描述语言描述是可编程器件设计的另一种描述方法,语言描述可能精确和简练地表示电路的逻辑功能,现在PLD的设计过程中广泛使用。常用的硬件描述语言有ABEL,VHDL语言等,其中ABEL是一种简单的硬件描述语言,其支持布尔方程、真值表、状态机等逻辑描述,适用于计数器、译码器、运算电路、比较器等逻辑功能的描述;VHDL语言是一种行为描述语言,其编程结构类似于计算机中的C语言,在描述复杂逻辑设计时,非常简洁,具有很强的逻辑描述和仿真能力,是未来硬件设计语言的主流。VHDL就是超高速集成电路硬件描述语言。覆盖面广,描述能力强,是一个多层次的硬件描述语言。在VHDL语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。具有良好的可读性,即容易被计算机接受,也容易被读者理解。使用期长,不会因工艺变化而使描述过时。因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。支持大规模设计的分解和已有设计的再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。36第一章 绪 论1.1 FPGA的概述FPGA(FieldProgrammable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。1.2 FPGA 的优越性EDA 出现之前,人们用传统的自下而上的硬件电路设计方法来设计系统。其主要步骤是:根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行分化,合理地划分功能模块,并画出系统功能框图;接着就是进行各功能模块的细化和电路设计;各个模块的工能调试完以后,将各个模块的硬件电路连接起来,再进行调试,最后就完成整个系统的硬件电路设计。这种传统的电路设计方法的系统仿真和调试要在系统的硬件完成后才能进行,因此存在的问题只有在后期才能发现,一旦考虑不周,就要重新设计,使得设计的费用和周期增大。另外,由于设计文件是原理图,如果设计的系统比较复杂,那么其原理图就要成千上万张,给存档、阅读和修改都带来了不便。随着大规模专用集成电路的开发和研制,为了提高开发的效率和增加已有开发成果的可继承性,缩短开发周期,各种新兴的EDA 开发工具开始出现,特别是硬件描述语言HDL 的出现,使得传统的硬件电路设计方法发生了巨大的变革,就是从系统总体的要求出发,自上而下的逐步将设计内容细化,最后完成系统的整体设计。这种自上而下的设计方法的主要特点是:(1) 电路设计更趋合理硬件设计人员在设计硬件电路时使用PLD 器件,自行可以设计所需的专用功能模块,而不需受通用元器件的限制,从而使电路设计更合理,其体积和功耗也大为缩小。(2) 采用系统早期仿真在自上而下的设计过程中,每级都进行仿真,从而可以在早期的系统设计中发现设计存在的问题,这样就可以大大缩短系统设计的周期,降低费用。(3) 降低了硬件电路设计难度使用传统的硬件电路设计方法时,往往要求设计人员设计电路前写出该电路的逻辑表达式和真值表,然后进行化简等,这使得工作起来相当困难和烦杂,特别是在设计复杂系统时,工作量大而且容易出错。FPGA 使用HDL 语言(硬件描述语言) ,避免编写逻辑表达式或真值表,使设计难度大大下降,设计周期也缩短了。(4) 主要设计文件使用HDL 语言编写的源程序EDA 设计方法中主要使用的是HDL 语言,并可以将HDL 语言编写的源程序转换成电路原理图形式输出。用HDL 语言编写的源程序作为归档文件有很多好处:一是资料量小,便于保存;二是可继承性好;三是阅读方便。1.3 EDA发展概况电子设计技术的核心就是EDA技术,EDA是指以计算机为工作台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段。 中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员开发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。外设技术与EDA工程相结合的市场前景看好,如组合超大屏幕的相关连接,多屏幕技术也有所发展。 中国自1995年以来加速开发半导体产业,先后建立了几所设计中心,推动系列设计活动以应对亚太地区其它EDA市场的竞争。 在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放 。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。 EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平还很有限,需迎头赶上。(把这一页中的字母数字改为times new roman格式)可编程逻辑器件自70年代以来,经历了PAL、GALGPLD、FPGA几个发展阶段,其中CPLDFPGA高密度可编程逻辑器件,目前集成度已高达200万门片,它将各模块ASIC集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制或小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以很容易地转换掩模ASIC实现,因此开发风险也大为降低。硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用VHDL语言只需要书写一行“ABC”即可。而且 VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL为硬件描述语言标准(IEEE STD -1076)。VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用VHDL来完成。VHDL还具有以下优点:(1)VHDL的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试,最后完成整个系统的硬件设计。采用传统方法设计数字系统,特别是当电路系统非常庞大时,设计者必须具备较好的设计经验,而且繁杂多样的原理图的阅读和修改也给设计者带来诸多的不便。为了提高开发的效率,增加已有开发成果的可继承性以及缩短开发周期,各ASIC研制和生产厂家相继开发了具有自己特色的电路硬件描述语言(Hardware Description Language,简称HDL)。但这些硬件描述语言差异很大,各自只能在自己的特定设计环境中使用,这给设计者之间的相互交流带来了极大的困难。因此,开发一种强大的、标准化的硬件描述语言作为可相互交流的设计环境已势在必行。于是,美国于1981年提出了一种新的、标准化的HDL,称之为VHSIC(Very High Speed Integrated Circuit) Hardware Description Language,简称VHDL。这是一种用形式化方法来描述数字电路和设计数字逻辑系统的语言。设计者可以利用这种语言来描述自己的设计思想,然后利用电子设计自动化工具进行仿真,再自动综合到门电路,最后用PLD实现其功能。覆盖面广,描述能力强,是一个多层次的硬件描述语言。在VHDL语言中,设计的原始描述可以非常简练,经过层层加强后,最终可成为直接付诸生产的电路或版图参数描述。具有良好的可读性,即容易被计算机接受,也容易被读者理解。使用期长,不会因工艺变化而使描述过时。因为VHDL的硬件描述与工艺无关,当工艺改变时,只需修改相应程序中的属性参数即可。支持大规模设计的分解和已有设计的再利用。一个大规模的设计不可能由一个人独立完成,必须由多人共同承担,VHDL为设计的分解和设计的再利用提供了有力的支持。当电路系统采用VHDL语言设计其硬件时,与传统的电路设计方法相比较,具有如下的特点:即从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求。第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。第三层次是逻辑综合。即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。应用逻辑综合工具产生的门网络表,将其转换成PLD的编程码,即可利用PLD实现硬件电路的设计。由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。系统可大量采用PLD芯片。由于目前众多制造PLD芯片的厂家,其工具软件均支持VHDL语言的编程。所以利用VHDL语言设计数字系统时,可以根据硬件电路的设计需要,自行利用PLD设计自用的ASIC芯片,而无须受通用元器件的限制。 EDA系统框架结构(FRAMEWORK)是一套配置和使用EDA软件包的规范。目前主要的EDA系统都建立了框架结构,如 CADENCE公司的Design Framework,Mentor公司的Falcon Framework,而且这些框架结构都遵守国际CFI组织制定的统一技术标准。框架结构能将来自不同EDA厂商的工具软件进行优化组合,集成在一个易于管理的统一的环境之下,而且还支持任务之间、设计师之间以及整个产品开发过程中的信息传输与共享,是并行工程和自顶向下设计施的实现基础。EDA技术的每一次进步,都引起了设计层次上的一次飞跃,从设计层次上分,70年代为物理级设计(CAD),80年代为电路级设计(CAE),90年代进入到系统级设计(EDA)。物理级设计主要指IC版图设计,一般由半导体厂家完成,对电子工程师没有太大的意义,因此本文重点介绍电路级设计和系统级设计。仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线。在制作PCB板之前还可以进行PCB后分析,其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反标回电路图,进行第二次仿真,也称为后仿真。后仿真主要是检验PCB板在实际工作环境中的可行性。由此可见,电路级的EDA技术使电子工程师在实际的电子系统产生前,就可以全面地了解系统的功能特性和物理特性,从而将开发风险消灭在设计阶段,缩短了开发时间,降低了开发成本。系统级设计 进人90年代以来,电子信息类产品的开发明显呈现两个特点:一是产品复杂程度提高;二是产品上市时限紧迫。然而,电路级设计本质上是基于门级描述的单层次设计,设计的所有工作(包括设计忙人、仿真和分析、设计修改等)都是在基本逻辑门这一层次上进行的,显然这种设计方法不能适应新的形势,一种高层次的电子设计方法,也即系统级设计方法,应运而生。1.4 课题设计意义出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。传统国内外出租车计费器多数由单片机实现,升级繁琐,成本高。以出租车多功能计费器为例,传统的计费器常以MCS251系列单片机为其核心主控部件,如89C51RC2, LPD78F0034 等,该系列的单片机工作频率一般不大于24MHz,而且可扩展的资源有限, 最大能够扩展的程序空间和内存空间一般都只有64kB,很难胜任出租车多功能计费器的不断升级要求。传统的计费器通常采用硬件模块化的设计结构,主要包括主控模块,电源模块, 按键显示模块,防作弊及脉冲输入模块以及税控模块等。在主控模块中又包括CPU 子模块, 语音识别子模块,串口通信子模块,复位、看门狗及电源监控子模块,打印子模块等,硬件电路复杂,不利于系统功能升级,容易在运营过程中产生干扰,影响系统的使用; 并且由于分立器件多,必然造成电源功耗大,芯片易发热,影响芯片的使用寿命。基于FPGA的出租车计费器不仅可以解决电子系统小型化、低功耗、高可靠性等问题,而且其开发周期短、开发软件投入少、芯片价格不断降低,特别是对小批量、多品种的产品需求,基于FPGA的出租车计费器已成首选。计费系统在各大、中城市出租车中使用越来越广泛。针对现有计费系统通用性差的缺陷,本文采用ISP器件和VHDL语言开发了一套出租车计费系统;该计费系统的可靠性高、成本低、通用性强;该系统在不改变硬件电路的前提下,具有可以重构系统的功能,采用完全相同电路结构,只要根据各地区的需求在VHDL程序中设置各参数,就可以适应各地区出租车不同计费标准的需要,还可根据各地区需求增加其他功能。第二章 总体结构与工作原理2.1 FPGA结构 FPGA 一般由三种可编程电路和一个用于存放编程数据的SRAM 组成,这三种可编程电路包括可编程逻辑块(CLB) 、输入/ 输出模块( IOB) 和互联资( IR) 。CLB 是FPGA 的主要组成部分,是实现逻辑功能的基本单元。它是由逻辑函数发生器、触发器、数据选择器等电路组成。IOB提供了器件引脚和内部逻辑阵列之间的连接;一般排列在芯片的四周,主要由输入触发器、输入缓冲器、输出触发/ 锁存器和输出缓冲器组成。每一个IOB 控制一个引脚,可被配置为输入、输出活双向I/ O 功能。可编程互联资源包括各种长度的金属连线和一些可编程连接开关,它们将各个CLB 之间和IOB 之间互相连接起来,构成各种复杂功能的系统。2.2 FPGA设计流程 可编程逻辑器件的设计是指利用EDA开发软件和编程工具对器件进行开发的过程。高密度复杂可编程逻辑器件的设计流程包括设计准备、设计输入、功能仿真、设计处理、时序仿真和器件编程及测试等七个步骤。(1)设计准备 在系统设计之前,首先要进行方案论证、系统设计和器件选择等准备工作。设计人员根据任务要求,如系统的功能和复杂度,对工作速度和器件本身的资源、成本及连线的可布性等方面进行权衡,选择合适的设计方案和合适的器件类型。一般采用自上而下的设计方法,也可采用传统的自下而上的设计方法。(2)设计输入设计人员将所设计的系统或电路以开发软件要求的某种形式表示出来,并送入计算机的过程称为设计输入。设计输入通常有以下几种形式:原理图输入方式是一种最直接的设计描述方式,要设计什么,就从软件系统提供的元件库中调出来,画出原理图。其优点是容易实现仿真,便于信号的观察和电路的调整;缺点是效率低。硬件描述语言是用文本方式描述设计。其突出优点有:语言与工艺的无关性,可以使设计人员在系统设计、逻辑验证阶段便确立方案的可行性;语言的公开可利用性,便于实现大规模系统的设计;具有很强的逻辑描述和仿真功能,而且输入效率高;在不同的设计输入库之间的转换非常方便,不需要对底层的电路和PLD结构的熟悉。波形输入方式波形输入方式主要是用来建立和编辑波形设计文件,以及输入仿真向量和功能测试向量。波形设计输入适用于时序逻辑和有重复性的逻辑函数。(3)功能仿真 功能仿真也叫前仿真。用户所设计的电路必须在编译之前进行逻辑功能验证,此时的仿真没有延时信息,对于初步的功能检测十分方便。(4)设计处理 设计处理是器件设计中的核心环节。在设计处理过程中,编译软件将对设计输入文件进行逻辑化简、综合优化和适配,最后产生编程用的编程文件。主要包括:语法检查和设计规则检查,逻辑优化和综合,适配和分割,布局和布线。(5)时序仿真 时序仿真又称后仿真或延时仿真。由于不同器件的内部延时不一样,不同的布局布线方案也给延时造成不同的影响。因此在设计处理以后,对系统和各模块进行时序仿真,分析其时序关系,估计设计的性能,以及检查和消除竞争冒险等是非常有必要的。实际上这也是与实际器件工作情况基本相同的仿真。(6)器件编程测试 时序仿真完成后,软件就可产生供器件编程使用的数据文件。器件在编程完毕后,可以用编译时产生的文件对器件进行校验、加密等工作。2.3 FPGA的硬件结构图本论文基于EP1C3T144 的FPGA设计,结构框图如图2-1所示,原理图见附录1,包括电源部分、按键和LED、下载配置部分、复位部分、外部时钟、滤波电容、用户扩展接口、5 1 单片机接口、FPGA芯片,共9个部分。LED外部时钟FPGA复位开关扩展接口滤波电容MCU接口接口用户接口JTAG电源图2-1 FPGA硬件结构框图2.4 出租车计费工作原理实际中出租车的计费工作原理一般分成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元开始计费。车暂时停止(行驶中遇红灯或中途暂时停车)不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始2.5 出租车计费器系统软件结构图(1) 根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。计数器A完成车费百位。计数器B完成车费十位和个位。计数器C完成车费角和分。计数器D完成计数到30(完成车费的起步价)。计数器E完成模拟实现车行驶100 m的功能。 (2)行驶过程中车费附加50%的功能:由比较器实现。 (3)车费的显示:由动态扫描电路来完成。用专用模块来实现,完成数据的输入即动态数据的显示。 (4)通过分析可以设计出系统的顶层框图如图2-2所示:图2-2 系统的顶层框图第三章 基于FPGA的硬件设计3.1 电源电路设计板子由外部提供5V 电源,使用的圆头插座的封装,可以直接用5V 的电源适配器插上使用,不需要直流稳压电源,FPGA 的IO 的电源是3.3V,内核的电压是1.5V,所以用上两个LEO,一个将5V 转到3.3V,另一个将3.3V 转到1.5V,加上一些滤波电容,板上的其他外设的电源均是3.3V,另外有3.3V 的电源指示灯,表示电源是否正常,还有防反插二极管,防止电源反插,对器件造成损坏电路图如图3-1所示。图3-1 电源电路图3.2 下载配置的电路设计大家都知道FPGA是SRAM 型的可编程逻辑器件,不像ROM型可编程器件CPLD那样,通过JTAG就可以直接把代码固化片子里面。FPGA 随便也可以通过JTAG 下载代码到片子里面运行。FPGA下载到片子里面代码是存放在RAM里,所以断电后这些代码马上就没有了。这样,FPGA就需要非易失性存储器用来存放代码,每次上点后把代码从配置芯片读扫FPGA然后运行。我们选用ALTERA 公司配套的AS 模式的配置存储器EPCS1,成本比较低,并且很容易配置。调试的时候流程是:修改设计,编译然后通过JTAG下载到FPGA 内部运行,一直这样进行直到设置成功,最后才把代码固化到配置存储器里面。这样需要对JTAG下载和EPCS 下载,老的方案需要两种下载电路,现在我们根据新的设计方案制了一块FPGA 的下载板,既可以下载FTAG,也可以下载EPCS,另外对Altera 系列的所有的可编程器件都支持。下载配置部分电路图如图3-2所示。图3-2 下载配置电路原理图3.3 FPGA芯片及其外围电路设计3.3.1 FPGA芯片Fpga 一共144 个引脚就是和以上8 个部分连接,如图3-3所示。这块板子既可以单独使用,也可以配合51 的板子一起使用。单独使用时,通过用户接口和其他的电路连接,不同电路之间通信等。如果全局时钟不够,需要将预留给51 的全局时钟资源拿来用。和51 配合使用的时候,51 和FPGA之间是总线的接口,FPGA相当于是51 的一个存储器映射外设,操作的时候注意读写,另外不使用的时候要把数据线变为三态。图3-3 FPGA芯片3.3.2 按键和LED板上提供4 个拨码按键和4 个LED,分别接到FPGA的8 个IO 引脚上,具体的引脚可以参看电路图或者丝印。按键和LED 可以用外当成最简单的外设,用和来控制这些外设。对于用该板作开发的用户来说,可以把按键当成键盘控制,而把LED 当成提示来用。3.3.3 复位开发板上有两个复位按键,一个叫做硬件复位,按下此键,所有FPGA的代码重新从EPCS1里面读到FPGA,程序从新开始运行,该引脚接到FPGA 的nCONFIG 引脚,该引脚为低电平是代码重新开始配置。另外一个复位按键连接到FPGA 的另外一个全局时钟上,用来表示在设计的过程中的reset 引脚。复位电路图如图3-4所示。图3-4 复位电路原理图3.3.4 外部时钟该板上接一个外部晶振,晶振的频率自己可以任选,我们提供的是10M 的晶振,用来做全局时钟。当然用户要是想用其他的全局时钟,就必须要把51 扩展部分的两个全局时钟连接其他的时钟源。3.3.5 滤波电容滤波电容用来对FPGA 电源滤波。3.3.6 用户扩展接口用户扩展接口一共有三组:分别是20x2、10x2、10x2 的三组,用户根据自己的需要扩展外部电路。用这块板子作进一步的开发,一定要这些接口。比喻:用该板子作逻辑分析仪或者波形发生器等,像被分析信号,DA 信号等都要从该接口输入或者输出。如果需要和51 以外的单片机接口或者扩展也要通过这个端口。图3-5 MCU接口电路图第四章 出租车计费器系统的软件设计4.1 系统的总体框图各部分主要功能包括:信号输入模块对车轮传感器传送的脉冲信号进行计数(每转一圈送一个脉冲),并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号作用;数据转换模块将计费模块输出的车费和路程转换成4位的十进制数据;译码动态扫描模块将路程与费用的数值译码后用动态扫描的方式驱动数码管;数码管显示模块将公里数和计费金额均用4位LED数码管显示(2位整数,2位小数)。图4-1 系统总体框图4.2 程序流程图车开始启动里程不计数里程计数里程显示计费器计数车费显示车跑完成一次后车费、里程清零YESYESYESNONO图4-2程序流程图4.3 系统各功能模块的实现4.3.1 信号输入模块JIFEI的实现图4-3 信号输入模块JIFEI信号输入模块JIFEI见图4-3。输入端口START、STOP、PAUSE、JS分别为汽车起动、停止、暂停、加速按键;输出端口CHEFEI12.0和LUC12.0分别是输出车费和路程。该模块主要实现计费功能和现场模拟功能。计费标准为:对车轮传感器传送的脉冲信号进行计数(每转一圈传送一个脉冲),按行驶里程计费,起步价为7.00元,并在车行3 km后按2.40元km计费,当计费器达到或超过20元时,每公里加收50的车费,车停止不计费。并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。4.3.2 数据转换模块X的实现数据转换模块X见图4-4。该模块把车费和路程转化为4位十进制数,daclk的频率要比clk快得多。数据转换模块是一个模为10、步长可变的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。该模块通过开关量预置步长,当超过一定预置参数时改变步长。计费模块也采用非压缩BCD码,但因步长不为1,所以在做非压缩BCD加法时必须调整,否则可能导致在超过或未超过预置参数时出现超程错误。这里采用模仿微机的AF标志位,在其设立一个半进位标志,当累加和大于9或半进位标志为“1”时,对其累加和调整。图4-4 数据转换模块X4.3.3 显示模块XXX1的实现显示模块XXX1见图4-5。经过该八进制模块将车费和路程显示出来。显示模块是由七段LED数码管译码和动态扫描显示两部分组成。采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。这段程序所示的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。要注意的是如果选择的扫描频率不合适,可能会出现小数点闪动的情况。但只要扫描频率不小于24 Hz,人眼就感觉不到显示器的闪烁。本系统采用36 Hz的扫描频率,扫描脉冲由相应的外围电路提供。图4-5 显示模块XXX14.3.4 数据选择模块SE的实现数据选择模块SE见图4-6。该模块输入端为时钟输入,输出端为分频后数据选择输出,实现数码管的位选。图4-6 数据选择模块SE4.3.5 数码管译码模块DI的实现数码管译码模块DI见图4-7,实现七段译码显示。图4-7 数码管译码模块DE第五章 系统仿真5.1 信号输入模块X的仿真结果将车费和路程转换成4位的十进制如图5-1所示:输入端为:Daclk, ascore, bscore输出端为:Age, ashi, aqian, abai, bge, bshi, bqian, bbai;图5-1 信号输入模块X仿真波形图5.2 数据转换模块JIFEI的仿真结果该模块是模拟汽车的启动、停止、暂停、加速按键,如图5-2所示:输入端口为:stop, start, pause, js;输出端口为:clk, b;图5-2 数据转换模块JIFEI仿真波形图5.3 显示模块XXX1的仿真结果该模块是将车费和路程显示出来如图5-3所示输入端为:c, a1,a2,a3,a4,b1,b2,b3,b4;输出端为:dp,d;图5-3 显示模块XXX1仿真波形图5.4 数据选择模块SE的结果验证数据选择模块SE仿真如图5-4所示:输入端为:clk输出端为:a图5-4 数据选择模块SE仿真波形图5.5 数码管译码模块DI的结果验证数码管译码模块DI仿真的结果如图5-5所示 输入端为:d 输出端为:q图5-5 数码管译码模块DI仿真波形图结 论本文介绍了基于FPGA的出租车计费器系统的设计方法,出租车计费器系统的设计能按预期的效果进行模拟汽车启动、停止、暂停等功能,并设计动态扫描电路显示车费数目,由动态扫描电路来完成。车暂时停止不计费,车费保持不变。若停止则车费清零,等待下一次计费的开始。在出租车计费系统的5个模块中 ,重点在于JIFEI模块,X模块、XXX1模块。JIFEI模块主要有汽车的启动、停止、暂停、加速按键;X模块主要是把车费和路程转化为4位十进制;X模块是将车费和路程显示出来。各模块完成后,在将它们组合成完整的出租车系统,在设计过程中还需要改进的是控制系统的纠错功能。出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。附录附录1:EP1C3T144开发板的原理图附录2:EP1C3T144开发板PC附录31、信号输入模块JIFEI的程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jifei is port (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(clkevent 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=1and pause=1)thenif(b=0)thennum:=num+1;end if;if(num=9)thenlc:=lc+5;num:=0;aa:=aa+5;end if; elsif(start=1and js=0and pause=1)thenlc:=lc+1;aa:=aa+1;end if;if(aa=100)thena:=1;aa:=0;elsea:=0;end if;if(lc300)thennull;elsif(chf=2000 and a=1)then chf:=chf+330; end if;end if;chefei=chf;luc=lc;end process;end rtl;2、数据转换模块X的程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity x is port(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 isbegin process(daclk,ascore) variable comb1:integer range 0 to 8000;variable comb1a,comb1b,comb1c,comb1d:std_logic_vector(3 downto 0);begin if(daclkevent and daclk=1)then if(comb1ascore)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;com
展开阅读全文