【文章內(nèi)容簡(jiǎn)介】
嵌入 process進(jìn)程語(yǔ)句去對(duì)實(shí)體行為作出說(shuō)明。 :process(clk) begin if 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; ?? dd=d33amp。d22amp。d11; cc_u=39。039。amp。c_u22amp。c_u11; cc_d=c_d33amp。c_d22amp。39。039。; dd_cc=dd or cc_u or cc_d; 畢業(yè)設(shè)計(jì) 10 end if; ud=updown; led_d=dd; led_c_u=cc_u; led_c_d=cc_d; end if; end process; 關(guān)鍵字 process 后面括號(hào)中的信號(hào)為時(shí)鐘信號(hào),它列舉可激活進(jìn)程語(yǔ)句的信號(hào),唯有這些信號(hào)上的事件能引起進(jìn)程語(yǔ)句執(zhí)行。關(guān)鍵字 begin把進(jìn)程語(yǔ)句分為進(jìn)程說(shuō)明和進(jìn)程語(yǔ)句兩部分。進(jìn)程說(shuō)明在時(shí)鐘信號(hào)和 begin之間,說(shuō)明局部變量或某些僅在進(jìn)程內(nèi)部用的內(nèi)容。進(jìn)程語(yǔ)句部分在 begin和 end process 之間,進(jìn)程內(nèi)的所有語(yǔ)句都是按順序一個(gè)接一個(gè)執(zhí)行的。 3. 具體語(yǔ)句設(shè)計(jì)說(shuō)明 ( 1)賦值符號(hào) 上文已說(shuō)明了構(gòu)成 VHDL 程序的兩大部分――實(shí)體和結(jié)構(gòu)體的相關(guān)語(yǔ)句。在這些語(yǔ)句里,賦值語(yǔ) 句占了相當(dāng)一部分。在 VHDL 語(yǔ)言里,賦值符號(hào)一般都是“ =”符號(hào),具體形式如下: begin if 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ǔ)句不同。本程序只使用到上述的語(yǔ)言結(jié)構(gòu),相對(duì)簡(jiǎn)易。 ( 2)電梯信號(hào)定義 在實(shí)體模塊中,對(duì)電梯的主要信號(hào)都一一作出了定義,具體說(shuō)明如下: port ( clk : in std_logic; 時(shí)鐘信號(hào) full,deng,quick,clr : in std_logic; 超載、關(guān)門(mén)中斷、提前關(guān)門(mén)清除報(bào)警信號(hào) c_u1,c_u2: in std_logic; 電梯外人的上升請(qǐng)求信號(hào) 畢業(yè)設(shè)計(jì) 11 c_d2,c_d3: in std_logic; 電梯外人的下降請(qǐng)求信號(hào) d1,d2,d3 : in std_logic; 電梯內(nèi)人的請(qǐng)求信號(hào) g1,g2,g3 : 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); 電梯所在樓層顯示 led_c_u:out std_logic_vector(2 downto 0); 電梯外人上升請(qǐng)求信號(hào)顯示 led_c_d:out std_logic_vector(2 downto 0); 電梯外人下降請(qǐng)求信號(hào)顯示 led_d : out std_logic_vector(2 downto 0); 電梯內(nèi)請(qǐng)求信號(hào)顯示 wahaha : out std_logic; 看門(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) 在結(jié)構(gòu)體中對(duì)電梯的運(yùn)行行為作出描述,其中以電梯處于二樓的情況相對(duì)復(fù)雜,對(duì)此作如下說(shuō) 明: elsif g2=39。139。 then led=0010010; 電梯到達(dá) 2樓,數(shù)碼管顯示 2 if updown=39。139。 then 電梯前一運(yùn)動(dòng)狀態(tài)位上升 if d22=39。139。 or c_u22=39。139。 then d22=39。039。; c_u22=39。039。; opendoor=39。139。; 有當(dāng)前層的請(qǐng)求,則電梯進(jìn)入開(kāi)門(mén)狀態(tài) elsif dd_cc011 then en_up=39。139。; opendoor=39。039。; 有上升請(qǐng)求,則電梯進(jìn)入預(yù)備上升狀態(tài) elsif dd_cc010 then en_dw=39。139。; 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。 then d22=39。039。; c_d22=39。039。; opendoor=39。139。; 有當(dāng)前層的請(qǐng)求,則電梯進(jìn)入開(kāi)門(mén)狀態(tài) elsif dd_cc010 then en_dw=39。139。; opendoor=39。039。; 有下降請(qǐng)求,則電梯進(jìn)入預(yù)備下 畢業(yè)設(shè)計(jì) 12 降狀態(tài) elsif dd_cc011 then en_up=39。139。; opendoor=39。039。; 有上升請(qǐng)求,則電梯進(jìn)入預(yù)備上升狀態(tài) end if; 在上述語(yǔ)句中的“ elsif g2=39。139。 then led=0010010; ”, led 的賦值是根據(jù)七段式數(shù)字顯示器的發(fā)光段排列的,可見(jiàn)發(fā)光段是 a、 b、 d、 e、 g段時(shí),形成一個(gè) 2字。所以在一樓時(shí) led賦值為“ 1001111”,三樓時(shí) led賦值為“ 0000110”,如圖 。 圖 七段數(shù)字顯示器 ( 3)請(qǐng)求信號(hào)處理 在進(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) begin if 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ù)操作 畢業(yè)設(shè)計(jì) 13 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; end if; if c_u1=39。139。 then c_u11=c_u1; 對(duì)電梯 外人上升