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