基于FPGA的出租车计价器设计04207Word文档格式.docx

上传人:b****5 文档编号:19257970 上传时间:2023-01-04 格式:DOCX 页数:17 大小:77.53KB
下载 相关 举报
基于FPGA的出租车计价器设计04207Word文档格式.docx_第1页
第1页 / 共17页
基于FPGA的出租车计价器设计04207Word文档格式.docx_第2页
第2页 / 共17页
基于FPGA的出租车计价器设计04207Word文档格式.docx_第3页
第3页 / 共17页
基于FPGA的出租车计价器设计04207Word文档格式.docx_第4页
第4页 / 共17页
基于FPGA的出租车计价器设计04207Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于FPGA的出租车计价器设计04207Word文档格式.docx

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

基于FPGA的出租车计价器设计04207Word文档格式.docx

在等待信号未作用时,来一个时钟脉冲信号,里程值加1。

该模块还包含一个路程计费标志的小模块,输出一个路程计费的信号。

(5)等待状态模块:

等待信号作用时,该模块可以记录等待的时间,并产生等待计费的信号。

(6)车费计数模块:

按行驶里程收费,分为白天和黑夜。

白天收费标准:

起步费为12.00元,超过3公里按4元/公里,车暂停超过三分钟按2元/分钟计算。

黑夜收费标准:

起步费为15.00元,超过3公里按5元/公里,车暂停超过三分钟按1元/分钟计算。

(7)输出控制模块:

分时输出里程、等待时间、费用三个信号,实现动态显示功能。

(8)译码模块:

实现将车费计数模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。

4.1分频模块:

4.1.1分频模块的框图

图3.1.1分频器的实体图

此模块的功能是对总的时钟进行分频,总的时钟是50M。

计数分频器使用五个这样基本的分频器(35分频)组合而成,控制模块分频器使用三个这样基本的分频器(35分频)组合而成。

4.1.2分频模块的VHDL程序

LIBRARYIEEE。

USEIEEE.STD_LOGIC_1164.ALL。

USEIEEE.STD_LOGIC_UNSIGNED.ALL。

ENTITYPULSEIS

PORT(CLK0:

INSTD_LOGIC。

FOUT:

OUTSTD_LOGIC)。

ENDPULSE。

ARCHITECTUREONEOFPULSEIS

BEGIN

PROCESS(CLK0)

VARIABLECNT:

STD_LOGIC_VECTOR(2DOWNTO0)。

VARIABLEFULL:

STD_LOGIC。

BEGIN

IFCLK0'

EVENTANDCLK0='

1'

THEN

IFCNT="

100"

CNT:

="

000"

FULL:

='

ELSE

=CNT+1。

0'

ENDIF。

FOUT<

=FULL。

ENDPROCESS。

ENDONE。

4.2.1计程模块的框图:

此模块的功能是计算出租车行驶的路程。

在出租车启动并行驶的过程中(开始/结束信号SS为1,行驶/等待信号WR为1),当时钟clks是上升沿的时候,系统即对路程计数器JC的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲LCJFBZ。

4.2.2计程模块的VHDL程序

(1)计程程序

libraryieee。

useieee.std_logic_1164.all。

useieee.std_logic_unsigned.all。

entityJCis

port(clks,SS,WR:

instd_logic。

LC:

BUFFERstd_logic_vector(7downto0))。

endentityJC。

architectureoneofJCis

SIGNALQ1,Q0:

std_logic_vector(3downto0)。

begin

process(clks,SS,WR,LC)

VARIABLESW:

STD_LOGIC_VECTOR(1DOWNTO0)。

begin

SW:

=SS&

WR。

IFSW="

00"

ORSW="

01"

THENQ1<

0000"

Q0<

ELSIFSW="

11"

=Q1。

=Q0。

ELSIFCLKS'

EVENTANDCLKS='

IFQ1=9ANDQ0=9THEN

Q1<

ELSIFQ0=9THENQ1<

=Q1+1。

ELSEQ1<

=Q0+1。

(2)计程标志程序

entityLCJFBZis

port(SS:

--SS开始/复位信号,

INSTD_LOGIC_VECTOR(7DOWNTO0)。

LCJFBZ:

OUTstd_logic)。

endentityLCJFBZ。

architectureTWOofLCJFBZis

PROCESS(SS,LC)

IFSS='

OR(LC(7DOWNTO4)="

ANDLC(3DOWNTO0)<

4)THENLCJFBZ<

ELSELCJFBZ<

ENDPROCESS。

ENDTWO。

4.3计时模块:

4.3.1计时模块的框图:

此模块用于计算停车等待的时间。

在出租车行进中,如果车辆停止等待,计数器则在信号clk的上升沿进行加计数,当累计等待时间超过2(不包括2分钟)分钟时,输出标志DDJFBZ正脉冲信号。

4.3.2计时模块的VHDL程序:

ENTITYDDZTIS

PORT(CLK,SS:

DDBZ:

DDJFBZ:

OUTSTD_LOGIC。

DDSJ:

OUTSTD_LOGIC_VECTOR(7DOWNTO0))。

ENDENTITYDDZT。

ARCHITECTUREONEOFDDZTIS

PROCESS(CLK,SS,DDBZ)

VARIABLEQ1,Q0:

STD_LOGIC_VECTOR(3DOWNTO0)。

THENQ1:

Q0:

DDJFBZ<

ELSIFDDBZ='

THEN

IFCLK='

ANDCLK'

EVENTTHEN

Q1:

ELSIFQ0=9THENQ1:

ELSEQ1:

IF(Q1>

0ORQ0>

3)THEN

DDJFBZ<

DDSJ(7DOWNTO4)<

DDSJ(3DOWNTO0)<

4.4计费模块:

4.4.1计费模块的框图:

费用计数器模块用于出租车启动后,根据行驶路程和等待时间计算费用。

当出租车启动时,SS为高电平,用于将费用计数器复位为起步价10元;

当车处于行驶状态且满3公里时,select_clk信号选择distans_enable,此后路程每满1公里,费用计数器加1元;

当出租车处于停止等待状态且时钟满2分钟时,select_clk信号选择time_enable信号,时间每满1分钟,费用计数器加1元。

4.4.2计费模块的VHDL的程序:

libraryIEEE。

useIEEE.STD_LOGIC_1164.ALL。

useIEEE.STD_LOGIC_UNSIGNED.ALL。

--定义函数名

PACKAGEPACKEXP1IS

FUNCTIONbcd_add8(AIN,BIN:

instd_logic_vector)

RETURNstd_logic_vector。

END。

--描述函数体

PACKAGEBODYPACKEXP1IS

std_logic_vector)

RETURNstd_logic_vectorIS

typetype_bcdx4isarray(3downto0)ofstd_logic_vector(4downto0)。

VARIABLESA,SB:

type_bcdx4。

VARIABLECI:

std_logic_vector(4downto0)。

VARIABLESOUT:

std_logic_vector(11downto0)。

CI:

=(others=>

'

)。

SOUT:

foriin0to1loop--0-1的循环

SA(i):

=('

&

AIN(i*4+3downtoi*4))+('

BIN(i*4+3downtoi*4))+("

CI(i))。

if((SA(i)(4)='

)or(SA(i)(3downto0)>

9))then

SB(i):

=SA(i)+"

00110"

else

=SA(i)。

endif。

CI(i+1):

=SB(i)(4)。

SOUT(i*4+4downtoi*4):

=SB(i)。

endloop。

RETURNSOUT。

ENDFUNCTIONbcd_add8。

USEWORK.PACKEXP1.ALL。

ENTITYJFis

PORT(SS:

--开始/停止信号,低电平停止,高电平开始

DN:

--白天黑夜控制,高电平夜间,低电平白天

INstd_logic_vector(7downto0)。

--路程

--等待时间

--路程计费标志

--等待计费标志,高电平时等待开始计费,低电平不计费

FY:

--总费用

ENDENTITYJF。

architectureONEofJFis

--讨论白天/黑夜?

路程计费?

等待计费?

PROCESS(SS,DN,LC,DDSJ,DDJFBZ,LCJFBZ)

VARIABLEFY1:

STD_LOGIC_VECTOR(11DOWNTO0)。

FY1:

000000000000"

ELSIFDN='

THEN--白天时

IFLCJFBZ='

THEN--起始价

FY1(11DOWNTO4):

=(OTHERS=>

--9

FY1(3DOWNTO0):

1001"

ELSE--加收路程费

=bcd_add8(LC,LC)。

=bcd_add8(FY1,LC)。

--多一个脉冲加收3,则变成LC*3

ELSIFLCJFBZ='

FY1(11DOWNTO5):

FY1(4DOWNTO0):

10010"

--12

--每一个脉冲加收4,则变成LC*4

IFDN='

IFDDJFBZ='

THEN--未到等待收费时间

=FY1。

--不加收

ELSE--加收路程费

=bcd_add8(FY1,DDSJ)。

--一超过等待收费时间,就立即加收等待时的每个脉冲加2

ELSIFDDJFBZ='

--一超过等待收费时间,就立即加收等待时的每个脉冲加1

FY<

=FY1(7DOWNTO0)。

4.6控制模块:

4.6.1控制模块的框图:

控制模块用于对数码管里程、时间、费用显示的选择,起到位选的作用,实现了数码管动态显示,节省了芯片的资源。

4.6.2控制模块的VHDL程序:

(1)sel1模块

entitysel1is

port(clk1:

s1:

outstd_logic_vector(1downto0))。

endsel1。

architecturesel_arcofsel1is

process(clk1)

variablecnt:

std_logic_vector(1downto0)。

ifclk1'

eventandclk1='

then

IFcnt="

10"

thencnt:

elsecnt:

=cnt+1。

s1<

=cnt。

endprocess。

endsel_arc。

(2)sel2模块

entitysel2is

port(sel2:

instd_logic_vector(1downto0)。

s2:

outstd_logic_vector(2downto0))。

endsel2。

architecturebbb_arcofsel2is

process(sel2)

casesel2is

when"

=>

s2<

110"

101"

011"

whenothers=>

ZZZ"

endcase。

endbbb_arc。

5.1顶层模块的VHDL程序:

useieee.std_logic_arith.all。

entityczcis

port(clk,wr,ss,dn:

dnpd:

outstd_logic。

shuc1,shuc0:

outstd_logic_vector(6downto0)。

weix:

endentityczc。

architectureoneofczcis

componentbz

PORT(AJ:

BZ:

endcomponent。

componentpulse

componentddzt

componentjc

port(clks,SS,WR:

componentlcjfbz

port(SS:

componentjf

componentymq

port(din:

instd_logic_vector(7downto0)。

dout1:

dout0:

outstd_logic_vector(6downto0))。

componentxzsc

port(jc,jf,wt:

sel:

q:

outstd_logic_vector(7downto0))。

componentsel1

port(clk1:

s1:

componentsel2

s2:

signala,b,c,d,e,f,i,j,m,n:

std_logic。

signalx,y,z,W:

std_logic_vector(7downto0)。

signalk:

dnpd<

=a。

u1:

bzportmap(aj=>

dn,bz=>

a)。

u2:

ss,bz=>

b)。

u3:

wr,bz=>

c)。

u4:

pulseportmap(clk0=>

clk,fout=>

d)。

u5:

d,fout=>

i)。

u6:

i,fout=>

j)。

u7:

j,fout=>

m)。

u8:

m,fout=>

n)。

u9:

jcportmap(clks=>

n,ss=>

b,wr=>

c,lc=>

z)。

u10:

ddztportmap(clk=>

b,ddbz=>

c,ddjfbz=>

f,ddsj=>

y)。

u11:

lcjfbzportmap(ss=>

b,lc=>

z,lcjfbz=>

e)。

u12:

jfportmap(ss=>

b,dn=>

a,lc=>

z,ddsj=>

y,lcjfbz=>

e,ddjfbz=>

f,fy=>

x)。

u13:

xzscportmap(jf=>

x,jc=>

z,wt=>

y,sel=>

k,q=>

W)。

u14:

sel1portmap(clk1=>

j,s1=>

K)。

u15:

sel2portmap(sel2=>

K,s2=>

weix)。

u16:

ymqportmap(din=>

W,dout1=>

shuc1,dout0=>

shuc0)。

endarchitectureone。

5.3输入、输出信号说明:

DN:

dayORnight控制;

SS:

StartORstop控制;

WR:

waitORrun控制;

CLK:

输入

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

当前位置:首页 > 自然科学 > 物理

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

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