基于FPGA的出租车计费器设计报告.docx

上传人:b****8 文档编号:10343403 上传时间:2023-02-10 格式:DOCX 页数:19 大小:518.60KB
下载 相关 举报
基于FPGA的出租车计费器设计报告.docx_第1页
第1页 / 共19页
基于FPGA的出租车计费器设计报告.docx_第2页
第2页 / 共19页
基于FPGA的出租车计费器设计报告.docx_第3页
第3页 / 共19页
基于FPGA的出租车计费器设计报告.docx_第4页
第4页 / 共19页
基于FPGA的出租车计费器设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于FPGA的出租车计费器设计报告.docx

《基于FPGA的出租车计费器设计报告.docx》由会员分享,可在线阅读,更多相关《基于FPGA的出租车计费器设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

基于FPGA的出租车计费器设计报告.docx

基于FPGA的出租车计费器设计报告

 

课程设计报告

 

课程名称:

电子技术课程设计

学院:

自动化专业:

自动化自控

班级:

自控1201B学号:

*************

******

前言

电子设计自动化(ElectronicsDesignAutomation—EDA)技术是现代电子工程领域的一门新技术。

它提供了基于计算机和信息技术的电路系统设计方法。

EDA技术就是依赖功能强大的计算机,对用电路描述语言描述的设计文件,自动地完成编译、化简、分割、综合、布线、优化、仿真等,直至实现既定的电子电路系统的功能。

EDA技术打破了软件设计和硬件设计间的壁垒,是一门综合性学科,一种新的技能技术。

它将设计效率和产品性能合二为一,代表了电子设计技术和电子应用技术的发展方向。

EDA技术是指以计算机为工作平台,融合应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动化设计。

在EDA技术应用中广泛采用自顶向下的设计方法设计电路工程项目的设计流程包括:

用自然语言描述功能特性和技术指标,用硬件描述语言建立系统描述→行为描述→结构描述→逻辑描述,用计算机开发软件进行功能仿真→时序仿真→硬件测试。

设计者在整个设计过程中可根据需要,随心所欲的改变器件内部结构乃至期间外部引脚功能,可以将系统电路分解为各个模块,也可以将多个模块集合在一起,而不必顾及各个器件的技术细节。

正是采用了基于可编程器件的,利用计算机完成的自顶向下的设计方法,大大减少了功能芯片的数量,减轻了设计电路板图的工作量,缩小了整体电路的体积,提高了系统的可靠性,加快了验发的速度,降低了产品设计的成本。

VHDL的全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,于83年由美国国防部发起创建,由IEEE(TheInstituteofElectricalandElectronicsEngineers电气与电子工程师学会)进一步发展,在87年作为“IEEE标准1076”发布,93年被升级为“IEEE1164”。

硬件描述语言是EDA技术的重要组成部分,VHDL作为电子设计的主流硬件描述语言,被多个EDA公司所引用。

VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,具有良好的移植性和适应性,从而大大简化了硬件设计任务,提高了电子系统设计的效率和可靠性。

用VHDL进行电子系统设计的一个很大的优点是设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。

此次课程设计我们组的项目是“出租车计价器”。

我们小组通过老师一个星期的知识讲解并自学了《FPGA设计基础》,应用QuartusⅡ软件进行了设计和编辑。

一、课程设计任务

1.1出租车计费设计目标

1首先显示起步价,车在行驶3km以内起步费为白天10元,夜晚11元。

2车行驶超过3km(含)按白天2.0元/km、夜晚3.0元/km计算标准累加计费。

3实时显示百里以内总里程以及结算金额。

4白天、夜晚以5:

00到23:

00界定。

程序及对应模块设计思路:

模块1分频器

分频器:

此模块作用主要是通过时钟脉冲分频实现不同的要求,对应现实中当车轮转两圈,表示车已经行驶100m; 

模块2计程器

计程器:

此模块作用主要是记录车辆行驶的距离,当车辆行驶的距离不满3km时,计程器中的信号cn保持为零,使计费器保持在起步价,在数码管显示为该起步价,当车辆行驶的距离大于或者等于3km时,产生的信号cn为1,并一直保持下去,此时计费器开始正常工作; 

模块3计费器

计费器:

此模块主要是记录当前车辆行驶所产生的费用,通过计程器cn信号,有两个状态,一个是保持在起步价,一个是以0.2(白天)元/km和0.3(夜晚)元/km两种方式计费。

 

模块4白天、夜晚选择器

白天、夜晚选择器:

此模块主要是控制当前车辆工作的状态时白天还是夜晚,通过按键的设置可以选择当前车辆的计费方式。

  

注:

计费器运用了两种编写方式,一种(白天)是以计数器为原型设计,一种(夜间)是直接通过程序的编写得到。

二、系统设计框图

 

 

三、系统电路设计陈述 

3.1主路控制器模块设计

1、分频器:

 

(1)作用:

分频产生计时 

(2)分频器控制模块编程程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycoun_100is

port(clk:

instd_logic;

co:

outstd_logic);

constantd:

integer:

=50;

end;

architecturew1ofcoun_100is

begin

process(clk)

variableq:

std_logic_vector(7downto0);

begin

ifclk'eventandclk='1'then

ifq=d-1thenq:

=(others=>'0');co<='1';

elseq:

=q+1;co<='0';

endif;

endif;

endprocess;

end;

(3)分频器图元文件

(4)分频器仿真图

2、计程器

(1)作用:

通过控制信号的产生,实现在前3Km的时候不产生进位cn,即cn=‘0’,此时计费器通过数码管一直显示为出租车起步价白天10元,夜晚11元,当里程数大于3Km时,产生进位cn=‘1’,让计费器开始正常计费。

(2)计程器控制模块程序:

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_unsigned.ALL;

ENTITYkiloIS

PORT(clk:

INstd_logic;

start:

INstd_logic;

stop:

INstd_logic;

k1:

OUTstd_logic_vector(3DOWNTO0);

k2:

OUTstd_logic_vector(3DOWNTO0);

k3:

OUTstd_logic_vector(3DOWNTO0);

cn:

outstd_logic);

ENDkilo;

ARCHITECTUREbehavOFkiloIS

BEGIN

PROCESS(clk,start,stop)

VARIABLEk_v:

std_logic_vector(11DOWNTO0);

BEGIN 

IF stop='1' THEN k_v:

=(OTHERS=>'0');   

ELSIF clk'EVENT AND clk='1'THEN 

IFstart='1'THEN

IFk_v(3downto0)="1001"THEN

k_v:

=k_v+"0111";

ELSEk_v(3downto0):

=k_v(3downto0)+1;

ENDIF;

IFk_v(7downto4)="1010"THEN

k_v:

=k_v+"01100000";

ENDIF;

ENDIF;

ENDIF;

IFk_v(11downto0)>="000001000000"THENcn<='1';elsecn<='0';

ENDIF;

k1<=k_v(3downto0);

k2<=k_v(7downto4);

k3<=k_v(11downto8);

END PROCESS; 

END behav;

(3)计程器图元文件

(4)计程器仿真图

3、计费器(此部分包括三部分,分别为零位、个位、十位) 

      

(1)作用:

通过计程器产生的进位信号cn,一开始的时候数码管显示的是出租车起步价10元,当进位信号cn为1时,计费器开始正常工作,0.2元/km产生费用。

 

   3.1、基本计费器控制模块程序:

零位

LIBRARY ieee; 

USE ieee.std_logic_1164.all; 

USE ieee.std_logic_unsigned.all;

entitycounter110is

port(clk:

instd_logic;

en:

instd_logic;

rest:

instd_logic;

cq:

outstd_logic_vector(3downto0);

cout:

outstd_logic);

endcounter110;

architecturebehavofcounter110is

begin

process(clk,rest,en)

variablecqi:

std_logic_vector(3downto0);

begin

ifrest='1'thencqi:

=(others=>'0');

elsifclk'eventandclk='1'then

ifen='1'then

ifcqi<8thencqi:

=cqi+2;

elsecqi:

=(others=>'0');

endif;

ifcqi=8thencout<='1';

else cout<='0';      

end if;    

end if; 

end if; 

cq<=cqi; 

end process; 

end behav;

个位

LIBRARY ieee; 

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_unsigned.ALL; 

ENTITY counter10 IS 

PORT(clk:

IN std_logic;       

en:

IN std_logic;     

rest:

IN std_logic; 

cq:

OUT std_logic_vector(3 downto 0);     

cout:

out std_logic); 

end counter10; 

architecture behav of counter10 is 

begin

process(clk,rest,en) 

variable cqi:

std_logic_vector(3 downto 0); 

begin 

if rest='1' then cqi:

=(others=>'0');

elsifclk'eventandclk='1' then

ifen='1'then

ifcqi<9thencqi:

=cqi+1;

elsecqi:

=(others=>'0');

endif;

ifcqi=9thencout<='1';

elsecout<='0';

endif;

endif;

endif;

cq<=cqi;

endprocess;

endbehav;

十位

LIBRARY ieee; 

USE ieee.std_logic_1164.all;

USE ieee.std_logic_unsigned.all; 

entity counter_10 is 

port(clk:

in std_logic;        

en:

in std_logic;  

cn:

in std_logic;  

rest:

in std_logic;  

cq:

out std_logic_vector(3 downto 0);  

cout:

out std_logic); 

end counter_10; 

architecture behav of counter_10 is 

begin 

process(clk,rest,en,cn) 

variable cqi:

std_logic_vector(3 downto 0); 

begin 

if rest='1' then cqi:

=(others=>'0');       

elsif clk'event and clk='1' then         

if cn='0' then cqi:

="0001";    

elsif en='1' then        

if cqi<9 then  cqi:

=cqi+1;       

else cqi:

=(others=>'0');    

end if;    

if cqi=9 then cout<='1';     

else cout<='0';    

end if;   

end if;       

end if;  

cq<=cqi;

end process; 

end behav; 

3.2、白天计费器

3.2.1、白天计费器组合元件图

3.2.2、白天计费器图文元件

3.2.3、仿真图

3.2.4、白天计费器组合总图

3.2.5、白天计费器组合总图元文件

3.3、夜晚计费器

3.3.1、夜晚计费程序

LIBRARY ieee; 

 

USE ieee.std_logic_1164.all; 

USE ieee.std_logic_unsigned.ALL; 

ENTITY money1 IS 

PORT(clk,stop:

 IN std_logic;     

en:

IN std_logic;      

rest:

 IN std_logic; 

m1:

OUT std_logic_vector(3 DOWNTO 0);

m2:

OUTstd_logic_vector(3DOWNTO0);

m3:

OUTstd_logic_vector(3DOWNTO0));

ENDmoney1;

ARCHITECTUREbehavOFmoney1IS

BEGIN

PROCESS(clk,en,rest)

VARIABLEm_v:

std_logic_vector(11DOWNTO0);

BEGIN

IFstop='1'thenm_v:

=(OTHERS=>'0');

elsIFrest='0'THENm_v(11downto4):

="00010001";

elsIF clk'EVENT AND clk='1' THEN       

IF  en='1' THEN    

m_v(7 downto 0):

=m_v(7 downto 0)+"00000011";         

IF "0000"&m_v(3 downto 0)>"00001001" THEN    

m_v(7 downto 0):

=m_v(7 downto 0)+"00000110";      

END IF;   

IF m_v(7 downto 4)>"1001" THEN  

m_v:

=m_v+"000001100000"; 

ENDIF;

ENDIF;

ENDIF;

m1<=m_v(3downto0);

m2<=m_v(7downto4);

m3<=m_v(11downto8);

ENDPROCESS;

ENDbehav;

3.3.2、夜晚计费器图元文件

3.3.3、夜晚计费器组合总图

3.3.4、夜晚计费器生成的总图元文件

5、白天、夜晚选择器

(1)作用:

根据白天、夜晚时间选择对应的计费模式

(2)白天、夜晚选择器程序

libraryieee;

useieee.std_logic_1164.all;

entityselcis

port(a1,a2,a3,a4,a5,a6,b1,b2,b3,b4,b5,b6:

instd_logic_vector(3downto0);

s:

instd_logic;

y:

outstd_logic_vector(23downto0));

end;

architecturem1ofselcissignala,b:

std_logic_vector(23downto0);

begin

a<=a6&a5&a4&a3&a2&a1;

b<=b6&b5&b4&b3&b2&b1;

withsselecty<=awhen'1',bwhen'0';

endm1;

(3)生成的图元文件

四、系统合成后总元件图

 

锁引脚图

六、编程下载及实验结果验证

选择模式5,由左往右看,前四个数码管显示里程数,精确到00.00km,第5个数码管不用,后三个数码管显示费用,精确到00.0元。

按键1是启动白天计价模式,按键2是停止计价,按键3是选择夜晚计价模式。

白天工作方式(不超过3km)显示基价10元

 

白天工作方式(超过3km)按照白天计价方式累加计费

 

夜晚工作方式(不超过3km)显示基价11元

 

夜晚工作方式(超过3km)按照夜晚计价方式累加计费

 

七、课程设计工作进程

我们始终以老师所说的相互合作,互相共享资料的原则为基础,再进行课程设计。

本组的设计题目为:

出租车计价器,书上的程序没有对这一方面的进行详细的说明,我们组通过在网上查找资料,在图书馆借阅了书籍,在实际操作中也是互相帮忙,顺利的完成了此次课程设计。

八、实验收获及体会

刚开始对EDA、FPGA的一无所知,经过这几天的实训慢慢的熟悉了QuartusⅡ的使用,从程序到RTL图像,再到生成的图文元件,把编译好的程序下载到实验箱中检验结果,每当遇到困难时,我总是是自己先专研一会儿,实在是找不出错就问问老师同学,直到结果出来为止,那时的喜悦不言而喻。

上周的实训只是对课本中已有的程序进行验证,虽没有真正的去了解VHDL语言的编写规则,但是从以往所学的语言也是可以看见类似的地方,大部分程序还是能够读懂的。

而这周是两个人为一组共同完成这个课的课程设计,刚开始拿到题目的时候任性的选了个最难的,结果到真正做的时候发现细小的地方好多,觉得时间来不及,一开始是无从下手,上网找了很多资料也没有和书上一样的,但是我和我的队友并没有觉得难就退缩了,我们试着减小难度,把基本的要求实现了就算是成功了。

经过一天的奋战,从一段段程序到成功完成一个个元件,最后的组合,虽然过程中有错误,但是我们并不着急,一点点的调试,终于我们成功的实现了基本的要求,虽然和书上的难度小了,但是出来正确结果的那一刻,我和我的队友都松了一口气。

虽然实训即将结束,我们学习FPGA的时间也很短,但是总是有些不舍,还觉得没有做够,不知道以后会不会用到。

总之,认真的完成了这次实训,收获的多少关键看你下了多少工夫,所谓工夫不负有心人。

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

当前位置:首页 > 幼儿教育 > 少儿英语

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

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