EDA出租车计费器++完整版文档格式.docx
《EDA出租车计费器++完整版文档格式.docx》由会员分享,可在线阅读,更多相关《EDA出租车计费器++完整版文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
![EDA出租车计费器++完整版文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/16/51522843-8b65-4405-bfa4-3d241328a5a1/51522843-8b65-4405-bfa4-3d241328a5a11.gif)
分别用四位数码管显示金额和里程,各有两位小数,行程3公里内,起步费为6元,超过3公里,以每公里1.3元计费。
1.12设计要求
1、设计正确,方案合理。
界面友好,使用方便。
程序精炼,结构清晰。
2、有详细的文档。
包括设计思路、设计仿真程序、仿真结果及相应的分析与结论。
二系统方案设计
2.1出租车计费器工作原理
实际中出租车的计费工作原理一般分成3个阶段:
(1)车起步开始计费。
首先显示起步价(本次设计起步费为6.00元),车在行驶3km以内,只收起步价5.00元。
(2)车行驶超过3km后,按每公里1.3元计费(在6.00元基础上每行驶1km车费加1.3元),车费依次累加。
(3)当等待时间累计超过2分钟按1.5元计费。
2.2基本设计思想
(1)根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。
①计数器A完成车费百位。
②计数器B完成车费十位和个位。
③计数器C完成车费角和分。
④计数器D完成计数到30(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100m的功能。
(2)车费的显示:
由动态扫描电路来完成。
用专用模块来实现,完成数据的输入即动态数据的显示。
(3)根据层次化设计理论,该设计问题自顶向下可分为车速控制模块、计数模块、译码和动态扫描显示模块,其系统框图如下图所示:
图1.1出租车系统框图
三具体模块实现
3.11车速控制模块
当启停键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;
当处于停止状态时,暂停发出脉冲,此时计费器和里程显示模块相应的停止计数。
3.12里程计数模块
里程计数模块实现对于出租车在行驶过程的里程计数功能;
当行驶里程大于3KM时,本模块中信号变为1;
clk每来一个上升沿,里程计数模块实现一次计数,里程数加1。
计数车速控制模块发出的脉冲,并将计数显示动态显示出来,每来一个脉冲里程值加0.1(控制器每发一个脉冲代表运行了0.1公里)。
3.13计费计数模块
计费模块启动reset信号,根据输入的clk信号变化,调节费用的计数,用c0、c1、c2、c3显示费用。
其初值为6,当里程数超过3公里后,才接受计数车速控制模块发出的脉冲的驱动,并且将计数显示动态显示出来,每一个脉冲其数值加0.12,当收费超过20时数值加0.18当启停键为启动状态(高电平时),模块根据车速选择和基本车速发出响应频率的脉冲驱动计费器和里程显示模块进行计数;
3.14动态扫描模块
动态扫描电路将计数器A、B、C的计费状态用数码管显示出来,在一个进程中只允许一个信号上升沿作为触发条件。
一个功能模块最好按上升沿信号分多个进程完成,各进程间用信号连接。
该模块经过8选1选择器将计费数据(4位BCD码)、计程数据(4位BCD码)动态选择输出。
其中计费数据送入显示译码模块进行译码,最后送至百元、十元、元、角为单位对应的数码管上显示;
计程数据送入显示译码模块进行译码,最后送至以公里为单位的数码管上显示。
3.3总模块
taxi的计费器的原理图:
将各模块的原理图对应的端口连接。
图3.2出租车计数器原理图
四程序调试及局部仿真结果
4.1车速控制模块仿真结果
图4.1车速控制模块时序仿真结果
图4.1
clk为基本输入时钟即(基本车速);
k为可调车速,通过改变k来模拟车速变化;
start为启停开关,当start为‘1’时内部计数器开始计数;
reset为复位开关,用于复位车速控制模块中定义的count2计数器;
clkout为脉冲输出,当输入车速越大,脉冲输出频率越高,计数周期变短,而clkout输出脉冲的意义为,参照于基本车速所反映的一个相对时间量,一个脉冲代表在该车速下行进了0.1km;
仿真出现的问题:
该车速控制模块中的reset复位端作为整个系统复位的一个环节,配合其他模块的的复位一起使用,做到对计数模块和显示模块的清零和归位。
但是在该模块中单独时,效果不能体现,因为在该模块中,它复位的是内部定义的计数器count2,在脉冲输出clkout中不能体现使其为‘0’,只是不在出现状态变换,在全体仿真和硬件测试中,reset可以体现复位和清零。
4.2测试结果展示
a:
起步价格b:
开始行使未超过三公里
c:
超过三公里后d:
累计时间超过2分钟后
图4.2计费和里程测试结果显示
图4.2中a为起始起步价格,6元。
b为出租车开始行使,未超出三公里保持起始价格不变。
c为超过三公里后按每公里加1.2元计算。
d为累计时间等待超过2min后按每分子安1.5元计算。
五课程设计的心得与体会
短短一周的EDA课程设计已经接近尾声了,我们从挑选课设题目,查阅资料,到研究出总体设计,详细设计,然后分工合作,再到最后的编程上机调试,修改程序,完善程序,收获颇多。
出租车计费器系统的设计已全部完成,能按预期的效果进行模拟汽车启动,停止、暂停等功能,并设计动态扫描电路显示车费数目。
车暂停时停止计费。
若停止清零,等待下一次计费的开始。
出租车计费系统设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及PLD器件速度快,使用方便,便于修改等特点。
本设计在使用方面居庸一点的价值。
由于时间有限和经验是平的欠缺,不足之处还望老师予以指正。
在这一周里我们再次熟悉和增强了对VHDL语言的基本知识,熟悉利用VHDL语言对常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来。
VHDL硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可以使用语言的形式来进行数字系统的硬件结构、行为的描述,直接设计数字电路硬件系统。
通过编程、下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能;
更加了解和加深了对编制和调试程序的技巧,进一步提高了上机动手能力,培养了使用设计综合电路的能力,养成了提供文档资料的习惯和规范编程的思想。
本次的课程设计将各个单一的模块实现其功能后,学会通过原理图或顶层文件把各模块连接,从而实现对出租车自动计费。
课设注重的不仅是把理论知识巩固,而且应把理论和实际相结合,把知识应用到生活中。
在课设过程中,遇到了不少问题,数码管无法正常显示,计费不按要求等。
通过的对源代码的修改,发现了一些易忽略的细节。
课设考验的是思维逻辑能力,对知识的灵活应用,当然,合作精神是不可或缺的。
课设时间不长,要在短时间内完成绝不是个人力量能达到的,要学会集众人之精华,还要善于利用已有的工具为自己服务,开拓思维。
课设让我们认识到所学本科知识的真正实用性,只是这门课开始研究的第一步。
在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;
在设计课程过程中遇到问题是很正常的,但应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
最后,我们衷心的感谢课设期间一直指导和陪伴着我们的老师。
六参考资料
[1]候伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计.修订版。
西安电子科技大学出版社,1999
[2]张昌凡,等.可编程逻辑器件及VHDL设计技术.广州:
华南理工大学出版社,2001
[3]曾繁泰,陈美金.VHDL程序设计.北京:
清华大学出版社,2001
[4]潘松,等.VHDL实用教程.成都:
电子科技大学出版社,2000
附件
1、车速控制模块源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSPEEDIS
PORT(
CLK,RESET,START:
INSTD_LOGIC;
K:
INSTD_LOGIC_VECTOR(4DOWNTO0);
CLKOUT:
OUTSTD_LOGIC
);
ENDSPEED;
ARCHITECTUREAOFSPEEDIS
SIGNALCOUNT1:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALTEMPCLK,CLKS:
STD_LOGIC;
SIGNALKINSIDE:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
KINSIDE<
="
00000"
-K;
CLKS_LABEL:
PROCESS(RESET,CLK)
VARIABLECOUNT2:
STD_LOGIC_VECTOR(4DOWNTO0);
IFRESET='
1'
THEN
COUNT2:
;
ELSIFCLK'
EVENTANDCLK='
IFSTART='
IFCOUNT2=KINSIDETHENCOUNT2:
ENDIF;
IFNOT(K="
)THENCOUNT2:
=COUNT2+1;
IFCOUNT2="
00001"
THENTEMPCLK<
=NOTTEMPCLK;
ENDPROCESSCLKS_LABEL;
CLKOUT<
=TEMPCLK;
ENDA;
2、计程源程序如下
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYCDU99IS
PORT(CLK,RESET: