劉明揚, 孫丹丹, 魏學軍
(北京郵電大學 電子工程學院, 北京 100876)
隨著人們生活的智能化,自動售貨機可謂是應運而生。相對于傳統的購物模式,自動售貨機體現出方便等特點,極大地滿足了人們快捷購物的需求。然而,目前市場上一些自動售貨機對于貨幣的處理及購物的提示有著不同程度的缺陷。本設計通過使用EDA技術對各種功能進行優化,運用VHDL語言,簡化系統,提高性能,使顧客在購物過程中更加方便[1-2]。
首先從實際使用出發,分析售貨機的功能。從兩方面來考慮:① 顧客有投幣,選擇物品,追加投幣,退錢等操作;② 對于顧客的操作,機器有相應的反應,并有圖像顯示等功能。于是根據實際情況我們提出以下的設想。[3]
(1) 顧客使用售貨機前有待機動畫,表示售貨機正常運行。以后的任何操作都有相應的圖像對應。
(2) 假設有三種商品,售貨機只接受三種面值的貨幣。當顧客投入1元、5元或10元時,點陣開始循環顯示甲、乙、丙三種商品,對應的數碼管同步顯示三種商品的數量,且若投幣成功,有LED提示投錢成功。
(3) 顧客購買物品時,若購買成功則有LED提示,且數碼管顯示剩余的錢數,整個過程可以隨時加錢(即重復過程(2))[4]。
(4) 整個過程中可以隨時按下退出鍵,系統將退出投入的錢數,整個系統將回到初始狀態。

本設計采用Altera公司的MAXII為開發器件,主頻50 MHz,以QuartusII作為開發軟件,整體支持器件設計,原理圖,VHDL,波形仿真,時間分析,編程下載。以上功能為設計提供了技術支持[5]。
整體分為6個模塊,分別為售貨機主程序、分頻器、轉換器、延遲器、數碼管和點陣[7]。售貨機主程序處理投錢的金額及相應物品的出納。分頻器采用串行分頻,將主頻50 MHz分為三種頻率供其他模塊使用。轉換器用以循環顯示商品數量,并將點陣和數碼管顯示同步[8]。延遲器用于將主程序輸出的信號適當延時,便于LED顯示[9]。數碼管用來顯示錢數及商品庫存、投錢總數、退錢總數等[10]。點陣在顧客操作時會呈現相應的動畫圖像,并提示顧客以后操作[11]。
本設計以QuartusII作為編程軟件,其具有數字邏輯設計的全部特性,可利用原理圖、結構框圖、VerilogHDL、AHDL和VHDL完成電路描述,并將其保存為設計實體文件。此次選取VHDL作為編程語言是因為其較強的行為描述能力,為系統的設計提供了極大的便利,而豐富的仿真語句和庫函數也為設計奠定了堅實的基礎。[12]

圖2 自動售貨機的頂層文件
本次設計的關鍵在于對狀態機的運用,使得顧客和機器能達到比較理想的交互狀態[13]。信息處理上主要依靠主程序對于錢數和商品的快速處理和數碼管中對于數字顯示的處理,由于整體設計上點陣和數碼管有多處同步,分頻器的串行分頻也顯得十分重要。
(1) 設計中在信息的顯示方面采用了狀態機的編程思想,集中體現在數碼管和點陣顯示的控制時鐘當中,下面定義了三個狀態(d0,d1,d2), 三個狀態分別用于在一個數碼管上顯示三種商品的庫存量:
Typestate_type is(d0,d1,d2);
Signalstate:state_type;
case state is
when d0=>t<="00";state<=d1;
when d1=>t<="01";state<=d2;
when d2=>t<="10";state<=d0
(2) 錢數處理(以投入5元為例)。
If (a1true=’0’ and a2 true=’1’ and a3ture=’0’) then
m:=m+5+n;n:=0;s1<='1';s2<='0';s3<='0';s5<='0';s6<='0';s7<='0';
購買3元的商品:
if(m>5)then m:=m-3;x:=x-1;s1<='0';s2<='1';s3<='0';s4<='0';s5<='1';s6<='0';s7<='0';
(3) 數碼管對數據的處理中將個位和十位分開,用求余的方法進行計算:
x1<=change mod 10;
x2<=(change-(change mod 10))/10;
x1,x2分別為錢數的個位和十位
(4) 延遲器運用狀態機定義了六個狀態使得LED顯示時間足夠長,例如將主程序中輸出的“s1=1”這個信號延長6倍時間:
Typestate_typeis(a0,a1,a2,a3,a4,a5,a6)
signalstate1:state_type1;
if (clk'event and clk='1')then
case state1 is
When a0=>if(s1='1') then
state1<=a1;p1<='1';end if;
when a1=>state1<=a2;p1<='1';
when a2=>state1<=a3;p1<='1';
when a3=>state1<=a4;p1<='1';
when a4=>state1<=a5;p1<='1';
when a5=>state1<=a6;p1<='1';
when a6=>state1<=a0;p1<='0';
end case;
主動能及部分仿真波形見圖1、2。其中:a1為1元,a2為5元,a3為10元;b1為3元商品,b2為8元商品,b3為12元商品,c1,c2,c3為三種商品的庫存,money為投入錢數,change為找零錢數。s1:投幣成功(1) s2:購買成功(1) s3:運行(0),退出 (1) s4:有貨(0),缺貨(1)。① 代表投錢成功后錢數增加。② 代表購買成功后商品數量減少。③ 代表錢數不夠購買商品時,顯示找零。④ 代表錢數不夠時可以隨時投入錢幣。⑤ 代表購買商品成功且剩余金額小于3元的情況(此處有13元,購買12元商品)。⑥ 代表商品被購買完即缺貨。⑦ 代表缺貨提示。

圖3 主功能仿真波形

圖4 部分功能仿真波形
(1) 由于數碼管需要顯示顧客投入和找零的錢數及商品庫存,所以將顯示分為三個部分,且三部分相互關聯。考慮到節省硬件資源,數碼管采用的是計算模式來顯示數據,即通過將錢數的十位個位提出,分開計算并顯示。相比列舉法,運算速度大大提高[14]。
(2) 為方便顧客購物,點陣顯示的圖像能清晰地告訴顧客機器是否運轉正常以及操作是否成功。例如售貨機正常運行時有待機畫面,以及顧客的任何操作過后的相應動畫提示。與此同時,用延遲器延長了LED顯示的時間,使顧客更清晰地看到操作是否成功。
(3) 考慮到售貨機的實際運行,男女顧客按鍵力道大小及壓鍵時間的不同,主程序里加入了防抖程序,切實滿足了顧客使用售貨機購物時的實際需求。
本文詳細介紹了運用單片FPGA芯片進行自動售貨機設計的方法,通過對程序的改進優化,充分利用VHDL對FPGA的可編程性,使售貨機具有基本的功能[15]。設計從實際使用出發,以簡便高效為原則,在滿足基本的人機交互的同時,提高程序的運行效率,使得該系統下的自動售貨機功能齊備,能滿足市場的實際需要。而且對于點陣圖像的顯示還可以有各種個性化的設計,增加了靈活性,本設計中附加的上貨功能也為管理者提供了方便[16]。
[1] 付夢婷,付永慶. 基于CPLD的88鍵電子琴的設計與實現[J].電子器件,2013,36(11):737-742.
FU Meng-ting, FU Yong-qing. CPLD-based design and implementation of 88 key keyboard [J]. Electronics, 2013,36 (11):737-742.
[2] 趙 剛,何志敏,陳利學.基于FPGA 的EDA 綜合實驗系統設計[J].微計算機信息,2012,28(1):49-51.
ZHAO Gang, HE Zhi-min, CHEN Li-xue.EDA comprehensive experimental system based on FPGA design[J]. Micro Computer Information, 2012,28 (1):49-51.
[3] 冼立勤,高獻偉. MOS管短溝道效應及其行為建模[J].實驗室研究與探索,2007,26(10):14-16.
XIAN Li-qin, GAO Xian-wei. Short channel effect MOS tube and behavioral modeling[J].Research and Exploration in Laboratory, 2007,26(10): 14-16.
[4] 韓 進. EDA技術在“數字邏輯”教學實踐中的應用[J].實驗室研究與探索,2005,24(5):40-42.
HAN Jin. EDA technology in the "Digital Logic" Teaching Practice[J]. Research and Exploration in Laboratory, 2005,24(5): 40-42.
[5] 王曉峰.可編程邏輯器件及硬件描述語言的EDA方法[J].長春大學學報,2005,15(4):14-16.
WANG Xiao-feng. EDA methods of language programmable logic devices and hardware description[J]. Changchun University of Technology, 2005,15 (4):14-16.
[6] 韓延義,李 航,李 岳. 基于FPGA的音頻芯片輸出控制設計[J].實驗室研究與探索,2013,32(5): 94-96,167
HAN Yan-yi, LI Hang, LI Yue. FPGA-based audio chip output control design [J]. Research and Exploration in Laboratory, 2013,32(5): 94-96,167
[7] 王戎丞,陳可中,明 鑫.基于VHDL的數字頻率計的設計與實現[J].現代電子技術,2005,28(15):102-104.
WANGg Rong-cheng, CHEN Ke-zhong, MING Xin. VHDL-based design and implementation of digital frequency meter [J]. Modern electronic technology, 2005,28 (15):102-104.
[8] 吳 濤,徐春燕,彭 宏. 基于FPGA的信號與系統實驗箱信號源設計[J].實驗室研究與探索,2009,28(6):44-47.
WU Tao, XU Chun-yan, PENG Hong. Based Signals and Systems Laboratory Box source of FPGA[J]. Research and Exploration in Laboratory, 2009,28(6): 44-47.
[9] 張友木.基于VHDL語言的幾種消抖電路的設計[J].山西電子技術,2011(1):61-63
ZHANGg You-mu. Several debounce circuit design based on VHDL[J],Shanxi Electronic Technology, 2011(1) :61-63.
[10] Galileo Open Service, Signal In Space Interface Control Document (OS SIS ICD) Draft0[S]. 23/05/2006:1-3.
伽利略開放服務,信號在空間接口控制文件(OS SIS ICD)Draft0[S]. 23/05/2006:1-3.
[11] 劉家慶.基于VHDL的2FSK調制解調器設計[J].電子技術,2010(11):73-75.
LIU Jia-qing. 2FSK modem design base onVHDL[J]. Electronics,2010(11):73-75.
[12] 楊文霞,孫青林.數字邏輯電路[M].北京:北京科學出版社,2007:79.
[13] 牟洪江,楊 虹,王 玲.基于VHDL語言的數字頻率計的設計[J].電子世界,2013,(19):163-164.
MOU Hong-jiang, YANG Hong, WANG Ling. Digital frequency meter VHDL-based design language[J]. Electronic World, 2013, (19) :163-164.
[14] 徐 偉,劉建成,行鴻彥. 分類并結合專業特色的電子綜合課程設計[J].實驗技術與管理:2011,28(10):141-143.
XU Wei, LIU Jian-cheng, HANG Hong-yan. Classification combined with professional features of electronic integrated curriculum design [J]. Experimental Technology and Management: 2011, 28 (10):141-143.
[15] 林明權.VHDL數字控制系統設計范例[M].北京:電子工業出版社,2003.