基于FPGA出租车计费系统的设计 精品文档格式.docx

上传人:b****7 文档编号:21925753 上传时间:2023-02-01 格式:DOCX 页数:40 大小:1.23MB
下载 相关 举报
基于FPGA出租车计费系统的设计 精品文档格式.docx_第1页
第1页 / 共40页
基于FPGA出租车计费系统的设计 精品文档格式.docx_第2页
第2页 / 共40页
基于FPGA出租车计费系统的设计 精品文档格式.docx_第3页
第3页 / 共40页
基于FPGA出租车计费系统的设计 精品文档格式.docx_第4页
第4页 / 共40页
基于FPGA出租车计费系统的设计 精品文档格式.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

基于FPGA出租车计费系统的设计 精品文档格式.docx

《基于FPGA出租车计费系统的设计 精品文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA出租车计费系统的设计 精品文档格式.docx(40页珍藏版)》请在冰豆网上搜索。

基于FPGA出租车计费系统的设计 精品文档格式.docx

中国集成电路产业已经成为全球半导体产业关注的焦点,即使在全球半导体产业陷入有史以来程度最严重的低迷阶段时,中国集成电路市场仍保持了两位数的年增长率,凭借巨大的市场需求、较低的生产成本、丰富的人力资源,以及经济的稳定发展和宽松的政策环境等众多优势条件,以京津唐地区、长江三角洲地区和珠江三角洲地区为代表的产业基地迅速发展壮大,制造业、设计业和封装业等集成电路产业各环节逐步完善。

采用FPGA设计ASIC(ApplicationSpecificIntegratedCircuit,集成电路界被认为是一种为专门目的而设计的集成电路)电路,用户不需要投片生产,就能得到合用的芯片,FPGA内部有丰富的触发器和I/O引脚,FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一,FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

其性能和效率不断提高,应用范围越来越广,在计算机应用领域已占日益重要的地位。

它的应用程度已经成为衡量一个国家科学技术水平的一项重要指标。

出租车计费器就是FPGA的一个可行的应用。

现在市面上的出租车计价器品种繁多,功能强大。

作为一个毕业设计的课题,我本着从大处着眼,从小处入手的原则,对FPGA的应用做了一些初步的尝试和探讨。

我利用FPGA芯片、32.768KHz晶振、七段LED数码管,初步实现了市面上的出租车计费器的一些基本功能。

第二章VerilogHDL硬件语言简介

VerilogHDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。

前者由GatewayDesignAutomation公司(该公司于1989年被Cadence公司收购)开发。

两种HDL均为IEEE标准。

VerilogHDL就是在使用广泛的C语言的基础上发展起来的一种硬件描述语言(HDL:

HardwareDiscriptionLanguage),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

它是GDA(GatewayDesignAutomation)公司的PhilMoorby在1983年提出,经过不断的完善和发展,直至1995年才成为IEEE标准,即IEEEStandard1364-1995。

IEEE2001年重新修订了VerilogHDL的IEEE标准。

此前硬件描述语言通过IEEE标准的只有VHDL(1987)。

2.1VerilogHDL语言的特点

1.VerilogHDL最大特点是易学易用。

只要有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握。

2.VerilogHDL设计与工艺无关。

可以使其设计好的模块重复使用,大大方便复杂电子系统的设计,缩短了设计的周期。

3.Verilog 

HDL简单而优美。

描述硬件单元的结构简单且易读。

相比较而言,VHDL的描述长度是Verilog 

HDL的两倍。

2.2VerilogHDL语言的基本结构

一个电子系统或电路,通常要对输入的信号进行处理得到输出信号,VerilogHDL就是用语言来描述输入和输出的借口和内部处理功能的实现。

一个设计部论是简单还是复杂,都用VerilogHDL模块来表示。

模块的基本结构如下:

module模块名(端口列表);

<

端口定义属性,如input,output等>

逻辑功能描述>

endmodule

其中<

模块名>

是模块唯一的标识符;

<

端口列表>

列出端口名称,<

端口定义属性>

指明端口是属于输入、输出还是双向端口,这些端口用来与其它模块进行连接。

是模块设计中最重要的部分,可使用不同形式的过程块来实现。

下面看个简单的例子。

例1.1上升沿触发D触发器(时序电路)

moduledff(q,clk,data);

inputclk,data;

outputq;

regq;

always@(posedgeclk)

begin

q=data;

end

从上面的例子可以看出:

(1)VerilogHDL程序是由模块构成的,每个模块的内同都是嵌在module和endmodule两个语句之间,每个模块实现特定的功能,模块可以进行层次嵌套;

(2)每个模块要进行端口定义,<

说明输入输出或双向端口,这些端口用与其他模块进行连接;

(3)VerilogHDL程序的书写格式自由,一行可以写几个语句,一个语句可以分多行写;

(4)除了endmodule语句为,每个语句和数据定义的最后必须有分号;

(5)可以用//*……*//或//……对VerilongHDL程序的任何部分作注释;

(6)VerilogHDL对大小写敏感,空格很重要,是用来界定各个标志的,关键字都是以小写形式表示。

2.3CPLD/FPGA的设计流程

用HDL语言开发CPLD/FPGA的完整流程为:

图1.2

1.文本编辑:

用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。

2.功能仿真:

将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确。

3.逻辑综合:

将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和型号的连接关系。

4.布局布线:

将.edf文件调入CPLD/FPGA厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。

5.时序仿真:

需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。

6.编程下载:

确认仿真无误后,将文件下载到芯片中

通常以上过程可以都在CPLD/FPGA厂家提供的开发工具(如QuartusII,ISE中完成。

下面我们以Altera公司的QuartusII9.0软件来简单说明一下CPLD/FPGA的开发流程。

下图是一个典型的基于QuartusII的CPLD/FPGA开发流程。

图1.2基于QuartusII的典型CPLD/FPGA设计流程

(1)建立工程是每个开发过程的开始,QuartusII(QII)以工程为单元对设计过程进行管理。

(2)建立顶层图。

可以这样理解,顶层图是一个容器,将整个工程的各个模块包容在里面编译的时候就将这些模块整合在一起。

(3)采用ALTERA公司提供的LPM宏功能模块。

QII软件环境里包含了大量的常用功能模块,例如计数器、累加器、比较强、译码器等等;

在充分利用已有模块的基础上,通过,一个设计中一般只有极少部分的模块需要自己从零设计。

(4)自己建立功能模块。

可以用硬件描述语言也可以用原理图的输入方法。

可以把它们独立的当做一个工程来设计,并生产模块符号(Symbol),然后再顶层图中使用这个模块的符号,并将源文件(实现该模块的原理图或HDL文件)拷到顶层图所在的工程目录下。

(5)将顶层图的各个功能模块用两线连起来。

这个过程类似电路图设计,把各个芯片连接起来,组成电路系统。

(6)系统的功能原理图至此已经基本出炉了,下一步要为该设计选择芯片载体,才能真正在物理上实现系统的功能。

这一步的主要工作是:

(1)选择芯片型号;

(2)为顶层图的各个输入输出信号分配芯片管脚;

(3)设置编译选项,目的是让编译器知道更多的信息。

(7)编译。

这个过程类似软件开发里的编译,在类似QII这样的集成环境里面,这些过程都是一气呵成,集成环境自动完成了几个步骤的工作。

(8)编译后生成*.sof或*.pof文件,前者可以通过JTAG下载到CPLD/FPGA内部,设计无误的话技能实现预期的功能,但断电后CPLD/FPGA里的这些信息会丢失;

后者可以下载到CPLD/FPGA的配置芯片(EEPROM或FLASH芯片),掉电后这些配置信息不会丢失,重新上电以后通过该配置芯片对CPLD/FPGA的内部RAM进行配置.

(9)对于复杂的设计,工程编译了以后可以采用QII的仿真功能或者其他仿真软件(ModelSim)对设计反复进行仿真和验证,知道满足要求。

第三章QuartusII9.0软件的简介

3.1主要功能

QuartusII9.0是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

  

QuartusII9.0可以在Windows、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

   

QuartusII9.0支持ALTERA公司全系列器件CPLD:

MAX3000、MAX7000、MAX9000和MAXII等;

FPGA:

Stratix、StratixII、StratxIII、Cyclone、CycloneII、CycloneIII、ACEX1K、APEX20K和FLEX10K等。

3.2使用方法

下面以一个十进制计数器的设计为例,详细介绍原理图输入的设计方法及仿真步骤。

一设计文档的输入

1.建立工程

一个设计对应一个工程项目文件,该工程项目下可包含多个设计模块文件。

运行QuartusII9.0软件,出现如下界面:

建立工程,File→NewProjectWizad如下图:

点击NewProjectWizard后弹出指定工程名的对话框,在Diectory,Name,Top-LevelEntity中如下图填写:

直接按Next进行下一步,选择FPGA器件的型号:

在Family下拉框中,我们选择FLEX10K系列,注意在Filters一栏选上"

ShowAdvancedDevices"

以显示所有的型号。

执行下一步出现对话框:

这里是选择其他EDA工具的对话框,我们用QII的集成环境进行开发,因此这里不作任何改变。

按Next进入工程的信息总概对话框:

按Finish按钮即建立一个空项目。

2.建立顶层图

执行File→New,弹出新建文件对话框:

选择"

BlockDiagramSchematicFile"

按OK即建立以个空的顶层图,缺省名为"

Block1.bdf"

,如下图:

原理图输入工具栏

3.添加逻辑元件(Symbol)

双击顶层图图纸的空白处,弹出添加元件的对话框,在Libraries里寻找需要的逻辑元件,如果知道逻辑元件的名称的话,也可以直接在Name一栏敲入名字,右边的预览图即可显示元件的外观,按OK后鼠标旁边即拖着一个元件符号,在图纸上点击左键,元件即安放在图纸上。

在图纸上分别添加74161、与非门(NAND2)、输入(input)、输出(output)等几个symbol。

从上图可以看出,基于原理图的设计输入类似于再protel软件中绘制电路图,上如中粗线属于总线类型,它的宽度必须与原件端口的宽度一致,网络标号相同的线表示相互连接。

我们也可把它另存为(File→Saveas)其它名称,也可接受默认的文件名,并将“Addfiletocurrentproject”选项选上,以使该文件添加到工程中去。

如图所示:

二编译

1.按主工具栏上的编译按钮即开始编译:

QuartusII下面的Message窗口会显示一些编译信息,最后编译成功提示:

2.创建元件模块

执行File→Create/Update→CreatSymbolfilesforcurrentfile,建立该文件的元件符号,可被其它模块调用。

三仿真

1.创建仿真波形文件,进行时序仿真,选择File→New→OtherFiles→VectorWaveformFile:

进入波形创建区,

编辑窗口分为,左边是信号(组)名称及标定时刻的信号值,右边是对应信号的波形图,最左侧为波形编辑工具栏。

2.输入信号节点。

在信号窗口中双击左键,出现对话框:

选中NodeFinder按钮,出现对话框:

在信号栏中选中“Pins:

all”,

点击OK出现波形编辑窗口。

调节输入波形

保存波形文件cnt10.vwf

3.仿真

在主工具栏Setting菜单中,点击Simulation文件栏后的按钮。

并可选功能

仿真(Functional)或时序仿真(timing)。

如选择功能仿真,则须先在主菜单Processing中GenerateFunctionalSimulationNetlist一栏。

在主菜单中,点仿真按钮,如仿真顺利通过,系统会提示Simulationwassuccessful,观察SimulationReport如下图所示:

如选择时序仿真,

得到仿真结果如下:

结果正确,就可以进行下载验证了。

四下载验证

1.分配管脚

点击下图中的AssignmentEditor按钮

出现下图并分配管脚

2.编译

然后保存,在编译一次,点击右图中的编译按钮

最后编译成功弹出提示:

3.下载

(1)下载连接:

先将USBBlaster下载线的一头接到PC的USB接口

USBBlaster如右图再按如有图按钮

出现对话框并点击HardwareSetup:

(2)将USBBlaster下载线一头与PC连接,另一头插到JTAG口

(3)FPGA实验板上接5V电源

(4)通过JTAG口把芯片的配置信息下载到FPGA芯片内,掉电后配置信息丢失。

(5)点击Start按钮,*.sof文件就下载到FPGA芯片中了

现在可以去到板子上去看结果了。

到此有关QuartusII9.0的文档输入,编译,仿真,下载的介绍基本结束了。

第四章出租车计费系统

4.1计费器系统的工作过程简介

4.1.1计费器的功能描述

从出租车车轮的传感器上导出一个计程脉冲信号,每个脉冲表示行使一定的距离(例如0.5米)。

记录计程脉冲的个数可以记录行使里程。

计费标准是:

a)刚开始计费时,应有起步费。

行驶里程不满3公里时,收费10元。

b)行驶里程满3公里但不超过10公里时,每公里收费2元,超过10公里,每公里收费3元。

c)夜间11点到早上5点,起步费为13元,10公里内每公里收费2.6元,超过10公里,每公里收费3.9元。

司机可以控制计费的开始和结束(rstfee)。

计费器有金额(角、元、十元、百元)、时间显示(秒、分钟、小时)的七段数码管显示。

同时为了能够适用于收费标准不同的地方,我在程序中添加了预置功能:

能预置起步费、每公里收费,具体设计中采用了六个七段数码管通过一个按键(switch)切换时间和实时车费。

为了进一步完善系统功能还设计了rsttime时间复位、rstfee计费复位和开始、add1min手动调节时钟(分加1)、add1hor手动调节时钟(时加1)控制按健。

4.1.2计费器系统分析

系统的输入有计费开始信号(rstfee)、结束信号(rstfee)以及从车轴上引出的计程脉冲(meter)。

输出有费用显示输出和当前时间输出。

计费器的数据处理部分主要是费用的累计和计算。

由于计费形式只有记程模式,也就是说费用只和出租车行驶的里程有关,不考虑在堵车或者等红灯的浪费的时间所带来的对司机的损失,所以仅对计程脉冲计数,这个脉冲进入计费部分,由计费部分计算得出结果后,实时显示当前费用。

当然这个费用还与当前的时间的有关,所以要判断当前的时间和当起步时的时间所在的时间段,然后根据在不同的时间段会有不同大小的费用的加成。

当乘客上车开始计费,正常行驶时显示实时费用,当到达指定地点时,乘客结算费用,司机把计费器清零(rstfee),然后等待下一位乘客。

系统功能框图:

图4.1系统功能框图

如上图:

1Hz脉冲由32.768晶振分频而来,还有图中没有出现的刷新频率也是由32.768晶振分频而来的。

当第一开启时时钟为000000,就要用到add1min和add1hor调节时间,使其正确显示当前时间。

记程脉冲是由出租车的车轴上提供的脉冲(例如0.5m),当车上有乘客时,司机拉下开始健(rstfee),计费模块就开始工作,并且会根据不当前的不同外部情况改变每个计费段的费用的大小,然后将这个费用实时的显示在显示器上。

切换按键的用途是让显示器在显示费用和当前时间之间相互切换。

4.1.3实现计费系统所用器材和设备

1.PC一台

2.QuartusII9.0和Protel99SE软件

3.爱迪克牌子的AEDK-EDA2实验机

4.实验仪正面图

4.USBBlaster下载器

5.导线若干

6.所用到的是晶振模块,FPGA,LED显示,开关部分,电源部分

4.2计费器系统各模块

4.2.1时钟模块

由于在不同的时间段起步价和每公里费用都不一样,所以用该模块来提供标准时间,以便计费模块查询载入。

通电初始时间为000000(小时,分钟,秒之间应该有“:

”,但由于LED管数量不够所以省略了“:

”),要调整时间的话,可以通过两个专门设计的按键(add1hor和add1min)手动调节时间,要是想要重置时间,可以通过rsttime按键。

图4.2时钟模块电路图

在时钟模块中,用到了两个60计数、一个24计数、防抖设计和手动调节设计(与)。

switch选择显示时钟时,当按下add1min后,分钟位置的LED数码管就会累加数字直到59后变为00,小时位也因此进1,弹出add1min后分钟位置停止累加。

当按下add1hor后,小时位置的LED数码管就会累加数字直到23后变为00.,无进位结果,弹出add1hor后小时位置停止累加。

1Hz脉冲是由32.678kHz晶振分频而来,程序如下:

always@(posedgeclk)//clk为32.678kHz信号输入

begin

if(count_1==32767)

q_1hz=1;

count_1=0;

else

count_1=count_1+1;

q_1hz=0;

end

刷新频率为600Hz,远大于24Hz,这样人眼将完全不会感觉到闪烁,关键程序如下:

always@(posedgeclk)//clk为32.678kHz信号输入

begin

if(count_24==55)

q_24hz=1;

count_24=0;

count_24=count_24+1;

q_24hz=0;

在QuartusII9.0中时钟部分的功能仿真图:

如图LED数码管上应为显示000001,表示00:

00:

01时刻。

4.2.2计费模块

该模块与时钟模块是紧密相连的,因为该模块时时刻刻都在查询当前时间的小时部分,这样才能正确的按照规定的费用计费。

如通过当前时刻确定起步价和当前每公里费用,再通过对车轴的传感器脉冲进行计数而算出出租车当前的实时费用。

图4.4计费模块电路图

下图是确定起步费模块,通过司机按下rstfee和当前时间的小时部分确定起步费用。

下图是本设计中关键部分之一,该模块主要是通过时刻和出租车所行驶的路程来确定当前每公里的费用,该模块输出只有一个,是费用每产生1角钱,就产生一个脉冲。

但这个脉冲的产生起决于get3km,get10km,hour[7..0],meter这几个信号。

cacfee_jiao模块的具体程序代码如下:

always@(negedgeresetorposedgemeter)

if(~reset)

fee1=0;

fee2=0;

fee3=0;

fee4=0;

cout1=0;

cout2=0;

cout3=0;

cout4=0;

elseif(hour==8'

b00100011||hour==8'

b00100100||hour==0||hour==1||hour==2||hour==3||hour==4)//时间在晚上23点到早上5点的深夜时段按照如下标准计费

if(~get10km)

begin

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1