版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
ABSTRACT摘要PAGE54PAGE53摘要摘要隨著數(shù)字電子技術的日益成熟以及結合未來的發(fā)展趨勢,與電子設計相關的設計技術和開發(fā)平臺等也都有了迅猛的發(fā)展?,F(xiàn)場可編程門陣列FPGA和復雜可編程邏輯器件CPLD的發(fā)展與和應用為設計人員提供了很大的便利。本文主要介紹一種基于FPGA芯片的出租車計價器的設計思路與設計方法,對該設計方法的研究意義和實際應用價值進行了闡述,描述了FPGA芯片的發(fā)展歷史和趨勢以及主要應用,介紹了Verilog(硬件描述語言)的主要功能和自上向下的算法設計思路及設計流程。本次設計高效利用FPGA設計方法的多變性和可編程性等優(yōu)勢,有效的縮短實物開發(fā)周期,設計完整功能的出租車計費系統(tǒng)。本次設計采用VerilogHDL硬件描述語言編寫計費器的系統(tǒng)程序,QuartusPrime軟件作為開發(fā)平臺,modelsim作為仿真平臺,對程序進行了仿真,最后將生成的目標文件下載開發(fā)板:友晶DE2-115的FPGA芯片中,完成了相應的硬件測試和驗證,證明了出租車計費系統(tǒng)的可行性。關鍵詞:EDA;FPGA;出租車計費器;Verilog;QuartusPrime;modelsim;ABSTRACTABSTRACTABSTRACTWiththeincreasingmaturityofdigitalelectronictechnologyandthedevelopmenttrendinthefuture,thedesigntechnologyanddevelopmentplatformrelatedtoelectronicdesignhavedevelopedrapidly.ThedevelopmentandapplicationofFPGAandCPLDprovidegreatconveniencefordesigners.ThispapermainlyintroducesakindofthetaximeterbasedonFPGAchipdesignideaanddesignmethod,thedesignmethodoftheresearchsignificanceandapplicationvalue,describesthedevelopmenthistoryandtrendoftheFPGAchip,andthemainapplication,thispaperintroducestheVeriloghardwaredescriptionlanguage()themainfunctionandthedownwardalgorithmdesignideasanddesignprocess.ThisdesignmakesefficientuseoftheFPGAdesignmethodofvariabilityandprogrammabilityandotheradvantages,effectivelyshortenthephysicaldevelopmentcycle,designacompletefunctionofthetaxibillingsystem.ThisdesignUSEStheVerilogHDLhardwaredescriptionlanguagetowritemessagesystemprogram,QuartusPrimesoftwareasadevelopmentplatform,modelsimasthesimulationplatform,tothesimulationprogram,finallywillgeneratethetargetfiledownloaddevelopmentboard:friendscrystalDE2-115intheFPGAchip,completethecorrespondinghardwaretestingandverification,toprovethefeasibilityofthetaxibillingsystem.KeyWords:EDA.FPGA;Taximeter;Verilog.QuartusPrime;Modelsim;目錄目錄目錄第1章 緒論 11.1課題研究的背景及意義 11.2出租車計量儀器的發(fā)展現(xiàn)狀 21.3課題研究的內容及方法 21.4本章小結 3第2章 相關設計工具介紹 42.1EDA技術簡介 42.2FPGA簡介 52.3Verilog簡介 62.4本章小結 6第3章 課題原理及各模塊的設計說明 83.1課題設計原理 83.2按鍵消抖模塊 103.2.1按鍵消抖模塊的功能描述 103.2.2按鍵消抖模塊器件圖 113.2.3按鍵消抖動部分源代碼 123.2.4按鍵消抖動部分仿真 133.3計費系統(tǒng)模塊 143.3.1計費系統(tǒng)模塊的功能描述 143.3.2計費系統(tǒng)模塊結構圖 143.4狀態(tài)控制模塊 153.4.1狀態(tài)控制模塊的功能描述 153.4.2狀態(tài)控制模塊器件圖 153.4.3狀態(tài)控制模塊的源代碼 163.4.4狀態(tài)模塊功能仿真 173.5里程數(shù)、等待時間計數(shù)模塊 183.5.1里程數(shù)、等待時間計數(shù)模塊的功能描述 183.5.2里程數(shù)、等待時間計數(shù)模塊器件圖 183.5.3里程數(shù)、等待時間計數(shù)模塊功能仿真 193.6計費模塊 193.6.1計費模塊的功能描述 193.6.2計費模塊器件圖 203.6.3計費模塊源代碼 213.6.4計費模塊仿真 223.7譯碼模塊 233.8LCD1602顯示模塊 243.8.1LCD1602簡介 243.8.2LCD1602顯示模塊的功能描述 253.8.3LCD1602顯示模塊器件圖 253.9本章小結 26第4章 下載調試與結果驗證 284.1下載及調試 284.2開發(fā)硬件驗證 294.2.1空載狀態(tài) 294.2.2行駛里程小于3千米 294.2.3白天高于3千米沒有等待 304.2.4夜間高于3千米沒有等待 304.3本章小結 31第5章 總結 32參考文獻 33致謝 34附錄 35附錄一:本設計的源代碼 35外文資料原文 53譯文 54電子科技大學成都學院本科畢業(yè)論文第1章緒論緒論課題研究的背景及意義隨著我國人民經(jīng)濟生活水平的不斷提高,越來越多的人選擇以出租車作為出行最便捷的出行交通工具。出租車計費器作為計量工具具有其特殊性和專用性,它只用在出租車上,因此它與出租車車輛、出租車的收費辦法、出租車的管理經(jīng)營等密切相關。出租汽車計費器必須隨時適應它們的需求和變化。出租車計費器的使用也使得出租車市場更加規(guī)范和標準化,同時更直觀、更快捷的智能化計費方式也幫助人們節(jié)省了大量的時間、創(chuàng)造了更多的經(jīng)濟效益,使乘客與出租車經(jīng)營者之間的矛盾得以解決。出租車的設計越來越注重于功能性和實用性,使得出租車計費器成為不可缺少的一種計量工具。隨著越來越多的消費群體乘坐出租車出行,廣大乘客對出租車計費器的功能也提出了更多更苛刻的要求。用戶不僅要求計費器性能穩(wěn)定,還要求計費準確,而且有防作弊功能;同時還要求其具有小票資料打印、公共IC卡付費、智能語音播報、定位、聯(lián)網(wǎng)及自動報稅控等功能。在中國,大部分地區(qū)的出租車收費價格都是不一樣的,每個地區(qū)的出租車收費單價都貼近該地區(qū)的居民消費水平,不同地區(qū)、不同運營公司,車型也不一定相同,車型不一致也會使收費有區(qū)別。近年來,隨著原油價格的不斷波動及中國經(jīng)濟發(fā)展的影響,收費標準和收費方式也有可能在不斷的變化。這個時候,采用傳統(tǒng)的基于單片微型計算機設計的出租車計費器已不能滿足市場的需求,不僅硬件電路復雜,功能也比較單一,在運營過程中很容易產生各種各樣的問題,影響用戶的使用;而且集成度不高,較多分立器件的使用,將導致產品功耗大,芯片散熱不良,從而影響產品的使用壽命?;贔PGA的出租車計費系統(tǒng),以硬件描述語言(Verilog)為基礎與數(shù)字邏輯相結合通過自頂向下的電路設計驗證方法,實現(xiàn)低成本投入,較高可靠性,較強通用性;在不改變產品硬件電路的情況下,通過修改Verilog代碼中的相關參數(shù),可以滿足不同地區(qū)、不同用戶的不同需求。同時可以根據(jù)用戶需求添加其他功能。本課題所設計的出租車計費系統(tǒng)采用軟件編程的形式結合外部必要電路,能實現(xiàn)多種計費形式,使用的FPGA芯片不僅資源豐富,相對單片機而言,體積也比較小。而隨著集成電路產業(yè)的發(fā)展,外部Flash的使用使得通過AS方式下載在芯片中的數(shù)據(jù)長時間不會丟失,因此本課題所設計的計費器不僅在當代有著相當強的實用性,在未來出租車計量儀器市場中的也有著很可觀的發(fā)展前景。出租車計量儀器的發(fā)展現(xiàn)狀歷史上,我國第一家生產出租車計費器的企業(yè)是重慶的起重機廠,最早的設計出來的出租車計費器采用全機械結構,通過齒輪傳動的方式,完成十分簡單的計程功能,可以說早期的機械齒輪式計費器就是出租車計費器發(fā)展史上的一塊里程碑。隨著傳統(tǒng)力學和機械制造技術的發(fā)展,已經(jīng)生產出第二代出租車計費器,它結合了電子計算機和機械齒輪結構,實現(xiàn)半電子半機械化。此時它在完成計算里程工作的同時還可以完成計算收費工作。超大規(guī)模集成電路的蓬勃發(fā)展又催生了第三代出租車計費器,也就是完全實現(xiàn)電子化。當單片微型計算機的出現(xiàn)并應用于出租車計費器后,現(xiàn)代出租車計費器的模型也就基本確立了,它可以完成計時、計程、計價,顯示等基本功能。單片微型計算機生態(tài)系統(tǒng)的完善不斷促進出租車計費器的發(fā)展。隨著數(shù)字電子技術的快速發(fā)展,F(xiàn)PGA、CPLD及SOPC等可編程數(shù)字芯片的出現(xiàn),使出租車計費器的性能更加趨于穩(wěn)定,功能更加的復雜,同時提高了計費器的靈活性,改善了其升級的能力,使得出租車經(jīng)營者有了更多的選擇。FPGA的多個優(yōu)質性能使其成為了最具發(fā)展?jié)撡|的數(shù)字器件,結合硬件描述語言可簡潔直觀的描述復雜的邏輯設計。因此基于FPGA的出租計費器在未來將會成為很實用的計量工具,它的發(fā)展完全可以代替單片機,被為新一代的出租車經(jīng)營者所接受。課題研究的內容及方法通過查閱相關資料,經(jīng)過研究分析后,對國內外出租車計費器的設計方法和設計思路有了更直觀了解和更深刻的認識,最終確定本設計方案將基于FPGA來開發(fā),以縮短研發(fā)周期,提高系統(tǒng)的穩(wěn)定性和可靠性;利用Verilog硬件描述語言編寫代碼對出租車計費器系統(tǒng)的功能進行設計優(yōu)化,從而極大的提高了產品更新?lián)Q代的能力。本設計采用計算總行駛里程和累計等待時間兩種狀態(tài)收費。按照自定義的出租車收費標準進行設定:(1)出租車起步價設定為12元,當行駛里程小于3千米時,只收取起步價;當行駛的里程數(shù)大于3千米時,則在起步價的基礎上每千米按白天2元,夜間每千米3元收費。(2)為方便現(xiàn)場檢測功能,行駛里程每2秒增加1千米;停車等待時長為每3秒鐘1元。本章小結本章介紹了計程車的發(fā)展歷史和意義,并對該計程車的發(fā)展現(xiàn)狀進行了概述。通過相關研究,對出租車儀表及其未來發(fā)展趨勢有了更深入的了解,也有自己的看法,有助于自己在出租車儀表的設計上更加實用和規(guī)范。第2章相關設計工具介紹相關設計工具介紹EDA技術簡介EDA是EeectronicDesignAutomation的縮寫。EDA工具是以計算機硬件和軟件為工作平臺開發(fā)的計算機輔助設計通用軟件包,集成了數(shù)據(jù)庫,圖形,圖形理論和拓撲邏輯,計算數(shù)學,優(yōu)化理論等。從功能實用性的角度來看,EDA主要包括以下部分:使用EDA技術進行電子設計的硬件描述語言;一些軟件開發(fā)工具,使EDA技術設計電子系統(tǒng)更加自動化和智能化;EDA技術設計流程中的載體大規(guī)??删幊踢壿嬈骷?;以及最終驗證電子設計的下載和硬件驗證工具。到目前為止,EDA經(jīng)歷了30多年的發(fā)展,可以將這個長期分為三個主要階段。第一階段是在1970年代。在此期間,人們開始使用計算機進行相關設計,如PCB布局和布局,IC布局編輯等,這是計算機系統(tǒng)輔助設計階段(CAD)。當它在20世紀80年代開發(fā)時,設計師不僅可以使用EDA技術繪制圖形,還可以使用CAD來設計電路功能和結構。該電路結合電氣連接表將兩者結合起來,即工程設計。該階段成為計算機輔助工程階段(CAE);到20世紀90年代,CAE的應用非常廣泛,用它來模擬電路邏輯,輸入相關的原理圖,分析電路,布局和布線,以及設計。分析和驗證等,這時候EDA的發(fā)展則處于第三階段,電子系統(tǒng)設計自動化(EDA)。目前,中國EDA市場的大多數(shù)設計師都面臨著小型ASIC和PC主板。只有少數(shù)設計人員從事復雜的芯片系統(tǒng)設計工作。為了使中國的EDA技術更具競爭力,設計人員不斷學習和借鑒國外行業(yè)的頂尖技術。EDA軟件開發(fā)技術目前主要在美國,雖然韓國和日本都有自己的ASIC設計工具,但它們并不向公眾開放。EDA技術的應用水平也越來越廣泛,它已經(jīng)悄然觸及我們生活的方方面面。隨著EDA在日常生活中的廣泛應用,EDA技術的研究越來越深入。在進行EDA技術的深入應用時,重要的是要明確了解EDA的基本特性。(1)EDA采用“自上而下”的設計方法與傳統(tǒng)電子設計中采用的“自下而上”方法相比,開發(fā)成本可以顯著降低,不太可能發(fā)生新錯誤,設計效率相對較高,功能模塊化可以分為塊,即可以分開運行以驗證結果。設計師在程序設計中校正錯誤也很方便。(2)設計可以結合軟件編程的優(yōu)點使用硬件描述語言,將電子系統(tǒng)的邏輯功能與硬件設計電路的結構相結合。硬件描述語言也是當前電子工業(yè)的主流,降低了制造成本,縮短了開發(fā)時間,更便于制造大量產品。因此,在研發(fā)和工業(yè)設計中具有廣泛的應用范圍。(3)實現(xiàn)邏輯綜合和優(yōu)化的能力。通過綜合,可以將抽象描述通過比較低級抽象來描述。優(yōu)化函數(shù)功能根據(jù)布爾方程的等價原理分析器件的邏輯綜合結果,用綜合結果替換一些復雜的邏輯單元,最后將其映射到一組新的邏輯方程。通過優(yōu)化可以資源消耗最小化、延遲最小化。FPGA簡介FPGA(現(xiàn)場可編程門陣列)是一種高性能可編程邏輯器件,已經(jīng)基于可編程器件(如GAL,PAL和CPLD)進一步開發(fā)。他成為專用集成電路領域的半定制電路(ASICs)不僅解決了定制電路的缺點,而且克服了原有可編程器件門數(shù)量有限的缺點.FPGA可以用Verilog或VHDL硬件描述語言設計,然后快速集成和布局燒錄到FPGA進行測試.FPGA一般采用SRAM技術,有的采用Flash技術或反熔絲技術.FPGA集成度非常高,其器件密度從數(shù)萬個門到數(shù)千萬個門,可以完成復雜的時序和組合邏輯電路功能,適用于高速,高密度高端數(shù)字邏輯電路設計.FPGA的基本組件包括可編程輸入/輸出單元,基本可編程單元,嵌入式RAM,豐富的路由資源,底層嵌入式功能資源和嵌入式專用硬核(HardCore)。至今為止,制造FPGA芯片的公司主要有Altera、Xilinx、Lattice以及Actel,制造了大量品種不一、型號各異的產品,雖然這些芯片的內部結構和技術指標都不一致,但他們都有一個相同的特點,就是將可配置的邏輯功能塊排成陣列,由互聯(lián)資源(可編程)連接這些邏輯塊,從而可以對其進行不同的設計。存放數(shù)據(jù)的SRAM和三種可編程的電路組成共同構成了FPGA,三種電路包括可配置邏輯塊(CLB)、輸入輸出模塊(IOB)、以及互連資(IR)。是實現(xiàn)邏輯功能的基本單元是可配置邏輯模塊,由觸發(fā)器、數(shù)據(jù)選擇器等器件組成。輸入輸出模塊一般位于芯片的四周,主要有輸入/輸出緩存器、輸入/輸出觸發(fā)器等組成。IOB可被設定為雙向I/O功能。要行程多種功能復雜的系統(tǒng),可以通過互聯(lián)資源可將所有的可編程邏輯模塊和輸入/輸出模塊相互連接起來。具有規(guī)范化的軟件架構和開放性。通過軟件架構可以為EDA的相關開發(fā)平臺提供開發(fā)環(huán)境,以及各種與數(shù)據(jù)相關的內容。通過軟件架構可以將不同型號、不同廠商的工具進行整合,集中在一個統(tǒng)一的、便于管理的環(huán)境下,因此更加有利于資源的共享和優(yōu)化配置。FPGA的基本結構圖如圖2-1所示:圖2-1FPGA芯片的基本結構Verilog簡介VerilogHDL是一種硬件描述語言,模仿數(shù)字系統(tǒng)的各種抽象設計,從算法級到門級到切換級。用于建模的數(shù)字系統(tǒng)描述了簡單門和完整大型電子數(shù)字系統(tǒng)之間對象的復雜性數(shù)字系統(tǒng)可以分層次地分層描述,并且可以在相同的描述中明確建模。VerilogHDL語言具有以下描述能力:設計的行為特征,設計的數(shù)據(jù)流特征,設計的結構組成,以及延遲和波形生成機制包括響應監(jiān)控和設計驗證。所有這些都使用相同的建模語言。此外,VerilogHDL語言提供了一種編程語言接口,允許您在模擬和驗證期間從設計外部訪問設計,包括特定的控制和模擬操作VerilogHDL語言不僅定義了語法,而且為每個語法結構定義了清晰的模擬和模擬語義。因此,使用Verilog模擬器可以驗證用這種語言編寫的模型。VerilogHDL語言繼承了C編程語言的各種運算符和結構。VerilogHDL提供擴展的建模功能,其中許多最初很難理解。但是,VerilogHDL語言的核心子集非常易于學習和使用,這對于大多數(shù)建模應用來說已經(jīng)足夠了。當然,完整的硬件描述語言足以描述從最復雜的芯片到完整的電子系統(tǒng)。2.4本章小結本章介紹了與此次設計相關的一些開發(fā)工具。簡單介紹了EDA技術,并對其發(fā)展歷史和現(xiàn)狀,所使用到的設計方法、設計語言及工具等展開了進一步的說明。同時,還介紹了FPGA的結構特點、應用優(yōu)勢以及開發(fā)流程,概述了Verilog語言,并對其發(fā)展歷史、開發(fā)優(yōu)勢以及設計流程等有了全面的介紹。對本次設計所涉及的技術層面的知識有了全面的認識。電子科技大學成都學院本科畢業(yè)論文第3章課題原理及個模塊的設計說明課題原理及各模塊的設計說明課題設計原理根據(jù)緒論中介紹的出租車計費器的設計要求,設定系統(tǒng)的外部端口信號:輸入信號:時鐘信號clk,復位信號rst_n,按鍵key0-key3。輸出信號:使能信號LCD_EN,讀寫/選擇信號RW,數(shù)據(jù)/命令選擇信號RS,數(shù)據(jù)輸出信號DB0~DB7,電源使能信號LCD_ON,背光使能信號LCD_BLON,白天/黑夜狀態(tài)指示燈。本次設計的出租車計費系統(tǒng)主要分為三大模塊:按鍵消抖模塊、出租車計費模塊模塊、以及LCD1602顯示模塊,系統(tǒng)結構框圖如圖3-1所示。按鍵消抖模塊實現(xiàn)4個按鍵的消抖功能;計費模塊只能實現(xiàn)單一計費方式,根據(jù)其內部的各個模塊,模擬計時和計路并收費計算出來;最終顯示模塊將根據(jù)計費模塊反饋的數(shù)據(jù)包括行駛里程總費用和出租車運行狀態(tài)等通過LCD1602直觀地顯示出來。圖3-1系統(tǒng)的結構框圖本次設計流程圖3-2,所有的模塊共用了系統(tǒng)復位信號,由于每個模塊對驅動信號的需求不同,需要通過分頻模塊將50MHZ的時鐘輸入信號clk分頻為1/2HZ和1/3HZ等多種不同頻率的驅動信號。1/2HZ為計費模塊的里程模擬部分提供驅動信號(即1個上升沿為2秒鐘),即里程模擬部分正常啟動(狀態(tài)為1)時,即出租車在載客行駛,每一個上升沿總路程增加1千米;1/3HZ為計費模塊的等待時圖3-2系統(tǒng)設計流程圖間模擬部分提供驅動信號,即當計時模擬部分正常工作時,每個上升等待時間增加3秒。計費模塊根據(jù)內部里程模擬部分和計時模擬部分的運行機制,計算出總里程數(shù),等待時間,總價格等?,F(xiàn)實中的出租車計費器如圖3-3所示,在出租車計費器的實際使用過程中,汽車行駛時的行駛信號可以用光電傳感器、霍爾效應傳感,以及彈簧繼電器作為里程傳感器及其他多種多樣的檢測工具來進行信號采集。在汽車行駛時,車輪每轉動一圈,安裝在蝸輪變速器上的磁鐵將控制傳感器關閉一次或者多次,即輸出一個或多個脈沖,可以根據(jù)汽車車輪直徑,汽車車輪轉速,來檢測汽車行駛速度和行駛里程。本次設計使用DE2-115開發(fā)板中的時鐘信號經(jīng)過分頻代替?zhèn)鞲衅麟娐?,實現(xiàn)該部分里程采樣功能的模擬。圖3-3現(xiàn)實中的出租車計費器本次的設計描述:上電或按下復位按鈕rst_n時系統(tǒng)復位系統(tǒng)處于空載狀態(tài),當按下啟動按鈕后,出租車處于載客行駛狀態(tài),計費模塊的里程模擬部分開始運行并開始計費,分頻率部分開始產生脈沖頻率1/2HZ的脈沖信號(周期2秒),每個高電平模擬行駛1千米路程;通過按下時間狀態(tài)按鈕模擬白天和黑夜收費區(qū)別,白天的時候(即狀態(tài)0),此時沒千米收費2元;黑夜的時候(即狀態(tài)1),此時沒千米收費3元當,不足3千米只收起步價。按下等待按鈕后,出租車進入載客臨停狀態(tài),計費模塊的時間模擬部分開始運行并計費,分頻率部分開始產生脈沖頻率1/3HZ的脈沖信號(周期3秒),每個高電平模擬一段等待時間(即每個高電平收費1元);計費模塊將產生的數(shù)據(jù)傳輸給LCD1602顯示模塊,LCD1602顯示模塊控制LCD1602顯示必要的數(shù)據(jù)。按鍵消抖模塊3.2.1按鍵消抖模塊的功能描述按鍵開關是電子設備不可缺少的人機接口。在現(xiàn)實中,由于使用的是機械按鍵,所以不可能不純在抖動如圖3-4。要想精確的識別各種按鍵動作,就必須的按鍵進行消抖處理。圖3-4現(xiàn)實按鍵時序本模塊中,通過檢測按鍵按下后(低電平)后,啟動計數(shù)器當計數(shù)器計數(shù)到800000時,輸出一個高脈沖,并將計數(shù)器清零。理想狀態(tài)下的按鍵時序如圖3-5所示。圖3-5理想狀態(tài)下按鍵時序3.2.2按鍵消抖模塊器件圖圖3-6為分頻模塊所生成的器件圖,其輸入輸出定義如下:輸入信號:clk:由系統(tǒng)提供的頻率50MHZ時鐘信號;rst_n:系統(tǒng)復位信號;key1:輸入按鍵1;key2:輸入按鍵2;key3:輸入按鍵3;key4:輸入按鍵4;圖3-6分頻模塊生成符號輸出信號:time_state:輸出脈沖1;key_out2:輸出脈沖2;key_out3:輸出脈沖3;key_out4:輸出脈沖4;3.2.3按鍵消抖動部分源代碼reg[31:0]cnt2; always@(posedgeclkornegedgerst_n) begin if(!rst_n) cnt2<=0; else begin if(key2) cnt2<=0; elseif(cnt2==32'd800000) cnt2<=cnt2; else cnt2<=cnt2+1; end end always@(posedgeclkornegedgerst_n) begin if(!rst_n) key_out2<=1'b0; else begin if(cnt2==32'd799999) key_out2<=1'b1; else key_out2<=1'b0; end end這是key2的按鍵消抖代碼,當按鍵按下后計數(shù)器開始計數(shù),如果計數(shù)到799999時,輸出key_out2為1,;系統(tǒng)時鐘為50MHZ,周期20ns,計數(shù)800000次則表示延時16ms。3.2.4按鍵消抖動部分仿真仿真波形如圖3-7所示:當個按鍵分別按下后,輸出都產生了3個正確的脈沖信號。當key1按下后,key1的輸出time_state也發(fā)生了變化。圖3-7按鍵消抖部分仿真計費系統(tǒng)模塊3.3.1計費系統(tǒng)模塊的功能描述出租車計費系統(tǒng)模塊是一個例化模塊,他包括3個子模塊組合成:出租車狀態(tài)控制模塊、里程數(shù)計數(shù)等待時間計數(shù)模塊和出租車計費模塊。3.3.2計費系統(tǒng)模塊結構圖圖3-8為計費系統(tǒng)模塊結構圖,輸入輸出定義如下:圖3-8計費系統(tǒng)模塊結構圖輸入信號:clk:由系統(tǒng)提供的頻率50MHZ用于分頻時鐘信號;rst_n:系統(tǒng)復位信號,低電平有效;time_state:白天/夜間狀態(tài)信號,0的時候表明是白天,1的時候是夜間。start_key:開始信號,代表有乘客上車。wait_key:等待信號,代表中途因各種原因臨時停車。stop_key:結束信號,代表乘客下車。輸出信號:taxi_state:出租車狀態(tài)信號,0表示空載,1表示載客行駛,2表示載客臨時停車。time_pulse:臨時停車等待時間達到收費標準脈沖,代表要收取停車等待費用。km_cnt_pulse:里程數(shù)更新信號。km_cnt:行駛的里程數(shù)。taxi_charge:出租車費用,單位是元。狀態(tài)控制模塊3.4.1狀態(tài)控制模塊的功能描述出租車有3種狀態(tài),空載狀態(tài)、載客行駛狀態(tài)和載客臨時停車狀態(tài);本模塊中分別用0、1、2表示。通過按鍵,控制狀態(tài)的轉換,為其他模塊實現(xiàn)功能做準備。3.4.2狀態(tài)控制模塊器件圖圖3-9為狀態(tài)控制模塊所生成的器件圖,其輸入輸出定義如下:輸入信號:clk:由系統(tǒng)提供的頻率50MHZ用于分頻時鐘信號;rst_n:系統(tǒng)復位信號,低電平有效;start_key:開始信號,代表有乘客上車。wait_key:等待信號,代表中途因各種原因臨時停車。stop_key:結束信號,代表乘客下車。圖3-9狀態(tài)控制模塊生成符號輸出信號:taxi_state:出租車狀態(tài)信號,0表示空載,1表示載客行駛,2表示載客臨時停車。3.4.3狀態(tài)控制模塊的源代碼moduletaxi_ctrl_mod(inputclk,inputrst_n,inputstart_key, input wait_key, input stop_key,outputreg[1:0]taxi_state);always@(posedgeclkornegedgerst_n)beginif(!rst_n) taxi_state<=2'b00; elseif(start_key) taxi_state<=2'b01; elseif((taxi_state==2'b01)&wait_key) taxi_state<=2'b10; elseif((taxi_state==2'b10)&wait_key) taxi_state<=2'b01; elseif(stop_key) taxi_state<=2'b00;endendmodule3.4.4狀態(tài)模塊功能仿真仿真波形如圖3-10所示:當復位后,taxi_state等于0(空載狀態(tài));按下start_key,狀態(tài)等于1(載客行駛狀態(tài));按下wait_key,狀態(tài)等于2(載客臨時停車);再次圖3-10狀態(tài)模塊仿真按下wait_key,狀態(tài)等于1(載客行駛狀態(tài));最后按下stop_key,狀態(tài)變?yōu)?(空載狀態(tài))。里程數(shù)、等待時間計數(shù)模塊3.5.1里程數(shù)、等待時間計數(shù)模塊的功能描述該模塊根據(jù)復位信號、系統(tǒng)時鐘和出租車狀態(tài)控制模塊的數(shù)據(jù),使用計數(shù)器計數(shù)100000000次,產生周期為兩秒的時鐘信號,用于模擬出租車行駛1千米時的脈沖;使用計數(shù)器分頻150000000次,產生周期為3秒的時鐘信號,用于模擬出租車等待時間。3.5.2里程數(shù)、等待時間計數(shù)模塊器件圖圖3-11為計費模塊所生成的器件圖,其輸入輸出定義如下:圖3-11里程數(shù)、等待時間計數(shù)模塊生成符號輸入信號:clk:由系統(tǒng)提供的頻率50MHZ用于分頻時鐘信號;rst_n:系統(tǒng)復位信號,低電平有效;taxi_state:出租車狀態(tài)信號,0表示空載,1表示載客行駛,2表示載客臨時停車。輸出信號:time_pulse:臨時停車等待時間達到收費標準脈沖,代表要收取停車等待費用。km_cnt:行駛的里程數(shù)。km_cnt_pulse:里程數(shù)更新信號。3.5.3里程數(shù)、等待時間計數(shù)模塊功能仿真仿真波形如圖3-12所示:當出租車狀態(tài)為0時,里程計數(shù)器、里程更新信號不變化。當出租車狀態(tài)為1時,里程計數(shù)器開始正常工作,里程數(shù)更新信號開始產生脈沖,臨時停車時間信號沒有產生脈沖。當出租車狀態(tài)為2時,里程計數(shù)器不變化,里程更新信號不產生脈沖,臨時停車時間信號產生脈沖。圖3-12里程數(shù)、等待時間計數(shù)模塊仿真計費模塊3.6.1計費模塊的功能描述該模塊通過接收到上個模塊產生的時間更新信號、里程數(shù)、里程更新信號和之前模塊的出租車狀態(tài)、時間狀態(tài)等數(shù)據(jù),根據(jù)計費規(guī)則:(1)出租車起步價設定為12元,當行駛里程小于3千米時,只收取起步價;當行駛的里程數(shù)大于3千米時,則在起步價的基礎上每千米按白天2元,夜間每千米3元收費。(2)行駛里程每2秒增加1千米;停車等待時長為每3秒鐘1元。計算出車費,并以2進制的形式傳輸給譯碼模塊。3.6.2計費模塊器件圖圖3-13為計費模塊所生成的器件圖,其輸入輸出定義如下:圖3-13計費模塊生成符號輸入信號:clk:由系統(tǒng)提供的頻率50MHZ用于分頻時鐘信號;rst_n:系統(tǒng)復位信號,低電平有效;taxi_state:出租車狀態(tài)信號,0表示空載,1表示載客行駛,2表示載客臨時停車。taxi_start:開始按鍵,代表有乘客上車。time_state:0表示白天,1表示黑夜。time_pulse:臨時停車等待時間達到收費標準脈沖,代表要收取停車等待費用。km_cnt:行駛的里程數(shù)。km_cnt_pulse:里程數(shù)更新信號。輸出信號:taxi_charge:出租車車費。3.6.3計費模塊源代碼moduletaxi_charge_mod(inputclk,inputrst_n,input time_state,inputtaxi_start,input[1:0]taxi_state,inputtime_pulse,input[7:0]km_cnt,inputkm_cnt_pulse,outputreg[7:0]taxi_charge);wire[7:0]start_charge;assignstart_charge=7'd12;always@(posedgeclkornegedgerst_n)beginif(!rst_n)taxi_charge<=0;elseif(taxi_state==2'b00) taxi_charge<=0; elseif(taxi_start) taxi_charge<=start_charge; elseif(taxi_state==2'b01)begin if(km_cnt<3) taxi_charge<=start_charge; elseif(km_cnt_pulse&(!time_state)) taxi_charge<=taxi_charge+2; elseif(km_cnt_pulse&time_state) taxi_charge<=taxi_charge+3; endelseif(taxi_state==2'b10)begin if(km_cnt<3) taxi_charge<=start_charge; elseif(time_pulse) taxi_charge<=taxi_charge+1; endendendmodule3.6.4計費模塊仿真白天仿真如圖3-14所示、夜間仿真如圖3-15所示,白天超出部分每千米2元,夜間超出部分每千米3元。圖3-14計費模塊白天仿真圖圖3-15計費模塊夜間仿真圖譯碼模塊本模塊之前模塊輸出的車費、里程數(shù)等都是2進制數(shù),該模塊將2進制數(shù)轉換成10進制數(shù),再將十進制數(shù)轉換成LCD1602能夠識別的二進制碼。其器件圖如圖3-16所示。圖3-16譯碼模塊生成符號LCD1602顯示模塊3.8.1LCD1602簡介圖3-17LCD1602液晶顯示器LCD1602是一種液晶顯示器,很多電子入門的人都喜歡用。其主控芯片為HD44780或其他兼容HD44780的芯片。LCD1602一般有16條引腳,也有14條引腳的,與16腳的相比缺少了背光電源A(15腳)和地線K(16腳),其引腳功能如下:圖3-18LCD1602引腳功能圖這個表說明:(1)VSS連接到電源地。(2)VDD加5V。(3)VO是液晶顯示器的偏置信號,可以連接到滑動變阻器調暗。(4)RS是命令/數(shù)據(jù)選擇引腳。當RS為低電平時,選擇命令;當RS為高電平時,數(shù)據(jù)被選中。(5)RW是讀/寫選擇引腳,當RW為低電平時將命令或數(shù)據(jù)寫入LCD1602,當RW為高電平時從LCD1602讀取數(shù)據(jù)。如果你不需要讀取,可以直接接地。(6)E,執(zhí)行命令的使能引腳;(7)D0-D7,并行數(shù)據(jù)輸入/輸出引腳。(8)K背光負極,接VSS。3.8.2LCD1602顯示模塊的功能描述該模塊通過三段狀態(tài)機的方式完成LCD1602的初始化,顯示等功能。輸入兩個128位的數(shù)據(jù)依次完成寫第一行第一位地址,寫第一行1-16個字符,寫第二行第一位地址,寫第二行1-16個字符,完成循環(huán)顯示的功能。由于本設計中不涉及從LCD1602中讀取數(shù)據(jù),所以rw引腳直接賦值為0,其且時序圖如圖3-19所示,在該開發(fā)板中的LCD1602沒有背光功能,所以將背光使能lcd_blon賦值為0.圖3-19LCD1602寫時序圖3.8.3LCD1602顯示模塊器件圖圖3-20為LCD1602顯示模塊所生成的器件圖,其輸入輸出定義如下:輸入信號:clk:由系統(tǒng)提供的頻率50MHZ用于分頻時鐘信號;rst_n:系統(tǒng)復位信號,低電平有效;lcd_data_en:數(shù)據(jù)使能。lcd_data1:第一行需要顯示的內容,接譯碼模塊;lcd_data2:第二行需要顯示的內容,接譯碼模塊;圖3-20LCD1602顯示模塊生成符號輸出信號:LCD_EN:使能,高電平讀取,下降沿執(zhí)行;RW:讀寫選擇,為1讀,為0寫;RS:數(shù)據(jù)命令選擇,為1數(shù)據(jù),為0命令;DB8:8位的數(shù)據(jù)接口;本章小結本章介紹了此次出租車計費器的設計原理,并對本次設計的3個模塊:按鍵消抖動模塊、計費系統(tǒng)模塊、顯示模塊,還有多個小模塊:狀態(tài)控制模塊、里程數(shù)、等待時間模塊、計費模塊、譯碼模塊以進行了詳細的說明,介紹了各個模塊的具體功能和輸入輸出端口,并且給出了相應模塊的元件生成圖。最后通過頂層模塊原理圖,將各功能模塊連到一起,進行了綜合的優(yōu)化和調試。修改功能時,只需修改對應模塊的程序,不用對外部電路進行改動,提高了系統(tǒng)的穩(wěn)定性和升級的便利性。第4章下載調試與結果驗證下載調試與結果驗證本次設計在QuartusPrime軟件上開發(fā),在modelsim成功仿真后,最終將下載到開發(fā)板上,驗證其功能。本次實驗采用的是友晶DE2-115開發(fā)板,將相關文件下載到EP4CE115F29C7芯片上,對硬件電路進行調試,并驗證其功能。下載及調試本次設計的出租車計費系統(tǒng)的輸入信號有系統(tǒng)時鐘信號、啟動/暫停標志信號、手動復位信號;輸出信號有LCD1602數(shù)據(jù)信號(8位)、背光使能信號、顯示使能信號、讀寫選擇信號、數(shù)據(jù)命令選擇信號、使能信號。系統(tǒng)時鐘信號由開發(fā)板上的50MHZ有源晶振提供,手動復位信號由開發(fā)板上按鈕提供,等待暫停信號由開發(fā)板上撥碼開關提供。最終的總路程總價格的輸出結果將在LCD1602顯示屏上顯示出來。要將程序成功下載到開發(fā)板上,則必須先選定目標芯片:EP4CE115F29C7,而后再對出租車計費系統(tǒng)頂層模塊(taxi_top)上的所有輸入輸出信號完成管腳的鎖定,才能在開發(fā)板進行硬件操作,驗證功能。具體的管腳鎖定如圖4-1所示:4-1管腳鎖定開發(fā)硬件驗證下載完成后,在開發(fā)板上進行了具體的硬件操作和調試,驗證邏輯設計的正確性。根據(jù)本文的設計最后驗證以下幾種情況。4.2.1空載狀態(tài)當出租車沒有載客時(空載狀態(tài),狀態(tài)0),LCD1602顯示狀態(tài)0、里程0、費用0結果如圖4-2:圖4-2空載狀態(tài)實物圖4.2.2行駛里程小于3千米當出租車在行駛過程中,行駛里程低于3千米時,顯示路程和價格12元結果如圖4-3:圖4-3低于3千米實物圖4.2.3白天高于3千米沒有等待當出租車在行駛過程中沒有發(fā)生等待(狀態(tài)1),則不收取等待費用。且行駛里程高于3千米,白天行駛所以,單價為2元每千米,行駛了5千米總價為16元,結果如圖4-4:圖4-4白天行駛于5千米實物圖4.2.4夜間高于3千米沒有等待當出租車在行駛過程中沒有發(fā)生等待(狀態(tài)1),則不收取等待費用。且行駛里程高于3千米,夜間行駛所以,單價為3元每千米,行駛了6千米總價為21元,結果如圖4-5:圖4-5夜間行駛于6千米實物圖本章小結本章介紹了此次設計中各個輸入輸出端口在FPGA管腳上的鎖定,以及將本次設計的程序下載到開發(fā)板的過程,并通具體操作驗證了本次設計功能完整的實現(xiàn)。第5章總結總結通過對出租車計費系統(tǒng)發(fā)展歷史和現(xiàn)狀的研究和探索以及和老師討論后確定了此次畢業(yè)設計的方案。并且了解此次與此次設計相關的EDA工具和Verilog語言。深入學習了Verilog語言的多模塊多層次化設計方法,并采用Verilog語言對此次設計的功能分模塊獨立描述,并且將各個功能模塊一個一個實現(xiàn),最后通過例化將各個功能模塊的端口連接起來,形成一個整體。通過QuartusPrime18.1軟件平臺對Verilog語言進行編寫。在熟悉了DE2-115開發(fā)板的使用方法,了解了開發(fā)板的性能后,將編譯好的代碼成功下載到開發(fā)板中,通過在開發(fā)板上調試后,驗證了本次畢業(yè)設計功能的完整實現(xiàn)。本次畢業(yè)設計的功能是默認起步價12元,當行駛里程超過3千米時,白天每千米2元,夜間每千米3元;停車等待過程中每3秒收費1元,當按下復位后,系統(tǒng)自動清零,并設置初始值。在設計過程中遇到了很多困難,例如:不了解LCD1602的工作時序,導致無法正常顯示;使用錯誤的驅動信號,導致里程模塊測量不準確且很容易溢出,經(jīng)過不斷分析,不斷修改,一步步調試,最終實現(xiàn)了相應功能。通過此次畢業(yè)設計加強了我獨立分析問題和獨立解決問題的能力,這次畢業(yè)設計的順利完成使我更加敢于面對困難,保持堅持積極的學習和嚴謹認真的工作態(tài)度,直面生活中的各種困難和未知的挑戰(zhàn)。參考文獻參考文獻[1]吳承綺,孫培生.出租汽車計價器發(fā)展歷程回顧[J].中國計量,2010,4:2-32.[2]黃再銀.出租車多功能計費器的設計[J].電子技術應用,2011,4:60-62.[3]張立,張光新,柴磊,周澤魁.FPGA在多功能計費器系統(tǒng)中的應用[J].中國會議,2005,7:11-13.[4]夏宇聞.Verilog數(shù)字系統(tǒng)設計教程?北京:北京航空航天大學出版社,2003.[5]Bhasker?J.?A?Verilog?HDL?Primer?.Allentown?(PA):?Star?Galaxy?Press,1997.[6]HiroomiHikawa.FPGAimplementationofselforganizingmapwithdigitalphaselockedloops.Neuralnetworks:theofficialjournaloftheInternationalNeuralNetworkSociety,2005:514-522.[7]趙倩,葉波,林麗萍,周多,王曉華.Verilog數(shù)字系統(tǒng)設計與FPGA應用[M].北京:清華大學出版社,2012:180-325.[8]MarkZwolin.DigitalSystemDesignwithVHDL[M].BEIJING:PublishingHouseofElectronicsIndustryBEIJING,2002.[9]李洪偉,袁斯華.基于QuartusII的FPGA/CPLD設計[M].北京:電子工業(yè)出版社,2006:100-109.[11]吳迪,楊梅,嚴飛.EDA與數(shù)字系統(tǒng)實驗教程[M].大連:大連海事大學出版社,2011.致謝致謝本次畢業(yè)論文能夠順利完成,首先得感謝我的指導老師王俊博老師。從一開始課題的選定一直到此次畢業(yè)設計的最終完成,王俊博老師都非常負責任;在選題的過程中王老師給了我們相當多實用的建議,選定課題后王老師對我們的論文也比較重視,經(jīng)常提醒我們要及時完成畢業(yè)設計。在論文格式上王老師經(jīng)常給我們一些實用的建議;王老師嚴謹?shù)慕虒W態(tài)度、淵博的專業(yè)知識、誨人不倦的高尚師德、樸實無華、平易近人的人格魅力都對我影響至深。在此,也非常感謝在此次畢業(yè)論文設計當中給予過我很大幫助的同學們,因為你們的支持與鼓勵才能幫助我擁有克服困難的勇氣,直至本次設計順利完成。本次論文的順利完成也標志著自己大學生涯的結束,感謝四年期間曾經(jīng)細心教導過我們的任課老師,正是因為你們的辛勤培養(yǎng)與無私付出,才使我們在大學期間的到很好的教育,幫助我們更好的去踏入社會。還有一直陪伴在身邊鼓勵我、支持我的身邊的同學們和親人們,是你們的幫助和關懷陪伴我一直走到了今天。再次誠摯的感謝王俊博老師以及曾經(jīng)給予我?guī)椭睦蠋?、同學和親人們。附錄附錄附錄一:本設計的源代碼頂層模塊:moduletaxi_top(inputclk,inputrst_n,input[3:0]key_in,outputled,outputLCD_EN,outputRW,outputRS,output[7:0]DB8,outputLCD_ON,outputLCD_BLON );wiretime_state; wirestart_key;wirewait_key;wirestop_key;wire[1:0]taxi_state;wire[7:0]km_cnt;wire[7:0]taxi_charge;assignled=~time_state;assignLCD_ON=1'b1;assignLCD_BLON=1'b0;xiaodou_mod_mkb u0( .clk(clk), .rst_n(rst_n), .key1(key_in[0]), .time_state(time_state), .key2(key_in[1]), .key_out2(start_key), .key3(key_in[2]), .key_out3(wait_key), .key4(key_in[3]), .key_out4(stop_key)); taxi_charge_sysu1( .clk(clk), .rst_n(rst_n), .time_state(time_state),.start_key(start_key), .wait_key(wait_key), .stop_key(stop_key), .taxi_state(taxi_state), .km_cnt(km_cnt),.taxi_charge(taxi_charge));LCD1602_TOPu2( .clk(clk), .rst_n(rst_n), .taxi_state(taxi_state), .km_cnt(km_cnt),.taxi_charge(taxi_charge), .LCD_EN(LCD_EN), .RS(RS), .RW(RW), .DB8(DB8));Endmodule消抖模塊:modulexiaodou_mod_mkb( inputclk, inputrst_n, inputkey1, outputregtime_state, inputkey2, outputregkey_out2, inputkey3, outputregkey_out3, inputkey4, outputregkey_out4 ); reg[31:0]cnt1; regkey_out1; always@(posedgeclkornegedgerst_n) begin if(!rst_n) cnt1<=0; else begin if(key1) cnt1<=0; elseif(cnt1==32'd800000) cnt1<=cnt1; else cnt1<=cnt1+1; end end always@(posedgeclkornegedgerst_n) begin if(!rst_n) key_out1<=1'b0; else begin if(cnt1==32'd799999) key_out1<=1'b1; else key_out1<=1'b0; end end always@(posedgeclkornegedgerst_n) begin if(!rst_n) time_state<=1'b0; elseif(key_out1) time_state<=~time_state; end reg[31:0]cnt2; always@(posedgeclkornegedgerst_n) begin if(!rst_n) cnt2<=0; else begin if(key2) cnt2<=0; elseif(cnt2==32'd800000) cnt2<=cnt2; else cnt2<=cnt2+1; end end always@(posedgeclkornegedgerst_n) begin if(!rst_n) key_out2<=1'b0; else begin if(cnt2==32'd799999) key_out2<=1'b1; else key_out2<=1'b0; end end reg[31:0]cnt3; always@(posedgeclkornegedgerst_n) begin if(!rst_n) cnt3<=0; else begin if(key3) cnt3<=0; elseif(cnt3==32'd800000) cnt3<=cnt3; else cnt3<=cnt3+1; end end always@(posedgeclkornegedgerst_n) begin if(!rst_n) key_out3<=1'b0; else begin if(cnt3==32'd799999) key_out3<=1'b1; else key_out3<=1'b0; end end reg[31:0]cnt4; always@(posedgeclkornegedgerst_n) begin if(!rst_n) cnt4<=0; else begin if(key4) cnt4<=0; elseif(cnt4==32'd800000) cnt4<=cnt4; else cnt4<=cnt4+1; end end always@(posedgeclkornegedgerst_n) begin if(!rst_n) key_out4<=1'b0; else begin if(cnt4==32'd799999) key_out4<=1'b1; else key_out4<=1'b0; end endendmodule計費系統(tǒng)模塊頂層:moduletaxi_charge_sys(inputclk,inputrst_n,input time_state,inputstart_key,input wait_key, input stop_key, output[1:0]taxi_state, output[7:0]km_cnt,output[7:0]taxi_charge); taxi_ctrl_modu0(.clk(clk),.rst_n(rst_n),.start_key(start_key),.wait_key(wait_key),.stop_key(stop_key), .taxi_state(taxi_state)); taxi_km_countu1(.clk(clk),.rst_n(rst_n),.taxi_state(taxi_state), .time_pulse(time_pulse),.km_cnt(km_cnt),.km_cnt_pulse(km_cnt_pulse)); taxi_charge_modu2(.clk(clk),.rst_n(rst_n),.time_state(time_state),.taxi_state(taxi_state),.time_pulse(time_pulse),.km_cnt(km_cnt),.km_cnt_pulse(km_cnt_pulse),.taxi_start(start_key), .taxi_charge(taxi_charge) );endmodule出租車狀態(tài)控制模塊:moduletaxi_ctrl_mod(inputclk,inputrst_n,inputstart_key,input wait_key,input stop_key,outputreg[1:0]taxi_state);always@(posedgeclkornegedgerst_n)beginif(!rst_n) taxi_state<=2'b00; elseif(start_key) taxi_state<=2'b01; elseif((taxi_state==2'b01)&wait_key) taxi_state<=2'b10; elseif((taxi_state==2'b10)&wait_key) taxi_state<=2'b01; elseif(stop_key) taxi_state<=2'b00;endendmodule里程時間計數(shù)模塊moduletaxi_km_count(inputclk,inputrst_n, input[1:0]taxi_state,outputregtime_pulse,outputreg[7:0]km_cnt,outputregkm_cnt_pulse);reg[31:0]move_time_cnt;reg[31:0]wait_time_cnt;always@(posedgeclkornegedgerst_n)beginif(!rst_n) km_cnt_pulse<=1'b0; elseif((taxi_state==2'b01)&(move_time_cnt==32'd99999999)) km_cnt_pulse<=1'b1; else km_cnt_pulse<=1'b0;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n) km_cnt<=8'b0; elseif((taxi_state==2'b01)&km_cnt_pulse) km_cnt<=km_cnt+8'd1; elseif(taxi_state==2'b00) km_cnt<=8'b0;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n) move_time_cnt<=32'b0; elseif(taxi_state==2'b01) if(move_time_cnt==32'd99999999) move_time_cnt<=32'd0; else move_time_cnt<=move_time_cnt+1; elseif(taxi_state==2'b00) move_time_cnt<=32'd0;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n) wait_time_cnt<=0; elseif(taxi_state==2'b10) if(wait_time_cnt==32'd149999999) wait_time_cnt<=0; else wait_time_cnt<=wait_time_cnt+1; else wait_time_cnt<=0;endalways@(posedgeclkornegedgerst_n)beginif(!rst_n) time_pulse<=1'b0; elseif((taxi_state==2'b10)&(wait_time_cnt==32'd149999999)) time_pulse<=1'b1; else time_pulse<=1'b0;endendmodule計費模塊:moduletaxi_charge_mod(inputclk,inputrst_n,input time_state, inputtaxi_start,input[1:0]taxi_state,inputtime_pulse,input[7:0]km_cnt,inputkm_cnt_pulse, outputreg[7:0]taxi_charge);wire[7:0]start_charge;assignstart_charge=7'd12;always@(posedgeclkornegedgerst_n)beginif(!rst_n)taxi_charge<=0;elseif(taxi_state==2'b00) taxi_charge<=0; elseif(taxi_start) taxi_charge<=start_charge; elseif(taxi_state==2'b01)begin if(km_cnt<3) taxi_charge<=start_charge; elseif(km_cnt_pulse&(!time_state)) taxi_charge<=taxi_charge+2; elseif(km_cnt_pulse&time_state) taxi_charge<=taxi_charge+3; endelseif(taxi_state==2'b10)begin if(km_cnt<3) taxi_charge<=start_charge; elseif(time_pulse) taxi_charge<=taxi_charge+1; endendendmodule1602顯示模塊頂層:moduleLCD1602_TOP( inputclk, inputrst_n, input[1:0]taxi_state,input[7:0]km_cnt,input[7:0]taxi_charge, outputLCD_EN, outputRS, outputRW, output[7:0]DB8);wire[127:0]lcd_data1;wire[127:0]lcd_data2;lcd1602_decodeu0( .clk(clk), .rst_n(rst_n), .taxi_state(taxi_state),.km_cnt(km_cnt),/.taxi_charge(taxi_charge), .lcd_data1(lcd_data1), .lcd_data2(lcd_data2));reg[17:0]clk_lcd_cnt;regclk_lcd; always@(posedgeclkornegedgerst_n)begin if(!rst_n) clk_lcd_cnt<=16'd0; elseif(clk_lcd_cnt==32'd29999) clk_lcd_cnt<=16'd0; else clk_lcd_cnt<=clk_lcd_cnt+1;endalways@(posedgeclkornegedgerst_n)begin if(!rst_n) clk_lcd<=1'b0; elseif(clk_lcd_cnt==32'd29999) clk_lcd<=~clk_lcd;endreg[31:0]lcd_data_en_cnt;reglcd_data_en;always@(posedgeclk_lcdornegedgerst_n)begin if(!rst_n) lcd_data_en_cnt<=32'd0; elseif(lcd_data_en_cnt==32'd150) lcd_data_en_cnt<=32'd0; else lcd_data_en_cnt<=lcd_data_en_cnt+1;endalways@(posedgeclk_lcd)begin if(lcd_data_en_cnt==32'd149) lcd_data_en<=1'b1; else lcd_data_en<=1'b0;endLCD_DriverU2(.clk_lcd(clk_lcd),.rst(rst_n),.lcd_data_en(lcd_data_en),.lcd_data1(lcd_data1),.lcd_data2(lcd_data2),
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 6346.2301-2025電子設備用固定電容器第23-1部分:空白詳細規(guī)范表面安裝金屬化聚萘二甲酸乙二醇酯膜介質直流固定電容器評定水平EZ
- 2026年農業(yè)高技能人才培育策略
- 2026年呼叫中心服務質量提升課程
- 2026河南南陽市市直機關遴選公務員37人備考題庫帶答案詳解
- 隱形技術的定義
- 職業(yè)噪聲工人心血管疾病一級預防實踐
- 職業(yè)健康監(jiān)護策略研究
- 職業(yè)健康大數(shù)據(jù)在職業(yè)病鑒定中的應用
- 職業(yè)健康中的人機適應性研究
- 齊齊哈爾2025年黑龍江齊齊哈爾龍江縣選調中小學校醫(yī)筆試歷年參考題庫附帶答案詳解
- (完整)鋼筋混凝土擋土墻專項施工方案
- 支氣管封堵器課件
- 警務英語教學課件
- 旋挖鉆機進場安全培訓課件
- 2025年高純石墨碳材行業(yè)研究報告及未來行業(yè)發(fā)展趨勢預測
- 2025至2030中國超高鎳正極材料市場經(jīng)營格局與未來銷售前景預測報告
- DB44∕T 2328-2021 慢性腎臟病中醫(yī)健康管理技術規(guī)范
- 農村水利技術術語(SL 56-2013)中文索引
- 中考語文文言文150個實詞及虛詞默寫表(含答案)
- 廣西小額貸管理辦法
- 海南省醫(yī)療衛(wèi)生機構數(shù)量基本情況數(shù)據(jù)分析報告2025版
評論
0/150
提交評論