




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
(完整word版)基于FPGA的出租車計費器(完整word版)基于FPGA的出租車計費器PAGE1(完整word版)基于FPGA的出租車計費器目錄TOC\o"1—3”\h\u28635摘要 123854Abstract 130988第一章引言 2176321.1課題背景 2251621.2本文的主要工作 210698第二章FPGA、VHDL介紹 4196472。1FPGA現狀及發展 4116342。2FPGA的結構與特點 4196662.2.1FPGA基本結構 540192.2。2FPGA的特點 6296342。3VHDL設計優點 621109第三章出租車計費器的設計 789343。1出租車計費器的總體設計 711223。1。1出租車計費標準 7241163。1。2總體框架設計 7127633。2出租車計費器主要模塊設計 8163193.2.1速度模塊 9140753.2。2計程模塊 9318083。2。3計時模塊 10170143。2。4計費模塊 1010483第四章整體電路設計 1162834.1整體電路圖 11136444.2電源電路 12241604.3啟動/停止按鍵電路 12243934。4自動清零部分 1314733第五章系統仿真與下載實現 13244355.1QuartusⅡ軟件介紹 14114185。1。1軟件特點 14127485.1.2QuartusⅡ設計流程: 1483725.2仿真結果 15192545.2.1 整體仿真 15199555.2.2速度模塊仿真 15182065。2。3計程模塊仿真 16324845。2.4計時模塊仿真 16141905。2。5計費模塊仿真 17207805。3設計測試 1720751第六章總結及展望 1825729·致謝 1916773·主要參考文獻 19
基于FPGA的出租車計費器設計摘要:隨著EDA技術的高速發展,電子系統的設計技術和工具發生了深刻的變化,大規模可編程邏輯器件CPLD/FPGA的出現,給設計人員帶來了很多方便。利用它進行產品開發,可以降低研發成本,縮短研發周期。本文介紹了一種采用FPGA芯片進行出租車計費器的設計方法,描述了研究該課題的意義和應用價值;說明了Altera公司的FPGA結構原理及其主要運用;介紹了超高速集成電路硬件描述語言的主要功能和設計;講解了出租車計費器的系統原理和功能。本文主要采用了Altera公司的可編程邏輯芯片EPC2C35F672C8為核心控制,并附加一定外圍電路組成出租車計費器,使用目前流行的VHDL語言進行設計,具有移植性強的特點,便于升級及可重復使用。利用QuartusⅡ6.0對所設計的出租車計費器的VHDL代碼進行仿真,并在FPGA數字實驗系統上實現了該控制。關鍵字:FPGA, VHDL, QuartusⅡ, 出租車計費器DesignofTaxiMeterBasedonFPGAABSTRACT:WiththerapiddevelopmentofEDAtechnology,thedesignandtoolsofelectronicsystemhavedeeplychanged。Andthelarge—scaleprogrammablelogicdeviceCPLD/FPGAappearancetomakeconveniencefordesigner。Byusingittoresearchanddevelop,itwillhelpdevisertoreducecost,shortencycle.ThisessayintroducesadesignoftaximeterbyusingFPGAchip,describesthesignificanceandimportancetoresearchthis,explainmakeupelementsofFPGAwhichismadebyAlteraCompany,introducethemainfunctionanddesignofVery-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,interpretthetaximeterprincipleandfunctionsofthesystem。ThisessaymainlyusetheEPC2C35F672C8forcorecontrol,andaddsomeoutsidecircuittomakeataximeter。ItisdesignedwithVHDLLanguageanditcanbemigratedeasier。Thismaketheproductmuchmoreconveniencetorepeatuse。ByusingQuartusⅡ6。0toemulatetaximeterVHDLcode,thePFGAdigitalexperimentsystemcanbecontrolled。KeyWords: FPGA, VHDL, QuartusⅡ, TaxifareRegisters第一章引言1。1課題背景幾年來,出租車行業發展迅速,全國大大小小的出租車公司已有數千家,基于出租車的附屬品市場前景也是十分廣闊。傳統的出租車計費器大多是由單片機實現的,發展使用也是十幾年了,在穩定性、成本、制造工藝、使用習慣等方面都具有一些優勢,但在運營過程中系統不是很穩定,容易造成死機的現象。傳統計費器的不足點:產品更新周期長:傳統的計費器利用微控器,大部分功能依靠單片機實現。但單片機的程序不通用,不同芯片指令集不相同,因此設計研發比較困難,周期很長。計價方式不靈活:每次計價標準修改都需要重新燒錄芯片,使得每次價格調整都成為很費力的事情,很難適應社會發展的需要。本設計基于FPGA的出租車計費器主要由Altera公司的CycloneⅡ型系列芯片EPC2C35F672C8及一些外部控制電路組成.使用軟件QuartusⅡ和超高速硬件描述語言VHDL來實現計價標準靈活設定.FPGA在電子設計領域中價格低廉,有良好的發展趨勢,它的出現必定會占領大部分數字器件市場.1.2本文的主要工作面對出租車行業日益迅猛的發展趨勢及對計費器更高的靈活性的要求,本設計希望嘗試一些新的方法來予以解決。(1).利用FPGA取代傳統微控器隨著FPGA等數字可編程器件的出現解決了傳統電子設計不能完成的任務,利用FPGA來實現出租車計費器,可行性很高,而且電路簡單,大大減少外圍器件,可以用軟件完全仿真,靈活度高,可以設計一些復雜的系統,而且編好的系統可以在不同的FPGA或CPLD芯片上通用。FPGA能完成任何數字器件的功能,使用FPGA來開發數字電路,可以大大縮短設計時間,減少PCB面積,提高系統的可靠性。同時由于FPGA的功能完全取決于VHDL語言編寫的程序,不拘泥于某種芯片的特殊指令,更加提高了產品的更新換代能力。(2).完成基于FPGA的出租車計費器的設計出租車計費器系統是VHDL語言的實際應用,利用VHDL語言設計出來的出租車計費器系統將實現計程模塊、計時模塊以及動態掃描模塊等設計方法與技巧。計程模塊將用計數器來完成,計數器對脈沖數計數,然后提供給程序數據.通過不同的信號,然后用比較器可以讓我們確定出租車是在車行計程還是車停計時。再將數據傳輸到計費模塊,通過多種條件判定,最后確定輸出值,然后相加確定最后的費用,并顯示出來.第二章FPGA、VHDL介紹2。1FPGA現狀及發展FPGA是現場可編程門陣列(FieldProgrammableGateArray)的簡稱。它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發展的產物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門電路數有限的缺點。FPGA起源于美國的Xilinx公司,該公司于1985年推出了世界上第一塊FPGA芯片。在這二十年的發展過程中,FPGA的硬件體系結構和軟件開發工具都在不斷的完善,日趨成熟。從最初的1200個可用門,90年代時幾十萬個可用門,發展到目前數百萬門至上千萬門的單片FPGA芯片,Xilinx、Altera等世界頂級廠商已經將FPGA器件的集成度提高到一個新的水平。FPGA結合了微電子技術、電路技術、EDA技術,使設計者可以集中精力進行所需邏輯功能的設計,縮短設計周期,提高設計質量。目前世界上有十幾家生產CPLD/FPGA的公司,最重要的幾家是Altera、Xilinx、Lattice和Actel。Actel公司生產的FPGA廣泛應用于通信等領域,該公司的部分FPGA系列采用了繁榮死結構,可以應用于航空航天、軍事領域。另外一些FPGA采用了Flash工藝制造。Xilinx公司目前有8款FPGA的DSP.其中Sparten-3ADSP為低端產品,高端的Virtex—DSP分為兩個產品線:Virtex—4SX,采用了65nm工藝的Virtex-5SXT.所以Xilinx的產品從21最多到352個GMAC/s(千兆乘加/秒),以提供不同范圍的性能,同時也增大在存儲器方面的帶寬。因此最低速產品可以運行到250MHz,告訴產品運行到550MHz;MAC單元從84到640.Altera公司的高密度StratixⅢ器件拓展FPGA的DSP性能。嵌入式DPS模塊運行在550Hz,這些器件可達每秒492千兆乘加(GMAC)的性能,并結合良好的邏輯結構于速度優化的互聯。StratixⅡ器件可以引腳完全兼容地移植到HardCopyⅡ結構化ASIC,從而保證客戶的設計功能沒有任何改變。Altera的新一代結構化ASIC芯片,邏輯相當于多達220萬ASIC門,DSP模塊相當于額外的140萬門,還有集成超過8Mbits的嵌入式存儲器。2.2FPGA的結構與特點2。2。1FPGA基本結構目前生產FPGA的主要公司有Altera、Xilinx、Lattice和Actel,生產的FPGA品種和型號繁多,盡管這些FPGA的集體結構和性能指標各有特色,但它們都有一個共同之處,即由邏輯功能塊排成陣列,并有可編程的互連資源連接這些邏輯功能塊,從而實現不同的設計。典型的FPGA通常包含三類基本資源:可編程邏輯功能塊、可編程輸入/輸出塊和可編程互聯資源,基本結構如圖2-1所示。圖2-1FPGA基本結構2。2.2FPGA的特點FPGA使用的是可編程的查找表(LookUpTable,LUT)結構,LUT是可編程的最小邏輯結構單元.大部分FPGA采用基于SRAM的查找表邏輯形成結構,就是用SRAM(靜態隨機存儲器)來構成邏輯函數發生器.一個N輸入查找表(LUT)可以實現N個輸入變量的任何邏輯功能。目前市場上有三種基本FPGA編程技術:SRAM、反熔絲、Flash。其中SRAM是迄今為止應用范圍最廣的架構,主要因為它速度快且具有可重編程能力,而繁榮死FPGA只具有一次可編程(OneTimeProgrammable,OTP)能力。基于Flash的FPGA是FPGA領域比較新的技術,也能提供重編程功能。2。3VHDL設計優點利用VHDL語言設計數字邏輯硬件系統具有多方面的優點。VHDL可以用來描述邏輯設計的結構,比如邏輯設計中有多少個子邏輯,而這些子邏輯是如何連接的。VHDL并不十分關心一個具體邏輯是靠何種電路實現的,設計者主要把精力集中電路所能實現的功能上。VHDL采用類似于高級語言的語句格式完成對硬件行為的描述,所以我們稱VHDL為行為描述語言.VHDL所給出的邏輯的模擬與調試為設計者提供了最大的空間,用戶甚至不必編寫任何測試向量便可進行源代碼級的調試。設計者可以非常方便地比較各種方案的可行性和優劣,大大降低了設計的難度。并且設計者的原始描述是非常簡練的硬件描述,經過EDA工具處理最終生成付諸生產的電路描述或版圖參數描述的工藝文件。VHDL語言具有良好的可讀性,VHDL語言中的設計尸體(DesignEntity)、程序包(Package)、設計庫(Library)為設計人員重復利用別人的設計成果提供了技術手段。第三章出租車計費器的設計3。1出租車計費器的總體設計3。1.1出租車計費標準車起步開始計費,首先顯示起步價,起步費為3.00元,車在行駛3km以內,只收起步價。車行駛超過3km后,每公里2元,車費依次累加.當總費用達到或超過40元時,每公里收費4元。當遇到紅燈或客戶需要停車等待時,則按時間計費,計費單價為每20秒收費1元。3。1。2總體框架設計系統流程介紹:分析系統設計要求不難得知,整個出租車計費系統按功能主要分為速度模塊、計程模塊、計時模塊和計費模塊,其系統結構圖如圖3—1所示。圖3—1出租車計費器系統結構圖系統接收到reset信號后,總費用變為3元,同時其他計數器、寄存器等全部清零。系統接收到start信號后,首先把部分寄存器賦值,總費用不變,單價price寄存器通過對總費用的判斷后賦為2元。其他寄存器和計數器等繼續保持為0。速度模塊:通過對速度信號sp的判斷,決定變量kinside的值。Kinside即是行進100m所需要的時鐘周期數,然后每行進100m,則產生一個脈沖clkout。計程模塊:由于一個clkout信號代表行進100m,故通過對clkout計數,可以獲得共行進的距離kmcount。計時模塊:在汽車啟動后,當遇到顧客等人或紅燈時,出租車采用計時收費的方式。通過對速度信號sp的判斷決定是否開始記錄時間。當sp=0時,開始記錄時間.當時間達到足夠長時產生timecount脈沖,并重新計時.一個timecount脈沖相當于等待的時間達到了時間計費的長度。這里選擇系統時鐘頻率為500Hz,20s即計數值為1000。計費模塊由兩個進程組成。其中,一個進程根據條件對enable和price賦值:當記錄的距離達到3公里后enable變為1,開始進行每公里收費,當總費用大于40元后,則單價price由原來的2元每公里編程4元每公里;第二個進程在每個時鐘周期判斷timeout和clkout的值.當其為1時,則在總費用上加上相應的費用。3。2出租車計費器主要模塊設計從上述設計方案中我們可以大致得到出租車計費器的系統框圖,如圖3—2所示。其中clk為輸入時鐘脈沖,時鐘上升沿有效;reset為復位信號,start為開始計費信號,stop為停止計費信號,均高電平有效;SP[2。。0]表示出租車狀態(停止或不同形式速度);kmcnt和count信號則分別輸出出租車行駛的里程和花費。圖3-2出租車計費器系統框圖3。2。1速度模塊速度模塊首先根據start信號判斷是否開始計費,然后根據輸入的速度檔位sp[2。。0]的判斷,確定行駛100m所需要的時鐘數,每前進100m,輸出一個clkout信號。同時由cnt對clk進行計數,當cnt等于kinside時,把clkout信號置1,cnt清0。其模塊框圖如圖3—3。圖3-3速度模塊框圖3.2.2計程模塊此模塊主要用于記錄行進的距離,其模塊框圖如圖3-4所示.通過對clkout信號的計數,可以計算行駛的距離kmcount。一個clkout脈沖相當于行進100m所以只要記錄clkout的脈沖數目即可確定共行進的距離。Kmcount1為十分位,kmcount2為個位,kmcount3為十位,分別為十進制數。圖3—4計程模塊框圖3.2.3計時模塊速度模塊主要用于計時收費,記錄計程車速度為0的時間(如等待紅燈),其模塊框圖如圖3—5所示.通過對sp信號的判斷,當sp=0,開始記錄時間.當時間達到足夠長時,產生timecount脈沖,并重新計時。圖3-5計時模塊框圖3。2.4計費模塊計費模塊如圖3-6所示,可分為kmmoney1和kmmoney2兩個進程.Kmmoney1用于產生enable和price信號.當記錄距離達到3km后,enable信號為1,開始進行每公里收費。當總費用大于40元后,單價price由原來的2元變成4元,用作計時收費。通過對sp信號的判斷,當sp=0,開始記錄時間。當時間達到足夠長時,產生timecount脈沖,并重新計時。Kmmoney2用于判斷timecount和clkout的值,當其為1時,總費用加1.最終輸出為總費用。圖3—6計費模塊框圖第四章整體電路設計4。1整體電路圖整體RTL電路如圖4-1.硬件電路由CycloneⅡ電路板組成,clk為時鐘周期信號,由試驗箱產生,start/stop是啟動停止按鍵電路,reset為自動清零電路。電源又AD—DC開關電源供電。圖4—1整體RTL門電路4。2電源電路電源采用了是比較流行的開關電源,AD—DC開關電源,輸入115VAC到230VAC,輸出+5V(4A)。使用開關電源的好處就是比較節省能源,它的轉換效率很高,可達85%以上,穩壓范圍寬,除此之外,還具有穩壓精度高、不使用電源變壓器等特點.4.3啟動/停止按鍵電路如圖4—2所示,采用雙刀雙路開關,一路開關用于清零部分,由于顯示部分特殊要求,即計費停止后屏幕上荏苒要保持計費的所有信息,只有當下次計費啟動時才清零從新開始計費。另外兩路開關,其中一路用于啟動指示和啟動/停止輸出信號給FPGA芯片的I/O口。當按下鍵后,清零部分和啟動計費部分同時進行,但清零只是瞬間的,計費指示燈兩起.再次按下鍵后,開關換到另外的兩路,空車指示燈亮起。圖4—2啟動/停止按鍵電路4.4自動清零部分由于顯示部分的特殊要求,即計費停止后屏幕上仍然要保持計費的所有信息,只有當下次計費啟動時才清零從新開始計費.VHDL語言的特殊性,不能在一個結構中用兩個不同的動作使其賦值。所以必須要有一個瞬間清零的信號,當FPGA的清零I/O端口為“1”時就自動清零。使用電容的充放電功能來實現,按鍵斷開時清零輸出端為接地,按鍵閉合時電容充電清零端為高電平,充完電后清零端輸出又為低電平,當按鍵斷開后,通過一個2k歐姆的電阻放電,為下次充電做好準備.如圖4-3所示。圖4-3自動清零電路第五章系統仿真與下載實現5.1QuartusⅡ軟件介紹5。1.1軟件特點QuartusⅡ是Altera公司自行設計的一個完全集成化、易學易用的可編程邏輯設計環境,它提供了完全集成且與電路結構無關的開發包環境,具有數字邏輯設計的全部特性,包括:可利用原理圖、結構框圖、VerilogHDL、AHDL和VHDL完成電路描述,并將其保存為設計實體文件;芯片(電路)平面布局連線編輯;LogicLock增量設計方法,用戶可建立并優化系統,然后添加對原始系統的性能影響較小或無影響的后續模塊;功能強大的邏輯綜合工具;完備的電路功能仿真與時序邏輯仿真工具;定時/時序分析與關鍵路徑延時分析;可使用SignalTapⅡ邏輯分析工具進行嵌入式的邏輯分析;支持軟件源文件的添加和創建,并將它們連接起來生成編程文件;使用組合編譯方法可一次完成整體設計流程;自動定位編譯錯誤;高效的期間編程與驗證工具;可讀入標準的EDIF網表文件、VHDL網表文件、和Verilog網表文件;能生成第三方EDA軟件使用的VHDL網表文件和Verilog網表文件;5.1.2QuartusⅡ設計流程:設計輸入:完成器件的硬件描述,包括文本編輯器、塊與符號編輯器、MegaWizard插件管理器、約束編輯器和布局編輯器等工具;綜合:包括分析和綜合器、輔助工具和RTL查看器等工具;不懼連線:將設計綜合后的網表文件映射到實體器件的過程,包括Fitter工具、約束編輯器、布局圖編輯器、芯片編輯器和增量布局連線工具;時序分析;5。2仿真結果 5.2。1 整體仿真 對電路整體進行仿真,得出如下仿真波形圖5—1。圖中,當復位信號reset為高電平時,系統所有寄存器、計數器都清零;當開始計費信號start信號有效時,計費器開始計費,根據出租車行駛的速度sp[2。.0]的取值計算所用花費和行駛里程;當停止計費信號有效時,計費器停止工作。 圖5—1出租車計費器仿真波形圖 5.2.2速度模塊仿真 速度模塊的仿真波形圖如圖5-2所示。該模塊根據出租車所處的運行狀態和不同的形式速度,對相應數目的時鐘周期進行計數,車每行駛100m時輸出信號clkout輸出高電平。 圖5-2速度模塊仿真波形圖 5。2。3計程模塊仿真 計程模塊的仿真波形如圖5-3所示。圖中,當reset信號有效時,系統復位清零;否則,對輸入信號clkout進行十進制計數。 圖5—3計程模塊仿真波形圖 5。2。4計時模塊仿真 計時模塊的仿真波形圖如圖5-4所示。預設1000個時鐘周期為20s,對時鐘周期進行計數,每計1000個時鐘周期輸出高電平,指示計時20秒。 圖5—4計時模塊仿真波形圖5.2.5計費模塊仿真 計費模塊的仿真波形圖如圖5-5所示。當reset信號有效時,系統復位清零;否則,當計時計費信號timecount和計程計費信號clkout為高電平時,按照一定計費規則進行計費。 圖5—5計費模塊仿真功能圖 綜上所述,本設計的出租車計費器完全符合系統設計的要求,實現了出租車計費器所需的各項基本功能。5.3設計測試利用QuartusⅡ6.0對所設計出租車計費器的VHDL代碼進行了仿真,并在CycloneⅡ型可編程數字實現系統上實現了該控制。該數字實現系統分成兩部分,一是FPGA的下載板,它主要包括所使用的芯片、RS—232接頭、接腳轉換插槽等;另一部分是I/O實驗板,它主要包括顯示、脈沖輸出等。出租車計費器的各部分利用數字實驗系統所附的RS—232連接線將計算機中的VHDL代碼設計的內容燒錄到該實驗系統的EPC2C35F672C8芯片中進行測試,測試結果基本實現了總費用=起費用+(里程-3km)×里程單價+等待時間×等待單價的出租車計費模式.第六章總結及展望本文論述了基于FPGA的出租車計費器設計,分別介紹了整個系統和各個模塊的設計,使用FPGA芯片、VHDL硬件描述語言作為設計手段,利用自頂向下的模塊化設計思路,通過在QuartusⅡ軟件下進行的模擬仿真,并進行相應的硬件下載調試,證明所設計的系統完成了出租車計費器的功能,各項技術指標符合預定標準,具有一定實用性。由于本人在經驗水平上的欠缺,設計中可能存在很多不足,請各位老師予以指證!近年來,FPGA在通信、控制、數據計算等領域得到了廣泛的應用,利用FPGA來設計電子產品可減少電子系統的開發風險和開發成本;縮短了上市時間;通過在系統編程、遠程在線重構等技術降低維護升級成本。并且,FPGA器件的成本越來越低,Actel公司發布第三代的基于Flash的可編程邏輯方案,這些新的FPGA芯片最低價將達到1.5美元,代表全球最低成本的FPGA。這些都說明可編程器件已成為現在及未來很長一段時間的主流,用它來實現的出租車計費器省去很多外圍電路,穩定,簡單有效,將來必然可以設計出更多更強大的功能,提高產品競爭力。未來基于FPGA平臺的出租車計費器將會有更低的成本、更小的體積、更安全、更精確和更多功能.·致謝本次設計從選題到最后完成,都得到了指導老師付敏老師的悉心指導。付老師淵博的知識、嚴謹的治學態度和誨人不倦的精神永遠是我學習的榜樣.同時,感謝論文指導組的劉海力老師和郭仟老師對選題的分析。在系統設計過程中,我也遇到了較多的困難,我十分感謝我的朋友和老師給與我的幫助和支持,使我能順利完成本系統的設計與實現。·主要參考文獻[1]劉韜,樓興華.《FPGA數字電子系統設計與開發實例導航》[M].北京:人民郵電出版社,2005.6,27~36.[2]王輝,殷穎,陳婷,俞一鳴。MAX+plusⅡ和QuartusⅡ應用于開發技巧[M].北京:機械工業出版社,2007。1,293~316。[3]焦敏.FPGA在出租車計費器上的應用研究[J];中國科技信息,2009(9):145~146.[4]茅豐。基于FPGA的出租車計費器[J];電子技術應用,2007.3。[5]廖艷秋。FPGA的出租車計費器[J];電子科技大學,2008。10。[6]吳冬梅,吳延海,鄧玉玖.基于CPLD/FPGA的出租車計費器[J];電子技術應用,2004(11):71~73。[7]黃智偉。FPGA系統設計與實踐[M].,北京:電子工業出版社,2005,200~217.[8]黃建新,劉邁,譚克俊。基于FPGA芯片設計出租車計費器的研究[J]。吉林化工學院學報,2003(03):52~55。[9]候伯亨,顧新.VHDL硬件描述語言與數字邏輯電路設計[M].西安:西安電子科技大學出版社,2000.[10]姜雪松,VHDL設計實例與仿真[M]。北京:機械工業出版社,2007.1,91~103.[11]王彥芳,王小平,王彥永等。用可編程邏輯器件實現專用數字集成電路的功能設計[J].半導體情報,2000,37(5)48~51。[12]張立,張光新,柴磊等.FPGA在多功能計費器系統中的應用[J].儀器儀表學報,2005,26(8):7352737.[13]林愿。基于CPLD/FPGA的出租車計費器系統的設計實現[J].國外電子元器件,2007(07):26~29.[14]周潤景,圖雅,張麗敏。基于QuartusII的FPGA/CPLD數字系統設計實例[J]。北京:電子工業出版社,2007。[15]劉欲曉,方強,黃宛寧。EDA技術與VHDL電路開發應用實踐[M];北京:電子工業出版社,2009(4),175~186。[16][英]JoneWulenskl。VHDLDigtalSystemDesign[M],北京:電子工業出版社,2004,10~105.[17]SanJose.MAX+PLUSIIIntroductionUSA[M]:AlteraCorporation,2004,52~69.附錄VHDL程序Speed模塊libraryieee; —-加載庫文件useieee。std_logic_1164.all;useieee.std_logic_unsigned。all;entityspeedis port( -—定義輸入輸出端口 clk:instd_logic; reset:instd_logic; start:instd_logic; stop:instd_logic; sp:instd_logic_vector(2downto0); clkout:outstd_logic );endspeed;architecturertlofspeedisbegin process(clk,reset,start,stop,sp)--敏感信號發生變化時,啟動進程 typestate_typeis(s0,s1);——枚舉類型; variables_state:state_type; variablecnt:integerrange0to28; variablekinside:integerrange0to30;begin casespis --速度選擇 when"000”=〉kinside:=0; --停止狀態或空檔 when"001"=〉kinside:=28; —-第一檔 when"010"=〉kinside:=24; —-第二檔 when"011"=>kinside:=20; -—第三檔 when"100”=〉kinside:=16; -—第四檔 when”101”=〉kinside:=12; --第五檔 when"110"=>kinside:=8; ——第六檔 when"111"=〉kinside:=4; ——第七檔 endcase; ifreset=’1'then -—復位清零 s_state:=s0; elsifclk’eventandclk='1'then —-時鐘上升沿到達時,狀態轉換 cases_stateis whens0=> cnt:=0; clkout<=’0’; ifstart=’1'then s_state:=s1; else s_state:=s0; endif; whens1=〉 clkout<=’0'; ifstop=’1’then s_state:=s0; -—相當于無客上車 elsifsp="000"then s_state:=s1; --有客上車但車速為0,即剛上車還未起步 elsifcnt=kinsidethen cnt:=0; clkout〈='1’; s_state:=s1; else cnt:=cnt+1; s_state:=s1; endif; endcase; endif;endprocess;endrtl;Times模塊libraryieee; ——加載庫文件useieee.std_logic_1164。all;useieee.std_logic_unsigned.all;entitytimesis port( --定義輸入輸出端口 clk:instd_logic; reset:instd_logic; start:instd_logic; stop:instd_logic; sp:instd_logic_vector(2downto0); timecount:outstd_logic );endtimes;architecturertloftimesisbeginprocess(reset,clk,sp,stop,start) ——啟動進程 type state_typeis(t0,t1,t2); variablet_state:state_type; variablewaittime:integerrange0to1000;begin ifreset='1’then —-復位清零 t_state:=t0; elsif(clk'eventandclk='1')then —-時鐘上升沿到達 caset_stateis --根據條件完成狀態轉換 whent0=> waittime:=0; timecount<='0'; ifstart='1’then t_state:=t1; else t_state:=t0; endif; whent1=> ifsp=”000”then t_state:=t2; else waittime:=0; t_state:=t1; endif; whent2=> waittime:=waittime+1; ——等待時間加1 timecount<=’0'; ifwaittime=1000then timecount〈='1'; —-產生一個時間計費脈沖 waittime:=0; elsifstop='1'then t_state:=t0; elsifsp=”000"then t_state:=t2; else timecount<=’0’; t_state:=t1; endif; endcase; endif;endprocess;endrtl;Kilometers模塊libraryieee; —-加載庫文件useieee.std_logic_1164.all;useieee。std_logic_unsigned.all;entitykilometersis port( ——定義輸入輸出端口 clkout,reset:instd_logic; kmcnt1:outstd_logic_vector(3downto0); kmcnt2:outstd_logic_vector(3downto0); kmcnt3:outstd_logic_vector(3downto0) );endkilometers;architecturertlofkilometersisbegin process(clkout,reset) --啟動進程 variable km_reg:std_logic_vector(11downto0);begin ifreset=’1'then ——復位清零 km_reg:=”000000000000"; elsifclkout’eventandclkout=’1’then —-時鐘上升沿到達時進行計程 ifkm_reg(3downto0)=”1001”then --對應里程十分位 km_reg:=km_reg+"0111”; --十分位向個分位進位 else km_reg(3downto0):=km_reg(3downto0)+"0001"; endif; endif; kmcnt1<=km_reg(3downto0); kmcnt2<=km_reg(7downto4); kmcnt3<=km_reg(11downto8);endprocess;endrtl;Kmmoney模塊libraryieee; ——加載庫文件useieee。std_logic_1164。all;useieee.std_logic_unsigned.all;entitykmmoneyis port( -—定義輸入輸出端口 clk :instd_logic; reset :instd_logic; timecount:instd_logic; clkout:instd_logic; kmcnt2 :instd_logic_vector(3downto0); kmcnt3 :instd_logic_vector(3downto0); count1 :outstd_logic_vector(3downto0); count2 :outstd_logic_vector(3downto0); count3 :outstd_logic_vector(3downto0) );endkmmoney;architecturertlofkmmoneyissignalcash:std_logic_vector(11downto0);signalprice:std_logic_vector(3downto0);signalenable:std_logic;beginkmmoney1:PROCESS(cash,kmcnt2) —-此進程產生下一進程的敏感信號 begin ifcash>=”000001000000"then price〈="0100”; else price<="0100”; endif; if(kmcnt2>="0011")OR(kmcnt3〉="0001”)then enable〈=’1'; else enable<=’0'; endif; endprocess; kmmoney2:process(reset,clkout,clk,enable,price,kmcnt2) variablereg2:std_logic_vector(11downto0); variableclkout_cnt:integerrange0to10; begin if reset='1'then cash<="000000000011”; --起步費用設為3元 elsifclk'eventandclk=’1'then —-判斷是否需要時間計費,每20s加一元 iftimecount=’1’then reg2:=cash; ifreg2(3downto0)+"0001”〉"1001"then --產生進位 reg2(7downto0):=reg2(7downto0)+"00000111”; ifreg2(7downto4)〉”1001”then cash〈=reg2+"000001100000"; else cash<=reg2; endif; else cash〈=reg2+"0001"; endif; -—里程計費 elsifclkout='1'andenable=’1’then ifclkout_cnt=9then clkout_cnt:=0; reg2:=cash; if”0000"®2(3downto0)+price(3downto0)>"00001001”then reg2(7downto0):= —-十位進位 reg2(7downto0)+”00000110”+price; ifreg2(7downto4)〉"1001"then --百位進位 cash<=reg2+"000001100000”; else cash〈=reg2; endif; else cash<=reg2+price; endif; else --對時鐘計數 clkout_cnt:=clkout_cnt+1; endif; endif; endif; endprocess; count1〈=cash(3downto0); —-總費用的個位 count2<=cash(7downto4); ——總費用的十位 count3〈=cash(11downto8); -—總費用的百位endrtl; TOP模塊libraryieee;useieee.std_logic_1164.all;entitytopis port( --定義整個系統的輸入輸出端口 clk:instd_logic; reset:i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/GDAC 1-2024頂墻用鋁型材
- T/CACE 0129-2024竹編安全帽
- T/CGAS 033-2024物聯網智能燃氣表數據安全規范
- 房地產ERP軟件使用許可合同4篇
- T/CHTS 10158-2024公路跨海橋梁風-浪-流耦合作用指南
- 公司注冊商標出讓合同書5篇
- 抵押保證借款合同范本一2篇
- 道路關鍵工程綜合施工合同3篇
- 血管栓塞劑及栓塞材料項目績效評估報告
- 新生兒骨折查房要點解析
- 2025年部編版新教材語文一年級下冊期末復習計劃及全冊單元復習課教案
- 企業信用評級與征信服務后續預案
- 《企業績效評價標準值(2023年版)》
- 2025年互聯網營銷師(直播銷售員)考試題庫
- 辦公室內部規章制度及執行細則
- 中考語文試卷名著閱讀專題匯編《艾青詩選》詩歌賞析題(截至2024年)
- 2025公考培訓行業年度趨勢分析
- 第12課《我是小小消防員》(說課稿)蘇少版六年級上冊綜合實踐活動
- 蔬菜生產實習總結
- 消防工程包清工合同范本年
- 梁寧產品經理思維30講知識講稿
評論
0/150
提交評論