【文章內(nèi)容簡(jiǎn)介】
g1,g2,g3,g4,g5,g6 : in std_logic。到達(dá)樓層信號(hào) door : out std_logic_vector(1 downto 0)。電梯門(mén)控制信號(hào) led : out std_logic_vector(6 downto 0)。電梯所在樓層顯示(數(shù)碼管顯示) led_c_u:out std_logic_vector(5 downto 0)。電梯外人上升請(qǐng)求信號(hào)顯示 led_c_d:out std_logic_vector(5 downto 0)。電梯外人下降請(qǐng)求信號(hào)顯示 led_d : out std_logic_vector(5 downto 0)。電梯內(nèi)請(qǐng)求信號(hào)顯示 wahaha : out std_logic??撮T(mén)狗報(bào)警信號(hào) ud,alarm : out std_logic。電梯運(yùn)動(dòng)方向顯示,超載警告信號(hào)up,down : out std_logic )。電機(jī)控制信號(hào)和電梯運(yùn)動(dòng)end dianti。(3)archi結(jié)構(gòu)體設(shè)計(jì)模塊和process進(jìn)程執(zhí)行單元architecture behav of dianti issignal d11,d22,d33,d44,d55,d66:std_logic。 電梯內(nèi)人請(qǐng)求信號(hào)寄存信號(hào)signal c_u11,c_u22,c_u33,c_u44,c_u55:std_logic。電梯外人上升請(qǐng)求信號(hào)寄存信號(hào)signal c_d22,c_d33,c_d44,c_d55,c_d66:std_logic。電梯外人下降請(qǐng)求信號(hào)寄存信號(hào)signal q:integer range 0 to 1。分頻信號(hào)signal q1:integer range 0 to 6。關(guān)門(mén)延時(shí)計(jì)數(shù)器 signal q2:integer range 0 to 9??撮T(mén)狗計(jì)數(shù)器signal dd,cc_u,cc_d,dd_cc:std_logic_vector(5 downto 0)。電梯內(nèi)外請(qǐng)求信號(hào)寄存器signal opendoor:std_logic。開(kāi)門(mén)使能信號(hào)signal updown:std_logic。電梯運(yùn)動(dòng)方向信號(hào)寄存器signal en_up,en_dw:std_logic。預(yù)備上升、預(yù)備下降預(yù)操作使能信號(hào)beginprocess(clk)begin。(進(jìn)程語(yǔ)句具體看附錄)end behav。上文已說(shuō)明了構(gòu)成VHDL程序的兩大部分—實(shí)體和結(jié)構(gòu)體的相關(guān)語(yǔ)句。在這些語(yǔ)句里,賦值語(yǔ)句占了相當(dāng)一部分。在VHDL語(yǔ)言里,賦值符號(hào)一般都是“=”符號(hào),具體形式如下:beginif clk39。event and clk=39。139。 then if clr=39。139。 then q1=0。q2=0。wahaha=39。039。elsif full=39。139。 then alarm=39。139。 q1=0。if q1=3 then door=10。 else door=00。 end if。VHDL語(yǔ)言也具有與一般編程語(yǔ)言相同的一些語(yǔ)句邏輯結(jié)構(gòu),如上述中的“if…then…elsif…then…;”等。這是VHDL中的順序語(yǔ)句,與我們常見(jiàn)的C語(yǔ)言中的if作為條件語(yǔ)句不同。在結(jié)構(gòu)體中對(duì)電梯的運(yùn)行行為作出描述,其中電梯處于二樓…五樓情況復(fù)雜些,以下給出二樓情況的具體說(shuō)明。elsif g2=39。139。 then led=0010010。 電梯到達(dá)2樓,數(shù)碼管顯示2if updown=39。139。 then 電梯前一運(yùn)動(dòng)狀態(tài)位上升 if d22=39。139。 or c_u22=39。139。 thend22=39。039。 c_u22=39。039。 opendoor=39。139。 有當(dāng)前層的請(qǐng)求,則電梯進(jìn)入開(kāi)門(mén)狀態(tài) elsif dd_cc00000011 then en_up=39。139。en_dw=39。039。 opendoor=39。039。 有上升請(qǐng)求,則電梯進(jìn)入預(yù)備上升狀態(tài) elsif dd_cc00000010 then en_dw=39。139。en_up=39。039。 opendoor=39。039。有下降請(qǐng)求,則電梯進(jìn)入預(yù)備下降狀態(tài) end if。 電梯前一運(yùn)動(dòng)狀態(tài)為下降 elsif d22=39。139。 or c_d22=39。139。 thend22=39。039。 c_d22=39。039。opendoor=39。139。 有當(dāng)前層的請(qǐng)求,則電梯進(jìn)入開(kāi)門(mén)狀態(tài)elsif dd_cc00000010 then en_dw=39。139。en_up=39。039。 opendoor=39。039。 有下降請(qǐng)求,則電梯進(jìn)入預(yù)備下降狀態(tài) elsif dd_cc00000011 thenen_up=39。139。en_dw=39。039。 opendoor=39。039。 有上升請(qǐng)求,則電梯進(jìn)入預(yù)備上升狀態(tài) end if。在上述語(yǔ)句中的“elsif g2=‘1’then led=“0010010;”,led的賦值之所以為“0010010”是根據(jù)共陽(yáng)極七段數(shù)字顯示器的發(fā)光段排列的,如圖7所示??砂l(fā)光段a、b、c、e、g形成一個(gè)2字。以此類(lèi)推,在一樓時(shí)led賦值為“100111”,三樓時(shí)為“0000110”,四樓時(shí)為……在進(jìn)程執(zhí)行單元里,對(duì)電梯在樓層時(shí)的操作情況作出了描述,例如:開(kāi)門(mén)、關(guān)門(mén)延時(shí)、超載報(bào)警、故障報(bào)警以及電梯內(nèi)的請(qǐng)求信號(hào)處理,具體說(shuō)明給出如下:process(clk)beginif clk39。event and clk=39。139。 then if clr=39。139。 then q1=0。q2=0。wahaha=39。039。清除故障報(bào)警 elsif full=39。139。 then alarm=39。139。 q1=0。超載報(bào)警if q1=3 then door=10。 else door=00。 end if。 elsif q=1 then q=0。alarm=39。039。 if q2=3 then wahaha=39。139。 故障報(bào)警 else if opendoor=39。139。 then door=10。q1=0。q2=0。up=39。039。down=39。039。開(kāi)門(mén)操作 elsif en_up=39。139。 then 上升預(yù)操作 if deng=39。139。 then door=10。q1=0。q2=q2+1。關(guān)門(mén)中斷 elsif quick=39。139。 then q1=3。提前關(guān)門(mén) elsif q1=6 then door=00。updown=39。139。up=39。139。 關(guān)門(mén)完畢,電梯進(jìn)入上升狀態(tài) elsif q1=3 then door=01。q1=q1+1。 電梯進(jìn)入關(guān)門(mén)狀態(tài) else q1=q1+1。door=00。 電梯進(jìn)入等待狀態(tài) end if。 elsif en_dw=39。139。 then 下降預(yù)操作 if deng=39。139。 then door=10。q1=0。q2=q2+1。 elsif quick=39。139。 then q1=3。 elsif q1=6 then door=00。updown=39。039。down=39。139。 elsif q1=3 then door=01。q1=q1+1。 else q1=q1+1。door=00。 end if。 end if。else q=1。alarm=39。039。 清除超載報(bào)警 if d1=39。139。 then d11=d1。 對(duì)電梯內(nèi)人請(qǐng)求信號(hào)進(jìn)行檢測(cè)和寄存 elsif d2=39。139。 then d22=d2。 elsif d3=39。139。 then d33=d3。 elsif d4=39。139。 then d44=d4。 elsif d5=39。139。 then d55=d5。 elsif d6=39。139。 then d66=d6。 end if。 if c_u1=39。139。 then c_u11=c_u1。 對(duì)電梯外人上升請(qǐng)求信號(hào)進(jìn)行檢測(cè)和寄存 elsif c_u2=39。139。 then c_u22=c_u2。 elsif c_u3=39。139。 then c_u33=c_u3。 elsif c_u4=39。139。 then c_u44=c_u4。 elsif c_u5=39。139。 then c_u55=c_u5。 end if。 if c_d2=39。139。 then c_d22=c_d2。 對(duì)電梯外人下降請(qǐng)求信號(hào)進(jìn)行檢測(cè)和寄存 elsif c_d3=39。139。 then c_d33=c_d3。 elsif c_d4=39。139。 then c_d44=c_d4。 elsif c_d5=39。139。 then c_d55=c_d5。 elsif c_d6=39。139。 then c_d66=c_d6。end if。 dd=d66amp。d55amp。d44amp。d33amp。d22amp。d11。 電梯內(nèi)人請(qǐng)求信號(hào)并置 cc_u=39。039。amp。c_u55amp。c_u44amp。c_u33amp。c_u22amp。c_u11。 電梯外人上升請(qǐng)求信號(hào)并置 cc_d=c_d66amp。c_d55amp。c_d44amp。c_d33amp。c_d22amp。39。039。 電梯外人下降請(qǐng)求信號(hào)并置 dd_cc=dd or cc_u or cc_d。 電梯內(nèi)、外人請(qǐng)求信號(hào)進(jìn)行綜合 end if。 ud=updown。 電梯運(yùn)動(dòng)狀態(tài)顯示 led_d=dd。 電梯內(nèi)人請(qǐng)求信號(hào)顯示 led_c_u=cc_u。 電梯外人上升請(qǐng)求信號(hào)顯示 led_c_d=cc_d。 電梯外人下降請(qǐng)求信號(hào)顯示end if。 程序調(diào)試(1)建立好工作目錄,以便設(shè)計(jì)工程項(xiàng)目的存儲(chǔ),打開(kāi)QuartusII軟件,其初始界面如圖8所示。(2)在工具欄中選擇“新建”按鈕。選擇“VHDL File”,如圖9所示。(3) 在文本輸入界面內(nèi)進(jìn)行程序輸入,如圖10所示。(4) 輸入完畢后,需要對(duì)程序進(jìn)行保存。注意文件名和實(shí)體定義名必須保持一致,即dianti,文件后綴名為vhd。(5) 保存以后,對(duì)程序進(jìn)行編譯。在編譯前,需要把文件設(shè)置為頂層文件或工程文件Project。選擇菜單“Project”中的“Set as TopLevel Entity”。(6) 在“QuartusII”里選擇“Processing”下拉菜單中的“Start Compilation”,此時(shí),QuartusII軟件會(huì)對(duì)程序進(jìn)行糾錯(cuò)等處理。當(dāng)程序被確認(rèn)無(wú)誤后會(huì)出現(xiàn)如下界面,如圖11所示。編譯完成,程序調(diào)試結(jié)束。5 程序仿真(1)編譯完成后,新建波形編輯器進(jìn)行設(shè)計(jì)仿真。選擇菜單“File” 中的“New”項(xiàng),在New窗口中選擇“Vector Waveform File”,單擊OK按鈕,即出現(xiàn)空白的波形編譯器(圖12)。(2)設(shè)置仿真時(shí)間區(qū)域,在“Edit”菜單中選擇“End Time”項(xiàng),在彈出窗口中設(shè)置,設(shè)置完后對(duì)文件進(jìn)行保存。同樣使用文件名dianti,后綴名則改為vwf。(3)將工程dianti的端口信號(hào)名選入波形編輯器中。方法是在編輯器左邊Name下的空白處右擊選擇“Insert Node Or Bus”項(xiàng),彈出對(duì)話框如圖13所示,在Node Filter框中選“Pins:all”,單擊List按鈕,下方的Nodes Found 窗口中出現(xiàn)設(shè)計(jì)工程的所有端口引腳名。(5)創(chuàng)立輸入波形。從圖13左邊框中往右邊框加入需要的信號(hào)節(jié)點(diǎn),就