版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、自動售貨機的設計與實現(xiàn)自動售貨機的設計與實現(xiàn)電信專業(yè)學生: 指導老師: 摘要:本文介紹了VHDL的特點和應用,以自動售貨機為例,詳細說明了其實現(xiàn)過程。本系統(tǒng)使用VHDL語言編寫,用狀態(tài)基來實現(xiàn)各功能,使用MAXPLUS進行仿真,模擬各模塊的實現(xiàn)。本文詳細介紹如何運用VHDL語言及MAXPLUS進行仿真,本文設計的自動售貨機實現(xiàn)了選擇貨物,投幣,找零,顯示,多次交易,在一次購買中選擇多個貨物等自動售貨機的基本功能。本文給出了各個模塊的源程序、各模塊的連接圖以及各個模塊的仿真圖,并做出了詳細的分析。關鍵詞:VHDL語言,MAXPLUS,自動售貨機Design and implementation
2、of vending machineElectronics and Information Science and Technology Candidate:JiangHuiAdvisor:CaiJianhuaAbstract: This article introduces the characteristics and application of VHDL, with a example of designing vending machines, describes detailedly the implementation process. The system uses the V
3、HDL language, realizing every function uses state machines, applying MAXPLUS to simulate in order to realize the function every modules.This article describes the use of VHDL language and MAXPLUS simulation, to achieve the vending machine's basic functions , as choose good, coin, give change, bu
4、y good more than one time, choose more than one good in one time, display, and so on. This article gives the original program of every modules and the simulating diagram of every modules and the combination of all of the modules, gives detail analyse of every simulating diagram as well.Keywords:VHDL
5、 language,MAXPLUS,Vending machine引言隨著科技的發(fā)展和社會的進步,自動化商業(yè)機械有了越來越廣泛的應用,自動售貨機作為自動化商業(yè)機械的代表被廣泛用于公共場所自動售貨,給人們的生活帶來了極大的方便。特別在發(fā)達國家,自動售貨機已經(jīng)十分普及,自動售貨機可售出各種成型包裝小商品,各種袋裝,盒裝,軟瓶裝等小商品。因其無需專人值守而可以每天24小時售貨,被稱為“無人小超市”。在我國,由于多種原因,自動售貨機的市場推廣緩慢,處于培育階段,但可以預見,這種方便快捷的服務形式因其適合現(xiàn)代生活快節(jié)奏的需要,在不久的將來必會獲得大眾的喜愛。隨著商品市場的不斷繁榮,自動售貨機和自動服務設
6、施必將逐步得到廣泛的應用。本文設計研究自動售貨機的主要功能模塊,主要包括貨幣處理模塊、余額計算模塊、顯示模塊,延時和時控模塊,由于條件上的限制,對投幣模塊中的貨幣檢測未進行處理。相應的主要功能有選擇貨物,多次購買,出貨找零,顯示,延時和時控功能。本文是通過使用VHDL語言,基于FPGA可編程芯片,并通過使用MAXPLUS軟件進行程序設計,模擬仿真,功能驗證,以更好的來理解和掌握自動售貨機控制系統(tǒng)的工作原理和設計方法,以及學習和掌握基于EDA的電子產(chǎn)品設計方法,進一步加深對VHDL語言以及MAXPLUS軟件、FPGA可編程芯片的認識與了解。更深入的學習EDA技術,更好地掌握本專業(yè)知識。1 本論概
7、述本文設計的自動售貨機是基于VHDL1(Very High Speed Integrated Circuit Hard-ware Description Language,超高速集成電路硬件描述語言)語言,使用MAXPLUS軟件進行模擬仿真,在FPGA(Field Programmable Gate Arry,現(xiàn)場可編程門陣列)可編程芯片上實現(xiàn)的一款EDA(Electronic Design Automation,電子設計自動化)技術的產(chǎn)品。1.1系統(tǒng)的工作原理本文設計的自動售貨機有兩種飲料可以出售,售價分別為2元和3元。售貨機可以識別1元,5元兩種貨幣。如果投入金額總值等于或超過售價就可以將
8、飲料放出,并具有相應的找零錢功能。(1)用戶可多次選擇購買的飲料種類,某次飲料種類選定后等待投幣。如等待時間超過10秒鐘,則認為用戶放棄選購,售貨機自動回到等待狀態(tài),等待新的交易。若在10秒內(nèi),再次選中飲料,則再次等待。(2)每次交易完成,售貨機自動回到等待狀態(tài),等待新的交易。(3)用按鍵模擬投入1元,5元兩種貨幣,可連續(xù)投幣,同時顯示投入的金額和還應投入的金額。若某次投幣后金額不足,且一定時限內(nèi)不再投幣(10秒左右),則交易失敗,并退幣,顯示退還金額。(4)具有指示電路,分別指示購買成功、交易取消(交易失?。┖驼伊?。(5)相應顯示有延時和時控功能。1.2 VHDL語言介紹VHDL2(Very
9、 High Speed Integrated Circuit Hard-ware Description Language)是指超高速集成電路硬件描述語言。VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式,以及描述風格與句法,類似于一般的計算機一個電路模塊或一高級語言,如C語言。VHDL的程序結(jié)構(gòu)特點是,將一項工程設計或稱設計實體(可以是一個元件、一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分,即端口)和內(nèi)部(或稱不可視部分)。在對一個設計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成,其他的設計就可以直接調(diào)用這個實體。這種將設計實體分成內(nèi)外
10、部分的概念是VHDL系統(tǒng)設計的基本點。1.2.1 VHDL語言的發(fā)展背景硬件描述語言的發(fā)展至今已經(jīng)有幾十年的歷史,并已成功應用到系統(tǒng)的仿真、驗證和設計綜合等方面。其中比較著名的的有VHDL語言、AHDL語言、Verilog HDL語言等。而在七八十年代初期VHDL語言是為美國國防部工作的。它是以ADA語言為根源,就像將被看到的整體結(jié)構(gòu)的VHDL和其他的VHDL報表。1986年,有人提議VHDL語言作為IEEE標準。它經(jīng)歷了一些修改意見和修改,直至1987年12月獲得通過,成為IEEE 1076至1987標準。它的出現(xiàn)為電子設計自動化的普及和推廣奠定了堅實的基礎。之后IEEE對87版本進行了修訂
11、,于1933年推出了較為完善的93版本(被定為ANSI/IEEE std 1076-1993標準),使得VHDL語言的編程更加靈活方便。此后,越來越多的人開始使用VHDL語言進行數(shù)字電路系統(tǒng)的設計。而VHDL語言有不同于軟件編程語言,在編程結(jié)構(gòu)和規(guī)范上有自己的特點,在此,本文就從簡單介紹VHDL語言基礎開始。1.2.2 VHDL語言的基本結(jié)構(gòu) 一個完整的VHDL3語言程序通常包括實體(Entity)、構(gòu)造體(Architecture)、配置(Configuration)、包集合(Package)和庫(Library)5個部分。前4種是可以分別編譯的源設計單元。下面分別介紹:實體:實體是用于描述
12、所設計電路系統(tǒng)的外部接口信號,系統(tǒng)的輸入輸出端口及屬性都是在實體中定義的。一個實體是設計中最基本的。最上層水平的設計是最高層的實體。如果設計分層次,那么最高層的描述將有低層描述的說明附在它里面。構(gòu)造體:構(gòu)造體用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為,系統(tǒng)要實現(xiàn)的功能都是在構(gòu)造體內(nèi)用語言進行描述的。所有實體可以有一個構(gòu)造體的說明來模擬。該構(gòu)造體描述的行為實體。一個單一的實體可以有多個構(gòu)造體。一個構(gòu)造體可能是行為而另一個可能是一個結(jié)構(gòu)描述的設計。配置:配置用于從庫中選取所需單元來組成系統(tǒng)設計的不同版本。配置聲明是用來約束一個組件實例的一雙實體架構(gòu)。一個配置可以被視為像一個零件清單進行設計。它描述的使用的每一個
13、實體的行為,就像零件列表說明哪一部分用于每一部分的設計。包集合:包集合存放各種設計模塊都能共享的數(shù)據(jù)類型、常數(shù)和子程序等。包集合是一個收集常用數(shù)據(jù)類型和子程序中使用的設計。想想包含使用的工具建立的設計的一個工具箱作為一個包。庫:庫存放已經(jīng)編譯的實體、構(gòu)造體、包集合和配置。庫可由用戶生成或者是由ASIC芯片制造商提供,以便在設計中為大家共享。這種功能可以通過特定語句來實現(xiàn)。除了以上介紹的各種術語,其它術語還有:驅(qū)動程序:這是一個信號上的一個源。如果一個信號有兩個來源,那么當兩個來源是由兩個驅(qū)動程序來起作用的??偩€:這個詞,“巴士”通常使我想起一組信號或某個特定的通信方式,用于設計的硬件。在VHD
14、L語言,總線是一種特殊的信號,表明可能由驅(qū)動程序來完成。屬性:一個關于VHDL對象連接到VHDL的物體或預先確定的數(shù)據(jù)的屬性數(shù)據(jù)。例如,電流驅(qū)動能力的一個緩沖區(qū)或最高工作溫度的裝置。通用:泛指是VHDL語言傳遞信息實體參數(shù)的任期。例如,如果一個實體是一個門級模型的上升和下降延遲,上升和下降延誤的值才能通過成為實體與仿制。進程:一個進程是執(zhí)行的VHDL中的一個基本單位。一切行動,是在模擬VHDL描述分為單個或多個進程。在VHDL語言程序中,最重要的就是實體和構(gòu)造體部分。它們是一個具體設計的核心。如果說實體是系統(tǒng)和外部交流的橋梁,那么構(gòu)造體就是處理內(nèi)外交流的信號加工廠。在構(gòu)造體中各種信號協(xié)調(diào)工作,
15、最后得到所需的輸出,傳送到輸出端口和外部進行交流。下面具體說明實體和構(gòu)造體。1.2.3 實體一個VHDL實體指定的實體名稱,實體的端口,以及實體相關的信息。所有設計創(chuàng)建使用一個或多個實體。讓我們來看看一個簡單的實體例子:ENTITY mux ISPORT ( a, b, c, d : IN BIT;s0, s1 : IN BIT; x : OUT BIT);END mux;關鍵字“實體”是開始一個實體聲明的標志,在整本文的說明中,標準封裝中關鍵字的語言和類型全部用大寫字母來顯示。例如,在前面的示例中,關鍵字是ENTITY, IS, PORT, IN, INOUT,,等等。如果標準型是少量的。用
16、戶創(chuàng)建像復用一樣的姓名,在上面的例子中,將以小寫顯示。實體的名稱是多路復用,該實體有7個端口和端口條款。6個端口,一個是輸入端口,另一個是輸出端口。4個數(shù)據(jù)輸入端口(a, b, c, d)是位寬類型。這兩個多路選擇輸入是s0 和 s1,也都是位寬類型。輸出端口也是位寬類型。實體描述外界的接口。它規(guī)定了一些端口,端口方向和端口的類型。比起這里顯示的信息,實體可以存放更多的信息,但是這為我們提供了建立更復雜例子的基礎。1.2.4 構(gòu)造體實體是描述接口的VHDL模型。構(gòu)造體描述了實體的基本功能,并包含了模擬實體行為的陳述。構(gòu)造體始終是涉及實體和描述實體的行為。計數(shù)設備的構(gòu)造體更早的像這樣描述:ARC
17、HITECTURE dataflow OF mux ISSIGNAL select : INTEGER;BEGINselect <= 0 WHEN s0 = 0 AND s1 = 0 ELSE1 WHEN s0 = 1 AND s1= 0 ELSE2 WHEN s0 = 0 AND s1 = 1 ELSE3;x <= a AFTER 0.5 NS WHEN select = 0 ELSEb AFTER 0.5 NS WHENselect = 1 ELSEc AFTER 0.5 NS WHEN select = 2 ELSEd AFTER 0.5 NS;END dataflow;關鍵
18、字ARCHITECTURE本聲明描述了一個實體的構(gòu)架。該構(gòu)造體的名字是數(shù)據(jù)流。該實體的構(gòu)架是一種被稱為多路復用的描述。實體和結(jié)構(gòu)連接之間的原因是一個實體可以有多個構(gòu)造體來描述實體的行為。例如,一個構(gòu)造可能是一個行為描述,另一個可能是結(jié)構(gòu)性的描述。在關鍵字ARCHITECTURE和BEGIN的文字區(qū)域是本地信號和供日后使用的組件。在這個例子中的信號選擇被宣布為當?shù)氐男盘?。?gòu)造體的申明區(qū)域是由關鍵字BEGIN開始的。所有在BEGIN和END netlist statement之間的申明被稱為并列的申明,因為所有的申明同時執(zhí)行。1.3 MAX+PLUS的介紹 Max+plus是Altera公司提供的
19、FPGA/CPLD開發(fā)集成環(huán)境,Altera是世界上最大可編程邏輯器件的供應商之一。Max+plus界面友好,使用便捷,被譽為業(yè)界最易用易學的EDA軟件。在Max+plus上可以完成設計輸入、元件適配、時序仿真和功能仿真、編程下載整個流程,它提供了一種與結(jié)構(gòu)無關的設計環(huán)境,是設計者能方便地進行設計輸入、快速處理和器件編程。1.3.1 Max+plus開發(fā)系統(tǒng)的特點開放的界面:Max+plus支持與Cadence,Exemplarlogic,Mentor Graphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。與結(jié)構(gòu)無關:Max+plus系統(tǒng)的核心Complie
20、r支持Altera公司的FLEX10K、FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可編程邏輯器件,提供了世界上唯一真正與結(jié)構(gòu)無關的可編程邏輯設計環(huán)境。完全集成化:Max+plus的設計輸入、處理與較驗功能全部集成在統(tǒng)一的開發(fā)環(huán)境下,這樣可以加快動態(tài)調(diào)試、縮短開發(fā)周期。豐富的設計庫:Max+plus提供豐富的庫單元供設計者調(diào)用,其中包括74系列的全部器件和多種特殊的邏輯功能(Macro-Function)以及新型的參數(shù)化的兆功能(Mage-Function)。模塊化工具:設計人員可以從各種設計輸入、處理和較驗選項中進行選擇從而使設計環(huán)境用戶
21、化。硬件描述語言(HDL):Max+plus軟件支持各種HDL設計輸入選項,包括VHDL、Verilog HDL和Altera自己的硬件描述語言AHDL。Opencore特征:Max+plus軟件具有開放核的特點,允許設計人員添加自己認為有價值的宏函數(shù)。1.3.2 Max+plus 功能簡介原理圖輸入(Graphic Editor):MAX+PLUSII軟件具有圖形輸入能力,用戶可以方便的使用圖形編輯器輸入電路圖,圖中的元器件可以調(diào)用元件庫中元器件,除調(diào)用庫中的元件以外,還可以調(diào)用該軟件中的符號功能形成的功能塊。硬件描述語言輸入(Text Editor):MAX+PLUSII軟件中有一個集成的
22、文本編輯器,該編輯器支持VHDL,AHDL和Verilog硬件描述語言的輸入,同時還有一個語言模板使輸入程序語言更加方便,該軟件可以對這些程序語言進行編譯并形成可以下載配置數(shù)據(jù)。波形編輯器(Waveform Editor):在進行邏輯電路的行為仿真時,需要在所設計電路的輸入端加入一定的波形,波形編輯器可以生成和編輯仿真用的波形(*.SCF文件),使用該編輯器的工具條可以容易方便的生成波形和編輯波形使用時只要將欲輸入波形的時間段用鼠標涂黑,然后選擇工具條中的按鈕,例如,如果要某一時間段為高電平,只需選擇按鈕”1”。還可以使用輸入的波形(*.WDF文件)經(jīng)過編譯生成邏輯功能塊,相當于已知一個芯片的
23、輸入輸出波形,但不知是何種芯片,使用該軟件功能可以解決這個問題,設計出一個輸入和輸出波形相同CPLD電路。管腳(底層)編輯窗口(Floorplan Editor):該窗口用于將已設計好邏輯電路的輸入輸出節(jié)點賦予實際芯片的引腳,通過鼠標的拖拉,方便的定義管腳的功能。自動錯誤定位:在編譯源文件的過程中,若源文件有錯誤,Max+Plus2軟件可以自動指出錯誤類型和錯誤所在的位置。邏輯綜合與適配:該軟件在編譯過程中,通過邏輯綜合 (Logic Synthesizer)和適配(Fitter) 模塊,可以把最簡單的邏輯表達式自動的吻合在合適的器件中。設計規(guī)則檢查:選取CompileProcessingDe
24、sign Doctor菜單,將調(diào)出規(guī)則檢查醫(yī)生,該醫(yī)生可以按照三種規(guī)則中的一個規(guī)則檢查各個設計文件,以保證設計的可靠性。一旦選擇該菜單,在編譯窗口將顯示出醫(yī)生,用鼠標點擊醫(yī)生,該醫(yī)生可以告訴你程序文件的健康情況。多器件劃分(Partitioner):如果設計不能完全裝入一個器件,編譯器中的多器件劃分模塊,可自動的將一個設計分成幾個部分并分別裝入幾個器件中,并保證器件之間的連線最少。編程文件的產(chǎn)生: 編譯器中的裝配程序(Assembler)將編譯好的程序創(chuàng)建一個或多個編程目標文件:EPROM配置文件(*.POF)例如,MAX7000S系列SRAM文件(*.SCF)例如,FLEX8000系列的配置
25、芯片EPROMJEDEC文件(*.JED)十六進制文件(*.HEX)文本文件(*.TTF)串行BIT流文件(*.SBF)仿真:當設計文件被編譯好,并在波形編輯器中將輸入波形編輯完畢后,就可以進行行為仿真了,通過仿真可以檢驗設計的邏輯關系是否準確。分析時間(Analyze Timing):該功能可以分析各個信號到輸出端的時間延遲,可以給出延遲矩陣和最高工作頻率。器件編程:當設計全部完成后,就可以將形成的目標文件下載到芯片中,實際驗證設計的準確性。1.3.3 Max+plus設計過程設計流程:使用Max+plus軟件設計流程由以下幾部分組成。如圖1所示: 圖1 開發(fā)流程圖(1)、設計輸入:可以采用
26、原理圖輸入、HDL語言描述、EDIF網(wǎng)表輸入及波形輸入等幾種方式。(2)、編譯:先根據(jù)設計要求設定編譯參數(shù)和編譯策略,如器件的選擇、邏輯綜合方式的選擇等。然后根據(jù)設定的參數(shù)和策略對設計項目進行網(wǎng)表提取、邏輯綜合和器件適配,并產(chǎn)生報告文件、延時信息文件及編程文件,供分析仿真和編程使用。(3)、仿真:仿真包括功能仿真、時序仿真和定時分析,可以利用軟件的仿真功能來驗證設計項目的邏輯功能是否正確。(4)、編程與驗證:用經(jīng)過仿真確認后的編程文件通過編程器(Programmer)將設計下載到實際芯片中,最后測試芯片在系統(tǒng)中的實際運行性能。在設計過程中,如果出現(xiàn)錯誤,則需重新回到設計輸入階段,改正錯誤或調(diào)整
27、電路后重復上述過程。設計步驟:(1)輸入項目文件名(File/Project/Name)(2)輸入源文件(圖形、VHDL、AHDL、Verlog和波形輸入方式)(Max+plus/graphic Editor;Max+plus/Text Editor;Max+plus/Waveform Editor)(3)指定CPLD型號(Assign/Device)(4)設置管腳、下載方式和邏輯綜合的方式(Assign/Global Project Device Option,Assign/Global Logic Synthesis)(5)保存并檢查源文件(File/project/Save &
28、Check)(6)指定管腳(Max+plus/Floorplan Editor)(7)保存和編譯源文件(File/project/Save & Compile)(8)生成波形文件(Max+plus/Waveform Editor)(9)仿真(Max+plus/Simulator)(10)下載配置(Max+plus/Programmer)常用菜單簡介:該軟件的菜單主要有:MAX+PLUS菜單(MAX+PLUS)、文件菜單(File),該文件菜單隨所選功能的不同而不同、模板菜單(Templates),該模板使編寫VHDL和AHDL設計文件更容易和方便、指定菜單(Assign)、選擇菜單(O
29、ption)。該軟件的菜單繁多,要想都學會有一定的難度,主要原因是資料問題。但是常用的菜單會使用還是可能的。如何獲得幫助:最直接的幫助來自于Max+plus的Help菜單。若需要某個特定項目的幫助信息,可以同時按<Shift>+<F1>鍵或者選用工具欄中的快速幫助按鈕“”。此時,鼠標變?yōu)閹柼柕募^,點擊“特定的項目”就可彈出相應的幫助信息。這里的“特定項目”,可以包含某個器件的圖形、文本編輯中的單詞,菜單選項,甚至可以是一個彈出的窗口。2 自動售貨機的設計2.1 設計說明 本文設計的自動售貨機4可銷售牛奶(2元)、果汁(3元)兩種商品;售貨機可識別1元和5元兩種貨幣,
30、在一次購買過程中,可購買一個或多個商品,系統(tǒng)會自動計算所需錢數(shù)和找零錢數(shù)并自動找零。另外有3個發(fā)光二極管、6個LCD數(shù)碼管。3個發(fā)光二極管分別用來顯示交易成功、交易失敗、正在找零。6個LCD數(shù)碼管:2個用來顯示所需金額,2個用來顯示已付金額,2個用來顯示找零數(shù)。2.1.1 流程說明本文設計的自動售貨機當通電時,表示一次投幣銷售過程的開始。顧客選擇一種商品或多種則進入投幣狀態(tài)。若不投幣,則自動返回初始狀態(tài)。投幣后,系統(tǒng)自動計算所投錢數(shù)。若投幣夠,則出貨找零。若投幣不夠,等待10秒后,顧客沒有繼續(xù)投幣,則退幣并回到初始狀態(tài)。本系統(tǒng)的投幣銷售流程圖如圖2所示:圖2 流程圖2.1.2 各模塊說明本文設
31、計的自動售貨機總體分三個模塊5:總控模塊、二進制譯碼模塊、BCD碼譯碼模塊。其它功能本文不予討論??偪啬K:總控模塊是本系統(tǒng)最重要的模塊,該模塊大體有5個輸入端口和6個輸出端口。其輸入端口包括 clk、coin1(投入一元貨幣)、coin5(投入5元貨幣)、price2(選擇2元的商品)、price3(選擇3元的商品),輸出端口有paid(已投入多少錢)、needed(還需要多少錢)、moneyout(找零)、success(燈亮表示交易成功)、failure(燈亮表示交易失敗)、showmoneyout(燈亮表示正在找零)。該模塊實現(xiàn)了本系統(tǒng)最重要的交易過程,包括選擇商品、投入貨幣、計算貨幣
32、,找零出貨等。二進制譯碼模塊:該模塊有一個輸入端和兩個輸出端。輸入端b是一個4位的二進制數(shù),輸出端bcd0、bcd1,是兩個4位的BCD碼。該模塊的主要功能是實現(xiàn)將主控模塊輸出的二進制數(shù)(paid、needed、moneyout)轉(zhuǎn)換成BCD碼,以便輸出到七段顯示數(shù)碼器上而顯示出來。該模塊的原理是將一個4位的二進制數(shù)轉(zhuǎn)換成2個4位的BCD碼,分別為高4位和低4位。BCD碼譯碼模塊:該模塊有一個輸入端和一個輸出端。輸入端d是一個4位的BCD碼,輸出端q是一個7位數(shù),輸出連接到一個LCD數(shù)碼管以顯示出來。2.1.3 各模塊的連接各模塊的連接如圖3所示:圖3 硬件模塊連接圖如圖3所示,左邊的5個端口
33、為輸入端口,連接的模塊是主控模塊。中間的3個輸出端口連接3個LED指示燈,分別指示交易成功、交易失敗、需要找零。中間的3個模塊是二進制譯碼模塊,分別將主控模塊輸出的paid、needed、moneyout轉(zhuǎn)換成兩個4位的BCD碼。最右邊的6個模塊是BCD譯碼模塊,輸出端口連接6個LCD七段顯示數(shù)碼管。2.2 狀態(tài)之間的轉(zhuǎn)換 本文所設計的自動售貨機進程可分為7個狀態(tài)6:a,b,c,d,e,f,g。a為開始狀態(tài),當有鍵按下時即進入b狀態(tài)(投幣狀態(tài))。當?shù)却脒€沒投幣時即進入e狀態(tài),e狀態(tài)返回a狀態(tài)。當有貨幣投入,但投幣不夠時,即進入c狀態(tài)(繼續(xù)投幣),若等待十秒不投,即進入g狀態(tài)(退錢),若投幣
34、但還不夠,則繼續(xù)投幣。當投幣夠了,即進入d狀態(tài)(出貨找零)。之后進入f狀態(tài)(延時)后返回a狀態(tài)。3 仿真時序圖3.1 主控模塊的仿真圖4 主控模塊只選一次但不投幣的仿真 如圖4所示:選擇3元商品,不再投幣,所需貨幣顯示3元,10秒后,failure為高電平,表示交易失敗,延時顯示后,回到初始狀態(tài)。源程序見附錄的主控模塊。圖5 主控模塊多次選擇但不投幣的仿真如圖5所示:選擇3元商品后,在10秒內(nèi),再次選擇2元商品;此后,不再投幣,所需貨幣先為3元,后為5元,10秒后,failure出現(xiàn)高電平,表示交易失敗,延時顯示后,回到初始狀態(tài)。源程序見附錄的主控模塊。圖6 主控模塊交易成功但不找零的仿真如圖
35、6所示:選擇3元商品后,在10秒內(nèi),再次選擇2元商品;所需貨幣先是3元,后為5元,此后,在一定時限內(nèi)投入5元錢,所需貨幣為0元,success為高電平,表示交易成功,不找零,延時顯示后,回到初始狀態(tài)。源程序見附錄的主控模塊。圖7 主控模塊交易成功且找零的仿真如圖7所示:選擇3元商品后,在10秒內(nèi),再次選擇2元商品;所需貨幣先為3元,后為5元,此后,在一定時限內(nèi)先后投入1元和5元,所需貨幣分別變?yōu)?元,0元,success為高電平,表示交易成功。showmoneyout為高電平,表示要找零,moneyout顯示為1元,表示找零1元。延時顯示,其后回到初始狀態(tài)。源程序見附錄的主控模塊。圖8 主控模
36、塊連續(xù)交易成功的仿真如圖8所示:先分別選擇3元和2元的商品,所需貨幣先后顯示3元和5元,再投入1元和5元,所需貨幣顯示分別為4元,0元。success為高電平,表示一次交易成功,同時showmoneyout也為高電平,表示需要找零,moneyout顯示為1元,再選擇3元的商品,投入5元,所需貨幣先后為3元和0元。success為高電平,表示第二次交易成功,showmoneyout為高電平,表示要找零,moneyout顯示為2元。圖8顯示連續(xù)交易。源程序見附錄的主控模塊。圖9 主控模塊錢不夠但不再投幣的仿真如圖9所示:選擇3元商品后,在10秒內(nèi),再次選擇2元商品;所需貨幣先后顯示3元和5元。此后
37、,在一定時限內(nèi)投入1元,所需貨幣顯示4元,其后,等待再次投幣,若超過一定時限(10秒)不再投幣,認為放棄,failure為高電平,表示交易失敗。showmoneyout為高電平,表示要退幣,moneyout顯示1元,即退幣1元;延時顯示后,回到初始狀態(tài)。源程序見附錄的主控模塊。3.2 二進制譯碼的仿真 圖10 二進制譯碼的仿真如圖10所示:分別將從0到F各位二進制數(shù)轉(zhuǎn)換為兩位的BCD碼數(shù)。如圖所示,將一個4位的二進制數(shù)轉(zhuǎn)化為兩個4位的BCD碼數(shù)的功能得到實現(xiàn)。源程序見附錄的二進制譯碼模塊。3.3 BCD碼譯碼的仿真圖11 BCD碼譯碼的仿真如圖11所示:將從0到7各位BCD碼轉(zhuǎn)化為七段譯碼顯示
38、出來,其中7E在七段數(shù)碼管上顯示0,30顯示1,6D顯示2等等。如圖所示,將BCD碼轉(zhuǎn)化為七段數(shù)碼顯示的功能得到實現(xiàn)。源程序見附錄的BCD碼譯碼模塊。3.4 TOP文件的仿真 圖12 TOP文件的仿真如圖12所示:先選擇一個3元的商品,10秒內(nèi)再選擇一個2元的商品;此后,在一定時間內(nèi),先后投入一元和5元,顯示交易成功,并找零一元。在七段數(shù)碼管上所需貨幣先后顯示00元、03元、05元,當投入一元后,顯示04元,再投入5元后,顯示00元。而已投貨幣先后顯示00元、投入一元后,顯示01元,再投入5元,顯示06元。同樣,找零貨幣先后顯示00元、01元。由此可見,系統(tǒng)的各功能實現(xiàn)成功。源程序見附錄的頂層
39、文件。4. 結(jié)論 自動售貨機系統(tǒng)的設計已全部完成,能按預期的效果進行多次購買、找零出貨、并且在數(shù)碼管上顯示出已投貨幣、還需金額、找零,同時有指示燈提示交易成功、交易失敗、正在找零。在自動售貨機系統(tǒng)的3個模塊中,最重要的是主控模塊,其它還有二進制譯碼模塊和BCD碼譯碼模塊。各模塊完成后,將它們組合成完整的自動售貨機系統(tǒng)。在設計過程中還需改進的是在選擇商品時不能按鍵過長,否則會認為是重復選擇。本文所用的VHDL語言雖然語法規(guī)則與其他計算機高級語言如C語言在很多方面很類似,但它畢竟是硬件描述語言,其本質(zhì)作用在于描述硬件,因而會受到硬件環(huán)境的限制。因此,為了達到設計的預期效果,在代碼編寫前,應做到對硬
40、件電路心中有數(shù),不能一味地追求代碼的完美,而應該以實現(xiàn)的硬件電路的性能優(yōu)劣為標準。答謝:在完成本系統(tǒng)的設計過程中,本人得到老師的悉心指導和王堯君同學的幫助,在此深表謝意。 參考文獻1 李仁發(fā),凌純清,徐成.VHDL數(shù)字系統(tǒng)設計(第二版). 北京:電子工業(yè)出版社出版. 20072 甘歷 VHDL應用于開發(fā)實踐. 北京:科學出版社.20033 Mark Zwolinski Digital System Design with VHDL.BeiJing:Publishing House of Electronics Industry.2007 4王曉峰電子設計的EDA技術應用J長春師范學院學報:自然
41、科學版,2005,24(5):55565DOULOS AThe designer S guide to VHDLEBOL200706066侯伯亨VHDL硬件描述語言與數(shù)字邏輯電路設計M陜西:西安電子科技大學出版社,1999東方人華MAX+PLUS I1入門與提高M北京:清華大學出版社,2004附錄:系統(tǒng)各功能模塊的實現(xiàn):主控模塊的完整程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shouhuojioriginal isport( clk: in std_logic; co
42、in1:in std_logic;coin5:in std_logic;price2:in std_logic;price3:in std_logic;paid:out std_logic_vector(3 downto 0);needed:out std_logic_vector(3 downto 0);success:out std_logic;failure:out std_logic;showmoneyout:out std_logic;moneyout:out std_logic_vector(3 downto 0);end shouhuojioriginal;architectur
43、e behav of shouhuojioriginal istype state_type is (qa,qb,qe,qc,qg,qd,qf);signal current_state :state_type:=qa;signal q:integer range 0 to 100;begin process(clk)variable paidtemp:std_logic_vector(3 downto 0);variable neededtemp: std_logic_vector(3 downto 0);variable backmoney: std_logic_vector(3 down
44、to 0);variable pricetemp:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thencase current_state iswhen qa =>paidtemp:="0000"neededtemp:="0000"backmoney:="0000"pricetemp:="0000"q<=0;showmoneyout<='0'moneyout<="000
45、0"paid<="0000"needed<="0000"failure<='0'success<='0'if price2='1' or price3='1' then current_state<=qb;if price2='1' then pricetemp:=pricetemp+2;neededtemp:=pricetemp;Elsepricetemp:=pricetemp+3;neededtemp:=pricetemp;end
46、if;end if;paid<=paidtemp;needed<=neededtemp; when qb=>if coin1='1'or coin5='1' then if coin1='1' then paidtemp:=paidtemp+1; else paidtemp:=paidtemp+5; end if; if paidtemp>=pricetemp then backmoney:=paidtemp-pricetemp; neededtemp:="0000"current_state<=
47、qd; else neededtemp:=pricetemp-paidtemp;backmoney:="0000" current_state<=qc;q<=0; end if; paid<=paidtemp; needed<=neededtemp; end if; if q<8 then q<=q+1; if price2='1' or price3='1' then q<=0; if price2='1' then pricetemp:=pricetemp+2; neededtem
48、p:=neededtemp+2; elsepricetemp:=pricetemp+3;neededtemp:=neededtemp+3;end if;paid<=paidtemp;needed<=neededtemp;end if; else current_state<=qe; q<=0; end if; when qe=>failure<='1' if q<4 then q<=q+1; else current_state<=qa;q<=0; end if; when qc=> if coin1='
49、1' or coin5='1' then if coin1='1' then paidtemp:=paidtemp+1; else paidtemp:=paidtemp+5; end if; if paidtemp>=pricetemp then neededtemp:="0000" backmoney:=paidtemp-pricetemp; current_state<=qd; else neededtemp:=pricetemp-paidtemp; backmoney:="0000" curren
50、t_state<=qc; end if; paid<=paidtemp; needed<=neededtemp; end if; if coin1/='1' and coin5/='1' then if q<10 then q<=q+1; else current_state<=qg; end if; else q<=0; end if; when qg=> failure<='1' showmoneyout<='1'moneyout<=paidtemp; curr
51、ent_state<=qf;q<=0; when qd=> success<='1' if backmoney>"0000" then showmoneyout<='1'moneyout<=backmoney;end if;current_state<=qf;q<=0;when qf=> if q<4 then q<=q+1;else current_state<=qa;q<=0;end if;end case;end if;end process;end b
52、ehav;二進制譯碼模塊的完整程序如下:Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code1 isport( b:in std_logic_vector(3 downto 0);bcd0:out std_logic_vector(3 downto 0); bcd1:out std_logic_vector(3 downto 0);end code1;architecture one of code1 isbeginprocess(b)begincase b iswhen&quo
53、t;0000"=>bcd0<="0000"bcd1<="0000"when"0001"=>bcd0<="0001"bcd1<="0000"when"0010"=>bcd0<="0010"bcd1<="0000"when"0011"=>bcd0<="0011"bcd1<="0000"when&quo
54、t;0100"=>bcd0<="0100"bcd1<="0000"when"0101"=>bcd0<="0101"bcd1<="0000"when"0110"=>bcd0<="0110"bcd1<="0000"when"0111"=>bcd0<="0111"bcd1<="0000"when&quo
55、t;1000"=>bcd0<="1000"bcd1<="0000"when"1001"=>bcd0<="1001"bcd1<="0000"when"1010"=>bcd0<="0000"bcd1<="0001"when"1011"=>bcd0<="0001"bcd1<="0001"when&quo
56、t;1100"=>bcd0<="0010"bcd1<="0001"when"1101"=>bcd0<="0011"bcd1<="0001"when"1110"=>bcd0<="0100"bcd1<="0001"when"1111"=>bcd0<="0101"bcd1<="0001"when oth
57、ers=>null;end case;end process;end one;BCD碼譯碼模塊的完整程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity code2 isport(d:in std_logic_vector(3 downto 0);q:out std_logic_vector(6 downto 0);end code2;architecture one of code2 isbeginprocess(d)begincase d iswhen"000
58、0"=>q<="1111110"when"0001"=>q<="0110000"when"0010"=>q<="1101101"when"0011"=>q<="1111001"when"0100"=>q<="0110011"when"0101"=>q<="1011011"when"011
59、0"=>q<="1011111"when"0111"=>q<="1110000"when"1000"=>q<="1111111"when"1001"=>q<="1110011"when others=>q<="0000000"end case;end process;end one;頂層文件的完整程序如下:library IEEE;use IEEE.STD_LOGIC
60、_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity top isPort ( clk1:in std_logic;C1,C5,P2,P3:in std_logic; paid_lcd0,paid_lcd1,needed_lcd0,needed_lcd1,Mout_lcd0,Mout_lcd1:out std_logic_vector(6 downto 0);s,f,showout :out std_logic ); end top;architecture one of top iscomponent shouhuojiorigina
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025吉林建筑安全員-C證考試(專職安全員)題庫及答案
- 世界11種氣候帶及柱狀圖
- 《情報服務與創(chuàng)新》課件
- 《常見發(fā)疹性傳染病》課件
- 單位人力資源管理制度呈現(xiàn)選集十篇
- 單位管理制度展示大合集人員管理篇十篇
- 學校環(huán)境調(diào)查報告
- 火災自動報警及聯(lián)動控制課程課件
- 小學英語課件-時間
- 2024年氧系漂白助劑項目可行性研究報告
- 自身免疫性肝炎診斷和治療指南(2021版)解讀
- 淺析小班幼兒角色游戲的年齡特點及游戲指導
- 全州疫苗接種與免疫規(guī)劃培訓班講話稿
- 詩化小說示范課
- 有機合成化學3-基團的保護與基團的反應性轉(zhuǎn)換
- 康復醫(yī)學治療技術(士)《基礎知識》測試題(含答案)
- 學校未成年人保護和預防犯罪工作實施方案
- GB/T 41968-2022乳化廢液處理處置方法
- 心內(nèi)科住院醫(yī)師規(guī)培出科考試9
- 與公公婆婆斷絕關系協(xié)議書
- 某金礦技改工程建設項目可行性研究報告
評論
0/150
提交評論