基于VHDL的出租車計費器設(shè)計畢業(yè)論文_第1頁
基于VHDL的出租車計費器設(shè)計畢業(yè)論文_第2頁
基于VHDL的出租車計費器設(shè)計畢業(yè)論文_第3頁
基于VHDL的出租車計費器設(shè)計畢業(yè)論文_第4頁
基于VHDL的出租車計費器設(shè)計畢業(yè)論文_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于vhdl的出租車計費器設(shè)計摘 要近年來,隨著人們生活水平的提高,出租車已經(jīng)成為人們出行必不可少的交通工具之一。而出租車計費器是出租車上的一個重要儀器,它是乘客與司機雙方的公平交易準(zhǔn)則。在出租車的需求量不斷加大的情況下,對出租車計費器系統(tǒng)的穩(wěn)定性,靈活性的要求增加,具有良好性能的計費器對于司機和乘客都是很有必要的。本文設(shè)計了一個基于vhdl的出租車計費器系統(tǒng),該系統(tǒng)分為計費和顯示兩大模塊。計費模塊是實現(xiàn)系統(tǒng)功能的核心,根據(jù)輸入信號,將里程、計費和等候時間以bcd碼形式顯示出來,顯示模塊將其譯碼輪流掃描顯示。本設(shè)計首先在quartus軟件中,用vhdl語言對各個模塊進(jìn)行設(shè)計,其次畫出頂層原理圖

2、,然后對頂層文件進(jìn)行仿真測試,最后將仿真成功的設(shè)計文件下載到eda實驗箱進(jìn)行驗證。驗證結(jié)果具有計時、計里程、計費等功能。關(guān)鍵詞:出租車計費器;vhdl;quartus ;設(shè)計design of taximeter based on vhdlabstractwith the development of peoples living standard, taxi has become an important transportation in recent years. and taxi meter is an important instrument in taxi, it is the f

3、air trade standards in both passengers and drivers. in the situation that the demand of taxi is increasing continuously and the requirements of taxi meter systems stability and flexibility are increase, the taxi meter which have a good performance is very necessary for drivers and passengers. this p

4、aper designs a taxi meter based on vhdl, the taxi meter system is divided into two modules: charge control and display control. the charge control module is the core to realize the function of the system, according to the input signal, display the mileage, charge and waiting time by bcd code. the di

5、splay module will be scan and display decoding alternately. firstly, using vhdl language compile the various parts in quartus software, and draw the top diagram. then the simulation test. finally, the success of simulation program will be downloaded into the eda experiment box. the validation result

6、 comply with the design requirements, there are many functions, as record the time, mileage and charge.key woords: taximeter; vhdl; quartus ; design 目 錄中文摘要英文摘要1 引言11.1 設(shè)計背景11.2 vhdl簡介11.3 quartus簡介32 出租車計費器的設(shè)計32.1 系統(tǒng)設(shè)計要求32.2 設(shè)計思路42.3 出租車計費器系統(tǒng)工作流程圖43 出租車計費器的實現(xiàn)53.1 出租車計費器的頂層原理圖53.2 系統(tǒng)各功能模塊的實現(xiàn)53.2.1 模

7、塊taxi:charge_control63.2.2 模塊display:display_control64 出租車計費器系統(tǒng)仿真及分析74.1 頂層實體的仿真波形74.2 計費模塊的仿真波形84.3 顯示模塊的仿真波形94.4 管腳鎖定94.5 顯示結(jié)果的幾種情況105 總結(jié)11參考文獻(xiàn)12致 謝13附 錄141 引言1.1 設(shè)計背景出租車行業(yè)在我國八十年代初開始興起,因為其方便快捷的特點受到人們的歡迎。尤其是近幾年里,人們物質(zhì)生活水平得到提高以及生活節(jié)奏加快了,很多城市的出租車行業(yè)迅速發(fā)展,出租車已經(jīng)成為人們出行的普遍選擇之一。而出租車計費器是出租車內(nèi)重要的儀器之一,它能夠規(guī)范出租車市場,

8、減小乘客與司機之間發(fā)生糾紛的可能性。要想加強出租車行業(yè)的管理,提高服務(wù)的質(zhì)量就必須要有一種功能齊全,準(zhǔn)確計量,簡單又易用的出租車計費器。因為出租車計費器計數(shù)是連續(xù)累加的,所以它可以顯示出任一時刻乘客應(yīng)付的費用。我國最初所使用的計費器只有一種功能,即計量。我國第一家生產(chǎn)計費器的是重慶起重機廠,早期的計費器就是個里程表,因為它們都是用的機械齒輪結(jié)構(gòu),只能實現(xiàn)最簡單的計程功能。如今我國有上百家企業(yè)生產(chǎn)出租車計費器,這些企業(yè)主要分布在北京,上海,廣州和沈陽等地。隨著時代的發(fā)展,第一代計費器已經(jīng)不能滿足人們的需求,科學(xué)技術(shù)的發(fā)展使第二代計費器應(yīng)運而生。它實現(xiàn)了半機械半電子化的設(shè)計,采用的是手搖計算機與機

9、械結(jié)構(gòu)相結(jié)合的方式,它不僅能實現(xiàn)計程的功能,同時還能完成計價的工作,給計費器的使用者帶來了方便。而大規(guī)模集成電路的發(fā)展又給計費器帶來了新的變化,產(chǎn)生了第三代計費器,即全電子化的計費器。它的功能變得更多,同時也在不斷完善的過程之中。在改進(jìn)和完善的過程中,產(chǎn)生了很多實用的附加功能,給人們帶來了更多的方便。例如:(1)led顯示功能。在計費器中添加數(shù)碼管,讓計費器多屏顯示的功能得以實現(xiàn);(2)永久時鐘功能。將日歷時鐘芯片運用到計費器當(dāng)中,即使是在非營運的狀態(tài)下,計費器上的時鐘也可以永久顯示;(3)存儲功能。計費器可長時間存儲多項營運數(shù)據(jù),以便于需要的時候查詢1。1.2 vhdl簡介硬件描述語言已經(jīng)有

10、幾十年的發(fā)展歷史,并且在系統(tǒng)的仿真、驗證和設(shè)計、綜合等方面得到成功的應(yīng)用。目前常用的硬件描述語言有vhdl、 verilog hdl 、abel等234。vhdl則起源于20世紀(jì)70年代末和80年代初,美國國防部提出的vhsic計劃,目標(biāo)是為下一代集成電路的生產(chǎn)、實踐階段性的工藝極限和完成10萬門級以上的電路設(shè)計而建立一種新的描述方法5。vhdl的英文全稱為very-high-speed integrated circuit hardware description language,是ieee標(biāo)準(zhǔn)化的硬件描述語言,并且已經(jīng)成為系統(tǒng)描述的國際公認(rèn)標(biāo)準(zhǔn),得到眾多eda公司的支持。vhdl具有很多

11、的優(yōu)點使它能夠被大多數(shù)人認(rèn)可,被廣泛應(yīng)用在邏輯電路的設(shè)計方面,并且成為了標(biāo)準(zhǔn)化的硬件描述語言,其優(yōu)點如下:(1)功能強大和設(shè)計靈活。一個簡潔的使用vhdl語言編寫的程序就可以描述一個復(fù)雜的邏輯電路,因為vhdl擁有強大的語言結(jié)構(gòu)6。vhdl多層次的設(shè)計描述功能可以有效地控制設(shè)計的實現(xiàn),支持設(shè)計庫和可重復(fù)使用的元件生成,還支持多種設(shè)計方式,如層次化設(shè)計、模塊化設(shè)計和同步、異步和隨機電路設(shè)計。(2)與具體器件無關(guān)。用vhdl設(shè)計硬件電路時不用先確定設(shè)計要用到哪種器件,也不用特別熟悉器件的內(nèi)部結(jié)構(gòu),這樣可以使設(shè)計人員專注于進(jìn)行系統(tǒng)設(shè)計。設(shè)計完成后,可以根據(jù)消耗的資源選擇合適的器件,而不造成資源的浪費

12、。(3)很強的移植能力。vhdl由很多不同的工具支持,同一個設(shè)計的程序可以在包括綜合工具、仿真工具、系統(tǒng)平臺等工具中使用。(4)強大的硬件描述能力。vhdl可以描述系統(tǒng)級電路和門級電路,而且描述方式多樣,可以采用行為描述、寄存器傳輸描述或者結(jié)構(gòu)描述,也可以用其混合描述方式。同時,vhdl可以準(zhǔn)確地建立硬件電路模型,因為它支持慣性延遲和傳輸延遲。vhdl的數(shù)據(jù)類型很豐富,支持標(biāo)準(zhǔn)定義的數(shù)據(jù)類型,當(dāng)標(biāo)準(zhǔn)定義的數(shù)據(jù)類型不能滿足用戶的需求時,用戶可以自己定義的所需要的數(shù)據(jù)類型,增加了設(shè)計的自由度。(5)語法規(guī)范,易于共享。當(dāng)把用vhdl編寫的代碼文件看作是程序時,它可以作為設(shè)計人員之間的交流內(nèi)容;當(dāng)把

13、它看作是文檔時,可以作為簽約雙方的合同文本。vhdl易于共享的特點,使得大規(guī)模的協(xié)作開發(fā)容易實現(xiàn)。同時,這些特點也促進(jìn)了vhdl的發(fā)展和完善。綜上所述,vhdl有很多其他的硬件描述語言所不具備的優(yōu)點。但是,vhdl仍然存在一些缺點,主要是3個方面。(1)要求設(shè)計者對硬件電路知識甚至是芯片結(jié)構(gòu)方面的知識了解較多。應(yīng)該擺脫一般的高級語言程序設(shè)計思路,因為在電路世界里的事件很多是并行發(fā)生的,并且硬件電路系統(tǒng)內(nèi)部的模塊可以是互相獨立的,也可以是互為因果的,所以,在用vhdl設(shè)計硬件電路時應(yīng)擺脫一般的高級語言程序設(shè)計思路。在設(shè)計電路時,應(yīng)先構(gòu)思電路,然后才能描述。(2)不能進(jìn)行太抽象的系統(tǒng)描述。因為ed

14、a工具無法綜合抽象性太強的系統(tǒng),故用vhdl描述系統(tǒng)電路時不能太抽象。目前的vhdl很難綜合實際的硬件電路,只能適用于系統(tǒng)建模。(3)不能描述模擬電路。對于模擬電路而言,vhdl并不是一種理想的硬件描述語言。但可以預(yù)見,未來硬件描述語言的發(fā)展方向是模擬電路和數(shù)模混合電路的描述方式。1.3 quartus簡介quartus ii 是altera公司的綜合性pld開發(fā)軟件,可以采用多種輸入方式,如vhdl、verilog hdl、ahdl(altera hardware description language)及電路圖等。它支持一些比較成熟的模塊,如lpm/megafunction宏功能模塊庫等

15、,設(shè)計者可以直接調(diào)用這些模塊,從而使設(shè)計的復(fù)雜性降低了,設(shè)計的速度也加快了。quartus ii 內(nèi)帶有綜合器和仿真器,可以完成從設(shè)計輸入到硬件配置的完整pld設(shè)計流程,減少了設(shè)計者的工作量。quartus ii 是一種綜合性的開發(fā)平臺,在quartus ii 中可以進(jìn)行系統(tǒng)級設(shè)計嵌入式的軟件開發(fā)和可編程邏輯的設(shè)計。quartus ii 越來越受到數(shù)字系統(tǒng)設(shè)計者的歡迎,是因為 quartus ii 擁有強大的設(shè)計能力和直觀易用的接口,可以在多種平臺上使用,如xp、linux以及unix等,具有完善的用戶圖形界面設(shè)計方式,運行速度快,功能集中,易學(xué)易用等特點78。2 出租車計費器的設(shè)計2.1 系

16、統(tǒng)設(shè)計要求系統(tǒng)設(shè)計要求為:(1)起步價為8.00元,起步公里為3公里;(2)超過3公里,每公里按1.00元收費;(3)單程行駛里程超過20公里,每公里租價加收50%;(4)等候時間累計1分鐘,則每分鐘折算1公里里程價。要求顯示里程、計費及等候時間。乘客上車后,按下啟動鍵,開始計費,除非同一乘客往返乘車,否則按下單程鍵,這樣當(dāng)行駛里程超過20公里時,每公里收費1.5元。2.2 設(shè)計思路根據(jù)系統(tǒng)的功能要求,分為2個模塊來實現(xiàn),分別是計費模塊,顯示模塊。計費模塊是實現(xiàn)系統(tǒng)功能的核心,里面有分為分頻、計時、公里計數(shù)、計費等部分。分頻部分是把外部提供的300hz進(jìn)行分頻得到系統(tǒng)工作需要的工作脈沖,計費部

17、分包括兩個內(nèi)容,一個是正常行駛的里程數(shù)所產(chǎn)生的費用,另一個是車行中途暫停的時間所產(chǎn)生的費用。然后將里程、計費和等候時間以bcd碼形式顯示出來,顯示模塊將其譯碼輪流掃描顯示。2.3 出租車計費器系統(tǒng)工作流程圖對出租車計費器系統(tǒng)的功能要求進(jìn)行分析,得到如下工作流程圖:圖1 工作流程圖出租車載客后,啟動計費器,整個系統(tǒng)開始工作,進(jìn)入初始化狀態(tài),即計程從0開始,計費從8開始。再根據(jù)stop信號判斷行駛還是暫停。若是行駛狀態(tài),計費器開始進(jìn)行里程計數(shù),當(dāng)里程超過3公里時,計費器開始累加,按1.00元每公里計算,計程器則繼續(xù),否則計費器不變。當(dāng)里程超過20公里,按1.50每公里進(jìn)行累加。若是暫停狀態(tài),計費器

18、開始進(jìn)行等候時間計數(shù),當(dāng)?shù)群驎r間累計1分鐘,則每分鐘折算1公里里程價。最后將等候時間、里程、計費都顯示出來。3 出租車計費器的實現(xiàn)3.1 出租車計費器的頂層原理圖圖2 頂層原理圖原理圖中輸入部分分別是clk:系統(tǒng)時鐘信號;mile:公里脈沖信號;single:單程鍵;start:計費器啟動信號;stop:等待信號。輸出部分為七段譯碼show和位選碼sel,show顯示出來的是等候時間、里程和計費。描述系統(tǒng)頂層實體的vhdl程序見附錄。3.2 系統(tǒng)各功能模塊的實現(xiàn)3.2.1 模塊taxi:charge_control圖3 計費模塊設(shè)計計費模塊的難點在于小數(shù)計算,由計費規(guī)則知,單程行駛里程超過20

19、公里,每公里租價加收50%,即每公里租價1.5元。20公里是臨界值,在此以后,計費以1.5元累加,需要對計數(shù)進(jìn)行討論,因為個位為8或9都可能導(dǎo)致進(jìn)位。等候時間累計1分鐘,則每分鐘折算1公里里程價,所以,等候和行駛都可使計費增加。為此,設(shè)計2個時鐘脈沖,公里脈沖和等候脈沖,根據(jù)汽車行駛還是等候選擇計費脈沖。描述計費模塊的vhdl程序見附錄。3.2.2 模塊display:display_control圖4 顯示模塊顯示模塊用來將計費模塊輸出譯碼,然后輪流掃描數(shù)碼管。如圖5,出租車計費器共有8個數(shù)碼管,帶一個使能端,高電平有效。圖5 七段數(shù)碼管與向量元素對應(yīng)表1 七段數(shù)碼管段位碼十進(jìn)制數(shù)字段位碼0

20、00111111100000110201011011301100111401100110501101101601111101700100111801111111901101111滅00000000描述顯示模塊的vhdl程序見附錄。4 出租車計費器系統(tǒng)仿真及分析4.1 頂層實體的仿真波形圖6 系統(tǒng)頂層實體仿真波形圖之一圖7 系統(tǒng)頂層實體仿真波形圖之二由圖7可知001(表示c1)對應(yīng)11101111(表示9.),100(表示k0)對應(yīng)01100110(表示4),其余均對應(yīng)00111111(表示0),即顯示為行駛4公里,費用為9.0元。4.2 計費模塊的仿真波形圖8(a)圖8(b)圖8(c)圖8均為

21、計費模塊的仿真波形圖,由圖8(a)可看出汽車是單程行駛,圖8(b)可看出汽車在中途暫停了一段時間,在圖8(c)中可直觀地看出汽車行駛了75公里,等候時間為4分鐘,應(yīng)付的費用為113.5元。4.3 顯示模塊的仿真波形圖9 顯示模塊仿真波形圖將計費模塊輸出譯碼,然后輪流掃描數(shù)碼管,顯示各個數(shù)據(jù),等候時間4分鐘,里程75公里,計費113.5元。4.4 管腳鎖定在驗證出租車計費器系統(tǒng)的功能之前,需要清楚實驗箱與各個信號之間的對應(yīng)關(guān)系,參照資料得出本設(shè)計中各引腳的對應(yīng)情況如下:圖10 管腳鎖定管腳鎖定后將頂層文件下載到eda實驗箱芯片中,驗證計費器的功能。4.5 顯示結(jié)果的幾種情況圖11 驗證結(jié)果1圖1

22、1表示汽車行駛21公里,應(yīng)付費26.5元,符合設(shè)計要求。圖12 驗證結(jié)果2圖12表示汽車行駛25公里,在行駛20公里之后的一段時間內(nèi)停留4分鐘,應(yīng)付費38.5元,符合設(shè)計要求。5 總結(jié)本設(shè)計采用vhdl硬件描述語言,通過quartus開發(fā)平臺設(shè)計了出租車計費器系統(tǒng),經(jīng)過編譯仿真基本無誤,在此次設(shè)計中我主要做了以下工作:1對所選題目進(jìn)行仔細(xì)的審閱,理順?biāo)悸罚私馐煜ぴO(shè)計的基本思路,掌握整個設(shè)計工作的框架;2學(xué)習(xí)設(shè)計所需要用到的quartus軟件,做到熟練掌握軟件的各種仿真功能;3學(xué)習(xí)vhdl硬件描述語言,做到能讀懂vhdl程序,并能夠編寫本設(shè)計所需要的程序;4用軟件對程序進(jìn)行編譯和仿真,觀察波形

23、,符合設(shè)計的要求后,準(zhǔn)備硬件下載工作;5在實驗室把程序下載到實驗板上,經(jīng)過數(shù)碼管顯示結(jié)果符合設(shè)計要求,完成整個設(shè)計工作部分的實驗環(huán)節(jié)。出租車計費器系統(tǒng)的設(shè)計已經(jīng)全部完成,能夠按照預(yù)期的效果顯示等候時間、里程和車費數(shù)目。車行駛或暫停按其各自的計費規(guī)則進(jìn)行計費,車費總數(shù)為兩項之和,若停止則車費清零,等待下一次計費的開始9。在出租車計費器系統(tǒng)的兩個模塊計費模塊、顯示模塊中,計費模塊是實現(xiàn)系統(tǒng)功能的核心,里面又分為分頻、計時、公里計數(shù)、計費等部分;顯示模塊將顯示等候時間,里程和費用。各模塊成功編譯運行后,再將它們組合到一起,完成完整的出租車系統(tǒng)的設(shè)計10。通過這次的論文設(shè)計,我對vhdl編程語言有了更

24、深層次的了解,對quartus軟件的應(yīng)用更加的熟練,加強了我的動手能力,使我在理論學(xué)習(xí)和編程練習(xí)方面都有了較大的收獲。參考文獻(xiàn)1 李蓉.基于vhdl語言的出租車自動計費器的設(shè)計j.科技風(fēng),2008,24:42-462 侯伯亨,顧新.vhdl硬件描述語言與數(shù)字邏輯電路設(shè)計(修訂版)m.西安:西安電子科技大學(xué)出版社,2005:3-93 孟慶海,張洲.vhdl基礎(chǔ)及經(jīng)典實例開發(fā)m.西安:西安交通大學(xué)出版社,2008,4:1-54 王行,李衍.eda技術(shù)入門與提高m.西安:西安電子科技大學(xué)出版社,2005:17-325 周彩寶等.vhdl語言及其應(yīng)用j.計算機工程,1998,10:17-206 孫冰等

25、.vhdl在計算機組成原理實驗中的應(yīng)用研究j.價值工程,2011,30(27):56-597 黃正瑾等編著.cpld系統(tǒng)設(shè)計技術(shù)入門與應(yīng)用m.北京:電子工業(yè)出版社,2002:13-238 劉愛榮等編著. eda技術(shù)與cpld/fpga開發(fā)應(yīng)用簡明教程m. 北京:清華大學(xué)出版社,2007:45-569 席礪莼等.基于vhdl語言的出租車計費系統(tǒng)設(shè)計j.現(xiàn)代電子技術(shù),2003,3:57-6110 高健等.基于verilog hdl出租車計費系統(tǒng)的研制j.實驗室研究與探索, 2004,10:34-37致 謝在這次畢業(yè)設(shè)計的設(shè)計過程中,得到了很多人的幫助。首先要感謝我的指導(dǎo)老師陳初俠老師,在課程設(shè)計上

26、給予我的指導(dǎo),提供給我的支持和幫助,讓我能把系統(tǒng)做得更加完善。在完成畢業(yè)論文的過程中,我學(xué)到了許多新的知識,也鞏固了一些已經(jīng)學(xué)過的知識,彌補了以前的不足之處,鍛煉了我的動手能力,使我的設(shè)計能力得到提高。其次,我要感謝幫助過我的同學(xué)們,他們也為我解決了不少難題,同時也感謝學(xué)院為我提供了良好的做畢業(yè)設(shè)計的環(huán)境。最后,要感謝各位老師抽出時間對本文進(jìn)行評閱。附 錄頂層實體的vhdl編程:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity

27、taximeter isport(clk : in std_logic;-輸入300hz時鐘 start : in std_logic;-計費器啟動 stop : in std_logic;-等待信號 mile : in std_logic;-公里脈沖信號 single : in std_logic;-單程鍵 sel : out std_logic_vector(2 downto 0);-位選 show : out std_logic_vector(7 downto 0);-7段數(shù)碼管譯碼輸出end taximeter;architecture structural of taximeter

28、is component taxi port(clk : in std_logic; start : in std_logic; stop : in std_logic; mile : in std_logic; single : in std_logic; char0 : out std_logic_vector(3 downto 0);-計費輸出小數(shù)點位 char1 : out std_logic_vector(3 downto 0);-計費輸出個位 char2 : out std_logic_vector(3 downto 0);-計費輸出十位 char3 : out std_logic

29、_vector(3 downto 0);-計費輸出百位 min0 : out std_logic_vector(3 downto 0);-等待時間輸出個位 min1 : out std_logic_vector(3 downto 0);-等待時間輸出十位 km0 : out std_logic_vector(3 downto 0);-行駛公里輸出個位 km1 : out std_logic_vector(3 downto 0);-行駛公里輸出十位 end component; component display port(clk : in std_logic; char0 : in std_l

30、ogic_vector(3 downto 0); char1 : in std_logic_vector(3 downto 0); char2 : in std_logic_vector(3 downto 0); char3 : in std_logic_vector(3 downto 0); min0 : in std_logic_vector(3 downto 0); min1 : in std_logic_vector(3 downto 0); km0 : in std_logic_vector(3 downto 0); km1 : in std_logic_vector(3 downt

31、o 0); sel : out std_logic_vector(2 downto 0); show : out std_logic_vector(7 downto 0); end component; signal char0 : std_logic_vector(3 downto 0); signal char1 : std_logic_vector(3 downto 0);signal char2 : std_logic_vector(3 downto 0);signal char3 : std_logic_vector(3 downto 0);signal min0 : std_log

32、ic_vector(3 downto 0);signal min1 : std_logic_vector(3 downto 0);signal km0 : std_logic_vector(3 downto 0);signal km1 : std_logic_vector(3 downto 0);begin charge_control:taxi port map(clk = clk, start = start, stop = stop, mile = mile, single = single, char0 = char0, char1 = char1, char2 = char2, ch

33、ar3 = char3, min0 = min0, min1 = min1, km0 = km0, km1 = km1);display_control:displayport map(clk = clk, char0 = char0, char1 = char1, char2 = char2, char3 = char3, min0 = min0, min1 = min1, km0 = km0, km1 = km1, sel = sel, show = show);end structural;計費模塊的vhdl編程:library ieee;use ieee.std_logic_1164.

34、all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity taxi isport(clk : in std_logic;-輸入300hz時鐘 start : in std_logic;-計費器啟動 stop : in std_logic;-等待信號 mile : in std_logic;-公里脈沖信號 single : in std_logic;-單程鍵 char0 : out std_logic_vector(3 downto 0);-計費輸出小數(shù)點位 char1 : out std_logic_vect

35、or(3 downto 0);-計費輸出個位 char2 : out std_logic_vector(3 downto 0);-計費輸出十位 char3 : out std_logic_vector(3 downto 0);-計費輸出百位 min0 : out std_logic_vector(3 downto 0);-等待時間輸出 min1 : out std_logic_vector(3 downto 0);-等待時間輸出 km0 : out std_logic_vector(3 downto 0);-行駛公里輸出 km1 : out std_logic_vector(3 downto

36、0);-行駛公里輸出end taxi;architecture behave of taxi isconstant n : integer := 30;signal f_mile1 : std_logic;-延遲時間signal f_mile2 : std_logic;-延遲時間signal f_mile_r : std_logic;-延遲時間signal start_r : std_logic;-延遲時間signal clk1hz : std_logic;-分頻所得1hz時鐘signal q : integer range 0 to n-1;-分頻器signal sec : integer

37、range 0 to 59;signal c3,c2,c1,c0 : std_logic_vector(3 downto 0);-計費寄存器signal k0 : std_logic_vector(3 downto 0);-公里寄存器signal k1 : std_logic_vector(3 downto 0);-公里寄存器signal m1 : std_logic_vector(3 downto 0);-等待時間寄存器signal m0 : std_logic_vector(3 downto 0);-等待時間寄存器signal en0 : std_logic;-路程大于3公里,使能有效si

38、gnal en1 : std_logic;-單程且大于20公里,使能有效signal f_wait : std_logic;-等待時間,1脈沖/分鐘signal f : std_logic;-計費時鐘begin-輸出顯示min0 = m0;min1 = m1;km0 = k0;km1 = k1;char0 = c0;char1 = c1;char2 = c2;char3 = c3;-分頻進(jìn)程-u1:process(clk)beginif rising_edge(clk) thenif q=299 thenq=0;elseq=q+1;end if;end if;end process;clk1h

39、z = 0 when qinteger(n/2) else 1;-等待計時進(jìn)程-u2:process(clk1hz,start)beginif start=0 thenf_wait=0;elsif rising_edge(clk1hz) thenif stop=1 thenif sec=59 then sec=0; f_wait=1; if m0=1001 then m0=0000;if m1=0101 then m1=0000; else m1=m1+1; end if;else m0=m0+1;end if;else f_wait=0; sec=sec+1;end if;else f_wa

40、it=0;end if;end if;end process;-延遲信號,檢測上升沿-u3:process(clk1hz)begin if rising_edge(clk1hz) then f_mile2 = f_mile1; f_mile1 = mile; start_r = start; end if;end process;f_mile_r= f_mile1 and not(f_mile2);-選擇不同的計費時鐘-f= f_wait when stop=1 else f_mile_r when en0=1 else0;-公里計數(shù)進(jìn)程-u4:process(start,f_mile_r)b

41、egin if start=0 then k0=0000; k1=0000; en0=0;en1=0;elsif rising_edge(f_mile_r) thenif k0=1001 thenk0=0000;if k1=1001 then k1=0000;else k1=k1+1;end if;elsek0=k0+1;end if; -大于3公里,使能有效if k0=0011 then en0=1;end if; -單程且大于20公里,使能有效if k1=0001 and k0=1001 and single=1 then en1=1;end if;end if;end process;-

42、計費進(jìn)程-u5:process(start,f,start_r)beginif start=1 and start_r=0 thenc0=0000;c1=1000;c2=0000;c3=0000;elsif rising_edge(f) then if en1=0 then-小于20公里時,每公里1元 if c1=1001 then c1=0000; if c2=1001 then c2=0000; if c3=1001 then c3=0000; else c3=c3+1; end if; else c2=c2+1; end if; else c1=c1+1; end if;else-超過2

43、0公里,每公里1.5元if(c0=0101 and c1=1000) or c1=1001 then-等于xx9.5時,累加得xx1.0 if c1=1001 and c0=0101 then c0=0000; c1=0001;-等于xx9.0,累加得xx0.5 elsif c1=1001 and c0=0000 then c0=0101; c1=0000;-等于xx8.5時,累加得xx0.0 elsif c1=1000 and c0=0101 then c0=0000; c1=0000;end if;if c2=1001 thenc2=0000;if c3=1001 then c3=0000

44、;else c3=c3+1;end if;else c2=c2+1;end if;elsif c0=0000 thenc0=0101;c1=c1+1;else c0=0000;c1=c1+0010;end if;end if;end if;end process;end behave;顯示模塊的vhdl編程:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity display isport(clk : in std_logic; c

45、har0 : in std_logic_vector(3 downto 0); char1 : in std_logic_vector(3 downto 0); char2 : in std_logic_vector(3 downto 0); char3 : in std_logic_vector(3 downto 0); min0 : in std_logic_vector(3 downto 0); min1 : in std_logic_vector(3 downto 0); km0 : in std_logic_vector(3 downto 0); km1 : in std_logic

46、_vector(3 downto 0); sel : out std_logic_vector(2 downto 0); show : out std_logic_vector(7 downto 0);end display;architecture rtl of display is signal q : std_logic_vector(31 downto 0);signal q_reg : std_logic_vector(3 downto 0);signal sel_reg : std_logic_vector(2 downto 0);signal show_reg : std_log

47、ic_vector(6 downto 0);beginq=min1 & min0 & km1 & km0 & char3 & char2 & char1 & char0;process(clk)beginif(clkevent and clk=1) then if(sel_reg=111) then sel_reg=000;else sel_regq_regq_regq_regq_regq_regq_regq_regq_regq_reg=xxxx;end case;end process;sel=sel_reg;with q_reg selectshow_reg = 0111111 when 0000, 0000110 when 0001,1011011 when 0010,1001111 when 0011,1100110 when 0100,1101101 when 0101,1111101 when 0110,0000111 when 0

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論