劉錫鋒,朱劉寧
(1.江蘇信息職業(yè)技術(shù)學(xué)院 江蘇 無(wú)錫 214153;2.馬鞍山職業(yè)技術(shù)學(xué)院 安徽 馬鞍山 243031)
隨著集成電路產(chǎn)業(yè)的迅速發(fā)展,集成電路芯片的規(guī)模越來(lái)越大,集成度越來(lái)越高,一塊芯片上所實(shí)現(xiàn)的功能也越來(lái)越多,集成的元器件也動(dòng)輒百萬(wàn)、千萬(wàn)計(jì)。對(duì)于這種大規(guī)模、超大規(guī)模集成電路的芯片設(shè)計(jì),特別是在數(shù)字集成電路方面,采用計(jì)算機(jī)輔助設(shè)計(jì)和電子設(shè)計(jì)的智能自動(dòng)化來(lái)進(jìn)行集成電路設(shè)計(jì)已經(jīng)是一種趨勢(shì)[1]。VHDL、Verilog等硬件描述語(yǔ)言近年由于其在芯片設(shè)計(jì)自動(dòng)化方面出色的表現(xiàn)被越來(lái)越多地應(yīng)用在超大規(guī)模集成電路設(shè)計(jì)領(lǐng)域。用VHDL硬件描述語(yǔ)言進(jìn)行芯片設(shè)計(jì)并不涉及底層電路具體電路結(jié)構(gòu),而只需要給出各單元功能描述和單元電路之間的連接關(guān)系,這種設(shè)計(jì)方法一方面使得設(shè)計(jì)者能夠?qū)W⒂陧攲咏Y(jié)構(gòu)設(shè)計(jì)從而使芯片整體性能更優(yōu),另一方面由于通過(guò)語(yǔ)句描述來(lái)自動(dòng)實(shí)現(xiàn)具體電路結(jié)構(gòu)節(jié)省了電路設(shè)計(jì)的時(shí)間提高了設(shè)計(jì)效率[4]。同時(shí)由于生成的電路是自動(dòng)生成的標(biāo)準(zhǔn)化電路,也提高了電路設(shè)計(jì)的正確性。
自動(dòng)售貨機(jī)是常用的街頭自動(dòng)販賣(mài)設(shè)備,它的核心運(yùn)作部件是一塊集成電路控制芯片,由這塊芯片來(lái)控制、判斷商品的選擇、買(mǎi)賣(mài),貨幣辨別、交易和找零等工作。以往的自動(dòng)售貨機(jī)芯片對(duì)售賣(mài)商品的類型選擇偏少,對(duì)投入貨幣的限制也較多,很多自動(dòng)售貨機(jī)僅僅能允許投入1元硬幣。此外受芯片設(shè)計(jì)限制,相應(yīng)的找零環(huán)節(jié)也不完善,有的甚至沒(méi)有,這些問(wèn)題對(duì)商品的售賣(mài)交易和商品價(jià)格的合理定位產(chǎn)生了一定的影響[5]。在做了需求分析的基礎(chǔ)上,提出并設(shè)計(jì)了一種基于VHDL實(shí)現(xiàn)的自動(dòng)售貨機(jī)芯片設(shè)計(jì)。該芯片能夠完成多種商品的售賣(mài),允許多種紙質(zhì)和硬幣現(xiàn)金使用,能夠完成多種貨幣的找零,對(duì)價(jià)格控制更加合理精確,各種售賣(mài)中可能發(fā)生的情況也考慮周全,并做了相應(yīng)設(shè)計(jì)[6]。
該售貨機(jī)的主要要求是:投幣可投10元、5元紙幣和1元硬幣。出售百事可樂(lè)、話梅、瓜子三種商品,可樂(lè)售價(jià)2元每瓶,話梅售價(jià)1元每包,瓜子2元5角(投幣種類數(shù)目和出售商品數(shù)目可繼續(xù)在程序中添加,這里只各以3種為例)。
整個(gè)程序總的輸入有:投幣(3輸入端)、選擇商品(3輸入端)、時(shí)鐘、執(zhí)行按鍵一共8端輸入。
總的輸出有:總投入貨幣顯示、選擇商品現(xiàn)實(shí)(3端)、退幣(1元硬幣、5角硬幣兩端)、商品輸出(三端)一共9端。
根據(jù)以上要求,整體設(shè)計(jì)共由6個(gè)子模塊(6進(jìn)程)和一個(gè)與非門(mén)構(gòu)成。總體設(shè)計(jì)如圖1所示。
圖1 設(shè)計(jì)總體結(jié)構(gòu)圖Fig.1 Structure diagram of the automat
1)貨幣投入和計(jì)算進(jìn)程:該模塊允許投入10元5元紙幣,紙幣上限為1,超過(guò)部分不計(jì),(此外可以設(shè)定超過(guò)1給出1個(gè)訊號(hào)來(lái)關(guān)閉投幣口來(lái)防止繼續(xù)投幣,本程序中未給出此訊號(hào)),1元硬幣的上限為5個(gè),超出部分不計(jì)。經(jīng)過(guò)該模塊處理,輸出投入總貨幣數(shù)(以5角為一個(gè)單位)到下一進(jìn)程。該模塊有一個(gè)reset訊號(hào),如reset為高電平則所有輸入輸出清零。以下為該子模塊部分程序(總體程序較長(zhǎng),由于篇幅原因,下面只給出第一第二子程序的部分主要程序,如需要全部程序可向作者咨詢)。
cashin:process(cash10,cash5,coin1,feedback)
variable c10t,c5t,c1t:integer range 0 to 255;
variable total_cash:integer range 0 to 255;
begin
if(cash10'event and cash10='1')then
if feedback='0'then
c10t:=c10t+20;
if(c10t>=20)then
c10t:=20;
end if;
else
c10t:=0;
end if;
end if;
。。。
2)物品選擇進(jìn)程:該模塊輸入部分為3個(gè)按鈕,每按一次相應(yīng)商品的按鈕即選擇商品數(shù)目加一,每種商品選擇上限都是5,超過(guò)5將按5計(jì)算。輸出7個(gè)訊號(hào),3種商品各有1個(gè)顯示輸出,以顯示給顧客選擇的商品總數(shù),3條按5角為一單位的商品訊號(hào)輸出給物品送出進(jìn)程使用。還有1個(gè)選購(gòu)商品總價(jià)值輸出。此模塊也有1個(gè)reset訊號(hào),如reset為高電平則所有輸入輸出清零。
itemselect:process(judge,pesi,plum,mseed)
variable pnumber,lnumber,mnumber:integer range 0 to 255;
variable pnumber2,lnumber2,mnumber2:integer range 0 to 255;
variable pc,lc,mc:integer range 0 to 255;
variable tv:integer range 0 to 255;
begin
if(pesi'event and pesi='1')then
if judge='0'then
pnumber:=pnumber+1;pnumber2:=pnumber2+2;pc:=pc+4;
if(pc>=20)then
pnumber:=5;pnumber2:=10;pc:=20;
end if;
else
pnumber:=0;pnumber2:=0;pc:=0;
end if;
end if;
。。。
3)剩余貨幣計(jì)算進(jìn)程:該模塊將上2個(gè)進(jìn)程的總貨幣數(shù)和總商品價(jià)值數(shù)相減計(jì)算出剩余貨幣數(shù)輸出給找零進(jìn)程使用,同時(shí)判斷總貨幣數(shù)是否小于總商品價(jià)值,如果是給出高電平訊號(hào),如果否則給出低電平訊號(hào)。該訊號(hào)送給執(zhí)行使能進(jìn)程使用同時(shí)作為物品選擇進(jìn)程的復(fù)位端使用。
4)執(zhí)行使能進(jìn)程:該進(jìn)程有3個(gè)輸入,如果剩余貨幣判斷訊號(hào)為低電平同時(shí)找零進(jìn)程給出的反饋訊號(hào)也為低電平,此時(shí)如果執(zhí)行按鍵按動(dòng)一下,則輸出高電平使能訊號(hào),且只要剩余貨幣判斷訊號(hào)和反饋訊號(hào)不變,則一直輸出高電平。如上述2個(gè)訊號(hào)有任意一個(gè)為低電平,則輸出改為低電平。
5)找零進(jìn)程:該進(jìn)程只有在使能訊號(hào)為高電平時(shí)方有效,如使能訊號(hào)為低電平,則所有輸出清零。該進(jìn)程將輸入的剩余貨幣轉(zhuǎn)化成1元的硬幣的脈沖訊號(hào)輸出,每次脈沖對(duì)應(yīng)找出1個(gè)1元硬幣,同時(shí)根據(jù)是否輸入單數(shù)的瓜子來(lái)判斷是否需要找出5角硬幣。在找零完成后,同時(shí)大于5個(gè)脈沖時(shí)間 (為了保證在找零脈沖小于5個(gè)脈沖時(shí)間時(shí)商品輸出時(shí)間足夠)后給出高電平反饋訊號(hào)。該訊號(hào)供給剩余貨幣計(jì)算進(jìn)程使用,同時(shí)作為貨幣投入和計(jì)算進(jìn)程的復(fù)位端使用。
6)商品輸出進(jìn)程:該進(jìn)程只有在使能訊號(hào)為高電平時(shí)方有效,如使能訊號(hào)為低電平,則所有輸出清零。該進(jìn)程將物品選擇進(jìn)程給出的商品數(shù)目按脈沖輸出。每次脈沖對(duì)應(yīng)出1件商品。同時(shí)當(dāng)所有商品輸出完成后給出高電平反饋訊號(hào)(此訊號(hào)在本程序中保留,不起作用)。
為了驗(yàn)證該設(shè)計(jì)的功能,對(duì)該設(shè)計(jì)進(jìn)行了仿真分析。圖2是該設(shè)計(jì)在MAXPLUS II下進(jìn)行仿真的波形圖,該仿真中采用周期為35 ns的時(shí)鐘。
圖2 仿真測(cè)試結(jié)果圖Fig.2 Result chart of simulation of automat
上圖中c11為1元硬幣輸出,c00為5毛硬幣輸出??梢钥吹疆?dāng)輸入商品、1元硬幣超過(guò)5個(gè)時(shí)仍以5計(jì)算。當(dāng)總選擇商品價(jià)值超過(guò)投入的總貨幣數(shù)時(shí),程序自動(dòng)將選擇商品數(shù)目清零,但輸入的貨幣不變,只有選擇商品正確以后按了執(zhí)行鍵,機(jī)器才按照給定數(shù)目輸出商品和找零,當(dāng)全部完成后將貨幣和商品清零。
由仿真結(jié)果分析,設(shè)計(jì)滿足要求,能夠完成多種商品的售賣(mài),允許多種紙質(zhì)和硬幣現(xiàn)金使用,能夠完成多種貨幣的找零,對(duì)價(jià)格控制更加合理精確,執(zhí)行售賣(mài)功能全面,可以滿足實(shí)際生產(chǎn)使用。
[1]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].3版,北京:北京航空航天大學(xué)出版社,2013.
[2]楊志忠.數(shù)字電子技術(shù)[M].北京:高等教育出版社,2008.
[3]閻石.數(shù)字電子技術(shù)基礎(chǔ) [M].北京:高等教育出版社,2006.
[4]韓雁,洪慧.集成電路設(shè)計(jì)制造中EDA工具實(shí)用教程[M].杭州:浙江大學(xué)出版社,2007.
[5]劉明業(yè).集成電路/計(jì)算機(jī)硬件描述語(yǔ)言VHDL高等教材[M].北京:清華大學(xué)出版社,2003.
[6]姜雪松.硬件描述語(yǔ)言VHDL教程[M].西安:西安交通大學(xué)出版社,2004.