基于VHDL语言的出租车计费系统的方案设计书Word格式文档下载.docx
《基于VHDL语言的出租车计费系统的方案设计书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的出租车计费系统的方案设计书Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
![基于VHDL语言的出租车计费系统的方案设计书Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/24/418471f8-8ae2-4053-9bcb-87bb20e6f456/418471f8-8ae2-4053-9bcb-87bb20e6f4561.gif)
1.基于VHDL语言设计出租车计费系统,使其能够模拟计费器的启动、停止,并能够实现计价功能,和相关的显示功能。
2.在上面的要求上做出相应的创新。
二、课题预期达到的效果:
设计能够实现计价功能如:
起步价,里程价,等待价格;
以及显示功能:
显示等待时间,里程的显
示,计价的显示。
并且能够实现自检功能。
EDA
(Electronics
Design
Automation)技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。
EDA技术在数字系统中的应用以基于Altera的EPM7128SLC84-15芯片和MAX+PlusII10.0软件平台的数字钟的设计为例,讨论EDA技术在数字系统中的具体应用。
EDA技术涉及面很广,内容丰富,从教学和实用的角度看,主要应掌握如下4个方面的内容:
一是大规模可编程逻辑器件;
二是硬件描述语言;
三是软件开发工具;
四是实验开发系统。
其中,大规模可编程逻辑器件是利用EDA技术进行电子系统设计的载体,硬件描述语言是利用EDA技术进行电子系统设计的主要表达手段,软件开发工具是利用EDA技术进行电子系统设计的智能化的自动设计工具,实验开发系统则是利用EDA技术进行电子系统设计的下载工具及硬件验证工具。
在设计方法上,EDA技术为数字电子电路设计领域带来了根本性的变革,将传统的“电路设计硬件搭试调试焊接”模式转变为在计算机上自动完成,采用“自顶而下”的全新设计方法,这种方法首先从系统入手,在顶层进行功能方框图的划分和结构设计,在方框图一级进行仿真、纠错,并用硬件描述语言对高层的系统进行描述,在系统一级进行验证,然后用综合优化工具生成具体的门电路网表,其对应的物理实现级可以是印刷电路板或专用集成电路,由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工时的浪费,同时也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。
基于MAX+plusⅡ开发平台的EDA设计方法:
MAX+plusⅡ是一种与结构无关的全集成化设计环境,使设计者能对Altera的各种CPLD系列方便地进行设计输入、快速处理和器件编程。
MAX+plusⅡ开发系统具有强大的处理能力和高度的灵活性。
其主要优点:
与结构无关、多平台、丰富的设计库、开放的界面、全集成化、支持多种硬件描述语言(HDL)等。
具体设计过程如下:
1)设计输入。
MAX+plusⅡ支持多种设计输入方式,如原理图输入、波形输入、文本输入和它们的混合输入。
2)设计处理。
设计输入完后,用MAX+plusⅡ的编译器编译、查错、修改直到设计输入正确,同时将对输入文件进行逻辑简化、优化,最后生成一个编程文件。
这是设计的核心环节。
3)设计检查。
MAX+plusⅡ为设计者提供完善的检查方法设计仿真和定时分析。
其目的是检验电路的逻辑功能是否正确,同时测试目标器件在最差情况下的时延。
这一查错过程对于检验组合逻辑电路的竞争冒险和时序逻辑电路的时序、时延等至关重要。
4)器件编程。
当电路设计、校验之后,MAX+plusⅡ的Programmer将编译器所生成的编译文件下载到具体的CPLD器件中,即实现目标器件的物理编程
5)系统仿真。
使用VHDL语言设计FPGA的几个常见问题的探讨:
1分频电路
分频电路是数字系统设计中的基本电路。
在硬件电路设计中,时钟信号是最重要的信号之一,经常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。
分频电路一般分为三种:
第一种是任意占空比的偶数分频及非等占空比的奇数分频,通常由计数器或计数器的级联来完成。
第二种是等占空比的奇数分频电路。
要实现占空比为50%的M=2N+1分频电路,
第三种是小数分频电路。
实现分频系数为N-0.5的分频器.可以采用1个模N的减法计数器、1个异或门、1个2分频器。
要想用同一个电路完成多种形式半分频,可以在半整数分频器原理的基础上对异或门加1个使能控制信号。
2延时电路
延时电路是电子设计中常用的电路。
在学习数字电路时采用555型集成定时器来实现脉冲的延迟,而在进行信号处理时,很多设计并不能使用555集成定时器来完成。
用VHDL语言设计时一般用计数器或计数器的级联来实现。
3双向电路
在工程应用中,双向电路是设计者必须面对的问题。
使用VHDL语言设计FPGA时,经常会遇到很多接口控制电路的设计,例如FPGA与外部存储设备的接口电路设计、FPGA与DSP接口电路的设计、FPGA与CPU接口电路的设计等,其中数据总线的设计是不可避免的,而数据总线往往是双向的。
因此,如何正确处理数据总线是进行时序逻辑电路设计的基础。
4VHDL语言中的+
一位网友是这样说的;
“VHDL是提供了操作符“+”,而且在很多情况下,我们是可以直接用这个加操作符的。
但是,VHDL提供的加法操作只能给出“和”,却无法给出“进位”。
例如我们在设计计数器的时候经常用到的加1操作,对于一个8位的计数器,当计数器的结果为0xff时,如果在加1就为0x00。
实际上,结果应该时0x100,而最高位的1就是进位,我们无法利用。
而我们的实际设计中,不仅要用“和”,有时还要用到两个数相加的进位。
所以有必要用VHDL来描述一个带进位的加法器。
加法器实际上完全可以由组合逻辑实现,但在频率较高的场合下工作时,容易产生毛刺。
所以整个加法器设计成时序电路的形式,所有的加操作都是时钟的上升沿触发的。
基于VHDL语言的出租车计费系统的设计
【摘要】:
介绍一种基于ALTERA公司大规模可编程逻辑器件EPF10K10的应用VHDL语言设计的出租车计费器的一种新的方案,使其具有模拟出租车起动、停止、暂停和加速等功能,并用动态扫描电路显示出租车所走的里程,显示所走路程需要的费用。
所有源程序经Altrera公司的软件Max+PlusⅡ10.0调试,仿真正确,下载到Altrera公司的EPF10K10LC84-4芯片中,模拟结果基本符合预计要求。
由于使用FPGA芯片,具有外围电少、成本低、抗干扰能力强等特点,可用于实际的出租车收费系统.
引言
1.研究背景
随着EDA技术的发展及大规模可编程逻辑器件CPLD/FPGA的出现,电子系统的设计技术和工具发生了巨大的变化,通过EDA技术对CPLD/FPGA编程开发产品,不仅成本低、周期短、可靠性高,而且可随时在系统中修改其逻辑功能[9]。
现代电子系统设计通常运用EDA(ElectronicDesignAutomation)技术,采用并行工程和“自顶向下”的设计方法,从系统设计入手,在顶层进行层次划分和结构设计,在功能模块一级进行仿真、纠错,并用VHDL硬件描述语言对高层次的系统行为进行描述,VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,超高速集成电路硬件描述语言)主要描述数字系统的行为、结构、功能和接口。
现在计费器大多数以单片机为平台的,但是单片机程序是不通用的,不同的芯片有不同的指令集,因此设计研发比较困难。
而FPGA等数字可编程器件的出现彻底解决了这个问题,而且性能更稳定、设计更灵活、能实现较复杂的功能,运用EDA软件可方便的在电脑上实现设计与仿真。
本文根据龙岩市出租车计费的实际情况,采用VHDL语言来设计的一种出租车计费器,源程序经Max+PlusⅡ软件调试优化,最后下载到EPF10K10LC84-4芯片中来实现的。
由于使用FPGA芯片,外围电路少、成本低、抗干扰能力强,可用于实际的出租车收费系统中。
FPGA是电子设计领域中最具活力和发展前途的一项技术,未来必定会取代部分落伍的数字器件。
2.主要研究工作
本次设计主要涉及到EDA防真系统,而由于MAXPLUSII应用防真软件的特殊性,只能够在实验箱上进行操作。
本次设计需要选择较大容量芯片如:
EPF10K10LC84-4芯片,内容上以出租车计费系统为基础,利用VHDL语言模拟计费,原理简单,易懂,能够实现里程、等待时间、里程价、等待价、以及分段计费等功能。
在实现过程中具体研究开发如下:
(1)模拟出租车计费系统,其中基本的模块有9个,包括分频模块CLKGEN,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,选择信号模块SE,输出数据模块SCXZ.显示模块DI。
(2)增加时间段设置模块,出租车白天和夜晚的计费标准是不一样的。
(3)增加个自检功能,模拟行驶一段路,检查所走的路程与相关计费是否标准。
3.主要研究内容
本次设计的主要内容分为5章,第一章EDA简介,主要介绍VHDL语言设计步骤,MAX+PLUSII简介。
第二章方案设计与论证第三章单元模块设计为本文的核心部分第四章系统仿真、综合、下载,主要围绕本次设计仿真过程中遇到的问题和所得的结果进行一个小结。
第五章为结束语和致谢辞,最后是参考文献部分和各个模块主要程序介绍。
1.EDA简介
1.1VHDL语言设计步骤[1]
利用VHDL语言进行设计可分为以下几个步骤:
1.1.1设计要求的定义。
在从事设计进行编程VHDL代码之前,必须先对你的设计目的和要求有一个明确的认识。
对所需的信号建立时间、时钟/输出时间、最大系统工作频率、关键的路径等这些要求,要有一个明确的定义,这将有助于设计,然后再选择适当的设计方式和相应的器件结构,进行设计的综合。
1.1.2用VHDL语言进行设计描述。
(1)应决定设计方式,设计方式一般说来有三种:
自顶向下设计,自底向上设计,平坦式设计。
前两种方式包括设计阶层的生成,而后一种方式将描述的电路当作单模块电路来进行的。
自顶向下的处理方式要求将你的设计分成不同的功能元件,每个元件具有专门定义的输入和输出,并执行专门的逻辑功能。
首先生成一个由各功能元件相互连接形成的顶层块来做成一个网表,然后再设计其中的各个元件。
而自底向上的处理方法正好相反。
平坦式设计则是指所有功能元件均在同一层和同一图中详细进行的。
(2)编写设计代码。
编写VHDL语言的代码与编写其他计算机程序语言的代码有很大的不同。
必须清醒地认识到正在设计硬件,编写的VHDL代码必须能够综合到采用可编程逻辑器件来实现的数字逻辑中。
懂得EDA工具中仿真软件和综合软件的大致工作过程,将有助于编写出优秀的代码。
1.1.3用VHDL仿真器对VHDL原代码进行功能仿真。
对于大型设计,采用VHDL仿真软件对其进行仿真可以节省时间,可以在设计的早期阶段检测到设计中的错误,从而进行修正,以便尽可能地减少对设计日程计划的影响。
因为对于小型设计,其综合优化、配置花费的时间不多,而且在综合优化之后,往往会发现为了实现性能目标,将需要修改设计。
在这种情况下,用户事先在原代码仿真时所花费的时间是毫无意义的,因为一旦改变设计,还必须重新再做仿真。
1.1.4利用VHDL综合优化软件对VHDL原代码进行综合优化处理。
选择目标器件、输入约束条件后,VHDL综合优化软件工具将对VHDL原代码进行处理,产生一个优化了的网络表,并可以进行粗略的时序仿真。
1.1.5配置。
将综合优化处理后得到的优化了的网络表,安放到前面选定的CPLD或FPGA目标器件之中,这一过程成为配置。
1.1.6配置后的时序仿真。
这时的时序仿真将检查诸如信号建立时间、时钟到输出、寄存器到寄存器的时延是否满足要求。
因为已经得到实际连线引起的时延数据,所以仿真结果能比较精确地未来芯片的实际性能.如果时延仿真结果不能满足设计的要求,就需要重新对VHDL原代码进行综合优化,并重新装配于新的器件之中,或选择不同速度品质的器件。
同时,也可以重新观察和分析VHDL原代码,以确认描述是正确有效的。
只有这样,取得的综合优化和配置的结果才符合实际要求。
1.1.7器件编程。
在成功地完成了设计描述、综合优化、配置和配置后的时序仿真之后,则可以对器件编程和继续进行系统设计的其他工作。
1.2MAX+PLUSII简介
本次设计选用的开发环境是美国ALTERA公司自行设计开发的EDA工具。
MAX+PLUSII,其全称为MultipleArrayandProgrammableLogicUserSystems。
它具有运行速度快,界面统一,功能集中,易学易用等特点。
它的器件系列从最初的Max系列到最新的FLEXIOK系列,从500门到10万门提供了满足各种条件需要的一系列器件。
其中最为先进的FLEX系列采用独特的快通道技术,使得器件的可预测性大大增强,速度也得到提高,资源利用率达70%左右时,FLEXIOK系列可以提供70MHz左右的工作速度。
MAX十PLUSH结合各种系列器件的物理结构,提供了各种的优化措施,以在提高工作速度和资源利用率之间给以平衡。
从而对大多数设计提供解决方案。
MAX+PLUSII提供了原理图输入、文本输入(采用硬件描述语言)和波形输入等多种输入手段,并可以任意组合使用。
利用该工具所配备的编辑、编译、仿真、综合、芯片编程等功能,可将设计电路图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中(如FPGA芯片),做成ASIC芯片。
用户首先对所做项目进行设计,明确设计目的、设计要求;
然后利用原理图输入方式或文本输入方式进行设计输入;
输入完成后,进行编译,若编译过程中发现错误,则检查设计输入,修改密码,直至没有错误发生:
编译完成后,就可以进行仿真,检查设计是否达到设计要求,否则还需要重新检查设计输入;
仿真结果达到要求后,就可以进行烧录,把设计程序下载到目的芯片中;
最后把芯片放到实际系统中进行验证、测试。
MAX+PLUSII借助EDIF网表文件,SRAM目标文件(.sof),LPM和VHDL能与Candence,MentorGraphics,OrCAD,Synopsys,Synplicity和Viewlogic等公司提供的其他多种EDA工具接口.MAX+PLUSII编译器可以在PC机及各种工作站平台上运行,这使MAX+PLUSII成为工业界唯一与平台和结构无关的可编程逻辑设计环境[5]。
2.方案设计与论证
2.1设计方案比较
方案一:
采用单片机设计,此种方法应用电路简单,但是软件设计复杂,可能引起系统的不可靠性增加。
方案二:
采用可编程逻辑器件与单片机联合设计,虽然可发挥它们各自的长处,但是分工与连接也是比较棘手的问题,稳定性也是个问题。
方案三:
采用可编程逻辑器件设计,此种方法可以就用可编程逻辑器件模块化的结构,无论是仿真、下载、调试都来的方便。
通过EDA技术对CPLD/FPGA编程开发产品,不仅成本低、周期短、可靠性高,而且可随时在系统中修改其逻辑功能。
综上所述本设计采用第三种方案。
2.2设计任务与要求
用VHDL语言设计一个多功能的出租车计费系统,要求该计费系统具有以下几个功能
(1)计价功能
①起步价:
顾客上车,显示起步价5,行车距离在2公里以内。
②里程价:
起步5元,超过2公里按1.8元/公里计费,当超过8公里每公里2.7元。
③等待价:
龙岩市区等待时价满前5分钟0.9元,满7分钟1.8元,满10分钟2.7元。
少于10秒不计。
在这次设计中,我把等待时间前1小时的等待费用为12元(20分/分钟),超过1小时的等待费用为20元(33分/分钟)。
(2)显示功能:
①显示等待时间:
精确到0.1秒,显示等待费用
②显示里程:
精确到0.1公里,
③显示计价:
可显示总价,显示范围Z~99元。
(3)自检功能
2.3总体方案
根据系统的设计要求,我们可将整个出租车计费系统CZJFXT分为九个模块,它们分别是:
分频模块CLKGEN,等待判别模块DDPB,里程计算模块LCJS,里程计费模块LCJF,等待计时模块DDJS,等待计费模块DDJF,选择信号模块SE,输出数据模块SCXZ.显示模块DI其设计原理图如2-1所示。
(2-1)设计原理图
3.单元模块设计
3.1等待判别模块DDPB:
根据速度传感器脉冲信号WCLK和分频器产生的基准时钟信号CLK1HZ,计算单位时间里WCLK的脉冲个数(每1千米产生10个脉冲信号,即每百米产生一个脉冲信号),亦即出租车行驶速度,从而判别出租车是否处于等待状态,发出等待标志信号DDBZ。
当速度大于12千米/小时,即速度大于200米/分钟时,出租车处于运行状态,这时等待标志DDBZ=0;
当速度小于等于12千米/小时,出租车处于等待状态,这时等待标志DDBZ=1。
该模块的VHDL程序设计可分为三个进程;
60秒周期性跳变信号产生进程,每分钟行驶距离计算进程,等待标志判别进程。
等待标志判别进程就是比较每分钟WCLK脉冲个数与等待状态WCLK脉冲临界个数的大小,从而确定DDBZ的赋值。
模块封装原理图如3-1所示:
(3-1)等待判别模块
3.2里程计算模块LCJS:
该模块可以预制参数,使其实际计数值大于预制数值后,每100米送出一个脉冲,并将计数值送进制转换电路转换后送译码动态扫描模块进行显示。
在本设计中设置固定是价格5元,按照龙岩市最新标准,超过2公里按1.8元/公里计费,当超过8公里时每公里2.7元.当输入一个脉冲里程计数一次,即0.1公里,相应的费用设定初始值其价5元模块封装见下图.。
里程计算模块LCJS:
根据速度传感器脉冲信号WCLK和等待标志DDBZ,对出租车行驶的里程数XSLC进行计算,同时发出里程标志信号LCBZ和里程计费标志信号JFBZ。
如果LCBZ=1,说明行驶距离超过2千米,里程计费启动;
如果LCBZ=0,说明没超过2千米,计费标志信号JFBZ应跳变1次。
该模块的VHDL程序设计可分为两个进程:
里程计算及标志产生进程,产生计费信号进程。
产生计费信号进程。
产生计费信号进程就是每行驶2千米JFBZ由低电平变为1,经过一个系统时钟周期后JFBZ又回复到低电平0,里程计费模块LCJF就是在JFBZ脉冲信号的上升沿进行计费的加法操作。
模块封装原理图如3-2所示
(3-2)里程计费模块
里程计算模块达到预计效果,仿真波形图如下所示:
(3-3)里程计算模块仿真图
3.3里程计费模块LCJF:
在计费标志信号JFBZ,等待标志信号DDBZ,里程标志信号LCBZ和时段标志信号XDBZ等信号的控制下,计算行驶里程超过2千米以上里程的费用LCFY.该模块的VHDL程序是通过由多个条件控制的加法进程来,里程计费的条件是在DDBZ=0,并且在JFBZ的上升沿根据SDBZ分别进行回潮计费操作。
当SDBZ=1时,表示在早6:
00~晚23:
00时段,其单价SD1为1.8元/千米;
当SDBZ=0时,表示其他时段,其单价SD2为2元/千米。
如果LCBZ=0,说明没超过2千米,按起价计费。
模块封装原理图如3-4所示
(3-4)里程计费模块
里程模块达到预期效果,仿真图如(3-5)所示:
(3-5)里程计费模块仿真图
3.4等待计时模块DDJS:
模块时间计费模块为模16的加法计数器,该模块以DDBZ信号为起始,时钟送入标准脉冲1HZ。
通过一个多层嵌套的加法进程来完成等待时间计数。
程序使用if语句,START为高电平是复位,ms<
="
0000"
;
mg<
;
fs<
fg<
ms为秒十位,mg为秒个位,fg为分个位,fs分十位。
当DDBZ为高电平时启动,clk1hz为频率为1hz的时钟脉冲,当时钟出现上升沿时计数,从而通过对时钟脉冲的计数,完成计时。
DDSJ为计数后的时间。
程序见附录。
等待时间功能及设计模块封装见下图.。
(3-6)等待时间模块封装
等待计时模块DDJS,在等待标志信号DDBZ和基准时钟信号CLK1HZ的控制下,运行等待时间DDSJ的计算。
其中DDSJ的低8位表示等待时间秒数,DDSJ的高8位显示等待时间的分钟数,同时根据等待时间的长短发出一个熄灯信号XDBZ当等待时间小于一小时时,XDBZ=0。
等待时间大于一小时时,XDBZ=1,该模块的VHDL程序是通过一个多层嵌套的加法进程来完成等待时间计数。
start启动ddjs模块,当ddbz高电平是开始计时。
通过仿真达到预期效果,仿真图如下:
.
(3-7)等待计时模块时序仿真
3.5等待费用DDFY:
等待计费模块DDJF程序:
在等待标志DDBZ和熄灯标志XDBZ控制下,进行等待费用DDFY的计费操作,该模块的VHDL程序包括两个进程:
60S周期跳变信号产生进程,等待费用计算进程。
等待费用计算的条件是在DDBZ=1并且在60s周期跳变信号T60S的上升沿,根据XDBZ分别进行加法计费操作,当DDBZ=1且XDBZ=0时,按照1元/5分种,即20分/分钟计费:
当DDBZ=1且XDBZ=1时,按照20元/小时,即33分/分钟计费。
具体程序见附录。
等待费用封装如下所示:
(3-8)等待计费模块模块封装
上图中START为启动信号输入,DDBZ为等待标志信号输入控制,当START和DDBZ同时为高电平时启动,clk1hz为频率为1hz的时钟脉冲,通过对时钟脉冲的计数,完成计时。
DDJF为计数后的费用。
经过仿真达到预期效果;
仿真图如下:
(3-9)等待计费时序仿真图
3.6选择模块SE及输出控制模块SCKZ:
根据发出的数据传输选择控制信号A[2..0],选择有关计算结果传送到显示模块,SE与被传送数据的具体关系如表3-1所示。
选择模块封装如3-10所示,输出控制模块封装3-11所示。
(3-10)选择模块封装
(3-11)输出控制模块封装图
数据输出控制程序:
DATA<
=DDSJ(7DOWNTO0)WHENSEL=”000”
ELSEDDSJ(15DOWNTO8)WHENSEL=”001”;
ELSELCFY(7DOWNTO0)WHENSEL=”010”