基于verilog語言的出租車計費器_第1頁
基于verilog語言的出租車計費器_第2頁
基于verilog語言的出租車計費器_第3頁
基于verilog語言的出租車計費器_第4頁
基于verilog語言的出租車計費器_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于verilog語言的出租車計費器 院別:_計算機與通信工程學(xué)院_專業(yè)名稱:_電子信息工程_班級學(xué)號:_學(xué)生姓名:_指導(dǎo)教師:_陳海宴_隨著出租車行業(yè)的發(fā)展,對出租車計費器的要求也越來越高。最近幾年出租車行業(yè)發(fā)展迅速,在全國有幾千家出租車公司。因此出租車計費器市場是龐大的。而出租車計費器成為不可缺少的一部分。信息社會的現(xiàn)代電子產(chǎn)品,性能越來越高,復(fù)雜度越來越大,更新步伐也越來越快。實現(xiàn)這種進步的主要原因就是微電子技術(shù)和電子技術(shù)的發(fā)展。而電子技術(shù)的發(fā)展后者的核心就是電子設(shè)計自動化技術(shù)。EDA是指以計算機為工作平臺,融合了應(yīng)用電子技術(shù)、計算機技術(shù)、智能化技術(shù)的最新成果而開發(fā)出的電子CAD通用軟件

2、包,它根據(jù)硬件描述語言HDL完成的設(shè)計文件,自動完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局布線及仿真,直至完成對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。沒有EDA技術(shù)的支持,想要完成超大規(guī)模集成電路的設(shè)計制造是不可想象的;反過來,生產(chǎn)制造技術(shù)的不斷進步又必將對EDA技術(shù)提出新的要求。本文采用verilog語言來設(shè)計實現(xiàn)出租車計費系統(tǒng),經(jīng)過ModelSim和Quartus仿真將其實例化。如果將該設(shè)計再結(jié)合到實際應(yīng)用中,那么,只需改變設(shè)計中計費要求,就可以應(yīng)用到出租車上。另外,如果再任意輸入該出租車計價器的計費標(biāo)準(zhǔn),那么,它的適用范圍可能就更廣泛了。一、 設(shè)計要求 (1) 行程3公里內(nèi)

3、(包括3公里),且等待累計時間2分鐘內(nèi)(包括2分鐘),起步費為6.0元;(2)3公里外(不包括3公里)以每公里1.0元,等待累計時間2分鐘外(不包括2分鐘)以每分鐘以1.0元計費。(3)能顯示行駛公里數(shù)、等待累計時間和最后的總費用。本計費器的顯示范圍為099元,計價分辨率為1元;計程器顯示范圍為099公里,分辨率為1公里;計時器的顯示范圍是分鐘的顯示范圍是099, 辨率為1分鐘。秒的顯示范圍是059。分辨率為1秒。二 、工作原理 出租車的一般計費過程為:出租車載客后,啟動計費器,整個系統(tǒng)開始運行,里程計數(shù)器和時間計數(shù)器從0開始計數(shù),費用計數(shù)器從6開始計算。再根據(jù)行駛里程或停止等待的時間按以上的

4、標(biāo)準(zhǔn)計費。若在行駛狀態(tài),則計程器開始加計數(shù),當(dāng)路程超過三公里后,計費器以每公里1元累加。若出租車停止等待狀態(tài),則計時器開始加計數(shù),當(dāng)時間超過兩分鐘后,計費器以每分鐘1元累加。出租車到達(dá)目的地停止后,停止計費器,顯示總費用。根據(jù)出租車計費器的工作過程,本系統(tǒng)采用分層次、分模塊的方式設(shè)計,其本系統(tǒng)組成框圖如下所示。其中行駛路程計數(shù)模塊、等待時間計數(shù)模塊和計費模塊,用來統(tǒng)計路程、等待時間和總費用,控制模塊是用來控制計費模塊,數(shù)碼管顯示模塊用來顯示行駛的公里數(shù)、等待累計時間和總費用等信息。系統(tǒng)框圖如下所示:三、各模塊的設(shè)計本系統(tǒng)采用層次化、模塊化的設(shè)計方法,設(shè)計順序為自下向上。首先實現(xiàn)系統(tǒng)框圖中的各子

5、模塊,然后由頂層模塊調(diào)用各子模塊來完成整個系統(tǒng)。為了便于顯示,這里的路程、時間和費用計數(shù)器均用十六進制表示。3.1分頻模塊:3.1.1計數(shù)器的分頻模塊:計數(shù)器的分頻模塊具體框圖: 此模塊的功能是對總的時鐘進行分頻,分出的頻率是讓計數(shù)器用的,因為總的時鐘是50M的。設(shè)計該模塊的時候用了一個32位的計數(shù)器,當(dāng)計數(shù)器計到25_的時候產(chǎn)生時鐘。在仿真的時候為了方便觀察設(shè)計了一個8分頻的電路。當(dāng)下載的時候用的是2HZ的時鐘 。計數(shù)器的分頻模塊VerilogHDL源代碼:module div(clk_50M,clk,reset);/ 端口的定義input clk_50M,reset;/ 總的時鐘是50Mo

6、utput clk;/分頻后輸?shù)臅r鐘 reg clk;reg 31:0 count;/32位的計數(shù)器always (posedge clk_50M or negedge reset)/異步復(fù)位begin if(!reset) begin clk=d0; count=32d0;endelse if(count=32d25_)/ 判斷計時器記到了25_嗎 begin count=32d0;/計到25_計數(shù)器清零 clk=clk;/輸出的時鐘取反 end/end begin else count=count+1d1;/ 沒計到25_計數(shù)器加一end/end alwaysendmodule / 結(jié)束分

7、頻模塊仿真的結(jié)果: 從波形可以看出當(dāng)reset為低電平的時候clk為零,當(dāng)為高電平的時候clk的高電平占了clk_50M的八個周期,低電平也占了clk_50M的八個周期。3.1 .2數(shù)碼管的分頻模塊:具體框圖: 此模塊的功能是對總的時鐘進行分頻,分出的頻率是讓數(shù)碼管用的,因為總的時鐘是50M的。設(shè)計該模塊的時候用了一個32位的計數(shù)器,當(dāng)計數(shù)器計到50_000的時候產(chǎn)生時鐘。在仿真的時候為了方便觀察設(shè)計了一個8分頻的電路。數(shù)碼管的分頻模塊VerilogHDL源代碼:module div1(clk_50M,clk1,reset);/ 端口的定義input clk_50M,reset;/ 總的時鐘是

8、50Moutput clk1;/分頻后輸?shù)臅r鐘 reg clk1;reg 31:0 count;/32位的計數(shù)器always (posedge clk_50M or negedge reset)/異步復(fù)位begin if(!reset) begin clk1=d0; count=32d0;endelse if(count=32d50_000)/ 判斷計時器記到了50_000嗎 begin count=32d0;/計到50_000計數(shù)器清零 clk1=clk1;/輸出的時鐘取反 end/end begin else count=count+1d1;/ 沒計到50_000計數(shù)器加一end/end

9、alwaysendmodule / 結(jié)束分頻模塊3.2 計程模塊:計程模塊的框圖:此模塊的功能是計算出租車行駛的路程。在出租車啟動并行駛的過程中(即復(fù)位/啟動信號reset為1,行駛/停止信號start為1),當(dāng)時鐘clk是上升沿的時候,系統(tǒng)即對路程計數(shù)器distance的里程計數(shù)器進行加計數(shù),當(dāng)路程超過三公里時,系統(tǒng)將輸出標(biāo)志正脈沖distance_enable。計程模塊的VerilogHDL源代碼:module distancemokuai(clk,start,reset,distance,distance_enable);/端口的定義input clk,start,reset;outpu

10、t 7:0 distance;/ 輸出的公里reg 7:0 distance;output distance_enable;/ 控制計費的公里信號reg distance_enable;always(posedge clk or negedge reset)/異步復(fù)位begin if(!reset)/低電平復(fù)位 begin distance=8d0; end else if(start)/ start 高電平有效 begin if(distance3:0=9)/判斷distance的低四位計到了9沒有 begin distance3:0=4d0;/計到9清零 if(distance7:4=9)

11、 /判斷distance的高四位計到了9沒有 distance7:4=4d0;/計到9清零 else distance7:4= distance7:4+1d1;/ distance的高四位沒有計到9的時候加一 end else distance3:0=distance3:0+1d1;/ distance的低四位沒有計到9的時候加一 end/end startend/end always/*產(chǎn)生distance_enable信號*/always(posedge clk or negedge reset)beginif(!reset)begin distance_enable8d2)/ 大于公里三

12、的時候 begin distance_enable=1d1;/輸出distance_enable信號 endend/end alwaysendmodule/結(jié)束計程模塊計程模塊的仿真結(jié)果:從波形圖可以看出在時鐘的控制下,當(dāng)reset為高電平且start為高電平的時候distance開始計數(shù),當(dāng)計到大于三的時候輸出了distancedistance_enable為高電平。3.3計時模塊:計時模塊的框圖:此模塊用于計算停車等待的時間。在出租車行進中,如果車輛停止等待,計數(shù)器則在1Hz信號clk的上升沿進行加計數(shù),每60次產(chǎn)生進位脈沖使分鐘計數(shù)器位進行加計數(shù),當(dāng)累計等待時間超過2(不包括2分鐘)分鐘

13、時,輸出標(biāo)志time_enable正脈沖信號。計時模塊的VerilogHDL源代碼:module timemokuai(clk,reset,start,s,m,time_enable);/ 端口的定義input clk,reset,start;output 7:0 s;/輸出的秒output 7:0 m;/輸出的分output time_enable;/輸出的控制計費的信號reg 7:0 s;reg 7:0 m;wire time_enable; always(posedge clk or negedge reset)/異步復(fù)位beginif(!reset)/低電平有效begin /復(fù)位s=8

14、d0;m=8d0;endelse if(!start)/start 信號低電平有效beginif(s3:0=9)/ 秒的低四位是9 begin s3:0=4d0;/清零 if(s7:4=5) / 秒的高四位是5 begin s7:4=4d0; /清零 if(m3:0=9) / 分的低四位是9 begin m3:0=4d0; /清零 if(m7:4=9) / 分的高四位是9 m7:4=4d0; /清零 else m7:4=m7:4+1d1; / 分的高四位不是9加一endelse m3:0=m3:0+1d1; /分的低四位不是9加一endelse s7:4=s7:4+1d1; / 秒的高四位不是

15、5加一endelse s3:08d2)&(s7:0=8d0)?1d1:1d0;/產(chǎn)生time_enable信號。endmodule/結(jié)束計時模塊計時模塊的仿真結(jié)果:兩分鐘之內(nèi)(包括兩分鐘)的仿真結(jié)果如下所示:從波形圖可以看出在clk的控制下當(dāng)start為低電平reset為高電平的時候時間計數(shù),time_enable為低電平。兩分鐘之外(不包括兩分鐘)的仿真結(jié)果如下所示:從波形圖可以看出在clk的控制下當(dāng)start為低電平reset為高電平的時候時間計數(shù),當(dāng)時間大于二分鐘的時候,time_enable為輸出高電平。3.4控制模塊:控制模塊的框圖:控制模塊用于為計費模塊提供時鐘,當(dāng)start高電平

16、的時候選擇公里計費,輸出的時鐘信號為distance_enable,當(dāng)start低電平的時候選擇時間計費,輸出的時鐘信號為time_enable,控制模塊的VerilogHDL源代碼:module control(start,distance_enable,time_enable,select_clk);input start,distance_enable,time_enable;output select_clk;/輸出選擇的時鐘信號wire select_clk;/*當(dāng)start高電平的時候選擇公里計費,輸出的時鐘信號為distance_enable,當(dāng)start低電平的時候選擇時間計費

17、,輸出的時鐘信號為time_enable*/assign select_clk=start?distance_enable:time_enable; endmodule/結(jié)束控制模塊控制模塊的仿真結(jié)果:(1)公里計費的仿真結(jié)果如下所示:從波形圖可以看出當(dāng)start為高電平的時候輸出的信號是distance_enable。(2)時間計費的仿真結(jié)果如下所示:從波形圖可以看出當(dāng)start為低電平的時候輸出的信號是time_enable。3.5 計費模塊:計費模塊的框圖:費用計數(shù)器模塊用于出租車啟動后,根據(jù)行駛路程和等待時間計算費用。當(dāng)出租車停車時,時鐘select_clk用于將費用計數(shù)器復(fù)位為起步價

18、6.0元;當(dāng)車處于行駛狀態(tài)且滿3公里時,select_clk信號選擇distans_enable,此后路程每滿1公里,費用計數(shù)器加1元;當(dāng)出租車處于停止等待狀態(tài)且時鐘滿2分鐘時,select_clk信號選擇time_enable信號,時間每滿1分鐘,費用計數(shù)器加1元。 計費模塊的VerilogHDL源代碼如下所示:module feemokuai(select_clk,reset,fee,clk);input select_clk,reset,clk;output7:0 fee; /輸出的費用reg 7:0 fee;always(posedge clk or negedge reset)/異步

19、復(fù)位begin if(!reset)/低電平有效 begin fee=8d6;/起步為六元 end else if(select_clk=1d1) begin if(fee3:0=4d9)/費用的低四位是不是計到了9 begin fee3:0=4d0;/計到9清零 if(fee7:4=4d9)/ 費用的高四位是不是計到了9fee7:4=4d0; /計到9清零 else fee7:4=fee7:4+1d1;/ 費用的高四位沒有計到9加1endelse fee3:0=fee3:0+1d1;/ 費用的低四位沒有計到9加1end/end beginend/end alwaysendmodule /結(jié)束

20、計費模塊計費模塊的仿真結(jié)果:3.6 數(shù)碼管顯示模塊:3.6.1 數(shù)碼管顯示模塊的框圖:數(shù)碼管有兩種顯示方式動態(tài)顯示與靜態(tài)顯示,由于在本文中用到了八個數(shù)碼管所以選擇了動態(tài)顯示,在時鐘的控制下,當(dāng)reset為高電平的時候把費用,公里,時間譯碼輸出。3.6.2 數(shù)碼管顯示的VerilogHDL源代碼:module scan_led(clk1,dig,seg,distance,s,m,fee);input clk1;input7:0 distance,fee;/輸入的公里,費用。input7:0 s;/輸入的秒input7:0 m; / 輸入的分。output7:0 dig; / 譯碼結(jié)果output

21、7:0 seg; / 數(shù)碼管的選擇。reg 7:0 r_dig;/ 譯碼結(jié)果輸出寄存器reg 7:0 r_seg; /數(shù)碼管的選擇寄存器。reg 3:0 disp_dat;reg3:0 a;assign dig=r_dig;assign seg=r_seg;always(posedge clk1)begin a=a+1d1; /數(shù)碼管的選擇endalways(posedge clk1)begincase(a) 4d0: disp_dat=distance7:4;/公里的高四位用第一個數(shù)碼管顯示。4d1: disp_dat=distance3:0;/公里的低四位用第二個數(shù)碼管顯示。4d2: di

22、sp_dat=m7:4; /時間分的高四位用第三個數(shù)碼管顯示。4d3: disp_dat=m3:0; /時間分的低四位用第四個數(shù)碼管顯示4d4: disp_dat=s7:4; /時間秒的高四位用第五個數(shù)碼管顯示。4d5: disp_dat=s3:0; /時間秒的低四位用第六個數(shù)碼管顯示。4d6: disp_dat=fee7:4;/費用的高四位用第七個數(shù)碼管顯示。4d7: disp_dat=fee3:0; /費用的低四位用第八個數(shù)碼管顯示。default: disp_dat=4b1010;endcasecase(a)4d0:r_dig=8b; / 選擇第一個數(shù)碼管4d1:r_dig=8b; /

23、選擇第二個數(shù)碼管4d2:r_dig=8b; / 選擇第三個數(shù)碼管4d3:r_dig=8b; / 選擇第四個數(shù)碼管4d4:r_dig=8b; / 選擇第五個數(shù)碼管4d5:r_dig=8b; / 選擇第六個數(shù)碼管4d6:r_dig=8b; / 選擇第七個數(shù)碼管4d7:r_dig=8b; / 選擇第八個數(shù)碼管default:r_dig=8b;endcaseend/ *譯碼結(jié)果*/always(disp_dat)begin case(disp_dat) 4h0: r_seg=8hc0;/ 顯示0 4h1: r_seg=8hf9;/ 顯示1 4h2: r_seg=8ha4;/ 顯示2 4h3: r_se

24、g=8hb0;/ 顯示3 4h4: r_seg=8h99;/ 顯示4 4h5: r_seg=8h92;/ 顯示5 4h6: r_seg=8h82;/ 顯示6 4h7: r_seg=8hf8;/ 顯示7 4h8: r_seg=8h80;/ 顯示8 4h9: r_seg=8h90;/ 顯示9 default: r_seg=8hbf;endcaseendendmodule/結(jié)束譯碼模塊3.7 頂層模塊:各模塊設(shè)計仿真實現(xiàn)后,可分別創(chuàng)建成元件符號。頂層就是將各分模塊用Verilog HDL語言或者是圖形方法連接起來,便可實現(xiàn)系統(tǒng)電路。3.7.1 頂層模塊的VerilogHDL源代碼:module ta

25、ximeter(clk_50M,reset,start,seg,dig);/端口的定義input clk_50M,reset,start;/總的時鐘信號,復(fù)位信號,開始信號output7:0 seg,dig;/數(shù)碼管的輸出wire 7:0distance;/公里wire 7:0 s;/秒wire 7:0 m;/分wire7:0 fee;/費用wire clk; /計數(shù)時鐘wire distance_enable;/公里控制費用的信號wire time_enable; /時間控制費用的信號wire select_clk; /控制信號wire clk1; /數(shù)碼管顯示的時鐘/*模塊的調(diào)用*/div

26、 u0(.clk_50M(clk_50M),.clk(clk),.reset(reset);/調(diào)用計數(shù)分頻模塊div1 u1(.clk_50M(clk_50M),.clk1(clk1),.reset(reset);/調(diào)用數(shù)碼管顯示分頻模塊Distancemokuai u2(.clk(clk),.start(start),.reset(reset),.distance(distance),.distance_enable(distance_enable); /調(diào)用計程模塊timemokuai u4(.clk(clk),.reset(reset),.start(start),.s(s),.m(m)

27、,.time_enable(time_enable); /調(diào)用計時模塊control u3(.start(start),.distance_enable(distance_enable),.time_enable(time_enable),.select_clk(select_clk); /調(diào)用控制模塊feemokuai u5(.reset(reset),.fee(fee),.select_clk(select_clk),.clk(clk); /調(diào)用計費模塊scan_led U6(.clk1(clk1),.dig(dig),.seg(seg),.distance(distance),.s(s)

28、,.m(m),.fee(fee);/調(diào)用數(shù)碼管顯示模塊endmodule/結(jié)束頂層模塊四、測試部分 測試VerilogHDL源代碼:timescale 1ns/100ps/時間的單位與時間的精度module taximeter_tb;/驗證的模塊名字reg clk_50M,reset,start;/輸入wire7:0 distance;/輸出的公里wire 7:0 s;/輸出的秒wire 7:0 m;/輸出的分wire 7:0 fee;/輸出的費用always #10 clk_50M=clk_50M;/時鐘的周期是20nsinitial /激勵設(shè)定begin reset=0; clk_50M=0; #1000 reset=1; start=1; #10000 start=0; # $finish;/結(jié)束仿真end initial/實施監(jiān)控 begin $monitor($time,clk_50M=%d,reset=%d,start=%d,distance=%d,s=%d, fee=%d,m=%d,n ,clk_50M,reset,start,distance,s,m,fee); end /調(diào)用被測試的模塊/div u0(.clk_50M(clk_50M),.cl

溫馨提示

  • 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

提交評論