第一篇:2012EDA課設自動售貨機
基于VHDL自動售貨機的設計
摘要
基于FPGA的自動售貨機的設計,主要完成的任務是使用VHDl語言,在MAX+PLUSSII上完成電路的設計,程序的編譯,基本功能的完善、模擬整個自動售貨機的工作過程。電路的設計模塊分為幾個模塊:主控模塊、譯碼模塊、頂層模塊。各個模塊完成不同的任務,合在一起就構成了一個自動售貨機。在售貨機的設計過程中,使用VHDL語言,根據各個模塊的不同功能和它們之間的控制關系進行編寫。軟件模塊直接在MAX+PLUSSII上進行。進入21世紀,隨著人們對效率的追求,人工售貨已不能不滿足人們的需求。對此,自動售貨機的設計就用了很大的應用空間和市場。
基于FPGA的自動售貨機設計,采用軟件開發模塊,開發成本底,而且功能設計上有很大的靈活度,需要在軟件上進行簡單的修該就能實現不同的功能要求,能夠滿足不同的環境要求。
關鍵字:自動售貨機;FPGA;仿真;VHDL;MAX+PLUSSII
目錄
第一章 緒論......................................................................................4 第二章 自動售貨機的設計................................................................4 2.1 設計說明.................................................................................4 2.1.1 流程說明.......................................................................4 2.1.2各模塊說明....................................................................5 2.1.3各模塊的連接.................................................................6 2.2狀態之間的轉換......................................................................6 第三章 仿真時序圖.............................................................................7 3.1主控模塊的仿真......................................................................7 謝 辭..............................................................................................10 參考文獻............................................................................................11 附錄...................................................................................................11
第一章 緒論
隨著科技的發展和社會的進步,自動化商業機械有了越來越廣泛的的應用,自動售貨機作為自動化商業機械的代表被廣泛用于公共場所自動售貨,給人們的生活帶來了極大的方便。特別在發達的國家,自動售貨機已經十分普及,自動售貨機可售出各種成型包裝的小商品,各種袋裝,盒裝,軟瓶裝等小商品。因其無需專人值守而可以每天24 小時售貨,被稱為“無人小超市”。在我國,由于多種原因,自動售貨機的市場推廣緩慢,隨著商品市場的不斷繁榮,自動售貨機和自動服務設施必將逐步得到廣泛的應用。
本文設計研究自動售貨機的主要功能模塊,主要包括貨幣處理模塊、余額計算模塊、顯示模塊,延時和時控模塊。相應的功能有選擇貨物,多次購買,出貨找零。
本文是通過使用VHDL語言,基于KX GW48FPGA芯片,并通過使用MAXPLUSS II軟件進行程序設計,模擬仿真,功能驗證,以更好的來理解和掌握自動售貨機控制系統的工作原理和設計方法,以及學習和掌握基于EDA的電子產品設計方法,進一步加深對VHDL語言以及MAXPLUSS II 軟件、FPGA可編程芯片的認識與了解。
FPGA是現場可編程門陣列(Field programmable gates array)的英文簡稱。是有可編程邏輯模塊組成的數字集成電路(IC)。這些邏輯模塊之間用可配置的互聯資源。設計者可以對這些器件進行編程來完成各種各樣的任務
PLD/FPGA是近幾年集成電路中發展最快的產品。由于PLD性能的高速發展以及設計人員自身能力的提高,可編程邏輯器件供應商將進一步擴大可編程芯片的領地,將復雜的專用芯片擠向高端和超復雜應用。據IC Insights的數據顯示,PLD市場從1999年的29億美元增長到去年的56億美元,幾乎翻了一番。Matas預計這種高速增長局面以后很難出現,但可編程邏輯器件依然是集成電路中最具活力和前途的產業。
第二章 自動售貨機的設計
2.1 設計說明
本文設計的自動售貨機可銷售cola 和 pepsi兩種飲料:售貨機可識別1元和0.5元的兩種貨幣,在一次購買過程中,可購買一個或多個商品,系統會自動計算所需錢數和找零的錢數并自動找零。另外有3個發光二極管、6個LCD數碼管:兩個用來顯示所需金額,兩個用來顯示已付金額,兩個用來顯示找零數。
2.1.1 流程說明
本文設計的自動售貨機當通電時,表示一次銷售的開始。顧客選擇一種商品或多種商品后就進入投幣狀態。若不投幣,則自動返回初始狀態。投幣后,系統自動計算所投錢數。若投幣夠,則出貨并找零。若投幣不夠,如果顧客沒有繼續投幣,則退幣并回到初始狀態。本系統的投幣銷售流程圖如圖1-1所示:
圖1-1
2.1.2各模塊說明
本文設計的自動售貨機總體分三個模塊:總控模塊,二進制譯碼模塊、BCD碼譯碼模塊。
總控模塊:總控模塊是本系統最重要的模塊,該模塊大體有5個輸入端口和6個輸出端口。其輸入端口包括clk、coin1(投入一元貨幣)、coin5(投入0.5元貨幣)、cola(選擇cola)、pepsi(選擇pepsi),輸出端口有paid(已投入多少錢)、needed(還需多少錢)moneyout(找零)、success(燈亮表示交易成功)、failure(燈亮表示交易失?。?、showmoneyout(燈亮表示正在找零)。該模塊實現了本系統最重要的交易過程,包括選擇商品、投入貨幣,計算剩余金額,找零出貨等。
二進制譯碼模塊:該模塊有一個輸入端口和兩個輸出端口。輸入端口是一個8位的二進制數輸出端口bcd0、bcd1是兩個4位的BCD碼。該模塊的主要的功能是實現將主控模塊輸出的二進制數(paid、needed、moneyout)轉換成BCD碼,以便輸出到七段數碼管上顯示出來。該模塊的原理是將一個8位的二進制轉換成2個4位的BCD碼,分為高四位和低四位。
BCD碼譯碼模塊:該模塊有一個輸入端口和一個輸出端口
2.1.3各模塊的連接
各模塊的連接如圖1-2和1-3所示:
圖1-2 售貨機主控系統和譯碼器模塊圖
圖1-3 售貨機頂層模塊
2.2狀態之間的轉換
本文所設計的自動售貨機進程可以分為7個狀態:a,b,c,d,e,f,g.a為開始狀態,當有商品選擇鍵按下時即進入b狀態(投幣狀態)。當有貨幣投入,但投幣不夠時,即進入c狀態(繼續投幣),若投幣夠了,即進入d狀態(出貨找零),之后進入f狀態(延時)后返回a(狀態)。
圖1-3狀態流程圖
第三章 仿真時序圖
3.1主控模塊的仿真
上圖表示顧客選擇了pepsi飲料后,且投了2個一元的硬幣。Success為高電平,代表售貨機有飲料售出。且余額為0.7
上圖表示顧客選擇了pepsi飲料后,且投1個一元的硬幣和一個0.5元的硬幣。failure為高電平,代表售貨機無飲料售出。且余額為已投的金額,將錢退還給顧客。.上圖表示自動售貨機的譯碼系統,上圖表示將8位數字轉換成4位BCD碼。
2.2BCD碼譯碼的仿真
上圖表示自動售貨機的譯碼系統,上圖表示將8位數字轉換成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 分別顯示已付金額和還需要的金額數。
第四章 小結
自動售貨機系統的設計經過一個星期的設計已經全部完成,能按預期的效果進行多次購買、找零出貨、并且在數碼管上顯示出已投貨幣的金額、還需金額、找零,同時有指示燈提示交易成功、交易失敗、正在找零。在自動售貨機系統的3個模塊中,最主要的是主控模塊,其次的還有二進制譯碼模塊和BCD碼譯碼模塊。各模塊完成后,將它們組合成完整的自動售貨機系統。在設計過程中還需改進的是。本文所用的VHDL語言雖然語法規則與其他計算機高級語言如C語言在很多方面很類似,但它畢竟是硬件描述語言,其本質作用在于描述硬件,因而會受硬件環境的限制。因此,為了達到設計的預期效果,在代碼編寫前,應做到對硬件電路心中有數,不能一味的追求代碼的完美,而應該已實現的硬件電路的性能優劣為標準。
謝 辭
在這里我要感謝我的指導老師
參考文獻
(1)潘松,黃繼業編著.《EDA技術實用教程 》,2005,科學出版社
(2)徐志軍,徐光輝編著.《
CPLD/FPGA的開發與應用 》,電子工業出版社,2001.1(3)http://www.tmdps.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課設
EDA課程設計報告
課題名稱:智力競賽搶答器
班級:11電科2班
姓名:代維寬
學號:201114580207
同組人:聞仔遜
指導老師:賈默伊
任務書
一、用VHDL運用層次化設計方法設計一個小型數字系統
題目:智力競賽搶答器
二、說明書內容:
1.系統設計要求(功能)2.系統設計方案(包括頂層電路圖)3.VHDL源程序及仿真波形圖 4.課程設計注釋 5.設計解釋、說明 6.獨特之處
三、成績評定
1.設計內容及掌握情況
2.說明書。包括電子檔(各類文件的可執行性及說明書)和紙質
3.答辯情況
目錄
第一章:系統設計
1系統設計要求???????????????????1 2系統設計方案???????????????????2 第二章:VHDL原程序及仿真波形圖
1、搶答啟動模塊??????????????????3(1)按鍵識別子模塊?????????????????3(2)倒計時子模塊??????????????????5
2、選手搶答模塊??????????????????7(1)單個選手按鍵子模塊???????????????7(2)判斷搶答選手子模塊???????????????9
3、加減分模塊???????????????????11(1)組別判斷子模塊?????????????????11(2)加減及寄存器子模塊???????????????12(3)分數選擇輸出模塊????????????????15
4、顯示模塊????????????????????16
5、蜂鳴器模塊???????????????????18
第三章設計心得及總結
智力競賽搶答器
1系統設計要求
1.設計一智力競賽搶答器,可同時供8名選手參加比賽。2.給節目主持人設置一個控制開關,控制系統清零和搶答開始。
3.搶答器具有鎖存功能和顯示功能。搶答開始后,若有選手按動搶答按鈕,編號立即鎖存,并在LED數碼管上顯示選手編號,同時揚聲器響,禁止其他選手搶答。
4.搶答器具有搶答定時功能,時間由主持人確定。5.參賽選手在設定的時間內搶答有效,定時器停止工作。
6.如果定時時間到,無人搶答,本次搶答無效,系統報警,并封鎖輸入電路,禁止超時搶答,定時器顯示00。
7.為每組設計一個計分電路,0~999分,可加分,也可減分。
對于一個搶答器系統,可將其分為五個模塊:選手搶答模塊、搶答啟動模塊、加減分模塊、顯示模塊、蜂鳴器控制模塊。整體框圖如下:
圖一 總體框圖
其中搶答啟動模塊具有啟動搶答及啟動定時功能,輸出使能信號給選手識別模塊,以及搶答剩余時間給顯示模塊;選手識別模塊完成鎖存搶答信號的功能,并輸出選手號給顯示模塊;蜂鳴器對搶答成功以及超時鳴聲報警;顯示模塊對輸入的數據進行顯示。
2系統設計方案
智力競賽搶答器擬由單片CPLDFPGA來實現,經分析設計要求,擬定整個系統由五個單元組成,原理圖如下所示:
主要VHDL源程序
1、搶答啟動模塊
啟動模塊除了有啟動的功能外,還有啟動定時的功能。定時時間分為5秒和20秒兩種,使用兩個按鍵對應兩種限時搶答。
將本模塊再劃分為2個子模:一個模塊完成按鍵識別的功能,另一模塊完成倒計時功能。
1)按鍵識別子模塊
按鍵的識別即對輸入信號進行電平變化檢測,電平發生跳變就認為是鍵被按下。但VHDL程序中一個結構體內不能同時對兩個信號進行電平跳變的檢測,所以對本模塊的程序設計采用狀態機來實現,并使用統一的時鐘信號來掃描按鍵的電平狀態。模塊圖如下:
圖2 按鍵識別子模塊
對START5和START20兩個按鍵定義三種狀態,START5按下為ST1狀態,此時兩個按鍵“START5&START20”輸入電平為“01”;START20按下為ST2狀態,此時電平為“10”;兩個都沒按下為ST0狀態,此時電平為“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);
--置數信號
END ENTITY;ARCHITECTURE ONE OF START_5_20 IS SIGNAL DATAIN:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);
--定義狀態
SIGNAL C_ST:ST_TYPE;BEGIN
DATAIN<=START5&START20;
--兩個輸入信號放在一起判斷 BEGIN
IF RST='0' THEN
--復位 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,轉ST1狀態 S_FLAG<='1';
--置數信號有效 B<=“0000”;A<=“0101”;
--定時初值“05” ELSIF DATAIN=“10” THEN
C_ST<=ST2;
--輸入信號為10,轉ST1狀態
S_FLAG<='1';
--置數信號有效 B<=“0010”;A<=“0000”;
--定時初值“20”
ELSE C_ST<=ST0;--輸入信號為11,保持ST0狀態
END IF;
C_ST<=ST0;--防按鍵抖動,為11時才轉ST0狀態 S_FLAG<='0';
--置數信號無效
ELSE C_ST<=ST1;
--按鍵沒彈起,繼續等待
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的脈沖輸入,每來一個上升沿,進行一次減一運算,將結果輸出到TIMEB、TIMEA;置數信號LOAD輸入有效,讀入B、A端口的數據;輸入L_CR信號與選手識別模塊連接,當選手搶答成功后,L_CR信號為0,將倒計時清0.;若倒計時到,沒有選手搶答,則在SR1輸出1使揚聲器發聲。同時輸出信號給選手搶答模塊,禁止選手搶答。
圖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;
--指數信號有效,將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;
程序中,因為每次減一后的時間值需要保存,用于下次繼續減一,所以程序中使用了不完整的IF語句引入寄存器,用于保存每次減一后的時間值。P1、P0定義為變量而不是信號的原因是,變量的賦值是即時的,減一后可以馬上進行判斷;若定義為信號,不能即時進行判斷,并且減一操作后的賦值要經過一個δ延時,程序不好控制。
本模塊仿真波形如圖所示:
圖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
--調用元件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
--調用元件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;
--對應圖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、選手搶答模塊
在一個結構體中用8個進程同時對8個選手按鍵電平變化的監測是不可實現的,所以將本模塊劃分為兩個子模塊:單個選手按鍵模塊和判斷搶答選手模塊。最后將8個選手按鍵模塊和1個判斷搶答選手模塊連接起來,得到整個選手搶答模塊。
1)單個選手按鍵子模塊
按鍵輸入相當于該實體的時鐘信號,鍵被按下,等于來一個脈沖,輸出信號給判斷模塊進行選手號的判斷。只要有選手搶答成功,相關模塊會輸出信號使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)
--使用進程時刻監測RST、BUTTON信號 BEGIN
IF RST='0' THEN
PRESSED<='0';
--復位
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”;并發出信號使揚聲器發聲并控制8個按鍵子模塊使它們的LOCK信號有效,禁止其他選手搶答。本子模塊端口設置如圖所示。
圖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)
--輸入若發生變化,馬上啟動進程進行判斷
END CASE;END PROCESS;END ARCHITECTURE;9
圖10 判斷搶答選手模塊仿真波形
所以將以上兩個子模塊用元件例化語句連接起來,組成整個選手搶答模塊,如下圖所示
圖11 選手搶答模塊
實現程序為:
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
--調用元件BUTTON1聲明
PORT(LOCK,B,RST:IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END COMPONENT;COMPONENT IDENTIFIER IS
--調用元件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分按鍵。所以采用狀態機的方法來識別。將本模塊劃分為三個子模塊:組別判斷子模塊,加減及寄存器子模塊,分數選擇輸出子模塊。
1)組別判斷子模塊
該模塊要實現的功能是根據搶答成功的選手編號,判斷出該選手屬于哪組,并輸出使能信號允許該組的分數寄存器進行加減操作。如圖所示。
圖12 組別判斷模塊
實現程序為:
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)
--引入時鐘信號,協調各部分電路的工作
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”;
--其他情況則四個分數鎖存器都不工作
END CASE;END IF;
END PROCESS;
EN4<=E(3);EN3<=E(2);EN2<=E(1);EN1<=E(0);END ARCHITECTURE;程序仿真波形如圖所示:
圖13 組別判斷模塊仿真波形
2)加減及寄存器子模塊
本模塊的狀態機轉換過程為:將ADD和SUB信號并置,并檢測其電平變化。當ADD按下時,“ADD&SUB”的電平為“01”,彈起時恢復為“11”。當SUB按下時,“ADD&SUB”的電平為“10”,彈起時恢復為“11”。本模塊另外還需實現的功能是寄存功能。如下圖所示:
圖14 加減及寄存器模塊
實現程序如下: 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
--使能端有效,才對該分數寄存器進行操作
IF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0=>IF A=“01” THEN--A為“01”,說明ADD按下
C_ST<=ST1;
--下一狀態轉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;--下一狀態轉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繼續監視按鍵
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;
--操作后的分數輸出 END PROCESS;END ARCHITECTURE;
加減及寄存器模塊仿真波形圖如下:
圖15 加減及寄存器模塊仿真波形
圖中,加分按鍵ADD按下,輸出“010”;減分按鍵SUB按下,輸出回到“000”;又來兩個加分按鍵,輸出“020”。當EN信號無效時,有按鍵按下輸出不變。
3)分數選擇輸出模塊
四組分數要顯示出來,需要12個7段數碼管。若只顯示當前搶答成功選手的分數,則只需3個數碼管。所以設置一個分數選擇器,根據搶答成功的選手編號,選擇其分數輸出給顯示模塊顯示。
程序為:
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分數選擇輸出模塊仿真波形
4、顯示模塊
本模塊根據送來的數據:搶答成功選手號,選手分數、倒計時時間,將相應的字形碼送數碼管顯示。端口設置如圖所示。
圖17顯示模塊
圖18數碼管分配
顯示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為數碼管的位選信號,SG為數碼管的段選信號。另外圖18為數碼管的分配。左起第一位為選手編號,第3、4位為該選手的分數,最后兩位為倒計時。程序如下:
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;
--第三位顯示分數百位
WHEN “011”=>BT<=“00010000”;A<=SCORE1;
--第四位顯示分數十位
WHEN “100”=>BT<=“00001000”;A<=SCORE0;
--第五位顯示分數個位
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
--根據數據選擇相應的字形碼送數碼管顯示
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、蜂鳴器模塊
當SR1鳴聲信號來時,輸出CLK2(2KHz)驅動蜂鳴器發聲。CLK1用于掃描SR1的電平變化,SR1上升沿來到,允許CLK2輸出,并持續一段時間。模塊圖如下:
圖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用于定時,使蜂鳴器發聲持續
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';--蜂鳴器發聲,開始定時
ELSE C_ST<=ST0;A<='0';--否則等待
END IF;
P:=P-1;C_ST<=ST1;
A<='0';--定時到,蜂鳴器停止發聲 IF SR1='1' THEN
C_ST<=ST1;--等待系統復位 END IF;WHEN ST1=>IF P/=0 THEN
--定時還沒到,等待
ELSE
ELSE C_ST<=ST0;--復位
END IF;WHEN OTHERS=>C_ST<=ST0;A<='0';END CASE;END IF;S<=CLK2 AND A;
--只有A為1時,蜂鳴器才發聲 END PROCESS;END ARCHITECTURE;本模塊的仿真波形如圖所示。
圖21 蜂鳴器模塊仿真波形
3設計心得及總結
剛開始確定這個課題時,我首先確定了要用到哪些知識,主要是VHDL程序的設計,軟件的仿真。首先我查閱課本質料,找了不少關于這方面的程序,盡量的把它們都弄懂了。然后我確定了總體方案,把整體方案劃分成了幾個模塊,形成了一個整體的框架,然后各個擊破。有了總體的思路做指導我很快我就仿真調試好了搶答啟動模塊選手搶答模塊,這樣一來就增加了我的信心,一鼓作氣拿下了以后的模塊。當然任何事情都不會一帆風順,也遇到許多難題,不懂的地方我就請叫老師和同學,最后所有的模塊都被我一個一個的做出來了,我很高興,覺得我這兩天來的努力沒有白費。
此次課程設計不僅加強了我對專業知識的學習與了解,更有許多的感慨,主要有以下幾點:
(1)加強了我們動手、思考和解決問題的能力。我們很少能有這種機會來鍛煉自己,通過這次課程設計,起到了很好的鍛煉效果。
(2)我在做課程設計同時也是對課本知識的鞏固和加強,課本 的知識太多,平時課間的學習并不能很好的理解程序的功能,所以在這次課程設計過程中,我們了解了很多程序的功能,并且對于其在實際中的使用有了更多的認識。
(3)我們兩人一組相互合作,共同解決問題也認識到了團隊精神的重要性
最后,我要感謝老師和同學們給我的幫助,沒有你們的幫助,我是不能完成此次課程設計的,真的很感謝你們!
第三篇:基于EDA的自動售貨機系統的設計 開題報告
畢業設計開題報告
課題名稱:基于學院: 專業: EDA的自動售貨機系統的設計 電子電氣工程學院 電子信息工程
一 自動售貨機設計簡介
自動售貨是20世紀70年代在日本、歐美發展起來的一種全新的消費方式,自動售貨機又被稱為24小時營業的微型自助超市,它的售貨領域非常廣泛,是發達國家商品零售的一種主要方式。自動售貨機作為一種先進的消費方式,已經成為城市現代文明發達程度的重要標志,其新穎、時尚的購物方式,24小時營業的特點給人們生活帶來了便利,美化了城市環境,受到消費者的歡迎。但是在我國自動售貨機的普及還不及發達國家,主要原因是我國EDA技術的應用水平長期落后于發達國家。
本設計要實現自動售貨機的基本功能,如投幣處理、商品選擇、購貨撤銷、異常退幣、計算存貨等功能。利用Altera公司的開發軟件QUARTUS II平臺,采用Verilog hdl硬件描述語言編程的設計方法設計系統核心電路的硬件程序,與一般的軟件開發不同,Verilog hdl編程更需要熟悉一些底層的硬件知識,特別是數字邏輯電路的設計,因此Verilog hdl編程的方法、思路都要更多的與硬件電路聯系起來。完成系統各個功能模塊的硬件程序設計后,在軟件平臺上進行編譯和電路仿真,最后生成的目標文件下載到實驗臺內的FPGA芯片以實現該系統,并在實驗臺上對設計進行驗證。(1)自動售貨機主要功能
自動售貨機控制要求對機內商品信息進行識別,對投入的貨幣進行運算,并根據所投入的貨幣數值判斷是否能夠購買某種商品,并做出相應的反應。本文設計的自動售貨機控制系統主要可以實現投幣處理、計算投幣總額、輸出商品,輸出找零等功能,系統工作流程如圖1 所示。
(2)自動售貨機的幾個過程
在自動售貨機控制系統的工作過程中,可分為三個狀態:初始狀態、投幣狀態和找零狀態。在每一個狀態中完成特定的功能。
首先,在初始狀態下,自動售貨機通電,初始化機內商品信息(包括商品種類、每種商品的數量以及價格)。當顧客購買商品時,可根據自己需要通過按鍵選擇其中一種商品(且只限一種),然后進入下一狀態,即投幣狀態。
在投幣狀態下,當投入硬幣總額大于或等于商品價格,并且按確認購買鍵后將進入找零狀態;若按取消鍵,售貨機退出所投硬幣,返回到初始狀態。
投幣結束,若投入的硬幣等于或大于商品單價,且確認購買,則商品將送出送貨口,并計算輸出找零硬幣。出貨找零結束時表示一次自動售貨過程完成,重新返回到初始狀態,計算此時商品信息,并等待下一次售貨過程的到來。
(3)自動售貨機的基本模塊
自動售貨機控制系統的功能模塊邏輯上劃分為商品信息存儲模塊、商品選擇模塊、投幣處理模塊,找零模塊和顯示模塊。商品信息存儲模塊
該模塊的功能是將商品的單價、數量存儲到自動售貨機中,price、quantity 分別表示商品的單價與數量數據信號,item 為商品的種類。商品選擇模塊
該模塊功能是對商品進行選擇與購買。當對四種商品進行選擇時,由sel 的選擇信號的個數來表示所選擇的商品類型。get 為對商品進行確認購買的信號。投幣處理模塊
該模塊是對投入的硬幣進行處理的過程,輸出參數coin 為投幣數值計數器,以0.5 元為單位進行計算。整個模塊功能類似于計錢器,可準確計算投入的硬幣數,記錄并保存投入的總幣值。找零模塊
該模塊主要完成找零操作。通過計錢器coin 計算余額,然后輸出找零的控制信號act5、act10。顯示模塊
該模塊用來顯示錢數和商品數量。用于錢數顯示時,將計錢器coin轉換成BCD 碼,然后經譯碼器譯碼并顯示。用于商品數量顯示時,將計算得出的最終商品數量quantity 先轉換成BCD 碼,然后經譯碼器譯碼并顯示。
二
國內外EDA技術發展簡介
EDA概述
人類社會已進入到高度發達的信息化社會,信息社會的發展離不開電子產品的進步。現代電子產品在性能提高、復雜度增大的同時,價格卻一直呈下降趨勢,而且產品更新換代的步伐也越來越快,實現這種進步的主要原因就是生產制造技術和電子設計技術的發展。前者以微細加工技術為代表,目前已進展到深亞微米階段,可以在幾平方厘米的芯片上集成數千萬個晶體管;后者的核心就是EDA技術。EDA是指以計算機為工作平臺,融合了應用電子技術、計算機技術、智能化技術最新成果而研制成的電子CAD通用軟件包,主要能輔助進行三方面的設計工作:IC設計,電子電路設計以及PCB設計。沒有EDA技術的支持,想要完成上述超大規模集成電路的設計制造是不可想象的,反過來,生產制造技術的不斷進步又必將對EDA技術提出新的要求。2 EDA技術簡介
EDA(Electronic Design Automation),即電子設計自動化,是指利用計算機完成電子系統的設計。EDA技術是以計算機和微電子技術為先導的,匯集了計算機圖形學、拓撲學、邏輯學、微電子工藝與結構學和計算數學等多種計算機應用學科最新成果的先進技術。EDA技術以計算機為工具,代替人完成數字系統的邏輯綜合、布局布線和設計仿真等工作。設計人員只需要完成對系統功能的描述,就可以由計算機軟件進行處理,得到設計結果,而且修改設計如同修改軟件一樣方便,可以極大地提高設計效率。2.1 EDA技術的發展概況
從20世紀60年代中期開始,人們就不斷開發出各種計算機輔助設計工具來幫助設計人員進行電子系統的設計。電路理論和半導體工藝水平的提高,對EDA技術的發展起到了巨大的作用,使EDA作用范圍從PCB板設計延伸到電子線路和集成電路設計,直至整個系統的設計,也使IC芯片系統應用、電路制作和整個電子生產過程都集成在一個環境之中。根據電子設計技術的發展特征,EDA技術發展大致分為三個階段。(1)CAD階段
第一階段的特點是一些單獨的工具軟件,主要有PCB布線設計、電路模擬、邏輯模擬、以及版圖的繪制等,通過計算機的使用,從而將設計人員從大量繁重重復的計算和繪圖工作中解脫出來。20世紀80年代,隨著集成電路規模的增大,EDA技術有了較快的發展。許多軟件公司等進入市場,開始供應帶電路圖編輯工具和邏輯模擬工具的EDA軟件。這個時期的軟件產品主要針對產品開發,按照設計、分析、生產和測試等多個階段,不同階段分別使用不同的軟件包,每個軟件只能完成其中一項工作,通過順序循環使用這些軟件,可完成設計的全過程。(2)CAE階段
這個階段在集成電路與電子設計方法學以及設計工具集成化方面取得了許多成果。各種設計工具,如原理圖輸入、編譯與連接、邏輯模擬、測試碼生成、版圖自動布局已齊全。由于采用了統一數據管理技術,因而能夠將各個工具集成為一個CAE系統。按照設計方法學制定的設計流程,可以實現從設計輸入到版圖輸出的全程設計自動化。這個階段主要采用基于單元庫的半定制設計方法,采用門陣列與標準單元設計的各種ASIC得到了極大的發展,將集成電路工業推入了ASIC時代。(3)EDA階段
20世紀90年代以來,微電子技術以驚人的速度發展,其工藝水平達到了深亞微米級,此階段主要出現了以高級語言描述、系統仿真和綜合技術為特征的第三代EDA技術,不僅極大地提高了系統的設計效率,而且使設計人員擺脫了大量的輔助性及基礎性工作,將精力集中于創造性的方案與概念的構思上。它的特征為:第一,高層綜合的理論與方法取得較大進展,將EDA設計層次由RT級提高到了系統級(又稱行為級),并劃分為邏輯綜合和測試綜合。第二,采用硬件描述語言HDL來描述10萬門以上的設計,并形成了VHDL和VerilogHDL兩種標準硬件描述語言。第三,采用平面規劃技術對邏輯綜合和物理版圖設計進行聯合管理,作到在邏輯綜合早期設計階段就考慮到物理設計信息的影響。第四,可測性設計。第五,為帶有嵌入IP模塊ASIC設計提供軟硬件協同系統設計工具。2.2 EDA技術的基本特征
EDA技術代表了當今電子設計技術的最新發展方向,它的基本特征是:設計人員按照“自頂向下”的設計方法,對整個系統進行方案設計和功能劃分,系統的關鍵電路用一片或幾片專用集成電路(ASIC)實現,然后采用硬件描述語言(HDL)完成系統行為級設計,最后通過綜合器和適配器生成最終的目標器件[3]。這樣的設計方法被稱為高層次的電子設計方法。下面介紹與EDA基本特征有關的幾個概念。
(1)“自頂向下”的設計方法
10年前,電子設計的基本思路還是選擇標準集成電路“自底向上”(Bottom-Up)的構造出一個新的系統,這樣的設計方法就如同一磚一瓦地建造金字塔,不僅效率低、成本高而且還容易出錯。(2)高層次設計
高層次設計提供了一種“自頂向下”(Top-Down)的全新的設計方法,這種設計方法首先從系統設計入手,在頂層進行功能方框圖的劃分和結構設計。在方框圖一級進行仿真、糾錯,并用硬件描述語言對高層次的系統行為進行描述,在系統一級進行驗證。然后用綜合優化工具生成具體門電路的網表,其對應的物理實現級可以是印刷電路板或專用集成電路。由于設計的主要仿真和調試過程是在高層次上完成的,這不僅有利于早期發現結構設計上的錯誤,避免設計工作的浪費,而且也減少了邏輯功能仿真的工作量,提高了設計的一次成功率。(3)硬件描述語言 硬件描述語言(HDL-Hardware Description Language)是一種用于設計硬件電子系統的計算機語言,它用軟件編程的方式來描述電子系統的邏輯功能、電路結構和連接形式,與傳統的門級描述方式相比,它更適合大規模系統的設計。
本次設計使用VERILOG HDL語言,Verilog HDL語言最初是于1983年由Gateway Design Automation公司為其模擬器產品開發的硬件建模語言。那時它只是一種專用語言。由于他們的模擬、仿真器產品的廣泛使用,Verilog HDL 作為一種便于使用且實用的語言逐漸為眾多設計者所接受。在一次努力增加語言普及性的活動中,Verilog HDL語言于1990年被推向公眾領域。Open Verilog International(OVI)是促進Verilog發展的國際性組織。1992年,OVI決定致力于推廣Verilog OVI標準成為IEEE標準。這一努力最后獲得成功,Verilog 語言于1995年成為IEEE標準,稱為IEEE Std 1364-1995。完整的標準在Verilog硬件描述語言參考手冊中有詳細描述。
下面列出的是Verilog硬件描述語言的主要能力: * 基本邏輯門,例如and、or和nand等都內置在語言中。
* 用戶定義原語(UDP)創建的靈活性。用戶定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。
* 開關級基本結構模型,例如pmos 和nmos等也被內置在語言中。* 提供顯式語言結構指定設計中的端口到端口的時延及路徑時延和設計的時序檢查。
* 可采用三種不同方式或混合方式對設計建模。這些方式包括:行為描述方式—使用過程化結構建模;數據流方式—使用連續賦值語句方式建模;結構化方式—使用門和模塊實例語句描述建模。
* Verilog HDL中有兩類數據類型:線網數據類型和寄存器數據類型。線網類型表示構件間的物理連線,而寄存器類型表示抽象的數據存儲元件。
* 能夠描述層次設計,可使用模塊實例結構描述任何層次。
* 設計的規模可以是任意的;語言不對設計的規模(大?。┦┘尤魏蜗拗?。* Verilog HDL不再是某些公司的專有語言而是IEEE標準。
* 人和機器都可閱讀Verilog 語言,因此它可作為EDA的工具和設計者之間的交互語言。
* Verilog HDL語言的描述能力能夠通過使用編程語言接口(PLI)機制進一步擴展。PLI是允許外部函數訪問Verilog 模塊內信息、允許設計者與模擬器交互的例程集合。
* 設計能夠在多個層次上加以描述,從開關級、門級、寄存器傳送級(RTL)到算法級,包括進程和隊列級。
* 能夠使用內置開關級原語在開關級對設計完整建模。* 同一語言可用于生成模擬激勵和指定測試的驗證約束條件,例如輸入值的指定。
* Verilog HDL 能夠監控模擬驗證的執行,即模擬驗證執行過程中設計的值能夠被監控和顯示。這些值也能夠用于與期望值比較,在不匹配的情況下,打印報告消息。
* 在行為級描述中,Verilog HDL不僅能夠在RTL級上進行設計描述,而且能夠在體系結構級描述及其算法級行為上進行設計描述。
* 能夠使用門和模塊實例化語句在結構級進行結構描述。
* Verilog HDL 的混合方式建模能力,即在一個設計中每個模塊均可以在不同設計層次上建模。
* Verilog HDL 還具有內置邏輯函數,例如&(按位與)和|(按位或)。* 對高級編程語言結構,例如條件語句、情況語句和循環語句,語言中都可以使用。
* 可以顯式地對并發和定時進行建模。* 提供強有力的文件讀寫能力。
* 語言在特定情況下是非確定性的,即在不同的模擬器上模型可以產生不同的結果;例如,事件隊列上的事件順序在標準中沒有定義。
三
本次畢業設計主要內容 四
進度安排
五 主要參考文獻
第四篇:軟件工程_自動售貨機
自動售貨機
信息1101 施敏宇 18號
下面是自動售貨機系統的需求陳述,試建立它的對象模型、動態模型和功能模型: 自動售貨機系統是一種無人售貨系統。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、五分幣、二分幣、一分幣。其他貨幣被認為是假幣。機器拒絕接受假幣,并將其從退幣孔退出。當機器接受了有效的硬幣之后,就把硬幣送入硬幣儲藏器中。顧客支付的貨幣根據硬幣的面值進行累加。自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當的零錢返還到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送回到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的貨幣將從退幣孔中退出。
面向對象的分析
面向對象分析方法的核心思想是利用面向對象概念和方法為軟件需求構造一組相關模型(對象模型,動態模型和功能模型),來獲得關于問題域的全面認識。
這三個模型從不同的角度對系統進行描述,其中:對象模型描述了系統靜態的、結構化的數據性質;動態模型描述了系統順勢的、行為化的控制性質;功能模型描述了變化的系統的功能性質。這三個模型都涉及到數據??刂坪筒僮鞯裙餐母拍?,但每種模型描述的側重有所不同。它們各自以不同側面反應系統的實質內容,綜合起來則全面反映了目標系統的需求。
對象模型是三個模型中最關鍵的。它的作用是描述系統的靜態結構,包括構成系統的類和對象、它們的屬性和操作以及它們之間的聯系。UML中類圖適用于建立對象模型,狀態圖適用于建立動態模型。每個類的動態行為用一張狀態圖來表示,各個類的狀態圖通過事件合并起來,構成系統的動態模型。也就是說,動態模型是基于事件共享而相互關聯的一組狀態圖的集合。建立對象模型大體上按照下列順序進行:尋找問題域內的對象,識別出對象間的關系、定義屬性和服務。事實上,分析工作不可能嚴格按照預定順序進行,系統的模型往往需要反復構造多遍才能建成。
注:對象硬幣計算器和對象硬幣檢測器可以作為對象自動售貨器的一部分,它們的屬性作為自動售貨器的屬性。
建立動態模型
對于僅存數靜態數據的系統來說,動態模型并沒有什么實際意義。然而在開發交互式系統時,動態模型卻起著很重要的作用。如果收集輸入信息是目標系統的一項主要工作,則在開發這類應用系統時建立正確的動態模型是至關重要的。
建立動態模型的步驟:
(1)編寫典型的對話腳本;
(2)從腳本中提取出事件,聯系該事件與其目標對象;
(3)組織事件的順序和狀態(采用狀態圖描繪);
(4)比較各個不同對象的狀態圖,檢查對象之間的一致性,確保事件之間的匹配。
提示投幣投幣購買提示是假幣,退幣假幣檢查硬幣否真幣存儲硬幣,計算貨幣總值確認投完硬幣是請求選擇貨物選擇貨物檢測貨物存量無貨提示無貨計算比較貨幣總值和貨物價格確認確認顧客購買小于提示貨物不足,確認顧客購買不購買送出貨物,請求取貨不購買退幣請求取退幣提示顯示交易完畢
功能模型
功能模型描述了系統的所有計算。功能模型指出發生了什么,動態模型確定什么時候發生,而對象模型確定發生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數據流圖組成。數據流圖用來表示從源對象到目標對象的數據值的流向,它不包含控制信息,控制信息在動態模型中表示,同時數據流圖也不表示對象中值的組織,值的組織在對象模型中表示。
數據流圖中包含有處理、數據流、動作對象和數據存儲對象。
1.處理
數據流圖中的處理用來改變數據值。最低層處理是純粹的函數,一張完整的數據流圖是一個高層處理。
2.數據流
數據流圖中的數據流將對象的輸出與處理、處理與對象的輸入、處理與處理聯系起來。在一個計算機中,用數據流來表示一中間數據值,數據流不能改變數據值。
3.動作對象
動作對象是一種主動對象,它通過生成或者使用數據值來驅動數據流圖。
4.數據存儲對象
數據流圖中的數據存儲是被動對象,它用來存儲數據。它與動作對象不一樣,數據存儲本身不產生任何操作,它只響應存儲和訪問的要求。
有效幣特征假幣退假幣假幣檢查硬幣有效幣硬幣送入硬幣儲藏器計算面值貨物價格有貨貨幣總值硬幣顧客投幣顧客不足等待顧客投幣顧客取消購買,退幣顧客判斷貨幣是否足夠足夠選擇貨物判斷分配器貨物存量無貨分配貨物,找零貨物,硬幣硬幣退幣
第五篇:軟件工程課程設計(自動售貨機)
《軟件工程》課程設計報告
一、問題描述
(一)關于自動售貨機
自動售貨機像磁卡電話、銀行柜員機一樣,以方便、新穎、文明、晝夜服務等特點,成為發達國家不可缺少的便民配套設施。如今的自動售貨機可以為顧客提供多種服務。顧客可以根據自己的需要選擇商品并投入錢幣,售貨機接收錢幣,售出商品。
(二)自動售貨機的設計
自動售貨機系統是一種無人售貨系統。售貨時,顧客把硬幣投入機器的投幣口中,機器檢查硬幣的大小、重量、厚度及邊緣類型。有效的硬幣是一元幣、五角幣、一角幣、五分幣和一分幣。其它貨幣都被認為是假幣。機器拒收假幣,并將其從退幣孔退出。當機器接收了有效的硬幣之后,將之送入硬幣儲藏器。顧客支付的貨幣根據硬幣的面值進行累加。
自動售貨機裝有貨物分配器,每個分配器中包含0 個或多個價格相同的貨物。顧客通過選擇貨物分配器來選擇貨物。如果有貨,且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將找零返回到退幣孔。如果無貨,則和顧客支付的貨幣值相等的硬幣將被送到退幣孔。如果顧客支付的貨幣值小于所選貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,他投放進的硬幣將從退幣孔中退出。
二、需求分析
(一)UML自動售貨機系統功能需求:
自動售貨機系統是一種無一元等3個硬幣投幣口。顧客確認購貨后,售貨機可根據硬幣的面值進行累加。
自動售貨機裝有貨物分配器。每個貨物分配器中包含零個或多個價格相同的貨物。顧客通過 1 選擇貨物分配器來選擇貨物。如果貨物分配器中有貨物,而且顧客支付的貨幣值不小于該貨物的價格,貨物將被分配到貨物傳送孔送給顧客,并將適當的零錢返回到退幣孔。如果分配器是空的,則和顧客支付的貨幣值相等的硬幣將被送加到退幣孔。如果顧客支付的貨幣值少于所選擇的分配器中的貨物的價格,機器將等待顧客投進更多的貨幣。如果顧客決定不買所選擇的貨物,將所投硬幣從退幣孔退出。
(二)UML自動售貨機系統控制要求:
根據售貨機自動控制系統的流程可以知道自動售貨機的主要系統包括:計幣系統、比較系統、選擇系統、飲料供應系統、退幣系統和報警系統。
1.計幣系統:
當有顧額色買飲料時,投入的錢幣經過感應器,感應器記憶投幣的個數關且傳送到檢測系統(即電子天平)和計幣系統。只有當電子天平測量的重量少于誤差值時,允許計幣系統進行疊加錢幣,疊加的錢幣數據存放在數據寄存器中。如果不正確時,認為是假幣。既定出投幣,既定出系統,等待新顧客。
2.比較系統:
投入完畢后,系統會把錢幣數據和可以購買飲料的價格進行區間比較,當投入的錢幣小于2元時,指示燈亮,顯示投入的錢幣不足。此時可以再投幣或選擇退幣。當投稿的錢幣在2~3元之間時,汔水選擇指示燈長亮。當大于3元時,汔水和咖啡的指示燈同時長亮。此時可以選擇飲料或選擇退幣。
3.選擇系統:
比較電路完成后選擇電路指示燈是長亮的,當按下汽水或咖啡選擇時,相應的選擇指示燈由長亮轉為以1秒為周期閃爍。當飲料供應完畢時,閃爍同時停止。
4.飲料供應系統:
當按下選擇按鈕時,相應的電磁閥(Y4或Y6)和電機(Y3或Y5)同時啟動。在飲料輸出的同時,減去相應的購買錢幣數。當飲料輸出達到8秒時,電磁閥首先關斷,小電機繼續工作0.5秒后停機。此小電機的作用是:在輸出飲料時,加快輸出。在電磁閥關斷時,給電磁閥加壓作用,加速電磁閥的關斷。(注:由于該售貨機是長期使用,電磁閥使用過多時,返回彈力減少,不能完全關斷會出現漏飲料的現象。此時電機Y3和Y5延長工作0.5秒起到電磁閥加壓的作用,使電磁閥可以完好的關斷。)
5.退幣系統:
當顧客購完飲料后,多余的錢幣只要按下退幣按鈕。系統就會把數據寄存器D2內的錢幣數首先除以10得到整數部分,是1元錢需要退回的數量,存放在D10里。余數存放在D11里。再用D11除以5得到的整數部分是5角錢需要退回的數量,存放在D12里。余數存放在D13里。最后D13里面的數值,就是1角錢需要退回的數量。在選擇退幣的同時啟動3個退幣電機。3個感應器開始計數,當感應器記錄的個數等于數據寄存器退回的幣數時,退幣電機停止運轉。
6.報警系統:
報警系統如果是非故障報警,只要通過網絡通知送液車或者送幣車即可。但是如果是故障報警則需要通知維修人員到現聲進行維修。同時停止服務,避免造成顧客的損失。
(三)業務流程圖
錢幣記錄儀對錢幣前端接受顧客投的進行識別幣判斷退出錢幣發送信息到分配器判斷沒有貨物時發送信息到前端發送貨物4
(四)數據流程圖
錢幣錢幣記錄儀對分配器反錢幣錢幣進行計算與貨物價格進貨物發放行比較取走零錢與購買的貨物
三、各種UML圖型及其分析
(一)用例圖
1.顧客的用例圖
inputCoinchooseSodaCustomer
2.自動售貨機的用例圖
RegisterDispenserFrontSodaMachine
(二)類圖
(三)序列圖
理想狀態(不找零錢)的序列圖
: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
(四)協作圖
1.理想狀態的協作圖
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.沒有貨物的協作圖
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.需找零錢的協作圖
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.沒有零錢找給顧客的協作圖
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()
完整的協作圖
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.(五)狀態圖
提示投幣do/ 請求投幣do/ 提示是假幣假幣do/ 檢查硬幣真幣否購買do/ 存儲硬幣,計算貨幣總值do/ 確認投完硬幣有do/ 請求選擇商品選擇貨品do/ 提示無貨無貨do/ 檢測貨品存量有貨計算小于do/ 比較貨幣總值和貨物價值do/ 提示貨幣不足不小于確認do/ 確認顧客購買do/ 送出貨品,請求取貨有零錢退幣無零錢do/ 請求退幣不購買顯示do/ 提示交易完成17
(六)活動圖
1.投幣的活動圖
投幣確認投幣完成2.選擇貨物的活動圖
請求選擇輸入貨物確認選擇貨物ID 3.前端的活動圖
接受貨幣顯示可購顯示面值貨物過小顯示沒有該貨物接受飲料顯示沒有零錢找零錢退貨幣 19
貨幣記錄儀的活動圖
接受從前端來的錢幣判斷錢幣發送信息給分配儀發送貨物金額給前端返回錢幣計算零錢20 4.5.分配器的活動圖
接受貨幣啟示錄儀的信息發送貨物提示沒有該貨物 21
(七)組件圖
CustomerSodaMachineFrontRegisterDispenserDB_0
(八)配置圖
Clint數據庫
(九)數據模型圖