【正文】
ELSE 。fuplight=0000。139。 END process ctrlift。 32 END IF。 mylift=doorwait1。 END IF。cleardn=39。 ELSE clearup=39。)THEN cleardn=39。 OR fdnlight(position)=39。 THEN IF position=2 AND(stoplight(position)=39。 ELSIF udsig=39。139。139。139。139。139。039。139。 WHEN stop=mylift=dooropen。 ELSE mylift=doorclose。139。139。) THEN mylift=stop。 OR fuplight(pos)=39。 IF pos1 AND(stoplight(pos)=39。 WHEN down=position=position1。 ELSE mylift=doorclose。139。139。) 31 THEN mylift=stop。 OR fdnlight(pos)=39。 IF pos4 AND(stoplight(pos)=39。 WHEN up=position=position+1。 END IF。139。mylift=down。 ELSE udsig=39。139。 END IF。clearup=39。039。139。mylift=down。) THEN udsig=39。 ELSIF (fuplight(2)=39。cleardn=39。139。139。139。139。mylift=down。) THEN udsig=39。 OR fdnlight(2)=39。 ELSIF (stoplight(2)=39。139。 END IF。clearup=39。039。139。 mylift=down。 THEN udsig=39。 OR fuplight(1)=39。 ELSIF stoplight(1)=39。139。 END IF。cleardn=39。039。 mylift=doorclose。 THEN IF position=1 THEN IF stoplight=0000 AND fuplight=0000 AND fdnlight=0000 THEN udsig=39。 ELSIF udsig=39。 END IF。clearup=39。039。mylift=doorclose。 ELSIF position=1 THEN IF stoplight=0000 AND fuplight=0000 AND fdnlight=0000 THEN udsig=39。139。mylift=down。 ELSE udsig=39。clearup=39。039。139。139。mylift=up。) THEN udsig=39。 OR fdnlight(4)=39。 ELSIF (stoplight(4)=39。clearup=39。039。139。139。mylift=doorclose。 ELSIF position=2 THEN IF stoplight=0000 AND fuplight=0000 AND fdnlight=0000 THEN udsig=39。139。mylift=down。 ELSE udsig=39。clearup=39。039。139。139。 mylift=doorclose。 ELSIF position=3 THEN IF stoplight=0000 AND fuplight=0000 and fdnlight=0000 THEN udsig=39。139。mylift=down。 ELSE udsig=39。139。039。039。 WHEN doorwait4=mylift=doorclose。 mylift=doorwait3。 cleardn=39。 WHEN doorwait2=clearup=39。 mylift=doorwait1。 position=1。 THEN CASE mylift IS WHEN stopon1=doorlight=39。EVENT AND liftclk=39。039。039。 THEN mylift=stopon1。 BEGIN IF reset=39。 SIGNAL cleardn:STD_LOGIC。 表達(dá)狀態(tài)機(jī)的 10 個狀態(tài) SIGNAL mylift:lift_stata。 27 END fourfilft。 doorlight:OUT STD_LOGIC。 stoplight:BUFFER STD_LOGIC_VECTOR(4 DOWNTO 1)。 fdnlight:BUFFER STD_LOGIC_VECTOR(4 DOWNTO 1)。 f4dnbutton:IN STD_LOGIC。 f3upbutton:IN STD_LOGIC。 f2upbutton:IN STD_LOGIC。 reset:IN STD_LOGIC。 ENTITY fourfilft IS PORT(buttonclk:IN STD_LOGIC。 USE 。 附錄 2 四層電梯控制器的 VHDL 描述源程序 LIBRARY IEEE。 END PROCESS。 END IF。 IF state_inputs=11 THEN next_state=st3。 END IF。 以下依次 類推 IF state_inputs=11 THEN next_state=st2。 否則,在下一時鐘后,進(jìn)程 REG 的狀態(tài)將為 st2 END IF。 對應(yīng)狀態(tài) st1 的譯碼輸出 01 IF state_inputs=00 THEN 根據(jù)外部的狀態(tài)控制輸人 00 next_state=st1。 否則,在下一時鐘后,進(jìn)程 REG 的狀態(tài)將為 st1 END IF。 初始狀態(tài)譯碼輸出 00 IF state_inputs=00 THEN 根據(jù)外部的狀態(tài)控制輸入 00 next_state=st0。 END PROCESS。EVENT THEN current_state=next_state。139。 THEN 異步復(fù)位 Current_state=st0。 BEGIN REG: PROCESS (reset, clk) 時序邏輯進(jìn)程 BEGIN IF reset=39。 ARCHITECTURE behv OF s_machine IS TYPE states IS (st0,st1,st2,st3)。 b_outputs: OUT STD_LOGIC_VECTOR(0 TO 1))。 ENTITY s_machine IS PORT (clk, reset: IN STD_LOGIC。2020 [ 12] 林都,曾建平,陸載德 .電梯群控系統(tǒng)的活動掃描法仿真 [J].系統(tǒng)仿真學(xué)報 ,1995(4) 24 附錄 1 狀態(tài)機(jī)的 VHDL 程序 LIBRARY IEEE。群控電梯智能控制策略研究 [D]。最后感謝學(xué)校實驗室的老師們,他們提供給我仿真的實驗場所。對李 老師的感激之情是無法用言語表達(dá)的。李老師多次詢問設(shè)計進(jìn)程,并為我指點迷津,幫助我開拓研究思路,精心點撥、熱忱鼓勵。相信以后必將受到世界范圍內(nèi)電子工程設(shè)汁人員的廣泛關(guān)注和普遍歡迎。另外 CPLD 是一種專門從事邏輯控制的微型計算機(jī)系統(tǒng)。 5 結(jié)束語 用 VHDL 硬件描述語言的形式來進(jìn)行數(shù)字系統(tǒng)的設(shè)計方便靈活,利用 EDA軟件進(jìn)行編譯優(yōu)化仿真極大地減少了電路設(shè)計時間和可能發(fā)生的錯誤,降低了開發(fā)成本,這種設(shè)計方法必將在未來的數(shù)字系統(tǒng)設(shè)計中發(fā)揮越來越重要的作用。 那么當(dāng)電梯運行到第四層的時候就應(yīng)該繼續(xù)為 up 狀態(tài),先響應(yīng)第五層的下降請求,狀 態(tài)變?yōu)?down,再轉(zhuǎn)為下降狀態(tài),回到第四層再才相應(yīng)第四層的下降請求。其次就是要在電梯設(shè)計的過程中,因為在設(shè)計中涉及到電梯處于每一層的時候的判斷,就要根據(jù)實際的情況,寫出相應(yīng)的邏輯關(guān)系。同時有上升請求和下降請求信號時,電梯的運行情況如圖 。在看電梯位置的變化,“ 1— 2— 3— 4— 3— 2— 1”沒有亂序,說明顯示是正確的。 圖 9 圖 9 是有下降請求的情況,因為電梯的初始狀態(tài)為一層的開門等待狀態(tài),所以在第四層有下降請求的時候,電梯先是上升到第四層,開門 4 秒以后關(guān)門,然后下降,停站請求為第一層,所以到第一層的時候開門 4 秒后關(guān)門,停在第一層,等待下次請求。由于沒有下降請求的信號,所以 fdnlight信號燈一直都是 0。 再看 fuplight 信號燈,當(dāng)二層有上升請求的嗣后,它的值由 0 變到 2(注意,fuplight 和 fdnlight 是 4 位的二進(jìn)制的標(biāo)準(zhǔn)邏輯矢量,這里的 2 代表的是” 0010” ,表示二層有請求;” 1000”也就是 8,表示四層有請求)。當(dāng)乘客進(jìn)入電梯以后,在電梯內(nèi)部要求上升到第 3 層,也就是 stop3button 產(chǎn)生一個脈沖,電梯上升到第三層,開門 4秒以后關(guān)門,停留在 3 層, position 最后的值為 3。這些假設(shè)都是符合實際情況的。而且乘客進(jìn)入 電梯以后必定要按按鍵。 ( 3) 四層電梯控制器設(shè)計 輸入輸出端口定義表 Buttonclk 按鍵時鐘 Liftclk 電 梯時鐘 Reset 異步復(fù)位信號 17 f1upbutton 第一層上升請求 f2upbutton 第二層上升請求 f3upbutton 第三層上升請求 f2dnbutton 第二層下降請求 f3dnbutton 第三層下降請求 f4dnbutton 第四層下降請求 Fuplight 上升指示燈( 1 到 4) Fdnlight 下降指示燈( 1 到 4) stop1button 第一層到站請求 stop2button 第二層到站請求 stop3button 第三層到站請求 stop4button 第四層到站請求 Stoplight 停止指示燈( 1 到 4) Position 電梯位置( 1 到 4) Doorlight 門燈 Udsig 電梯模式 表 1 4 四層電梯控制器的調(diào)試及仿真 程序修改調(diào)試 在完成程序編寫后要進(jìn)行程序的編譯與仿真,在編譯過程中要進(jìn)行程序的改錯,在第一次編譯中出現(xiàn)了大量的錯誤,但大部分的都是由于粗心造成的端口的錯誤定義,還有就是在 IF 語句的結(jié)束是忘記“ END IF”,或者是多寫了“ EDN IF”,這樣的錯誤都是基本的,經(jīng)過編譯改錯后就要進(jìn)行波形的仿真,在波形 仿真中自 18 己犯了一個大的錯誤,就是在下降請求時,按了下降請求按鍵后就馬上選擇了要到達(dá)的層次,比如先按 fdnbuttton4,產(chǎn)生了一個下降請求,我馬上就按 stopbutton2,結(jié)果電梯運行到第四層就不下來,我自己還考慮了好久,后來我仔細(xì)想了一下,發(fā)現(xiàn)在有下降請求后,電梯還沒有到達(dá)第四層,怎么就可以按停止按鍵呢。 在信號燈控制進(jìn)程中,由于使用了專門的頻率較高的按鍵時鐘,所以