基于FPGA技术出租车计费器的设计EDA技术.docx
《基于FPGA技术出租车计费器的设计EDA技术.docx》由会员分享,可在线阅读,更多相关《基于FPGA技术出租车计费器的设计EDA技术.docx(20页珍藏版)》请在冰豆网上搜索。
基于FPGA技术出租车计费器的设计EDA技术
EDA课程设计
题目:
基于FPGA的出租车计费器的设计
学院:
通信与电子工程学院
班级:
电子101班
学号:
2010131019
姓名:
何经国
指导老师:
周喜权
日期:
2013年12月20日
摘要
本文以Altera公司的DE2开发板为中心,QuartusⅡ软件作为开发平台,使用VerilogHDL语言编程,设计了一个出租车计费的计费器模型。
在程序描述的过程中,用了行为描述方式和结构描述方式二种描述方式对计费器进行描述。
该计费器能动态扫描电路,将车费和路显示出来,各有两位小数。
整个自动控制系统由三个主要电路构成:
里程和车费计算、译码和动态显示。
最后给出了仿真的波形,并硬件实现。
关键词:
出租车计费VerilogHDLQuartusⅡ
第1章概述
1。
1设计目的
通过基于EDA技术出租车计费器的设计,理解可编程逻辑器件的设计原理及工作流程,学习EDA软件QuartusⅡ功能与使用方法,了解VerilogHDL语言逻辑编程设计基本过程.
1。
2设计背景
随着我国经济社会的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普通的交通工具。
出租车计价器是出租车营运收费的专用智能化仪表,是使出租车市场规范化、标准化的重要设备。
一种功能完备,简单易用,计量准确的出租车计价器是加强出租车行业管理,提高服务质量的必需品。
本设计采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路,得到一种出租车计价系统的软件结构,通过QuartusⅡ软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求。
该设计虽然功能简单,智能化水平比较低,但仍具有一定的实用性。
该设计是在VHDL的基础上对出租车计价器进行设计来实现其基本功能的,与以往的基于单片机的数模混合电路相比,FPGA具有稳定性好,抗干扰能力强等优点,且非常适合做为出租车计价器的控制核心,所以选择用VHDL来对计价器进行设计来实现其功能。
1.3设计意义
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的.因此,汽车计价器的研究也是具有一定意义的。
随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注.于是,出租车行业以低价高质的服务给人们带来了出行的享受。
但是总存在着买卖纠纷困扰着行业的发展.而在出租车行业中解决这一矛盾的最好方法就是改良计价器。
用更加精良的计价器来为乘客提供更加方便快捷的服务。
多年来国内普遍使用的计价器只具备单一的脊梁功能。
最早的计价器全部使用机械齿轮结构,只能简单的计程功能,可以说,早期的计价器就是个里程表。
随着科学技的发展,产生了第二代计价器。
它采用手摇计算机与机械结构相结合的方式实现了半机械半电子化。
此时它在计程的同时还完成计价的工作。
大规模集成电路的发展又产生了第三代计价器,也就是全电子化的计价器.它的功能也在不断完善。
出租车计价器是一种专用的计量仪器,它安装在出租车上,能够连续累加,并只是出行中任意时刻乘客应付费用。
随着电子技术的发展以及对计价器的不断改进和完善,便产生了能够自主计费,以及现在的能够打一发票和语音提示、按时间自主变动单价等功能。
第2章工作原理
本文设计了一个出租车计费器的模型,其接口信号如图2—1所示。
图2—1 出租车计费器模型方框图
车的状态由传感器传回来当作控制信号,用控制信号来控制计算里程和车费模块,然后分别将里程和车费送到译码模块译码,输出的数据一起送到动态扫描模块,由片选信号控制哪部分译码模块输出的数据用数码管显示。
当车启动后,计算里程和车费模块就开始计数,起步价为7。
00元,并在车行3Km后按2.20元/Km计费,当计费器达到或超过20元时,每公里回收50%的车费,车停止和暂停时不计费;然后将里程和车费送到译码模块译码和动态显示模块动态显示,最后显示在七段数码管上,动态显示的时间间隔为5秒钟.
第3章设计过程
3.1设计方案
3.1。
1计算里程和车费模块
本模块主要是计算里程和车费。
按行驶里程计费,起步价为7.00元,并在车行3Km后按2。
20元/Km计费,当计费器达到或超过20元时,每公里回收50%的车费,车停止和暂停时不计费。
在本模块中,一个脉冲代表是里程要加100米.计算里程和车费的模块的功能结构框图如图3-1所示。
图3—1计算里程和车费模块的功能结构框图
根据模块实现的功能设计VerilogHDL源代码如下:
moduletaxicount(stop,start,clk,pause,chefei,lucheng);
inputstop,start,clk,pause;
outputreg[19:
0]chefei,lucheng;
reg[3:
0]qijia,danjia;
reg[12:
0]ygl;
regyglflag;
always@(posedgeclk)
begin
if(stop==0)
begin
danjia=0;
qijia=0;
ygl=0;
lucheng=0;
end
elseif(start==0)
begin
chefei=700;
lucheng=0;
end
elseif(start&pause)
begin
lucheng=lucheng+100;
ygl=ygl+100;
end
if(ygl<1000)
yglflag=0;
else
begin
yglflag=1;
ygl=0;
end
if(lucheng〉3000)
begin
if(chefei〈2000)
begin
if(yglflag)
chefei=chefei+220;
end
elseif(chefei>2000)
begin
if(yglflag)
chefei=chefei+330;
end
end
end
endmodule
3.1.2七段显示译码器模块
本模块主要是将4位二进制数转换为十六进制表示.七段显示译码器模块的功能结构框图如图3-3所示:
图3—3七段显示译码器的功能结构框图
根据模块实现的功能设计VerilogHDL源代码如下:
moduleymq8421(a,hex);
input[3:
0]a;
outputreg[6:
0]hex;
always@(a)
begin
case(a)
0:
hex=’b1000000;
1:
hex=’b1111001;
2:
hex='b0100100;
3:
hex=’b0110000;
4:
hex=’b0011001;
5:
hex='b0010010;
6:
hex='b0000010;
7:
hex=’b1111000;
8:
hex='b0000000;
9:
hex='b0010000;
10:
hex=’b0001000;
11:
hex=’b0000011;
12:
hex=’b1000110;
13:
hex='b0100001;
14:
hex=’b0000110;
15:
hex=’b0001110;
default:
hex='b1111111;
endcase
end
endmodule
3。
1.3动态显示模块
本模块为动态显示,时间间隔为5秒.动态显示模块的功能结构框图如图3-5所示。
图3-5动态显示模块的功能结构图
根据模块实现的功能设计VerilogHDL源代码如下:
moduledisplay(clk,dis0,dis1,dis2,dis3,dis4,dis5,dis6,dis7,HEX0,HEX1,HEX2,HEX3);
inputclk;
input[6:
0]dis0,dis1,dis2,dis3,dis4,dis5,dis6,dis7;
outputreg[6:
0]HEX0,HEX1,HEX2,HEX3;
reg[2:
0]CNT,COUNT;
always@(posedgeclk)
case(COUNT)
0:
begin
if(clk)
CNT=CNT+1;
if(CNT<5)
begin
HEX0=dis0;
HEX1=dis1;
HEX2=dis2;
HEX3=dis3;
end
else
begin
CNT=0;
COUNT=5;
end
end
5:
begin
if(clk)
CNT=CNT+1;
if(CNT<5)
begin
HEX0=dis4;
HEX1=dis5;
HEX2=dis6;
HEX3=dis7;
end
else
begin
CNT=0;
COUNT=0;
end
end
endcase
endmodule
3。
1。
4设计出租车计费器电路
VerilogHDL具有行为描述和结构描述功能。
行为描述是对设计电路的逻辑功能的描述,并不用关心设计电路使用哪些元件及这些元件之间的连接关系。
而结构描述是对设计电路的结构进行描述,即描述设计电路使用的元件及这些元件之间的连接关系。
本文用行为描述和结构描述分别实现电路系统。
(一)用行为描述实现出租车计费器电路系统设计
用行为描述实现出租车计费器电路系统设计的源程序如下:
moduletcout(stop,start,clk,pause,HEX0,HEX1,HEX2,HEX3);
inputstop,start,clk,pause;
outputreg[6:
0]HEX0,HEX1,HEX2,HEX3;
wire[15:
0]chefei,lucheng;
wire[6:
0]dis0,dis1,dis2,dis3,dis4,dis5,dis6,dis7;
taxicountU1(stop,start,clk,pause,chefei,lucheng);
ymq8421U2(chefei[3:
0],dis0);
ymq8421U3(chefei[7:
4],dis1);
ymq8421U4(chefei[11:
8],dis2);
ymq8421U5(chefei[15:
12],dis3);
ymq8421U6(lucheng[3:
0],dis4);
ymq8421U7(lucheng[7:
4],dis5);
ymq8421U8(lucheng[11:
8],dis6);
ymq8421U9(lucheng[15:
12],dis7);
displayU10(clk,dis0,dis1,dis2,dis3,dis4,dis5,dis6,dis7,HEX0,HEX1,HEX2,HEX3);
endmodule
(二)用结构描述实现出租车计费器电路系统设计
生成的taxicount、ymq8421和display元件图形符号只是分别代表分立的电路设计结果,并没有形成系统。
顶层设计文件就是调用taxicount、ymq8421和display三个功能元件,将它们组装起来,成为一个完整的设计。
taxi.bdf是本例的顶层文件,实现的功能是将里程和路程动态显示出来,时间间隔是5秒,如图3—8所示.
图3—8taxi顶层设计图
在Altera公司的软件工具QuartusⅡ(WindowsXP环境下)中编译和波形仿真后得到的波形如图3—9示:
图3—9taxi。
bdf的仿真波形图
3。
2硬件实现
3。
2。
1引脚锁定
对出租车计费器进行实验验证时,需要确定用DE2开发板的哪些输入/输出端口(PIO)来表示设计电路的输入输出。
根据DE2开发板提供的实验模式,可选择电平开关SW2~SW0作为出租车计费器的控制信号;选择HEX4~HEX0作为里程和车费的输出显示。
出租车计费器与DE2中的目标芯片引脚连接的全部关系见表3-1。
表3—1出租车计费器与DE2中的目标芯片引脚连接关系表
端口名称
PIO名称
芯片引脚
端口名称
PIO名称
芯片引脚
stop
DPDT_SW[0]
PIN_N25
hex2[1]
HEX2[1]
PIN_V22
start
DPDT_SW[1]
PIN_N26
hex2[2]
HEX2[2]
PIN_AC25
pause
DPDT_SW[2]
PIN_P25
hex2[3]
HEX2[3]
PIN_AC26
cin
OSC_50
PIN_N2
hex2[4]
HEX2[4]
PIN_AB26
cin0
OSC_50
PIN_N2
hex2[5]
HEX2[5]
PIN_AB25
hex0[0]
HEX0[0]
PIN_AF10
hex2[6]
HEX2[6]
PIN_Y24
hex0[1]
HEX0[1]
PIN_AB12
hex3[0]
HEX3[0]
PIN_Y23
hex0[2]
HEX0[2]
PIN_AC12
hex3[1]
HEX3[1]
PIN_AA25
hex0[3]
HEX0[3]
PIN_AD11
hex3[2]
HEX3[2]
PIN_AA26
hex0[4]
HEX0[4]
PIN_AE11
hex3[3]
HEX3[3]
PIN_Y26
hex0[5]
HEX0[5]
PIN_V14
hex3[4]
HEX3[4]
PIN_Y25
hex0[6]
HEX0[6]
PIN_V13
hex3[5]
HEX3[5]
PIN_U22
hex1[0]
HEX1[0]
PIN_V20
hex3[6]
HEX3[6]
PIN_W24
hex1[1]
HEX1[1]
PIN_V21
hex4[0]
HEX4[0]
PIN_U9
hex1[2]
HEX1[2]
PIN_W21
hex4[1]
HEX4[1]
PIN_U1
hex1[3]
HEX1[3]
PIN_Y22
hex4[2]
HEX4[2]
PIN_U2
hex1[4]
HEX1[4]
PIN_AA24
hex4[3]
HEX4[3]
PIN_T4
hex1[5]
HEX1[5]
PIN_AA23
hex4[4]
HEX4[4]
PIN_R7
hex1[6]
HEX1[6]
PIN_AB24
hex4[5]
HEX4[5]
PIN_R6
hex2[0]
HEX2[0]
PIN_AB23
hex4[6]
HEX4[6]
PIN_T3
3.2.2编程下载
将程序下载到DE2开发板上,扳动SW0~SW2,组成控制信号,从七段数码管HEX4~HEX0上观察里程和车费.
第4章仿真过程
4。
1建立工程
(1)点击file→newprojectwizard,新建工程目录和工程文件czjf,得如图4-1所示。
图4—1新建工程和工程文件
(2)Next后进入工程文件选择,输入新文件czjf,必须注意该文件名必须与将要编辑的程序模块名相同,如图4-2所示。
图4—2添加新文件
(3)然后Next设置器件信息,接下来一直Next直到结束工程建立。
4.2建立VerilogHDL文件
(1)单击file→new,进入下面选择界面,选择VerilogHDLFile→OK。
如图4-3所示。
图4-3建立VerilogHDL文件
(2)在编辑窗口输入源程序,保存,编译,如图所示.
图4-4输入源程序
4。
3建立波形文件
(1)单击file→new,进入下面选择界面,选择VectorWaveformFile→OK.如图4-5所示。
图4-5建立波形文件
(2)设置相关端口信号,设置之后保存波形文件,重新进行编译。
4。
4仿真结果
各模块模拟仿真结果如下:
(1)计算里程和车费模块taxicount模块定义输入输出端口如下:
clk:
全局时钟信号,这里为1Hz的时钟。
stop:
当stop=0时,车停止;stop=1时,车没停止。
start:
当start=0时,车起动,但没有走;start=1时,车开动了.
pause:
当pause=0时,车暂停;pause=1时,车不暂停。
chefei:
表示车费.
lucheng:
表示里程。
在Altera公司的软件工具QuartusⅡ(WindowsXP环境下)中编译和波形仿真后得到的波形如图3—2所示:
、
图3—2计算里程和车费模块的仿真波形
(2)七段显示译码器模块ymq8421程序定义输入输出端口如下:
a:
输入的4位二进制数。
hex:
输出的1位十六进制数。
在Altera公司的软件工具QuartusⅡ(WindowsXP环境下)中编译和波形仿真后得到的波形如图3-4所示:
图3—4七显示译码器的仿真波形
(3)动态显示模块display模块定义输入输出端口如下:
Clk:
全局时钟信号,这里为1Hz的时钟。
dis0,dis1,dis2,dis3,dis4,dis5,dis6,dis7:
译码模块输出的数据.
HEX0,HEX1,HEX2,HEX3:
七段数码管显示的数据。
在Altera公司的软件工具QuartusⅡ(WindowsXP环境下)中编译和波形仿真后得到的波形如图3-6所示:
图3—6动态显示的仿真波形
(4)出租车计费器电路程序定义输入输出端口如下:
clk:
全局时钟信号,这里为1Hz的时钟.
stop:
当stop=0时,车停止;stop=1时,车没停止.
start:
当start=0时,车起动,但没有走;start=1时,车开动了.
pause:
当pause=0时,车暂停;pause=1时,车不暂停。
HEX0,HEX1,HEX2,HEX3:
七段数码管显示的数据。
在Altera公司的软件工具QuartusⅡ(WindowsXP环境下)中编译和波形仿真后得到的波形如图3-7所示:
图3-7用行为描述的出租车计费器电路系统仿真波形图
结论
本文主要介绍了出租车计费器的VerilogHDL的设计与实现,其可以在Altera公司的DE2开发板等可编程器件来实现。
其中介绍了计算里程和车费模块的设计与实现,七段显示译码器的设计与实现,动态显示模块的设计与实现.
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,以前对它的认知只是限于纸面的阶段,没有什么具体概念,这次课设我才真正触摸到它,了解了它。
在两周的课程设计中,我学到了很多的东西,从刚开始时的一筹莫展,到后来的渐通关窍,每一步走过来都有豁然开朗的感觉,也对下一步多了一份期待和信心。
每解决一个问题,心里都会特别兴奋,特别有成就感。
刚开始计划用for循环语句加上case语句来实现功能,但在摸索了好多次仍行不通时不得不放弃这种想法,改用always块和if语句来实现循环.编好程序后,在上箱时,点阵有一行一直不亮,换了两次导线,还是不行,在确定程序和接线都没问题的前提下,于是怀疑锁定该行的管脚有问题,换了一个管脚后,终于成功的作出了预期的结果。
通过这次课程设计,我学会了利用Verilog语言编写一些简单的小程序,学会了使用编程软件QuartusII,会了从多个角度思考问题,更学会了寻找问题,分析问题以及解决问题的方法。
受益匪浅。
参考文献
[1]阎石,电子技术基础.高等教育出版社,2007年.
[2]郑兆兆,艳艳等.EDA课程设计指导书,2010年.
[3]王金明,数字系统设计与VerilogHDL.
[4]黄正瑾,在系统编程技术及其应用。
南京:
东南大学出版社,1997.
[5]彭介华。
电子技术课程设计指导.北京:
高等教育出版社,1997.
[6]李国丽,朱维勇.电子技术实验指导书。
合肥:
中国科技大学出版社.
[7]郑家龙,王小海,章安元。
集成电子技术基础教程.北京:
高等教育出版社,2002.