基于VerilogHDL设计的出租车计价器之欧阳历创编.docx
《基于VerilogHDL设计的出租车计价器之欧阳历创编.docx》由会员分享,可在线阅读,更多相关《基于VerilogHDL设计的出租车计价器之欧阳历创编.docx(23页珍藏版)》请在冰豆网上搜索。
基于VerilogHDL设计的出租车计价器之欧阳历创编
西华年夜学课程设计说明书
时间:
2021.02.09
创作人:
欧阳历
题目:
出租车计价器
专业:
信息工程
年级:
级
学生:
潘帅
学号:
3308020****
指导教师:
林竞力
完成日期:
6月6日
摘 要:
本文介绍了一种采取可编程逻辑器件(FPGA/CPLD)进行出租车计费器的设计思想以及实现办法。
本设计实现了出租车计费器所需的一些基本功能,计费金额包含起步价、里程计费、等待计时计费等。
该设计采取模块化设计,在QuartusII9.0软件平台下,采取VerilogHDL硬件描述语言描述和模拟仿真了分频模块、计程模块、计费模块、计时模块,译码以及静态扫描显示模块,完成了出租车计费器仿真设计和硬件电路的实现。
关键词:
FPGA,出租车计费器,Quartus,VerilogHDL
Abstract:
Thisarticledescribesthedesignideasandmethodsofthetaximeter,throughtheprogrammablelogicdevice(FPGA/CPLD).Thedesignofataximetertoachievetherequiredbasicfunctions,Thetotalofbillingincludedthestartingprice,metered,andwaitfortimebilling.ThroughtheQuartusII9.0SoftwarePlatform,UsingVerilogHDLlanguagecompletedthedescriptionandsimulationoffrequencymodule,themetermodule,Billingmodule,timingmodules,decoding,dynamicscanningdisplaymodule.IT
Ithascompletedthetaximetersimulationandthehardwarecircuit.
Keywords:
FPGA,Taximeter,Quartus,VerilogHDL
1.前言
随着出租车行业的成长,对出租车计费器的要求也越来越高。
最近几年出租车行业成长迅速,在全国有几千万家出租车公司。
因此出租车计费器市场是庞年夜的。
而出租车计费器成为不成缺少的一部分。
出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的成长,出租车计价器技术也在不竭进步和提高。
国内出租车计价器已经经历了4个阶段的成长。
从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路取代部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器,以及FPGA计价器.出租车计价器计费是否准确,运数据的管理是否便利都是人们最关注的。
该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。
信息社会的现代电子产品,性能越来越高,庞杂度越来越年夜,更新法度也越来越快。
实现这种进步的主要原因就是微电子技术和电子技术的成长。
而电子技术的成长后者的核心就是电子设计自动化技术。
EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新功效而开收回的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、联系、综合、优化、规划布线及仿真,直至完成对特定目标芯片的适配编译、逻辑映射和编程下载等工作。
没有EDA技术的支持,想要完成超年夜规模集成电路的设计制造是不成想象的;反过来,生产制造技术的不竭进步又势必对EDA技术提出新的要求。
本设计采取VerilogHDL语言来设计实现出租车计费系统,具有良好的电路行为描述和系统描述的能力,并在语言易读性和条理化、结构化设计方面,表示了强年夜的生命力和应用潜力。
源法度经ALTERA的QuartusII9.0软件调试优化,通过下载到特定芯片后,可应用于实际的出租车计费系统中。
本次课程设计巩固和运用了所学课程,通过理论联系实际,提高了阐发、解决技术实际问题的自力工作能力,通过对一个出租车计费器的设计,进一步熟悉了数字电路系统设计、制作与调试的办法和步调。
2.总体计划设计
2.1设计要求
该出租车计价器实现功能:
1、行程≤4公里,且等待累计时间≤2分钟,起步费为8.0元。
2、行程4公里外,以每公里1.0元,等待累计时间2分钟外,以每分钟以1.0元计费。
3、能显示行驶公里数、等待累计时间和最后的总用度。
4、能通过修改法度来对计费要求实现修改。
用VerilogHDL语言设计合适上述功能要求的出租车计费器,并用条理化设计办法设计该电路,各计数器的计数状态用功能仿真的办法验证,并通过有关波形确认电路设计是否正确。
2.2计划论证与选择
计划一:
采取数字电路控制,其原理图如图11所示。
采取传感器件,输出脉冲信号,经过放年夜整形最为移位寄存器的脉冲,实现计价,可是考虑到这中电路性能不敷稳定,故障率高,如要做到很精确多功能则其规模较年夜,难调试。
并且电路不实用。
图21数字电路计划
计划二:
采取单片机控制,通过单片机作为主控器,利用1602字符液晶作为显示电路,采取外部晶振作为时钟脉冲,通过按键可以便利调节,以下是计划三的系统流程图,本计划主要通过软硬结合可以很容易实现要求,其灵活性也还不错,本钱也不高。
计划原理图如下图所示:
图22单片机控制计划
计划三:
采取EDA技术,根据条理化设计理论,该设计问题自顶向下可分为分频模块,控制模块计量模块、译码和静态扫描显示模块,其系统框图如图13所示:
图23PFGA控制计划
计划总结:
通过各个计划的比较,首先数字电路控制不实用,不重点考虑,单片机计划虽有较年夜的活动空间,能实现所要求的功能并且能在很年夜的水平上扩展功能,虽然还可以便利的对系统进行升级,但考虑到单片机计划软件设计调试较为繁琐,最年夜限制还是在与本课程设计是利用EDA技术实现,另一方面采取可编程逻辑器件设计,外围电路简单,模块话设计便利原理清晰,灵活性强,并且完成和扩展附加功能性强。
综上,本设计采取计划三。
2.3设计思想及原理
出租车的一般计费过程为:
出租车载客后,启动计费器,整个系统开始运行,里程计数器和时间计数器从0开始计数,用度计数器从8开始计算。
再根据行驶里程或停止等待的时间按以上的标准计费。
若在行驶状态,则计程器开始加计数,当路程超出四公里后,计费器以每公里1元累加。
若出租车停止等待状态,则计时器开始加计数,那时间超出两分钟后,计费器以每分钟1元累加。
出租车达到目的地停止后,停止计费器,显示总用度。
根据课程设计要求计价器可根据车轮转数计算路程,车轮每转一圈送一个脉冲波,假设每转一圈为2米,车轮每转一圈送一个脉冲波(可用传感器检测送出脉冲),本设计为了好模拟仿真假设的是车轮转动100圈才产生一个脉冲,即是一个脉冲是代表200米,则经过5分频器后是每1Km送一个脉冲到里程计算模块,这样便利在软件里面仿真观察,若要下载到实物应用中去,通过实际车轮周长自己设置不合的分频电路来达到产生任意精度的计程距离模块。
其主要原理框图如图13所示。
而当车停止的时候通过分频模块产生秒脉冲,通过计时要求来产生计费,本设计重点就在计费控制模式模块和计费模块这两年夜模块的设计,则根据出租车计费器的工作过程,其主要原理框图如图13所示。
本系统采取分条理、分模块的方法设计,其本系统组成框图如下所示。
其中行驶路程计数模块、等待时间计数模块和计费模块,用来统计路程、等待时间和总用度,控制模块是用来控制计费模块,数码管显示模块用来显示行驶的公里数、等待累计时间和总用度等信息。
3.单位模块设计
本系统采取条理化、模块化的设计办法,设计顺序为自下向上。
首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。
为了便于在数码管里显示,这里的路程、时间和用度计数器均用十六进制暗示。
3.1分频模块
将时钟信号进行分频,分出的频率供后面的计程模块和计时模块用,以及后面的数码显示扫描模块城市用到。
3.1.1计数器分频模块
此模块的功能是对总的时钟进行分频,分出的频率是让计数器用的,因为总的时钟是50M的。
设计该模块的时候用了一个32位的计数器,当计数器计到25_000000的时候产生时钟。
在仿真的时候为了快速的便利观察,设计了一个5分频的电路。
在此时假设车轮每转一圈为2米,则转动100圈送一个脉冲,即是200米,则在经5分频后,每1Km送一个脉冲到里程计算模块。
同理,若知道车轮直径,即可算出分频比来设置合理的分频电路,当下载到实物时还是用的是2HZ的时钟
图31计数器的分频模块
3.1.2计数器分频模块仿真结果
图32计数器的分频模块功能仿真
从波形可以看出当reset为低电平的时候clk为零,当reset为高电平的时候clk的高电平占了clk_50M的5个周期,低电平也占了clk_50M的5个周期。
3.1.3数码管分频模块
此模块的功能是对总的时钟进行分频,分出的频率是让数码管用的,当计数器计到50_000的时候产生时钟。
此模块在整体仿真时,没有用到数码管显示,在此不在赘述以及仿真波形,在实物下载时必不成少,其模块如下图:
图33数码块分频模块
3.2计程模块
3.2.1计程模块电路
此模块的功能是计算出租车行驶的路程。
在出租车启动并行驶的过程中(即复位/启动信号reset为1,行驶/停止信号start为1),那时钟clk是上升沿的时候,系统即对路程计数器distance的里程计数器进行加计数,当路程超出三公里时,系统将输出标记正脉冲distance_enable。
其模块如下:
图34计程模块
3.2.2计程模块仿真结果
图35计程模块功能仿真
从波形图可以看出在时钟的控制下,当reset为高电平且start为高电平的时候distance开始计数,当计到年夜于三的时候输出了distance_enable为高电平。
准备对第4公里以后的脉冲进行加计费。
3.3计时模块
3.3.1计时模块电路
此模块用于计算停车等待的时间。
图中s代表秒计时,m代表分钟数计时。
在出租车行进中,如果车辆停止等待,计数器则在1Hz信号clk的上升沿进行加计数,每60次产生进位脉冲使分钟计数器位进行加计数,当累计等待时间超出2(不包含2分钟)分钟时,输出标记time_enable正脉冲信号。
其模块如下图所示:
图36计时模块
3.3.2计时模块的仿真结果
1.两分钟之内(包含两分钟)的仿真结果如下所示:
从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,time_enable为低电平。
图37计时模块功能仿真(2分钟内)
2.两分钟之外(不包含两分钟)的仿真结果如下所示:
图38计时模块功能仿真(2分钟外)
从波形图可以看出在clk的控制下当start为低电平reset为高电平的时候时间计数,那时间年夜于二分钟的时候,time_enable为输出高电平,为超出2分钟后以每增加一分钟对计费进行加计数。
3.4控制模块
3.4.1控制模块电路
控制模块用于为计费模块提供时钟,当start高电平的时候选择公里计费,输出的时钟信号为distance_enable,当start低电平的时候选择时间计费,输出的时钟信号为time_enable。
这样控制模块便控制着其计费模式。
模块如下图所示:
图39控制模块
3.4.2计时模块的仿真结果
1.公里计费的仿真结果如下所示:
图310控制模仿真图(公里计费)
从波形图可以看出当start为高电平的时候输出的信号是distance_enable。
此时控制模块选出的是distance_enable,即选出距离使能脉冲计费,则实现了按公里计费。
2.时间计费的仿真结果如下所示:
图311控制模仿真图(按时计费)
从波形图可以看出当start为低电平的时候输出的信号是time_enable。
即选择了按等待时间脉冲计费。
仿真上的公里脉冲和时间脉冲是为了仿真而简单的设置的波形,并不是是前面信号组合检测而成,在后面整体组合电路中为进行模块的组合。
这里为了便于功能仿真区别,没有设置过多的脉冲,以影响辩白控制模块所选择的计费模式。
3.5计费模块
3.5.1控制模块电路
用度计数器模块用于出租车启动后,根据行驶路程和等待时间计算用度。
当出租车停车时,时钟reset用于将用度计数器复位为起步价6.0元;当车处于行驶状态时,select_clk信号选择distans_enable,若满4公里后路程每满1公里,用度计数器加1元;当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,用度计数器加1元。
图312计费模块
3.5.2计费模块的仿真结果
图313计费模块仿真
从波形图可以看出reset用于将用度计数器复位为起步价8.0元;由于本仿真select_clk信号并不是是系统选择出来的公里脉冲和计时脉冲,通过认为设定,不影响其观察功能效果。
3.6数码管显示模块
图314数码管显示模块
数码管有两种显示方法静态显示与静态显示,由于在本文中用到了八个数码管所以选择了静态显示,在时钟的控制下,当reset为高电平的时候把用度,公里,时间译码输出。
这里没有数码管显示仿真效果不明显,即不给予仿真。
以上单位模块设计完毕,通过每个单位模块代码的设计以及仿真验证每个模块的真确性,为确保后面整体模块电路的正确性奠定了基础。
4.整体顶层模块设计
4.1整体顶层模块电路
各模块设计仿真实现后,可辨别创建成元件符号。
顶层就是将各分模块用VerilogHDL语言或者是图形办法连接起来,即可实现系统电路。
其VerilogHDL源代码详见其附录。
其生成的顶层原理图如下所示:
图41整体顶层电路原理图
5.系统功能仿真及调试
本设计采取QuartusII软件进行仿真设计,QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
5.1系统仿真及调试
各个单位模块完成后,即可将分模块和顶层模块进行仿真测试,同时可根据设计要求加入测试输入条件。
仿真后获得的相应输出结果与预先的结果想比较,若不相符,则应修改设计,直到相符为止。
为了仿真获得明显的效果,最好能能下载到带数码管的试验想上进行直接的数字观察。
由于条件有限,为了能使仿真效果明显,采取了不带译码显示的波形仿真,其电路原理图如下:
图51系统仿真调试电路
首先,对以下输入输出端作以下解释和说明,如表41:
表51测试端口说明
输入输出端口说明
端口
类型
功能界说
Clk_50M
Input
全局时钟。
在时钟上升沿,计算用度。
reset
Input
整体复位,在reset=0时,等待计时为0
start
Input
选择计费模式
Start=1,计程计费
Start=0,计时计费
m[7:
0]
Output
等待时间的输入(分)
s[7:
0]
Output
等待计时的输入(秒)
distance[7:
0]
Output
所行路程的输入
fee7:
0]
Output
总用度输出
功能仿真结果验证如下如下所示:
a.为行驶中未停时的系统电路仿真结果:
图52系统仿真调试电路(a)
b.为行驶中停止时(在两分钟之内)的系统电路仿真结果:
图53系统仿真调试电路(b)
c.为行驶中停止时(在两分钟之外)的系统电路仿真结果:
图54系统仿真调试电路(c)
从(a)可以看出当reset为1时,用度计数器为8元,系统启动,start=1暗示出租车行驶,distance_enable每产生一个脉冲,路程计数器加1;路程4公里内,用度坚持8不变,超出4公里,用度计数器进行加计数,每增加1公里用度加1元,此时等待时间计数器不变。
而根据(b),(c)的仿真波形可知,当reset为1时,系统启动,start=0暗示出租车处于停止等待状态,此时等待时间计数器计数,在2分钟等待时间内,用度计数器不变;等待时间超出2分钟后,每增加1分钟,用度计数器增加1元,此时路程计数器坚持不变。
从以上仿真可看出该出租车计价器整体功能实现都能完成,出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车起步价格,暂停,停止等功能各种计费,并能够通过LCD显示车费数目。
本款出租车计价器包含总价输出、显示路程,显示其等待时间等功能。
另外,如果再任意输入该出租车计价器的计费标准,那么,它的适用规模可能就更广泛了。
(个人认为可调的话,会引起驾驶员改价作弊的问题,本设计没有外围可调电路,只能根据法度修改,因而防作弊。
)
6.总结与体会
通过学习了数字数字系统设计和VerilogHDL语言,对EDA技术有了一些了解,但那厚厚的一本书讲的都是理论的工具。
通过这本次课程设计,我才把学到的工具与实践相结合。
从中对所学的知识有了更进一步的理解。
刚开始拿到这题目的时候感觉还是有难度,但着手设计时,慢慢查询资料后感觉不是很难,但在设计时又现了许多细节上的问题。
对QuartusII9.0操纵流程还不到位,通过自己网上看Quartus软件基操纵视频,首先把Quartus的功能和各操纵用途功能详细的了解了一遍,这使我年夜添信心能把设计做出来,相信只有细心、耐性才干把设计搞好,在这次的出租车计价器设计中,对Verilog模块的基本结构和基本语法更为熟悉。
在设计法度时,不克不及妄想一次就将整个法度设计好,频频修改、不竭改进是法度设计的必经之路,要养成注释法度的好习惯,一个法度的完美与否不但仅是实现功能,而应该让人一看就能明白你的思路,这样也为交流提供了便利,为以后编程打下基础。
为期两周的EDA课程设计已经结束,从挑选课设题目,查阅资料,到研究出总体设计,详细设计,再到最后的编程上机调试,修改法度,完善法度,收获颇多。
熬炼了自己自力发明问题、阐发问题和通过检查相关资料来解决问题的能力。
使自己扩年夜了知识面,提高了知识水平,借助仿真软件,不但可以把课堂中所学到的知识,直接加以运用,并且还可以把各个别离的知识组合为一个整体,真正做到理论联系实际的重要性。
使自己在专业知识和入手能力上有了很年夜的提高。
另外通过本次设计,使我认识到自己对VerilogHDL应用编程能力有很年夜的欠缺,需要在以后的学习中进一步提高。
学校给我们安插课程设计,年夜年夜地加深了我们对理论知识的理解,同时有意识的培养了我们的立异思想。
我想这类似的课程设计是为我们提供了良好的实践平台。
致谢
由于本次设计是第一次做关于EDA课程设计,不像单片机那样顺手,感谢老师的指导,感谢老师对本次论文的认真检查审阅。
由于时间有限和经验还尚欠缺,缺乏之处还望老师予以批评指正。
另外,我还要感谢学校能安插这次课程设计,为我们学习相关专业提供了良好的实践平台。
参考文献
[1]王金明.数字系统设计与VerilogHDL[M].北京.电子工业出版社,
[2]夏宇闻.Verilog数字系统设计教程[M].北京:
北京航天航空年夜学出版社,
[3]华成英.电子技术[M].北京.中央广播电视年夜学出版社,
[4]孙鹏,陈景.数字电子技术基础与设计.年夜连:
年夜连理工年夜学出版社,.4.
[5]王长宏.VHDL设计实例及其仿真与综合.北京:
北京航天航空年夜学出版社,
附录A:
单位模块VerilogHDL源代码
A.1计数器的分频模块VerilogHDL源代码
modulediv(clk_50M,clk,reset);//端口的界说
inputclk_50M,reset;//总的时钟是50M
outputclk;//分频后输出的时钟
regclk;
reg[31:
0]count;//32位的计数器
always@(posedgeclk_50Mornegedgereset)//异步复位
begin
if(!
reset)
begin
clk<='d0;
count=32'd0;
end
elseif(count==3'd100)//判断计时器记到了100吗?
begin
count<=32'd0;//计到100计数器清零
clk<=~clk;//输出的时钟取反
end//endbegin
elsecount<=count+1'd1;//没计到100计数器加一
end//endalways
endmodule//结束分频模块
A.2数码管的分频模块VerilogHDL源代码
modulediv1(clk_50M,clk1,reset);//端口的界说
inputclk_50M,reset;//总的时钟是50M
outputclk1;//分频后输出的时钟1KHZ
regclk1;
reg[31:
0]count;//32位的计数器
always@(posedgeclk_50Mornegedgereset)//异步复位
begin
if(!
reset)
begin
clk1<='d0;
count=32'd0;
end
elseif(count==2'd50)//判断计时器记到了50吗
begin
count<=32'd0;//计到50计数器清零
clk1<=~clk1;//输出的时钟取反
end//endbegin
elsecount<=count+1'd1;//没计到50计数器加一
end//endalways
endmodule//结束分频模块
A.3计程模块VerilogHDL源代码
moduledistancemokuai(clk,start,reset,distance,distance_enable);
//端口的界说
inputclk,start,reset;
output[7:
0]distance;//输出的公里
reg[7:
0]distance;
outputdistance_enable;//控制计费的公里信号
regdistance_enable;
always@(posedgeclkornegedgereset)//异步复位
begin
if(!
reset)//低电平复位
begin
distance<=8'd0;
end
elseif(start)//start高电平有效
begin
if(distance[3:
0]==9)//判断distance的低四位计到了9没有
begin
distance[3:
0]<=4'd0;//计到9清零
if(distance[7:
4]==9)//判断distance的高四位计到了9没有
distance[7:
4]<=4'd0;//计到9清零
elsedistance[7:
4]<=distance[7:
4]+1'd1;
//d