第一篇:2012EDA課設(shè)自動售貨機
基于VHDL自動售貨機的設(shè)計
摘要
基于FPGA的自動售貨機的設(shè)計,主要完成的任務(wù)是使用VHDl語言,在MAX+PLUSSII上完成電路的設(shè)計,程序的編譯,基本功能的完善、模擬整個自動售貨機的工作過程。電路的設(shè)計模塊分為幾個模塊:主控模塊、譯碼模塊、頂層模塊。各個模塊完成不同的任務(wù),合在一起就構(gòu)成了一個自動售貨機。在售貨機的設(shè)計過程中,使用VHDL語言,根據(jù)各個模塊的不同功能和它們之間的控制關(guān)系進行編寫。軟件模塊直接在MAX+PLUSSII上進行。進入21世紀(jì),隨著人們對效率的追求,人工售貨已不能不滿足人們的需求。對此,自動售貨機的設(shè)計就用了很大的應(yīng)用空間和市場。
基于FPGA的自動售貨機設(shè)計,采用軟件開發(fā)模塊,開發(fā)成本底,而且功能設(shè)計上有很大的靈活度,需要在軟件上進行簡單的修該就能實現(xiàn)不同的功能要求,能夠滿足不同的環(huán)境要求。
關(guān)鍵字:自動售貨機;FPGA;仿真;VHDL;MAX+PLUSSII
目錄
第一章 緒論......................................................................................4 第二章 自動售貨機的設(shè)計................................................................4 2.1 設(shè)計說明.................................................................................4 2.1.1 流程說明.......................................................................4 2.1.2各模塊說明....................................................................5 2.1.3各模塊的連接.................................................................6 2.2狀態(tài)之間的轉(zhuǎn)換......................................................................6 第三章 仿真時序圖.............................................................................7 3.1主控模塊的仿真......................................................................7 謝 辭..............................................................................................10 參考文獻............................................................................................11 附錄...................................................................................................11
第一章 緒論
隨著科技的發(fā)展和社會的進步,自動化商業(yè)機械有了越來越廣泛的的應(yīng)用,自動售貨機作為自動化商業(yè)機械的代表被廣泛用于公共場所自動售貨,給人們的生活帶來了極大的方便。特別在發(fā)達(dá)的國家,自動售貨機已經(jīng)十分普及,自動售貨機可售出各種成型包裝的小商品,各種袋裝,盒裝,軟瓶裝等小商品。因其無需專人值守而可以每天24 小時售貨,被稱為“無人小超市”。在我國,由于多種原因,自動售貨機的市場推廣緩慢,隨著商品市場的不斷繁榮,自動售貨機和自動服務(wù)設(shè)施必將逐步得到廣泛的應(yīng)用。
本文設(shè)計研究自動售貨機的主要功能模塊,主要包括貨幣處理模塊、余額計算模塊、顯示模塊,延時和時控模塊。相應(yīng)的功能有選擇貨物,多次購買,出貨找零。
本文是通過使用VHDL語言,基于KX GW48FPGA芯片,并通過使用MAXPLUSS II軟件進行程序設(shè)計,模擬仿真,功能驗證,以更好的來理解和掌握自動售貨機控制系統(tǒng)的工作原理和設(shè)計方法,以及學(xué)習(xí)和掌握基于EDA的電子產(chǎn)品設(shè)計方法,進一步加深對VHDL語言以及MAXPLUSS II 軟件、FPGA可編程芯片的認(rèn)識與了解。
FPGA是現(xiàn)場可編程門陣列(Field programmable gates array)的英文簡稱。是有可編程邏輯模塊組成的數(shù)字集成電路(IC)。這些邏輯模塊之間用可配置的互聯(lián)資源。設(shè)計者可以對這些器件進行編程來完成各種各樣的任務(wù)
PLD/FPGA是近幾年集成電路中發(fā)展最快的產(chǎn)品。由于PLD性能的高速發(fā)展以及設(shè)計人員自身能力的提高,可編程邏輯器件供應(yīng)商將進一步擴大可編程芯片的領(lǐng)地,將復(fù)雜的專用芯片擠向高端和超復(fù)雜應(yīng)用。據(jù)IC Insights的數(shù)據(jù)顯示,PLD市場從1999年的29億美元增長到去年的56億美元,幾乎翻了一番。Matas預(yù)計這種高速增長局面以后很難出現(xiàn),但可編程邏輯器件依然是集成電路中最具活力和前途的產(chǎn)業(yè)。
第二章 自動售貨機的設(shè)計
2.1 設(shè)計說明
本文設(shè)計的自動售貨機可銷售cola 和 pepsi兩種飲料:售貨機可識別1元和0.5元的兩種貨幣,在一次購買過程中,可購買一個或多個商品,系統(tǒng)會自動計算所需錢數(shù)和找零的錢數(shù)并自動找零。另外有3個發(fā)光二極管、6個LCD數(shù)碼管:兩個用來顯示所需金額,兩個用來顯示已付金額,兩個用來顯示找零數(shù)。
2.1.1 流程說明
本文設(shè)計的自動售貨機當(dāng)通電時,表示一次銷售的開始。顧客選擇一種商品或多種商品后就進入投幣狀態(tài)。若不投幣,則自動返回初始狀態(tài)。投幣后,系統(tǒng)自動計算所投錢數(shù)。若投幣夠,則出貨并找零。若投幣不夠,如果顧客沒有繼續(xù)投幣,則退幣并回到初始狀態(tài)。本系統(tǒng)的投幣銷售流程圖如圖1-1所示:
圖1-1
2.1.2各模塊說明
本文設(shè)計的自動售貨機總體分三個模塊:總控模塊,二進制譯碼模塊、BCD碼譯碼模塊。
總控模塊:總控模塊是本系統(tǒng)最重要的模塊,該模塊大體有5個輸入端口和6個輸出端口。其輸入端口包括clk、coin1(投入一元貨幣)、coin5(投入0.5元貨幣)、cola(選擇cola)、pepsi(選擇pepsi),輸出端口有paid(已投入多少錢)、needed(還需多少錢)moneyout(找零)、success(燈亮表示交易成功)、failure(燈亮表示交易失?。?、showmoneyout(燈亮表示正在找零)。該模塊實現(xiàn)了本系統(tǒng)最重要的交易過程,包括選擇商品、投入貨幣,計算剩余金額,找零出貨等。
二進制譯碼模塊:該模塊有一個輸入端口和兩個輸出端口。輸入端口是一個8位的二進制數(shù)輸出端口bcd0、bcd1是兩個4位的BCD碼。該模塊的主要的功能是實現(xiàn)將主控模塊輸出的二進制數(shù)(paid、needed、moneyout)轉(zhuǎn)換成BCD碼,以便輸出到七段數(shù)碼管上顯示出來。該模塊的原理是將一個8位的二進制轉(zhuǎn)換成2個4位的BCD碼,分為高四位和低四位。
BCD碼譯碼模塊:該模塊有一個輸入端口和一個輸出端口
2.1.3各模塊的連接
各模塊的連接如圖1-2和1-3所示:
圖1-2 售貨機主控系統(tǒng)和譯碼器模塊圖
圖1-3 售貨機頂層模塊
2.2狀態(tài)之間的轉(zhuǎn)換
本文所設(shè)計的自動售貨機進程可以分為7個狀態(tài):a,b,c,d,e,f,g.a為開始狀態(tài),當(dāng)有商品選擇鍵按下時即進入b狀態(tài)(投幣狀態(tài))。當(dāng)有貨幣投入,但投幣不夠時,即進入c狀態(tài)(繼續(xù)投幣),若投幣夠了,即進入d狀態(tài)(出貨找零),之后進入f狀態(tài)(延時)后返回a(狀態(tài))。
圖1-3狀態(tài)流程圖
第三章 仿真時序圖
3.1主控模塊的仿真
上圖表示顧客選擇了pepsi飲料后,且投了2個一元的硬幣。Success為高電平,代表售貨機有飲料售出。且余額為0.7
上圖表示顧客選擇了pepsi飲料后,且投1個一元的硬幣和一個0.5元的硬幣。failure為高電平,代表售貨機無飲料售出。且余額為已投的金額,將錢退還給顧客。.上圖表示自動售貨機的譯碼系統(tǒng),上圖表示將8位數(shù)字轉(zhuǎn)換成4位BCD碼。
2.2BCD碼譯碼的仿真
上圖表示自動售貨機的譯碼系統(tǒng),上圖表示將8位數(shù)字轉(zhuǎn)換成4位BCD碼。
2.3TOP文件的仿真
上圖表示顧客選擇了pepsi飲料后,且投了2個一元的硬幣。Success為高電平,代表售貨機有飲料售出。且余額為0.上圖表示顧客選擇了pepsi飲料后,且投1個一元的硬幣和一個0.5元的硬幣。Failure 為高電平,代表售貨機無飲料售出。Showout為退幣指示燈。.Mout_lcd0和Mout_lcd1,顯示退幣的金額。Paided _lcd0 和Paided_lcd1 needed _lcd0 和needed_lcd1 分別顯示已付金額和還需要的金額數(shù)。
第四章 小結(jié)
自動售貨機系統(tǒng)的設(shè)計經(jīng)過一個星期的設(shè)計已經(jīng)全部完成,能按預(yù)期的效果進行多次購買、找零出貨、并且在數(shù)碼管上顯示出已投貨幣的金額、還需金額、找零,同時有指示燈提示交易成功、交易失敗、正在找零。在自動售貨機系統(tǒng)的3個模塊中,最主要的是主控模塊,其次的還有二進制譯碼模塊和BCD碼譯碼模塊。各模塊完成后,將它們組合成完整的自動售貨機系統(tǒng)。在設(shè)計過程中還需改進的是。本文所用的VHDL語言雖然語法規(guī)則與其他計算機高級語言如C語言在很多方面很類似,但它畢竟是硬件描述語言,其本質(zhì)作用在于描述硬件,因而會受硬件環(huán)境的限制。因此,為了達(dá)到設(shè)計的預(yù)期效果,在代碼編寫前,應(yīng)做到對硬件電路心中有數(shù),不能一味的追求代碼的完美,而應(yīng)該已實現(xiàn)的硬件電路的性能優(yōu)劣為標(biāo)準(zhǔn)。
謝 辭
在這里我要感謝我的指導(dǎo)老師
參考文獻
(1)潘松,黃繼業(yè)編著.《EDA技術(shù)實用教程 》,2005,科學(xué)出版社
(2)徐志軍,徐光輝編著.《
CPLD/FPGA的開發(fā)與應(yīng)用 》,電子工業(yè)出版社,2001.1(3)http://004km.cnponent shouhuoji port(clk:in std_logic;
coin1:in std_logic;
coin5:in std_logic;
cola:in std_logic;
pepsi:in std_logic;
paid:out std_logic_vector(7 downto 0);
needed:out std_logic_vector(7 downto 0);
success:out std_logic;
failure:out std_logic;
showmoneyout:out std_logic;
moneyout:out std_logic_vector(7 downto 0));end component;component code1 port(b:in std_logic_vector(7 downto 0);
bcd0:out std_logic_vector(3 downto 0);
bcd1:out std_logic_vector(3 downto 0));end component;
signal p,n,mo:std_logic_vector(7 downto 0);
--signal s1,s2,s3,s4,s5,s6:std_logic_vector(3 downto 0);begin
u0:shouhuoji--各模塊連接
port map(clk=>clk1,coin1=>C1,coin5=>C5,cola=>P1_5,pepsi=>P2, success=>s,failure=>f,showmoneyout=>showout,paid=>p,needed=>n,moneyout=>mo);u1:code1 port map(b=>p,bcd0=>paid_lcd0,bcd1=>paid_lcd1);u2:code1 port map(b=>n,bcd0=>needed_lcd0,bcd1=>needed_lcd1);u3:code1 port map(b=>mo,bcd0=>Mout_lcd0,bcd1=>Mout_lcd1);
end one;
第二篇:EDA課設(shè)
EDA課程設(shè)計報告
課題名稱:智力競賽搶答器
班級:11電科2班
姓名:代維寬
學(xué)號:201114580207
同組人:聞仔遜
指導(dǎo)老師:賈默伊
任務(wù)書
一、用VHDL運用層次化設(shè)計方法設(shè)計一個小型數(shù)字系統(tǒng)
題目:智力競賽搶答器
二、說明書內(nèi)容:
1.系統(tǒng)設(shè)計要求(功能)2.系統(tǒng)設(shè)計方案(包括頂層電路圖)3.VHDL源程序及仿真波形圖 4.課程設(shè)計注釋 5.設(shè)計解釋、說明 6.獨特之處
三、成績評定
1.設(shè)計內(nèi)容及掌握情況
2.說明書。包括電子檔(各類文件的可執(zhí)行性及說明書)和紙質(zhì)
3.答辯情況
目錄
第一章:系統(tǒng)設(shè)計
1系統(tǒng)設(shè)計要求???????????????????1 2系統(tǒng)設(shè)計方案???????????????????2 第二章:VHDL原程序及仿真波形圖
1、搶答啟動模塊??????????????????3(1)按鍵識別子模塊?????????????????3(2)倒計時子模塊??????????????????5
2、選手搶答模塊??????????????????7(1)單個選手按鍵子模塊???????????????7(2)判斷搶答選手子模塊???????????????9
3、加減分模塊???????????????????11(1)組別判斷子模塊?????????????????11(2)加減及寄存器子模塊???????????????12(3)分?jǐn)?shù)選擇輸出模塊????????????????15
4、顯示模塊????????????????????16
5、蜂鳴器模塊???????????????????18
第三章設(shè)計心得及總結(jié)
智力競賽搶答器
1系統(tǒng)設(shè)計要求
1.設(shè)計一智力競賽搶答器,可同時供8名選手參加比賽。2.給節(jié)目主持人設(shè)置一個控制開關(guān),控制系統(tǒng)清零和搶答開始。
3.搶答器具有鎖存功能和顯示功能。搶答開始后,若有選手按動搶答按鈕,編號立即鎖存,并在LED數(shù)碼管上顯示選手編號,同時揚聲器響,禁止其他選手搶答。
4.搶答器具有搶答定時功能,時間由主持人確定。5.參賽選手在設(shè)定的時間內(nèi)搶答有效,定時器停止工作。
6.如果定時時間到,無人搶答,本次搶答無效,系統(tǒng)報警,并封鎖輸入電路,禁止超時搶答,定時器顯示00。
7.為每組設(shè)計一個計分電路,0~999分,可加分,也可減分。
對于一個搶答器系統(tǒng),可將其分為五個模塊:選手搶答模塊、搶答啟動模塊、加減分模塊、顯示模塊、蜂鳴器控制模塊。整體框圖如下:
圖一 總體框圖
其中搶答啟動模塊具有啟動搶答及啟動定時功能,輸出使能信號給選手識別模塊,以及搶答剩余時間給顯示模塊;選手識別模塊完成鎖存搶答信號的功能,并輸出選手號給顯示模塊;蜂鳴器對搶答成功以及超時鳴聲報警;顯示模塊對輸入的數(shù)據(jù)進行顯示。
2系統(tǒng)設(shè)計方案
智力競賽搶答器擬由單片CPLDFPGA來實現(xiàn),經(jīng)分析設(shè)計要求,擬定整個系統(tǒng)由五個單元組成,原理圖如下所示:
主要VHDL源程序
1、搶答啟動模塊
啟動模塊除了有啟動的功能外,還有啟動定時的功能。定時時間分為5秒和20秒兩種,使用兩個按鍵對應(yīng)兩種限時搶答。
將本模塊再劃分為2個子模:一個模塊完成按鍵識別的功能,另一模塊完成倒計時功能。
1)按鍵識別子模塊
按鍵的識別即對輸入信號進行電平變化檢測,電平發(fā)生跳變就認(rèn)為是鍵被按下。但VHDL程序中一個結(jié)構(gòu)體內(nèi)不能同時對兩個信號進行電平跳變的檢測,所以對本模塊的程序設(shè)計采用狀態(tài)機來實現(xiàn),并使用統(tǒng)一的時鐘信號來掃描按鍵的電平狀態(tài)。模塊圖如下:
圖2 按鍵識別子模塊
對START5和START20兩個按鍵定義三種狀態(tài),START5按下為ST1狀態(tài),此時兩個按鍵“START5&START20”輸入電平為“01”;START20按下為ST2狀態(tài),此時電平為“10”;兩個都沒按下為ST0狀態(tài),此時電平為“11”。
本模塊程序為:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY START_5_20 IS PORT(CLK1,RST,START5,START20:IN STD_LOGIC;
B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--輸出定時初值
S_FLAG:OUT STD_LOGIC);
--置數(shù)信號
END ENTITY;ARCHITECTURE ONE OF START_5_20 IS SIGNAL DATAIN:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);
--定義狀態(tài)
SIGNAL C_ST:ST_TYPE;BEGIN
DATAIN<=START5&START20;
--兩個輸入信號放在一起判斷 BEGIN
IF RST='0' THEN
--復(fù)位 B<=“0000”;A<=“0000”;C_ST<=ST0;S_FLAG<='0';ELSIF CLK1'EVENT AND CLK1='1' THEN CASE C_ST IS WHEN ST0=> IF DATAIN=“01” THEN
C_ST<=ST1;
--輸入信號為01,轉(zhuǎn)ST1狀態(tài) S_FLAG<='1';
--置數(shù)信號有效 B<=“0000”;A<=“0101”;
--定時初值“05” ELSIF DATAIN=“10” THEN
C_ST<=ST2;
--輸入信號為10,轉(zhuǎn)ST1狀態(tài)
S_FLAG<='1';
--置數(shù)信號有效 B<=“0010”;A<=“0000”;
--定時初值“20”
ELSE C_ST<=ST0;--輸入信號為11,保持ST0狀態(tài)
END IF;
C_ST<=ST0;--防按鍵抖動,為11時才轉(zhuǎn)ST0狀態(tài) S_FLAG<='0';
--置數(shù)信號無效
ELSE C_ST<=ST1;
--按鍵沒彈起,繼續(xù)等待
END IF;
ELSE C_ST<=ST2;END IF;PROCESS(RST,CLK1)WHEN ST1=>IF DATAIN=“11” THEN WHEN ST2=>IF DATAIN=“11” THEN C_ST<=ST0;S_FLAG<='0';WHEN OTHERS=>C_ST<=ST0;B<=“0000”;A<=“0000”;END CASE;END IF;END PROCESS;END ARCHITECTURE;本模塊仿真波形如圖所示。
圖3 按鍵識別模塊仿真波形
2)倒計時子模塊
倒計時需要1Hz的脈沖輸入,每來一個上升沿,進行一次減一運算,將結(jié)果輸出到TIMEB、TIMEA;置數(shù)信號LOAD輸入有效,讀入B、A端口的數(shù)據(jù);輸入L_CR信號與選手識別模塊連接,當(dāng)選手搶答成功后,L_CR信號為0,將倒計時清0.;若倒計時到,沒有選手搶答,則在SR1輸出1使揚聲器發(fā)聲。同時輸出信號給選手搶答模塊,禁止選手搶答。
圖4倒計時模塊
本模塊程序為:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DE_COUNT IS PORT(CLK2,LOAD,L_CR,RST:IN STD_LOGIC;
B,A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE TWO OF DE_COUNT IS BEGIN
PROCESS(LOAD,L_CR,RST,CLK2)VARIABLE P1,P0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
IF LOAD='1' THEN P1:=B;P0:=A;
--指數(shù)信號有效,將B、A值讀入P1、P0 ELSIF L_CR='0' THEN
--有選手搶答成功,L_CR輸入為0,定時時間清0 P1:=“0000”;P0:=“0000”;TIMEOUT<='0';SR1<='1';ELSIF RST='0' THEN P1:=“0000”;P0:=“0000”;TIMEOUT<='0';SR1<='0';
ELSIF(CLK2'EVENT AND CLK2='1')THEN
IF P0=“0000” THEN
IF P1>0 THEN P1:=P1-1;P0:=“1001”;
--若個位為0,十位減1,個位賦為9 END IF;ELSE P0:=P0-1;
--若個位不為0,個位直接減一
IF P0=“0000” AND P1=“0000” THEN TIMEOUT<='0';SR1<='1';
--若時間到,輸出鎖存信號 END IF;END IF;
END IF;TIMEB<=P1;TIMEA<=P0;END PROCESS;END ARCHITECTURE;
程序中,因為每次減一后的時間值需要保存,用于下次繼續(xù)減一,所以程序中使用了不完整的IF語句引入寄存器,用于保存每次減一后的時間值。P1、P0定義為變量而不是信號的原因是,變量的賦值是即時的,減一后可以馬上進行判斷;若定義為信號,不能即時進行判斷,并且減一操作后的賦值要經(jīng)過一個δ延時,程序不好控制。
本模塊仿真波形如圖所示:
圖5 倒計時模塊仿真波形
用元件例化語句將以上兩個子模塊組合,得到整個搶答啟動模塊。如下圖所示:
圖6 由兩個子模塊組成搶答啟動模塊
兩個子模塊組合的程序為:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY STARTER IS PORT(CLK1,CLK2,L_CR,RST,START5,START20:IN STD_LOGIC;
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE THREE OF STARTER IS
COMPONENT START_5_20 IS
--調(diào)用元件START_5_20聲明
PORT(CLK1,RST,START5,START20:IN STD_LOGIC;
B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
S_FLAG:OUT STD_LOGIC);END COMPONENT;COMPONENT DE_COUNT IS
--調(diào)用元件DE_COUNT聲明
PORT(CLK2,LOAD,L_CR,RST:IN STD_LOGIC;
B,A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END COMPONENT;SIGNAL m,n:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL p:STD_LOGIC;
--對應(yīng)圖7中的中間信號 BEGIN
--按照圖7將兩個元件連接起來
U1:START_5_20 PORT MAP(CLK1=>CLK1,START5=>START5,START20=>START20,RST=>RST,B=>m,A=>n,S_FLAG=>p);U2:DE_COUNT PORT MAP(CLK2=>CLK2,B=>m,A=>n,LOAD=>p,RST=>RST,L_CR=>L_CR,TIMEB=>TIMEB,TIMEA=>TIMEA, TIMEOUT=>TIMEOUT,SR1=>SR1);END ARCHITECTURE;
2、選手搶答模塊
在一個結(jié)構(gòu)體中用8個進程同時對8個選手按鍵電平變化的監(jiān)測是不可實現(xiàn)的,所以將本模塊劃分為兩個子模塊:單個選手按鍵模塊和判斷搶答選手模塊。最后將8個選手按鍵模塊和1個判斷搶答選手模塊連接起來,得到整個選手搶答模塊。
1)單個選手按鍵子模塊
按鍵輸入相當(dāng)于該實體的時鐘信號,鍵被按下,等于來一個脈沖,輸出信號給判斷模塊進行選手號的判斷。只要有選手搶答成功,相關(guān)模塊會輸出信號使8個按鍵模塊的LOCK信號有效,禁止其他選手搶答。如圖所示。
圖7 單個選手按鍵模
本模塊程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BUTTON1 IS PORT(LOCK , BUTTON , RST :IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END ENTITY;ARCHITECTURE B1 OF BUTTON1 IS BEGIN
PROCESS(RST , BUTTON)
--使用進程時刻監(jiān)測RST、BUTTON信號 BEGIN
IF RST='0' THEN
PRESSED<='0';
--復(fù)位
IF LOCK='1' THEN
--鍵被按下并且LOCK信號無效 PRESSED<='1';
--則輸出信號給判斷模塊 END IF;ELSIF BUTTON'EVENT AND BUTTON='0' THEN END IF;END PROCESS;END ARCHITECTURE;
圖8 倒計時模塊仿真波形
2)判斷搶答選手子模塊
本子模塊接收8個按鍵子模塊的輸出信號,如收到1號子模塊輸出的高電平,則輸出選手號“0001”;并發(fā)出信號使揚聲器發(fā)聲并控制8個按鍵子模塊使它們的LOCK信號有效,禁止其他選手搶答。本子模塊端口設(shè)置如圖所示。
圖9判斷選手模塊
本子模塊程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY IDENTIFIER IS
PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);LOCK,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF IDENTIFIER IS
SIGNAL P:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN
P<=PP8&PP7&PP6&PP5&PP4&PP3&PP2&PP1;
--8個輸入放在一起判斷 BEGIN
CASE P IS
WHEN “00000001”=>P_NUM<=“0001”;LOCK<='0';SR1<='1';--1號選手 WHEN “00000010”=>P_NUM<=“0010”;LOCK<='0';SR1<='1';--2號選手 WHEN “00000100”=>P_NUM<=“0011”;LOCK<='0';SR1<='1';--3號選手 WHEN “00001000”=>P_NUM<=“0100”;LOCK<='0';SR1<='1';--4號選手 WHEN “00010000”=>P_NUM<=“0101”;LOCK<='0';SR1<='1';--5號選手 WHEN “00100000”=>P_NUM<=“0110”;LOCK<='0';SR1<='1';--6號選手 WHEN “01000000”=>P_NUM<=“0111”;LOCK<='0';SR1<='1';--7號選手 WHEN “10000000”=>P_NUM<=“1000”;LOCK<='0';SR1<='1';--8號選手 WHEN OTHERS=>P_NUM<=“0000”;LOCK<='1';SR1<='0';PRO1:PROCESS(P)
--輸入若發(fā)生變化,馬上啟動進程進行判斷
END CASE;END PROCESS;END ARCHITECTURE;9
圖10 判斷搶答選手模塊仿真波形
所以將以上兩個子模塊用元件例化語句連接起來,組成整個選手搶答模塊,如下圖所示
圖11 選手搶答模塊
實現(xiàn)程序為:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BUTTON IS
PORT(P1,P2,P3,P4,P5,P6,P7,P8,RST,LOCK:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);LOCK_S,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE BB1 OF BUTTON IS COMPONENT BUTTON1 IS
--調(diào)用元件BUTTON1聲明
PORT(LOCK,B,RST:IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END COMPONENT;COMPONENT IDENTIFIER IS
--調(diào)用元件IDENTIFIER聲明
PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);10 LOCK,SR1:OUT STD_LOGIC);END COMPONENT;SIGNAL a1,a2,a3,a4,a5,a6,a7,a8:STD_LOGIC;
--定義圖12中的中間信號 BEGIN
--按照圖12將兩個元件連接起來
U1:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P1,RST=>RST,PRESSED=>a1);U2:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P2,RST=>RST,PRESSED=>a2);U3:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P3,RST=>RST,PRESSED=>a3);U4:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P4,RST=>RST,PRESSED=>a4);U5:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P5,RST=>RST,PRESSED=>a5);U6:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P6,RST=>RST,PRESSED=>a6);U7:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P7,RST=>RST,PRESSED=>a7);U8:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P8,RST=>RST,PRESSED=>a8);U9:IDENTIFIER PORT MAP(PP1=>a1,PP2=>a2,PP3=>a3,PP4=>a4,PP5=>a5,PP6=>a6,PP7=>a7,PP8=>a8,P_NUM=>P_NUM,LOCK=>LOCK_S,SR1=>SR1);END ARCHITECTURE;
3、加減分模塊
加減分模塊要識別按下的按鍵:加5分按鍵及減5分按鍵。所以采用狀態(tài)機的方法來識別。將本模塊劃分為三個子模塊:組別判斷子模塊,加減及寄存器子模塊,分?jǐn)?shù)選擇輸出子模塊。
1)組別判斷子模塊
該模塊要實現(xiàn)的功能是根據(jù)搶答成功的選手編號,判斷出該選手屬于哪組,并輸出使能信號允許該組的分?jǐn)?shù)寄存器進行加減操作。如圖所示。
圖12 組別判斷模塊
實現(xiàn)程序為:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECODE IS PORT(CLK:IN STD_LOGIC;P_NUM:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
EN1,EN2,EN3,EN4:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF DECODE IS
SIGNAL E:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
PROCESS(CLK)
--引入時鐘信號,協(xié)調(diào)各部分電路的工作
BEGIN IF CLK'EVENT AND CLK='1' THEN
CASE P_NUM IS WHEN “0001”=>E<=“0001”;WHEN “0010”=>E<=“0001”;--
1、2號選手屬第一組
WHEN “0011”=>E<=“0010”;WHEN “0100”=>E<=“0010”;--
3、4號選手屬第二組 WHEN “0101”=>E<=“0100”;WHEN “0110”=>E<=“0100”;--
5、6號選手屬第三組 WHEN “0111”=>E<=“1000”;WHEN “1000”=>E<=“1000”;--
7、8號選手屬第四組 WHEN OTHERS=>E<=“0000”;
--其他情況則四個分?jǐn)?shù)鎖存器都不工作
END CASE;END IF;
END PROCESS;
EN4<=E(3);EN3<=E(2);EN2<=E(1);EN1<=E(0);END ARCHITECTURE;程序仿真波形如圖所示:
圖13 組別判斷模塊仿真波形
2)加減及寄存器子模塊
本模塊的狀態(tài)機轉(zhuǎn)換過程為:將ADD和SUB信號并置,并檢測其電平變化。當(dāng)ADD按下時,“ADD&SUB”的電平為“01”,彈起時恢復(fù)為“11”。當(dāng)SUB按下時,“ADD&SUB”的電平為“10”,彈起時恢復(fù)為“11”。本模塊另外還需實現(xiàn)的功能是寄存功能。如下圖所示:
圖14 加減及寄存器模塊
實現(xiàn)程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER1 IS PORT(CLK,EN:IN STD_LOGIC;
ADD,SUB:IN STD_LOGIC;
AA2,AA1,AA0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF COUNTER1 IS SIGNAL A:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);SIGNAL C_ST:ST_TYPE;BEGIN A<=ADD&SUB;
--將ADD信號和SUB信號并置在一起判斷
PROCESS(CLK)VARIABLE P2,P1,P0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
IF EN='1' THEN
--使能端有效,才對該分?jǐn)?shù)寄存器進行操作
IF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0=>IF A=“01” THEN--A為“01”,說明ADD按下
C_ST<=ST1;
--下一狀態(tài)轉(zhuǎn)ST1,以等待按鍵彈起
IF P0=“1001” THEN--個位為9,進1為0,再向十位進1
P0:=“0000”;
IF P1=“1001” THEN
--十位為9,進一為0
P1:=“0000”;
IF P2=“1001” THEN
--百位為9,進一為0
P2:=“0000”;
ELSE P2:=P2+1;
--百位不為9,百位加1
END IF;
ELSE P1:=P1+1;
--十位不為9,加一
END IF;
ELSE P0:=P0+1;
--個位不為9,加一
END IF;
ELSIF A=“10” THEN
--A為“10”,說明SUB按下
C_ST<=ST2;--下一狀態(tài)轉(zhuǎn)ST2,以等待按鍵彈起
IF(P2/=0 OR P1/=0 OR P0/=0)THEN
IF P0=“0000” THEN P0:=“1001”;
P1:=P1-1;--個位向十位借1 P2:=P2-1;--十位向百位借1
IF P1=“0000” THEN
ELSE P1:=P1-1;--十位不為0,直接減1
END IF;
P1:=“1001”;
ELSE P0:=P0-1;--個位不為0,直接減1
END IF;
END IF;
ELSE C_ST<=ST0;
END IF;WHEN ST1=>IF A=“11” THEN
--A為“11”,說明按鍵彈起
C_ST<=ST0;
--回到ST0繼續(xù)監(jiān)視按鍵
ELSE C_ST<=ST1;--否則等待按鍵彈起
END IF;
C_ST<=ST0;WHEN ST2=>IF A=“11” THEN
ELSE C_ST<=ST2;
END IF;WHEN OTHERS=>C_ST<=ST0;END CASE;END IF;END IF;
AA2<=P2;AA1<=P1;AA0<=P0;
--操作后的分?jǐn)?shù)輸出 END PROCESS;END ARCHITECTURE;
加減及寄存器模塊仿真波形圖如下:
圖15 加減及寄存器模塊仿真波形
圖中,加分按鍵ADD按下,輸出“010”;減分按鍵SUB按下,輸出回到“000”;又來兩個加分按鍵,輸出“020”。當(dāng)EN信號無效時,有按鍵按下輸出不變。
3)分?jǐn)?shù)選擇輸出模塊
四組分?jǐn)?shù)要顯示出來,需要12個7段數(shù)碼管。若只顯示當(dāng)前搶答成功選手的分?jǐn)?shù),則只需3個數(shù)碼管。所以設(shè)置一個分?jǐn)?shù)選擇器,根據(jù)搶答成功的選手編號,選擇其分?jǐn)?shù)輸出給顯示模塊顯示。
程序為:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUXX IS PORT(P_NUM,AA2,AA1,AA0,BB2,BB1,BB0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CC2,CC1,CC0,DD2,DD1,DD0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF MUXX IS BEGIN
PROCESS(P_NUM)
--P_NUM為選手編號
BEGIN
CASE P_NUM IS
WHEN “0001”=>D2<=AA2;D1<=AA1;D0<=AA0;WHEN “0010”=>D2<=AA2;D1<=AA1;D0<=AA0;--1號和2號選手為一組 WHEN “0011”=>D2<=BB2;D1<=BB1;D0<=BB0;WHEN “0100”=>D2<=BB2;D1<=BB1;D0<=BB0;--3號和4號選手為一組 WHEN “0101”=>D2<=CC2;D1<=CC1;D0<=CC0;WHEN “0110”=>D2<=CC2;D1<=CC1;D0<=CC0;--5號和6號選手為一組 WHEN “0111”=>D2<=DD2;D1<=DD1;D0<=DD0;WHEN “1000”=>D2<=DD2;D1<=DD1;D0<=DD0;--7號和8號選手為一組 WHEN OTHERS=>D2<=“0000”;D1<=“0000”;D0<=“0000”;
END CASE;
END PROCESS;END ARCHITECTURE;仿真波形如圖所示。
圖16分?jǐn)?shù)選擇輸出模塊仿真波形
4、顯示模塊
本模塊根據(jù)送來的數(shù)據(jù):搶答成功選手號,選手分?jǐn)?shù)、倒計時時間,將相應(yīng)的字形碼送數(shù)碼管顯示。端口設(shè)置如圖所示。
圖17顯示模塊
圖18數(shù)碼管分配
顯示0,“00111111”;3F;顯示1,“00000110”;06;顯示2,“01011011”;5B;顯示3,“01001111”;4F;顯示4,“01100110”;66;顯示5,“01101101”;6D;顯示6,“01111101”;7D;顯示7,“00000111”;07;顯示8,“01111111”;7F;顯示9,“01101111”;6F;顯示10,“00000000”;00;
17圖中,BT為數(shù)碼管的位選信號,SG為數(shù)碼管的段選信號。另外圖18為數(shù)碼管的分配。左起第一位為選手編號,第3、4位為該選手的分?jǐn)?shù),最后兩位為倒計時。程序如下:
LIBRARY IEEE;16
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY IS
PORT(CLK:IN STD_LOGIC;SCORE2,SCORE1,SCORE0,P_NUMBER,TIMEB,TIMEA:IN BT,SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF DISPLAY IS SIGNAL CNT8:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P1:PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
--時鐘信號一來,顯示下一位 CNT8<=CNT8+1;END IF;END PROCESS;BEGIN
CASE CNT8 IS
WHEN “000”=>BT<=“10000000”;A<=P_NUMBER;--第一位顯示選手號
WHEN “001”=>BT<=“01000000”;A<=“1010”;
--第二位不用,滅
WHEN “010”=>BT<=“00100000”;A<=SCORE2;
--第三位顯示分?jǐn)?shù)百位
WHEN “011”=>BT<=“00010000”;A<=SCORE1;
--第四位顯示分?jǐn)?shù)十位
WHEN “100”=>BT<=“00001000”;A<=SCORE0;
--第五位顯示分?jǐn)?shù)個位
WHEN “101”=>BT<=“00000100”;A<=“1010”;
--第六位不用,滅
WHEN “110”=>BT<=“00000010”;A<=TIMEB;
--第七位顯示倒計時十位
WHEN “111”=>BT<=“00000001”;A<=TIMEA;
--第八位顯示倒計時個位 END CASE;P2:PROCESS(CNT8)
END PROCESS;BEGIN
CASE A IS
--根據(jù)數(shù)據(jù)選擇相應(yīng)的字形碼送數(shù)碼管顯示
WHEN “0000”=>SG<=“00111111”;WHEN “0001”=>SG<=“00000110”;
WHEN “0010”=>SG<=“01011011”;WHEN “0011”=>SG<=“01001111”;
WHEN “0100”=>SG<=“01100110”;WHEN “0101”=>SG<=“01101101”;
WHEN “0110”=>SG<=“01111101”;WHEN “0111”=>SG<=“00000111”;
WHEN “1000”=>SG<=“01111111”;WHEN “1001”=>SG<=“01101111”;
WHEN “1010”=>SG<=“00000000”;WHEN OTHERS=>NULL;END CASE;P3:PROCESS(A)END PROCESS;END ARCHITECTURE;本模塊仿真波形如圖所示。
圖19顯示模塊仿真波形
5、蜂鳴器模塊
當(dāng)SR1鳴聲信號來時,輸出CLK2(2KHz)驅(qū)動蜂鳴器發(fā)聲。CLK1用于掃描SR1的電平變化,SR1上升沿來到,允許CLK2輸出,并持續(xù)一段時間。模塊圖如下:
圖20蜂鳴器模塊
本模塊程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEAKER IS PORT(CLK1,SR1,CLK2:IN STD_LOGIC;
S:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF SPEAKER IS TYPE ST_TYPE IS(ST0,ST1);SIGNAL C_ST:ST_TYPE;SIGNAL A:STD_LOGIC;BEGIN PROCESS(CLK1)
VARIABLE P:STD_LOGIC_VECTOR(7 DOWNTO 0);--P用于定時,使蜂鳴器發(fā)聲持續(xù)
BEGIN
IF CLK1'EVENT AND CLK1='1' THEN
CASE C_ST IS WHEN ST0=>IF SR1='1' THEN
--SR1信號有上升沿
P:=“00111111”;18
C_ST<=ST1;A<='1';--蜂鳴器發(fā)聲,開始定時
ELSE C_ST<=ST0;A<='0';--否則等待
END IF;
P:=P-1;C_ST<=ST1;
A<='0';--定時到,蜂鳴器停止發(fā)聲 IF SR1='1' THEN
C_ST<=ST1;--等待系統(tǒng)復(fù)位 END IF;WHEN ST1=>IF P/=0 THEN
--定時還沒到,等待
ELSE
ELSE C_ST<=ST0;--復(fù)位
END IF;WHEN OTHERS=>C_ST<=ST0;A<='0';END CASE;END IF;S<=CLK2 AND A;
--只有A為1時,蜂鳴器才發(fā)聲 END PROCESS;END ARCHITECTURE;本模塊的仿真波形如圖所示。
圖21 蜂鳴器模塊仿真波形
3設(shè)計心得及總結(jié)
剛開始確定這個課題時,我首先確定了要用到哪些知識,主要是VHDL程序的設(shè)計,軟件的仿真。首先我查閱課本質(zhì)料,找了不少關(guān)于這方面的程序,盡量的把它們都弄懂了。然后我確定了總體方案,把整體方案劃分成了幾個模塊,形成了一個整體的框架,然后各個擊破。有了總體的思路做指導(dǎo)我很快我就仿真調(diào)試好了搶答啟動模塊選手搶答模塊,這樣一來就增加了我的信心,一鼓作氣拿下了以后的模塊。當(dāng)然任何事情都不會一帆風(fēng)順,也遇到許多難題,不懂的地方我就請叫老師和同學(xué),最后所有的模塊都被我一個一個的做出來了,我很高興,覺得我這兩天來的努力沒有白費。
此次課程設(shè)計不僅加強了我對專業(yè)知識的學(xué)習(xí)與了解,更有許多的感慨,主要有以下幾點:
(1)加強了我們動手、思考和解決問題的能力。我們很少能有這種機會來鍛煉自己,通過這次課程設(shè)計,起到了很好的鍛煉效果。
(2)我在做課程設(shè)計同時也是對課本知識的鞏固和加強,課本 的知識太多,平時課間的學(xué)習(xí)并不能很好的理解程序的功能,所以在這次課程設(shè)計過程中,我們了解了很多程序的功能,并且對于其在實際中的使用有了更多的認(rèn)識。
(3)我們兩人一組相互合作,共同解決問題也認(rèn)識到了團隊精神的重要性
最后,我要感謝老師和同學(xué)們給我的幫助,沒有你們的幫助,我是不能完成此次課程設(shè)計的,真的很感謝你們!
第三篇:基于EDA的自動售貨機系統(tǒng)的設(shè)計 開題報告
畢業(yè)設(shè)計開題報告
課題名稱:基于學(xué)院: 專業(yè): EDA的自動售貨機系統(tǒng)的設(shè)計 電子電氣工程學(xué)院 電子信息工程
一 自動售貨機設(shè)計簡介
自動售貨是20世紀(jì)70年代在日本、歐美發(fā)展起來的一種全新的消費方式,自動售貨機又被稱為24小時營業(yè)的微型自助超市,它的售貨領(lǐng)域非常廣泛,是發(fā)達(dá)國家商品零售的一種主要方式。自動售貨機作為一種先進的消費方式,已經(jīng)成為城市現(xiàn)代文明發(fā)達(dá)程度的重要標(biāo)志,其新穎、時尚的購物方式,24小時營業(yè)的特點給人們生活帶來了便利,美化了城市環(huán)境,受到消費者的歡迎。但是在我國自動售貨機的普及還不及發(fā)達(dá)國家,主要原因是我國EDA技術(shù)的應(yīng)用水平長期落后于發(fā)達(dá)國家。
本設(shè)計要實現(xiàn)自動售貨機的基本功能,如投幣處理、商品選擇、購貨撤銷、異常退幣、計算存貨等功能。利用Altera公司的開發(fā)軟件QUARTUS II平臺,采用Verilog hdl硬件描述語言編程的設(shè)計方法設(shè)計系統(tǒng)核心電路的硬件程序,與一般的軟件開發(fā)不同,Verilog hdl編程更需要熟悉一些底層的硬件知識,特別是數(shù)字邏輯電路的設(shè)計,因此Verilog hdl編程的方法、思路都要更多的與硬件電路聯(lián)系起來。完成系統(tǒng)各個功能模塊的硬件程序設(shè)計后,在軟件平臺上進行編譯和電路仿真,最后生成的目標(biāo)文件下載到實驗臺內(nèi)的FPGA芯片以實現(xiàn)該系統(tǒng),并在實驗臺上對設(shè)計進行驗證。(1)自動售貨機主要功能
自動售貨機控制要求對機內(nèi)商品信息進行識別,對投入的貨幣進行運算,并根據(jù)所投入的貨幣數(shù)值判斷是否能夠購買某種商品,并做出相應(yīng)的反應(yīng)。本文設(shè)計的自動售貨機控制系統(tǒng)主要可以實現(xiàn)投幣處理、計算投幣總額、輸出商品,輸出找零等功能,系統(tǒng)工作流程如圖1 所示。
(2)自動售貨機的幾個過程
在自動售貨機控制系統(tǒng)的工作過程中,可分為三個狀態(tài):初始狀態(tài)、投幣狀態(tài)和找零狀態(tài)。在每一個狀態(tài)中完成特定的功能。
首先,在初始狀態(tài)下,自動售貨機通電,初始化機內(nèi)商品信息(包括商品種類、每種商品的數(shù)量以及價格)。當(dāng)顧客購買商品時,可根據(jù)自己需要通過按鍵選擇其中一種商品(且只限一種),然后進入下一狀態(tài),即投幣狀態(tài)。
在投幣狀態(tài)下,當(dāng)投入硬幣總額大于或等于商品價格,并且按確認(rèn)購買鍵后將進入找零狀態(tài);若按取消鍵,售貨機退出所投硬幣,返回到初始狀態(tài)。
投幣結(jié)束,若投入的硬幣等于或大于商品單價,且確認(rèn)購買,則商品將送出送貨口,并計算輸出找零硬幣。出貨找零結(jié)束時表示一次自動售貨過程完成,重新返回到初始狀態(tài),計算此時商品信息,并等待下一次售貨過程的到來。
(3)自動售貨機的基本模塊
自動售貨機控制系統(tǒng)的功能模塊邏輯上劃分為商品信息存儲模塊、商品選擇模塊、投幣處理模塊,找零模塊和顯示模塊。商品信息存儲模塊
該模塊的功能是將商品的單價、數(shù)量存儲到自動售貨機中,price、quantity 分別表示商品的單價與數(shù)量數(shù)據(jù)信號,item 為商品的種類。商品選擇模塊
該模塊功能是對商品進行選擇與購買。當(dāng)對四種商品進行選擇時,由sel 的選擇信號的個數(shù)來表示所選擇的商品類型。get 為對商品進行確認(rèn)購買的信號。投幣處理模塊
該模塊是對投入的硬幣進行處理的過程,輸出參數(shù)coin 為投幣數(shù)值計數(shù)器,以0.5 元為單位進行計算。整個模塊功能類似于計錢器,可準(zhǔn)確計算投入的硬幣數(shù),記錄并保存投入的總幣值。找零模塊
該模塊主要完成找零操作。通過計錢器coin 計算余額,然后輸出找零的控制信號act5、act10。顯示模塊
該模塊用來顯示錢數(shù)和商品數(shù)量。用于錢數(shù)顯示時,將計錢器coin轉(zhuǎn)換成BCD 碼,然后經(jīng)譯碼器譯碼并顯示。用于商品數(shù)量顯示時,將計算得出的最終商品數(shù)量quantity 先轉(zhuǎn)換成BCD 碼,然后經(jīng)譯碼器譯碼并顯示。
二
國內(nèi)外EDA技術(shù)發(fā)展簡介
EDA概述
人類社會已進入到高度發(fā)達(dá)的信息化社會,信息社會的發(fā)展離不開電子產(chǎn)品的進步?,F(xiàn)代電子產(chǎn)品在性能提高、復(fù)雜度增大的同時,價格卻一直呈下降趨勢,而且產(chǎn)品更新?lián)Q代的步伐也越來越快,實現(xiàn)這種進步的主要原因就是生產(chǎn)制造技術(shù)和電子設(shè)計技術(shù)的發(fā)展。前者以微細(xì)加工技術(shù)為代表,目前已進展到深亞微米階段,可以在幾平方厘米的芯片上集成數(shù)千萬個晶體管;后者的核心就是EDA技術(shù)。EDA是指以計算機為工作平臺,融合了應(yīng)用電子技術(shù)、計算機技術(shù)、智能化技術(shù)最新成果而研制成的電子CAD通用軟件包,主要能輔助進行三方面的設(shè)計工作:IC設(shè)計,電子電路設(shè)計以及PCB設(shè)計。沒有EDA技術(shù)的支持,想要完成上述超大規(guī)模集成電路的設(shè)計制造是不可想象的,反過來,生產(chǎn)制造技術(shù)的不斷進步又必將對EDA技術(shù)提出新的要求。2 EDA技術(shù)簡介
EDA(Electronic Design Automation),即電子設(shè)計自動化,是指利用計算機完成電子系統(tǒng)的設(shè)計。EDA技術(shù)是以計算機和微電子技術(shù)為先導(dǎo)的,匯集了計算機圖形學(xué)、拓?fù)鋵W(xué)、邏輯學(xué)、微電子工藝與結(jié)構(gòu)學(xué)和計算數(shù)學(xué)等多種計算機應(yīng)用學(xué)科最新成果的先進技術(shù)。EDA技術(shù)以計算機為工具,代替人完成數(shù)字系統(tǒng)的邏輯綜合、布局布線和設(shè)計仿真等工作。設(shè)計人員只需要完成對系統(tǒng)功能的描述,就可以由計算機軟件進行處理,得到設(shè)計結(jié)果,而且修改設(shè)計如同修改軟件一樣方便,可以極大地提高設(shè)計效率。2.1 EDA技術(shù)的發(fā)展概況
從20世紀(jì)60年代中期開始,人們就不斷開發(fā)出各種計算機輔助設(shè)計工具來幫助設(shè)計人員進行電子系統(tǒng)的設(shè)計。電路理論和半導(dǎo)體工藝水平的提高,對EDA技術(shù)的發(fā)展起到了巨大的作用,使EDA作用范圍從PCB板設(shè)計延伸到電子線路和集成電路設(shè)計,直至整個系統(tǒng)的設(shè)計,也使IC芯片系統(tǒng)應(yīng)用、電路制作和整個電子生產(chǎn)過程都集成在一個環(huán)境之中。根據(jù)電子設(shè)計技術(shù)的發(fā)展特征,EDA技術(shù)發(fā)展大致分為三個階段。(1)CAD階段
第一階段的特點是一些單獨的工具軟件,主要有PCB布線設(shè)計、電路模擬、邏輯模擬、以及版圖的繪制等,通過計算機的使用,從而將設(shè)計人員從大量繁重重復(fù)的計算和繪圖工作中解脫出來。20世紀(jì)80年代,隨著集成電路規(guī)模的增大,EDA技術(shù)有了較快的發(fā)展。許多軟件公司等進入市場,開始供應(yīng)帶電路圖編輯工具和邏輯模擬工具的EDA軟件。這個時期的軟件產(chǎn)品主要針對產(chǎn)品開發(fā),按照設(shè)計、分析、生產(chǎn)和測試等多個階段,不同階段分別使用不同的軟件包,每個軟件只能完成其中一項工作,通過順序循環(huán)使用這些軟件,可完成設(shè)計的全過程。(2)CAE階段
這個階段在集成電路與電子設(shè)計方法學(xué)以及設(shè)計工具集成化方面取得了許多成果。各種設(shè)計工具,如原理圖輸入、編譯與連接、邏輯模擬、測試碼生成、版圖自動布局已齊全。由于采用了統(tǒng)一數(shù)據(jù)管理技術(shù),因而能夠?qū)⒏鱾€工具集成為一個CAE系統(tǒng)。按照設(shè)計方法學(xué)制定的設(shè)計流程,可以實現(xiàn)從設(shè)計輸入到版圖輸出的全程設(shè)計自動化。這個階段主要采用基于單元庫的半定制設(shè)計方法,采用門陣列與標(biāo)準(zhǔn)單元設(shè)計的各種ASIC得到了極大的發(fā)展,將集成電路工業(yè)推入了ASIC時代。(3)EDA階段
20世紀(jì)90年代以來,微電子技術(shù)以驚人的速度發(fā)展,其工藝水平達(dá)到了深亞微米級,此階段主要出現(xiàn)了以高級語言描述、系統(tǒng)仿真和綜合技術(shù)為特征的第三代EDA技術(shù),不僅極大地提高了系統(tǒng)的設(shè)計效率,而且使設(shè)計人員擺脫了大量的輔助性及基礎(chǔ)性工作,將精力集中于創(chuàng)造性的方案與概念的構(gòu)思上。它的特征為:第一,高層綜合的理論與方法取得較大進展,將EDA設(shè)計層次由RT級提高到了系統(tǒng)級(又稱行為級),并劃分為邏輯綜合和測試綜合。第二,采用硬件描述語言HDL來描述10萬門以上的設(shè)計,并形成了VHDL和VerilogHDL兩種標(biāo)準(zhǔn)硬件描述語言。第三,采用平面規(guī)劃技術(shù)對邏輯綜合和物理版圖設(shè)計進行聯(lián)合管理,作到在邏輯綜合早期設(shè)計階段就考慮到物理設(shè)計信息的影響。第四,可測性設(shè)計。第五,為帶有嵌入IP模塊ASIC設(shè)計提供軟硬件協(xié)同系統(tǒng)設(shè)計工具。2.2 EDA技術(shù)的基本特征
EDA技術(shù)代表了當(dāng)今電子設(shè)計技術(shù)的最新發(fā)展方向,它的基本特征是:設(shè)計人員按照“自頂向下”的設(shè)計方法,對整個系統(tǒng)進行方案設(shè)計和功能劃分,系統(tǒng)的關(guān)鍵電路用一片或幾片專用集成電路(ASIC)實現(xiàn),然后采用硬件描述語言(HDL)完成系統(tǒng)行為級設(shè)計,最后通過綜合器和適配器生成最終的目標(biāo)器件[3]。這樣的設(shè)計方法被稱為高層次的電子設(shè)計方法。下面介紹與EDA基本特征有關(guān)的幾個概念。
(1)“自頂向下”的設(shè)計方法
10年前,電子設(shè)計的基本思路還是選擇標(biāo)準(zhǔn)集成電路“自底向上”(Bottom-Up)的構(gòu)造出一個新的系統(tǒng),這樣的設(shè)計方法就如同一磚一瓦地建造金字塔,不僅效率低、成本高而且還容易出錯。(2)高層次設(shè)計
高層次設(shè)計提供了一種“自頂向下”(Top-Down)的全新的設(shè)計方法,這種設(shè)計方法首先從系統(tǒng)設(shè)計入手,在頂層進行功能方框圖的劃分和結(jié)構(gòu)設(shè)計。在方框圖一級進行仿真、糾錯,并用硬件描述語言對高層次的系統(tǒng)行為進行描述,在系統(tǒng)一級進行驗證。然后用綜合優(yōu)化工具生成具體門電路的網(wǎng)表,其對應(yīng)的物理實現(xiàn)級可以是印刷電路板或?qū)S眉呻娐?。由于設(shè)計的主要仿真和調(diào)試過程是在高層次上完成的,這不僅有利于早期發(fā)現(xiàn)結(jié)構(gòu)設(shè)計上的錯誤,避免設(shè)計工作的浪費,而且也減少了邏輯功能仿真的工作量,提高了設(shè)計的一次成功率。(3)硬件描述語言 硬件描述語言(HDL-Hardware Description Language)是一種用于設(shè)計硬件電子系統(tǒng)的計算機語言,它用軟件編程的方式來描述電子系統(tǒng)的邏輯功能、電路結(jié)構(gòu)和連接形式,與傳統(tǒng)的門級描述方式相比,它更適合大規(guī)模系統(tǒng)的設(shè)計。
本次設(shè)計使用VERILOG HDL語言,Verilog HDL語言最初是于1983年由Gateway Design Automation公司為其模擬器產(chǎn)品開發(fā)的硬件建模語言。那時它只是一種專用語言。由于他們的模擬、仿真器產(chǎn)品的廣泛使用,Verilog HDL 作為一種便于使用且實用的語言逐漸為眾多設(shè)計者所接受。在一次努力增加語言普及性的活動中,Verilog HDL語言于1990年被推向公眾領(lǐng)域。Open Verilog International(OVI)是促進Verilog發(fā)展的國際性組織。1992年,OVI決定致力于推廣Verilog OVI標(biāo)準(zhǔn)成為IEEE標(biāo)準(zhǔn)。這一努力最后獲得成功,Verilog 語言于1995年成為IEEE標(biāo)準(zhǔn),稱為IEEE Std 1364-1995。完整的標(biāo)準(zhǔn)在Verilog硬件描述語言參考手冊中有詳細(xì)描述。
下面列出的是Verilog硬件描述語言的主要能力: * 基本邏輯門,例如and、or和nand等都內(nèi)置在語言中。
* 用戶定義原語(UDP)創(chuàng)建的靈活性。用戶定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。
* 開關(guān)級基本結(jié)構(gòu)模型,例如pmos 和nmos等也被內(nèi)置在語言中。* 提供顯式語言結(jié)構(gòu)指定設(shè)計中的端口到端口的時延及路徑時延和設(shè)計的時序檢查。
* 可采用三種不同方式或混合方式對設(shè)計建模。這些方式包括:行為描述方式—使用過程化結(jié)構(gòu)建模;數(shù)據(jù)流方式—使用連續(xù)賦值語句方式建模;結(jié)構(gòu)化方式—使用門和模塊實例語句描述建模。
* Verilog HDL中有兩類數(shù)據(jù)類型:線網(wǎng)數(shù)據(jù)類型和寄存器數(shù)據(jù)類型。線網(wǎng)類型表示構(gòu)件間的物理連線,而寄存器類型表示抽象的數(shù)據(jù)存儲元件。
* 能夠描述層次設(shè)計,可使用模塊實例結(jié)構(gòu)描述任何層次。
* 設(shè)計的規(guī)模可以是任意的;語言不對設(shè)計的規(guī)模(大?。┦┘尤魏蜗拗?。* Verilog HDL不再是某些公司的專有語言而是IEEE標(biāo)準(zhǔn)。
* 人和機器都可閱讀Verilog 語言,因此它可作為EDA的工具和設(shè)計者之間的交互語言。
* Verilog HDL語言的描述能力能夠通過使用編程語言接口(PLI)機制進一步擴展。PLI是允許外部函數(shù)訪問Verilog 模塊內(nèi)信息、允許設(shè)計者與模擬器交互的例程集合。
* 設(shè)計能夠在多個層次上加以描述,從開關(guān)級、門級、寄存器傳送級(RTL)到算法級,包括進程和隊列級。
* 能夠使用內(nèi)置開關(guān)級原語在開關(guān)級對設(shè)計完整建模。* 同一語言可用于生成模擬激勵和指定測試的驗證約束條件,例如輸入值的指定。
* Verilog HDL 能夠監(jiān)控模擬驗證的執(zhí)行,即模擬驗證執(zhí)行過程中設(shè)計的值能夠被監(jiān)控和顯示。這些值也能夠用于與期望值比較,在不匹配的情況下,打印報告消息。
* 在行為級描述中,Verilog HDL不僅能夠在RTL級上進行設(shè)計描述,而且能夠在體系結(jié)構(gòu)級描述及其算法級行為上進行設(shè)計描述。
* 能夠使用門和模塊實例化語句在結(jié)構(gòu)級進行結(jié)構(gòu)描述。
* Verilog HDL 的混合方式建模能力,即在一個設(shè)計中每個模塊均可以在不同設(shè)計層次上建模。
* Verilog HDL 還具有內(nèi)置邏輯函數(shù),例如&(按位與)和|(按位或)。* 對高級編程語言結(jié)構(gòu),例如條件語句、情況語句和循環(huán)語句,語言中都可以使用。
* 可以顯式地對并發(fā)和定時進行建模。* 提供強有力的文件讀寫能力。
* 語言在特定情況下是非確定性的,即在不同的模擬器上模型可以產(chǎn)生不同的結(jié)果;例如,事件隊列上的事件順序在標(biāo)準(zhǔn)中沒有定義。
三
本次畢業(yè)設(shè)計主要內(nèi)容 四
進度安排
五 主要參考文獻
第四篇:軟件工程_自動售貨機
自動售貨機
信息1101 施敏宇 18號
下面是自動售貨機系統(tǒng)的需求陳述,試建立它的對象模型、動態(tài)模型和功能模型: 自動售貨機系統(tǒng)是一種無人售貨系統(tǒng)。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、五分幣、二分幣、一分幣。其他貨幣被認(rèn)為是假幣。機器拒絕接受假幣,并將其從退幣孔退出。當(dāng)機器接受了有效的硬幣之后,就把硬幣送入硬幣儲藏器中。顧客支付的貨幣根據(jù)硬幣的面值進行累加。自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當(dāng)?shù)牧沐X返還到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送回到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的貨幣將從退幣孔中退出。
面向?qū)ο蟮姆治?/p>
面向?qū)ο蠓治龇椒ǖ暮诵乃枷胧抢妹嫦驅(qū)ο蟾拍詈头椒檐浖枨髽?gòu)造一組相關(guān)模型(對象模型,動態(tài)模型和功能模型),來獲得關(guān)于問題域的全面認(rèn)識。
這三個模型從不同的角度對系統(tǒng)進行描述,其中:對象模型描述了系統(tǒng)靜態(tài)的、結(jié)構(gòu)化的數(shù)據(jù)性質(zhì);動態(tài)模型描述了系統(tǒng)順勢的、行為化的控制性質(zhì);功能模型描述了變化的系統(tǒng)的功能性質(zhì)。這三個模型都涉及到數(shù)據(jù)??刂坪筒僮鞯裙餐母拍睿糠N模型描述的側(cè)重有所不同。它們各自以不同側(cè)面反應(yīng)系統(tǒng)的實質(zhì)內(nèi)容,綜合起來則全面反映了目標(biāo)系統(tǒng)的需求。
對象模型是三個模型中最關(guān)鍵的。它的作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對象、它們的屬性和操作以及它們之間的聯(lián)系。UML中類圖適用于建立對象模型,狀態(tài)圖適用于建立動態(tài)模型。每個類的動態(tài)行為用一張狀態(tài)圖來表示,各個類的狀態(tài)圖通過事件合并起來,構(gòu)成系統(tǒng)的動態(tài)模型。也就是說,動態(tài)模型是基于事件共享而相互關(guān)聯(lián)的一組狀態(tài)圖的集合。建立對象模型大體上按照下列順序進行:尋找問題域內(nèi)的對象,識別出對象間的關(guān)系、定義屬性和服務(wù)。事實上,分析工作不可能嚴(yán)格按照預(yù)定順序進行,系統(tǒng)的模型往往需要反復(fù)構(gòu)造多遍才能建成。
注:對象硬幣計算器和對象硬幣檢測器可以作為對象自動售貨器的一部分,它們的屬性作為自動售貨器的屬性。
建立動態(tài)模型
對于僅存數(shù)靜態(tài)數(shù)據(jù)的系統(tǒng)來說,動態(tài)模型并沒有什么實際意義。然而在開發(fā)交互式系統(tǒng)時,動態(tài)模型卻起著很重要的作用。如果收集輸入信息是目標(biāo)系統(tǒng)的一項主要工作,則在開發(fā)這類應(yīng)用系統(tǒng)時建立正確的動態(tài)模型是至關(guān)重要的。
建立動態(tài)模型的步驟:
(1)編寫典型的對話腳本;
(2)從腳本中提取出事件,聯(lián)系該事件與其目標(biāo)對象;
(3)組織事件的順序和狀態(tài)(采用狀態(tài)圖描繪);
(4)比較各個不同對象的狀態(tài)圖,檢查對象之間的一致性,確保事件之間的匹配。
提示投幣投幣購買提示是假幣,退幣假幣檢查硬幣否真幣存儲硬幣,計算貨幣總值確認(rèn)投完硬幣是請求選擇貨物選擇貨物檢測貨物存量無貨提示無貨計算比較貨幣總值和貨物價格確認(rèn)確認(rèn)顧客購買小于提示貨物不足,確認(rèn)顧客購買不購買送出貨物,請求取貨不購買退幣請求取退幣提示顯示交易完畢
功能模型
功能模型描述了系統(tǒng)的所有計算。功能模型指出發(fā)生了什么,動態(tài)模型確定什么時候發(fā)生,而對象模型確定發(fā)生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數(shù)據(jù)流圖組成。數(shù)據(jù)流圖用來表示從源對象到目標(biāo)對象的數(shù)據(jù)值的流向,它不包含控制信息,控制信息在動態(tài)模型中表示,同時數(shù)據(jù)流圖也不表示對象中值的組織,值的組織在對象模型中表示。
數(shù)據(jù)流圖中包含有處理、數(shù)據(jù)流、動作對象和數(shù)據(jù)存儲對象。
1.處理
數(shù)據(jù)流圖中的處理用來改變數(shù)據(jù)值。最低層處理是純粹的函數(shù),一張完整的數(shù)據(jù)流圖是一個高層處理。
2.數(shù)據(jù)流
數(shù)據(jù)流圖中的數(shù)據(jù)流將對象的輸出與處理、處理與對象的輸入、處理與處理聯(lián)系起來。在一個計算機中,用數(shù)據(jù)流來表示一中間數(shù)據(jù)值,數(shù)據(jù)流不能改變數(shù)據(jù)值。
3.動作對象
動作對象是一種主動對象,它通過生成或者使用數(shù)據(jù)值來驅(qū)動數(shù)據(jù)流圖。
4.數(shù)據(jù)存儲對象
數(shù)據(jù)流圖中的數(shù)據(jù)存儲是被動對象,它用來存儲數(shù)據(jù)。它與動作對象不一樣,數(shù)據(jù)存儲本身不產(chǎn)生任何操作,它只響應(yīng)存儲和訪問的要求。
有效幣特征假幣退假幣假幣檢查硬幣有效幣硬幣送入硬幣儲藏器計算面值貨物價格有貨貨幣總值硬幣顧客投幣顧客不足等待顧客投幣顧客取消購買,退幣顧客判斷貨幣是否足夠足夠選擇貨物判斷分配器貨物存量無貨分配貨物,找零貨物,硬幣硬幣退幣
第五篇:軟件工程課程設(shè)計(自動售貨機)
《軟件工程》課程設(shè)計報告
一、問題描述
(一)關(guān)于自動售貨機
自動售貨機像磁卡電話、銀行柜員機一樣,以方便、新穎、文明、晝夜服務(wù)等特點,成為發(fā)達(dá)國家不可缺少的便民配套設(shè)施。如今的自動售貨機可以為顧客提供多種服務(wù)。顧客可以根據(jù)自己的需要選擇商品并投入錢幣,售貨機接收錢幣,售出商品。
(二)自動售貨機的設(shè)計
自動售貨機系統(tǒng)是一種無人售貨系統(tǒng)。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、一角幣、五分幣和一分幣。其它貨幣都被認(rèn)為是假幣。機器拒收假幣,并將其從退幣孔退出。當(dāng)機器接收了有效的硬幣之后,將之送入硬幣儲藏器。顧客支付的貨幣根據(jù)硬幣的面值進行累加。
自動售貨機裝有貨物分配器,每個分配器中包含0 個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果有貨,且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將找零返回到退幣孔。如果無貨,則和顧客支付的貨幣值相等的硬幣將被送到退幣孔。如果顧客支付的貨幣值小于所選貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的硬幣將從退幣孔中退出。
二、需求分析
(一)UML自動售貨機系統(tǒng)功能需求:
自動售貨機系統(tǒng)是一種無一元等3個硬幣投幣口。顧客確認(rèn)購貨后,售貨機可根據(jù)硬幣的面值進行累加。
自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過 1 選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當(dāng)?shù)牧沐X返回到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送加到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中的貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,將所投硬幣從退幣孔退出。
(二)UML自動售貨機系統(tǒng)控制要求:
根據(jù)售貨機自動控制系統(tǒng)的流程可以知道自動售貨機的主要系統(tǒng)包括:計幣系統(tǒng)、比較系統(tǒng)、選擇系統(tǒng)、飲料供應(yīng)系統(tǒng)、退幣系統(tǒng)和報警系統(tǒng)。
1.計幣系統(tǒng):
當(dāng)有顧額色買飲料時,投入的錢幣經(jīng)過感應(yīng)器,感應(yīng)器記憶投幣的個數(shù)關(guān)且傳送到檢測系統(tǒng)(即電子天平)和計幣系統(tǒng)。只有當(dāng)電子天平測量的重量少于誤差值時,允許計幣系統(tǒng)進行疊加錢幣,疊加的錢幣數(shù)據(jù)存放在數(shù)據(jù)寄存器中。如果不正確時,認(rèn)為是假幣。既定出投幣,既定出系統(tǒng),等待新顧客。
2.比較系統(tǒng):
投入完畢后,系統(tǒng)會把錢幣數(shù)據(jù)和可以購買飲料的價格進行區(qū)間比較,當(dāng)投入的錢幣小于2元時,指示燈亮,顯示投入的錢幣不足。此時可以再投幣或選擇退幣。當(dāng)投稿的錢幣在2~3元之間時,汔水選擇指示燈長亮。當(dāng)大于3元時,汔水和咖啡的指示燈同時長亮。此時可以選擇飲料或選擇退幣。
3.選擇系統(tǒng):
比較電路完成后選擇電路指示燈是長亮的,當(dāng)按下汽水或咖啡選擇時,相應(yīng)的選擇指示燈由長亮轉(zhuǎn)為以1秒為周期閃爍。當(dāng)飲料供應(yīng)完畢時,閃爍同時停止。
4.飲料供應(yīng)系統(tǒng):
當(dāng)按下選擇按鈕時,相應(yīng)的電磁閥(Y4或Y6)和電機(Y3或Y5)同時啟動。在飲料輸出的同時,減去相應(yīng)的購買錢幣數(shù)。當(dāng)飲料輸出達(dá)到8秒時,電磁閥首先關(guān)斷,小電機繼續(xù)工作0.5秒后停機。此小電機的作用是:在輸出飲料時,加快輸出。在電磁閥關(guān)斷時,給電磁閥加壓作用,加速電磁閥的關(guān)斷。(注:由于該售貨機是長期使用,電磁閥使用過多時,返回彈力減少,不能完全關(guān)斷會出現(xiàn)漏飲料的現(xiàn)象。此時電機Y3和Y5延長工作0.5秒起到電磁閥加壓的作用,使電磁閥可以完好的關(guān)斷。)
5.退幣系統(tǒng):
當(dāng)顧客購?fù)觑嬃虾?,多余的錢幣只要按下退幣按鈕。系統(tǒng)就會把數(shù)據(jù)寄存器D2內(nèi)的錢幣數(shù)首先除以10得到整數(shù)部分,是1元錢需要退回的數(shù)量,存放在D10里。余數(shù)存放在D11里。再用D11除以5得到的整數(shù)部分是5角錢需要退回的數(shù)量,存放在D12里。余數(shù)存放在D13里。最后D13里面的數(shù)值,就是1角錢需要退回的數(shù)量。在選擇退幣的同時啟動3個退幣電機。3個感應(yīng)器開始計數(shù),當(dāng)感應(yīng)器記錄的個數(shù)等于數(shù)據(jù)寄存器退回的幣數(shù)時,退幣電機停止運轉(zhuǎn)。
6.報警系統(tǒng):
報警系統(tǒng)如果是非故障報警,只要通過網(wǎng)絡(luò)通知送液車或者送幣車即可。但是如果是故障報警則需要通知維修人員到現(xiàn)聲進行維修。同時停止服務(wù),避免造成顧客的損失。
(三)業(yè)務(wù)流程圖
錢幣記錄儀對錢幣前端接受顧客投的進行識別幣判斷退出錢幣發(fā)送信息到分配器判斷沒有貨物時發(fā)送信息到前端發(fā)送貨物4
(四)數(shù)據(jù)流程圖
錢幣錢幣記錄儀對分配器反錢幣錢幣進行計算與貨物價格進貨物發(fā)放行比較取走零錢與購買的貨物
三、各種UML圖型及其分析
(一)用例圖
1.顧客的用例圖
inputCoinchooseSodaCustomer
2.自動售貨機的用例圖
RegisterDispenserFrontSodaMachine
(二)類圖
(三)序列圖
理想狀態(tài)(不找零錢)的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: releaseSoda()8 1.沒有貨物的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: displayPrompt()12: sendReturnCoin()13: returnCoinToFront()14: returnCoin()9 2.3.需找零錢的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: sendSodaPrice()12: checkForChange()13: releaseChange()14: receiveSoda()15: receiveChange()10
沒有零錢找給顧客
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnSodaFree()6: displayPrompt()7: chooseSoda()8: sendChooseToDis()9: checkAvailability()10: releaseSoda()11: sendSodaPrice()12: checkForCharge()13: returnNoCharge()14: returnCoinToFront()15: displayPrompt()16: returnSodaToDispenser()17: returnCoin()11 4.5.完整的序列圖
:Front:Register:Dispenser : Customer1: inputCoin()2: accept()3: getCustomerInput()4: checkForSoda()5: returnNoCharge()6: returnCoinToFront()7: displayPrompt()8: returnCoin()9: End()10: returnSodaFree()11: displayPrompt()12: chooseSoda()13: sendChooseToDispenser()14: checkAvailability()15: returnUnavailability()16: displayPrompt()17: sendReturnCoin()18: returnCoinToFront()19: returnCoin()20: End()21: releaseSoda()22: sendSodaFrice()23: checkForCharge()24: returnNoCharge()25: returnCoinToFront()26: displayPrompt()27: returnSodaToDispenser()28: returnCoin()29: End()30: releaseCharge()31: receiveSoda()32: receiveCharge()33: End()34: receiveSoda()35: End()12
(四)協(xié)作圖
1.理想狀態(tài)的協(xié)作圖
3: getCustomerInput()9: checkAvailability()4: checkForSoda():Registe:Dispensrer8: sendChooseToDis()2: accept()5: returnSodaFree()1: inputCoin()10: releaseSoda()7: chooseSoda():Front : Customer6: displayPrompt()11: releaseSoda()2.沒有貨物的協(xié)作圖
1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()11: displayPrompt()14: returnCoin()13: returnCoinToFront()8: sendChooseToDis()2: accept()5: returnSodaFree()12: sendReturnCoin()10: releaseSoda()3: getCustomerInput()9: checkAvailability()4: checkForSoda():Registe:Dispensrer 3.需找零錢的協(xié)作圖
1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()14: receiveSoda()15: receiveChange()13: releaseChange()8: sendChooseToDis()2: accept()5: returnSodaFree()10: releaseSoda()3: getCustomerInput()12: checkForChange()9: checkAvailability()4: checkForSoda():Registe:Dispensrer11: sendSodaPrice()4.沒有零錢找給顧客的協(xié)作圖
1: inputCoin()7: chooseSoda():Front : Customer6: displayPrompt()15: displayPrompt()17: returnCoin()13: returnNoCharge()14: returnCoinToFront()8: sendChooseToDis()16: returnSodaToDispenser()2: accept()5: returnSodaFree()3: getCustomerInput()10: releaseSoda()12: checkForCharge()9: checkAvailability()4: checkForSoda():Registe:Dispensrer11: sendSodaPrice()
完整的協(xié)作圖
29: End()33: End()35: End()1: inputCoin()12: chooseSoda():Front : Customer7: displayPrompt()8: returnCoin()11: displayPrompt()16: displayPrompt()19: returnCoin()26: displayPrompt()28: returnCoin()31: receiveSoda()13: sendChooseToDispenser()32: receiveCharge()27: returnSodaToDispenser()34: receiveSoda()10: returnSodaFree()5: returnNoCharge()15: returnUnavailability()6: returnCoinToFront()21: releaseSoda()18: returnCoinToFront()24: returnNoCharge()14: checkAvailability()25: returnCoinToFront()30: releaseCharge()2: accept()17: sendReturnCoin():Dispenser4: checkForSoda()3: getCustomerInput()22: sendSodaFrice()23: checkForCharge():Register15 5.(五)狀態(tài)圖
提示投幣do/ 請求投幣do/ 提示是假幣假幣do/ 檢查硬幣真幣否購買do/ 存儲硬幣,計算貨幣總值do/ 確認(rèn)投完硬幣有do/ 請求選擇商品選擇貨品do/ 提示無貨無貨do/ 檢測貨品存量有貨計算小于do/ 比較貨幣總值和貨物價值do/ 提示貨幣不足不小于確認(rèn)do/ 確認(rèn)顧客購買do/ 送出貨品,請求取貨有零錢退幣無零錢do/ 請求退幣不購買顯示do/ 提示交易完成17
(六)活動圖
1.投幣的活動圖
投幣確認(rèn)投幣完成2.選擇貨物的活動圖
請求選擇輸入貨物確認(rèn)選擇貨物ID 3.前端的活動圖
接受貨幣顯示可購顯示面值貨物過小顯示沒有該貨物接受飲料顯示沒有零錢找零錢退貨幣 19
貨幣記錄儀的活動圖
接受從前端來的錢幣判斷錢幣發(fā)送信息給分配儀發(fā)送貨物金額給前端返回錢幣計算零錢20 4.5.分配器的活動圖
接受貨幣啟示錄儀的信息發(fā)送貨物提示沒有該貨物 21
(七)組件圖
CustomerSodaMachineFrontRegisterDispenserDB_0
(八)配置圖
Clint數(shù)據(jù)庫
(九)數(shù)據(jù)模型圖