基于VHDL的出租車計價器設(shè)計共3篇_第1頁
基于VHDL的出租車計價器設(shè)計共3篇_第2頁
基于VHDL的出租車計價器設(shè)計共3篇_第3頁
基于VHDL的出租車計價器設(shè)計共3篇_第4頁
基于VHDL的出租車計價器設(shè)計共3篇_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

基于VHDL的出租車計價器設(shè)計共3篇基于VHDL的出租車計價器設(shè)計1出租車計價器是出租車行業(yè)中必不可少的一個設(shè)備,用于計算出租車的行駛距離和費用。在本篇文章中,我們將會討論一個基于VHDL的出租車計價器設(shè)計。

首先,我們需要確定該設(shè)備的基本功能。出租車計價器應(yīng)該至少包含以下功能:

1.能夠?qū)崟r監(jiān)測車速,計算出行駛的里程數(shù);

2.能夠根據(jù)不同的車型設(shè)定費率,并根據(jù)當(dāng)前里程數(shù)和費率計算出費用;

3.能夠顯示當(dāng)前的計價情況和車輛信息。

現(xiàn)在,我們可以根據(jù)這些基本功能設(shè)計出基于VHDL的計價器。

首先,我們需要確定該設(shè)備的輸入和輸出。

輸入:

1.速度傳感器:用來檢測車速并輸出速度值;

2.車型選擇器:用來選擇不同的車型,以設(shè)定相應(yīng)的費率;

3.起始和結(jié)束按鈕:用來啟動和停止計價器。

輸出:

1.LED顯示屏:用來顯示當(dāng)前里程數(shù)和費用;

2.聲音提示器:用來提示計價器已停止計費。

在VHDL中,我們可以用entity描述整個系統(tǒng)的結(jié)構(gòu)。下面是我們的entity代碼:

ENTITYTaxiMeterIS

PORT(

start:INstd_logic;--起始按鈕輸入

stop:INstd_logic;--結(jié)束按鈕輸入

speed:INinteger;--速度輸入

car_type:INinteger;--車型選擇輸入

fare:OUTinteger;--費用輸出

distance:OUTinteger;--里程數(shù)輸出

display:OUTinteger;--顯示輸出

beep:OUTstd_logic--聲音提示輸出

);

ENDTaxiMeter;

在entity中,我們定義了八個port,分別對應(yīng)了我們的八個輸入輸出。接下來,我們需要確定entity的architecture。

首先,讓我們來思考如何計算車輛的里程數(shù)。我們可以根據(jù)速度傳感器和時間間隔計算出行駛的距離。在VHDL中,我們可以用process來實現(xiàn)該功能。下面是距離計算的代碼:

distance_calculator:PROCESS(speed)

VARIABLEdistance_var:INTEGERRANGE0TO99999:=0;--里程數(shù)變量定義

VARIABLEtime_var:INTEGERRANGE0TO99999:=0;--時間變量定義

VARIABLElast_speed:INTEGER:=0;--上一次速度

BEGIN

IF(speed>0)THEN--速度值大于0,表示車輛在行駛中

IF(last_speed/=0)THEN--上一次速度值大于0,表示車輛仍在行駛中

time_var:=time_var+1;--時間間隔+1s

distance_var:=distance_var+speed/3600;--計算行駛距離

ELSE--上一次速度值等于0,表示車輛剛開始行駛

distance_var:=0;

time_var:=0;

ENDIF;

last_speed:=speed;--更新上一次速度值

ELSE

last_speed:=0;--車速為0,表示車輛已停止,清空所有變量

distance_var:=0;

time_var:=0;

ENDIF;

distance:=distance_var;--更新里程數(shù)輸出值

ENDPROCESSdistance_calculator;

以上是距離計算的代碼實現(xiàn)。

接下來,讓我們來實現(xiàn)根據(jù)車型和里程數(shù)計算費用的功能。我們可以先根據(jù)車型選擇器的輸入設(shè)定相應(yīng)的費率。然后,我們可以通過將費率乘以里程數(shù)來計算費用。下面是計費的代碼實現(xiàn):

fare_calculator:PROCESS(car_type,distance_var)

VARIABLEfare_var:INTEGERRANGE0TO99999:=0;--費用變量定義

BEGIN

CASEcar_typeIS

WHEN0=>fare_var:=distance_var*2;--車型0,費率為2元/km

WHEN1=>fare_var:=distance_var*3;--車型1,費率為3元/km

WHEN2=>fare_var:=distance_var*4;--車型2,費率為4元/km

WHEN3=>fare_var:=distance_var*5;--車型3,費率為5元/km

ENDCASE;

fare:=fare_var;--更新費用輸出值

ENDPROCESSfare_calculator;

最后,我們需要將計價信息顯示在LED屏幕上。我們可以設(shè)計數(shù)碼管控制器,根據(jù)輸入的數(shù)值來顯示相應(yīng)的數(shù)碼。以下是數(shù)碼管控制器的代碼實現(xiàn):

display_controller:PROCESS(distance_var,fare_var)

VARIABLEdisplay_var:INTEGERRANGE0TO99999:=0;--顯示變量定義

BEGIN

display_var:=distance_var*1000+fare_var;--將里程數(shù)和費用合并在一起

display:=display_var;--更新顯示輸出值

ENDPROCESSdisplay_controller;

再次需要注意的是,當(dāng)起始和結(jié)束按鈕按下時,計價器需要在LED屏幕上顯示相應(yīng)的信息,并輸出停止提示音。下面是這個功能的代碼:

process(start,stop,distance_var,fare_var)

VARIABLEstart_var:BOOLEAN:=FALSE;

BEGIN

IF(start='1'ANDstop='0')THEN

start_var:=TRUE;

ELSIF(start='0'ANDstop='1')THEN

start_var:=FALSE;

ENDIF;

IF(start_var=TRUE)THEN--計價器已經(jīng)開始計費

beep<='0';--關(guān)閉停止提示音

distance<=distance_var;--更新里程數(shù)輸出值

fare<=fare_var;--更新費用輸出值

display<=distance_var*1000+fare_var;--更新顯示輸出值

ELSE--計價器已經(jīng)停止計費

beep<='1';--開啟停止提示音

distance<=0;--清空里程數(shù)值

fare<=0;--清空費用數(shù)值

display<=0;--清空顯示數(shù)值

ENDIF;

ENDPROCESS;

至此,我們已經(jīng)設(shè)計出了一個基于VHDL的出租車計價器。該設(shè)備實現(xiàn)了實時監(jiān)測車速,計算出行駛的里程數(shù),根據(jù)不同的車型設(shè)定費率,并根據(jù)當(dāng)前里程數(shù)和費率計算出費用,以及顯示計價情況和車輛信息等基本功能。當(dāng)起始和結(jié)束按鈕按下時,該設(shè)備會在LED屏幕上顯示相應(yīng)的信息,并輸出停止提示音。該設(shè)計具有良好的可靠性和實用性,可以為出租車行業(yè)提供準(zhǔn)確、便捷的計價服務(wù)?;赩HDL的出租車計價器設(shè)計2出租車計價器是現(xiàn)代便民交通的必備設(shè)施之一,為了方便乘客和司機的使用,本文將介紹如何基于VHDL語言設(shè)計一個出租車計價器。

VHDL是一種硬件描述語言,能夠?qū)?shù)字電路進行描述和仿真,其語法結(jié)構(gòu)與其他高級語言的代碼結(jié)構(gòu)類似。本文的設(shè)計主要包括四個部分:時序控制單元、計價單元、顯示單元和輸入輸出接口。

首先,時序控制單元是整個計價器的核心,負(fù)責(zé)時鐘的生成、狀態(tài)的控制和計價流程的控制。其設(shè)計步驟如下:

1.確定時鐘的輸入和輸出信號,例如:

```

entityclockis

port(clk_in:instd_logic;--輸入時鐘

clk_out:outstd_logic);--輸出時鐘

endentity;

```

2.根據(jù)時鐘信號生成各個階段的控制信號,例如:

```

--初始化狀態(tài),顯示“請按開始鍵”

entityinit_stateis

port(clk:instd_logic;--輸入時鐘

rst:instd_logic;--復(fù)位信號

start:instd_logic;--開始計價鍵

state:outstd_logic_vector(2downto0));--控制狀態(tài)

endentity;

architectureinitofinit_stateis

signalstate_reg:std_logic_vector(2downto0);

begin

process(clk,rst)

begin

ifrst='1'then--復(fù)位信號

state_reg<="000";

elsifrising_edge(clk)then--上升沿

ifstate_reg="000"then--初始化狀態(tài)

ifstart='1'then--按開始鍵

state_reg<="001";--進入計價狀態(tài)

endif;

--...

endif;

endif;

endprocess;

state<=state_reg;

endarchitecture;

```

3.以此類推,設(shè)計各個階段的狀態(tài)控制單元。

其次,計價單元負(fù)責(zé)收集乘客上車、下車的信息,根據(jù)時間和路程計算出費用,并同時將計價器的狀態(tài)返回給時序控制單元。其設(shè)計步驟如下:

1.確定輸入信號,包括車速、時間、起點和終點距離等,并輸出計價器的狀態(tài)信號。

2.根據(jù)輸入信號進行計算,例如:

```

--計算車費

entityfare_calculatoris

port(time_in,distance_in:instd_logic_vector(15downto0);--輸入時間和距離

s1,s2,s3,s4:instd_logic;--輸入狀態(tài)信號

fare_out:outstd_logic_vector(15downto0));--輸出車費

endentity;

architecturecalcoffare_calculatoris

signaltime,distance,fare_reg:unsigned(15downto0);

--...

begin

distance<=unsigned(distance_in);--距離轉(zhuǎn)換為無符號數(shù)

time<=unsigned(time_in)/frequency;--時間轉(zhuǎn)換為時鐘周期數(shù)

process(distance,s1,s2,s3,s4)

begin

fare_reg<=(others=>'0');--車費寄存器清零

cases1is

when'1'=>--上車狀態(tài),初始化車費

fare_reg<=distance_range(distance);

when'0'=>

cases2is

when'1'=>--行駛狀態(tài)

fare_reg<=fare_range(fare_reg,time,distance);

when'0'=>

cases3is

when'1'=>--下車狀態(tài),輸出車費

fare_reg<=concat(fare_reg(15downto4),"0000");--保留車費的整數(shù)部分

--...

endcase;

endcase;

endcase;

endprocess;

fare_out<=std_logic_vector(fare_reg);

endarchitecture;

```

3.在此基礎(chǔ)上,設(shè)計其他狀態(tài)的計價單元。

第三,顯示單元是出租車計價器的重要組成部分,負(fù)責(zé)顯示車費、時間、距離等信息。其設(shè)計步驟如下:

1.確定顯示控制信號,包括顯示開關(guān)、顯示位置、顯示數(shù)字等。

2.根據(jù)顯示控制信號進行顯示,并根據(jù)計價器的狀態(tài)進行切換,如:

```

--顯示控制

entitydisplay_controlis

port(s1,s2,s3,s4:instd_logic;--輸入狀態(tài)信號

fare_in:instd_logic_vector(15downto0);--輸入車費

seg:outstd_logic_vector(6downto0);--輸出七段數(shù)碼管

an:outstd_logic_vector(3downto0));--輸出位選控制

endentity;

architecturedisplayofdisplay_controlis

signalfare_disp,time_disp,dist_disp:std_logic_vector(3downto0);

--...

begin

--車費顯示

fare_disp<=fare_in(15downto12);--取車費的整數(shù)部分,最多三位數(shù)

cases1is

when'1'=>--上車狀態(tài)

seg_disp<=fare_disp;

an_disp<="1110";

--...

whenothers=>--其他狀態(tài),顯示空

seg_disp<="1111111";

an_disp<="1111";

endcase;

endarchitecture;

```

3.在此基礎(chǔ)上,設(shè)計其他狀態(tài)的顯示單元。

最后,輸入輸出接口是計價器與外部世界交互的重要通道,包括輸入開始計價鍵、重置計價器、上車和下車鍵等,同時還要輸出車費、路程、時間等數(shù)據(jù)。其設(shè)計步驟如下:

1.確定輸入輸出信號,包括開始鍵、重置鍵、上車和下車鍵等。

2.根據(jù)輸入輸出信號進行控制,例如:

```

--輸入輸出接口

entityio_interfaceis

port(clk,rst:instd_logic;

start_in,reset_in:instd_logic;

up_down_in:instd_logic;

fare_out,distance_out,time_out:outstd_logic_vector(15downto0));

endentity;

architectureioofio_interfaceis

begin

start_out<=s1_calc_out(2);--開始鍵輸出為狀態(tài)信號的第三位

reset_out<=reset_inOR((nots1_calc_out(0))AND(nots1_calc_out(1)));--上車時可用復(fù)位

up_down_out<=s2_disp_out(1);--上車鍵與下車鍵分別對應(yīng)顯示狀態(tài)信號的第二位和第一位

--...

endarchitecture;

```

3.在此基礎(chǔ)上,設(shè)計其他輸入輸出接口。

綜上所述,基于VHDL語言的出租車計價器設(shè)計主要包括四個部分:時序控制單元、計價單元、顯示單元和輸入輸出接口。其中,時序控制單元是整個計價器的核心,計價單元負(fù)責(zé)收集乘客上車、下車的信息,顯示單元是出租車計價器的重要組成部分,輸入輸出接口是計價器與外部世界交互的重要通道。在實際應(yīng)用中,需要進一步完善和優(yōu)化各個部分的設(shè)計,以保證計價器的正確性、穩(wěn)定性和實用性?;赩HDL的出租車計價器設(shè)計3時間象箭,日月如梭。城市的發(fā)展與人們的出行方式也在不斷地變化著。現(xiàn)今,一種方便高效的出行方式是通過出租車。為了更加方便出租車司機和乘客,出租車計價器也應(yīng)運而生。本文將基于VHDL實現(xiàn)出租車計價器的設(shè)計。

一、出租車計價器的工作原理

出租車計價器分為軟件和硬件兩部分,其中硬件是計價器的核心部分。計價器硬件主要由輸入、處理、顯示三個部分組成。輸入包括司機按鍵輸入和計價器與車輛速度傳感器的輸入,其中司機按鍵區(qū)別于其他按鍵,用于輸入版面選擇計費方式和記錄車輛里程等相關(guān)信息;處理部分主要包括計算費率和計算營運里程,其中費率的計算分為起步費、加價和保價等三種方式;最后,顯示部分采用LED數(shù)碼管實現(xiàn),將計算出的費用直觀地呈現(xiàn)給司機和乘客。

二、VHDL的介紹

VHDL是種硬件描述語言,用來描述數(shù)字電路和系統(tǒng)。VHDL是VeryHigh-SpeedIntegratedCircuitHardwareDescriptionLanguage(非常高速集成電路的硬件描述語言)的縮寫。VHDL描述的不僅是數(shù)字邏輯電路,還包括復(fù)雜的控制器,并且可以進行仿真驗證。VHDL對于數(shù)字電路的設(shè)計、仿真和驗證是非常有用的工具。

三、出租車計價器的VHDL實現(xiàn)

出租車計價器的設(shè)計需要符合以下功能要求:

1.記錄車輛里程數(shù)并根據(jù)里程數(shù)計算價格。

2.計算營運時間和營運里程。

3.選擇計費方式。

4.顯示運營里程和計價金額。

在實現(xiàn)上述需求前,我們需要先定義輸入和輸出的端口。在VHDL語言中,可以通過以下語句來定義輸入和輸出端口:

entitytaximeteris

port(

--輸入端口

clk:instd_logic;

reset:instd_logic;

InSpeed:instd_logic_vector(7downto0);

--輸出端口

out_mileage:outstd_logic_vector(7downto0);

out_price:outstd_logic_vector(7downto0)

);

endtaximeter;

在上面的代碼中,只定義了一個輸入端口clk,一個復(fù)位端口reset和一個輸入端口InSpeed,以及兩個輸出端口out_mileage和out_price。

下面進行指令編寫,具體如下:

entityCounteris

Port(Clk:inSTD_LOGIC;

Reset:inSTD_LOGIC;

Ena:inSTD_LOGIC;

Init:inSTD_LOGIC;

Count:outSTD_LOGIC_VECTOR(3downto0));

endCounter;

architectureBehavioralofCounteris

signalS:STD_LOGIC_VECTOR(3downto0);

begin

process(Clk,Reset)

begin

if(Reset='1')then

S<="0000";

elsif(rising_edge(Clk))then

if(Init='1')then

S<="0000";

elsif(Ena='1')then

S<=S+'1';

endif;

endif;

endprocess;

Count<=S;

endBehavioral;

在上面的代碼中,我們定義了一個簡單的4位計數(shù)器。計數(shù)器所具備的功能如下:

1.可以進行初始化,即將其值清零。

2.可以啟用計數(shù)器,并可以使計數(shù)器逐步增加。

3.可以在任何時候通過復(fù)位器將其值清零。

接下來我們將計算出租車?yán)锍毯唾M用的代碼寫進主結(jié)構(gòu)體

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

entitytaximeteris

port(

--輸入端口

clk:instd_logic;

reset:instd_logic;

InSpeed:instd_logic_vector(7downto0);

--輸出端口

out_mileage:outstd_logic_vector(7downto0);

out_price:outstd_logic_vector(7downto0)

);

endtaximeter;

architecturebehoftaximeteris

begin

process(clk,reset)

variablemileage:integerrange0to999999:=0;

variableprice:integerrange0to99999:=0;

--記錄取車時間

variablebegin_time:integerrange0to999999:=0;

--記錄營運時間

variablerun_time:integerrange0to999999:=0;

--每秒轉(zhuǎn)化的公里數(shù)

variablerate:integerrange0to50:=0;

begin

if(reset='1')then

mileage:=0;

price:=0;

begin_time:=0;

run_time:=0;

rate:=0;

elsif(rising_edge(clk))then

if(InSpeed>127)then

if(begin_time=0)then

begin_time:=mileage;

endif;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論