【文章內(nèi)容簡介】
end if; end process; 關鍵字process后面括號中的信號為時鐘信號,它列舉可激活進程語句的信號,唯有這些信號上的事件能引起進程語句執(zhí)行。關鍵字begin把進程語句分為進程說明和進程語句兩部分。進程說明在時鐘信號和begin之間,說明局部變量或某些僅在進程內(nèi)部用的內(nèi)容。進程語句部分在begin和end process之間,進程內(nèi)的所有語句都是按順序一個接一個執(zhí)行的。3. 具體語句設計說明(1)賦值符號上文已說明了構(gòu)成VHDL程序的兩大部分――實體和結(jié)構(gòu)體的相關語句。在這些語句里,賦值語句占了相當一部分。在VHDL語言里,賦值符號一般都是“=”符號,具體形式如下: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語言也具有與一般編程語言相同的一些語言邏輯結(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; 超載、關門中斷、提前關門清除報警信號 c_u1,c_u2: in std_logic; 電梯外人的上升請求信號 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)體中對電梯的運行行為作出描述,其中以電梯處于二樓的情況相對復雜,對此作如下說明:elsif g2=39。139。 then led=0010010; 電梯到達2樓,數(shù)碼管顯示2if 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。; 有當前層的請求,則電梯進入開門狀態(tài) elsif dd_cc011 then en_up=39。139。; opendoor=39。039。; 有上升請求,則電梯進入預備上升狀態(tài) elsif dd_cc010 then en_dw=39。139。; opendoor=39。039。; 有下降請求,則電梯進入預備下降狀態(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。;有當前層的請求,則電梯進入開門狀態(tài)elsif dd_cc010 then en_dw=39。139。; opendoor=39。039。; 有下降請求,則電梯進入預備下降狀態(tài) elsif dd_cc011 then en_up=39。139。; opendoor=39。039。; 有上升請求,則電梯進入預備上升狀態(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í)行單元里,對電梯在樓層時的操作情況作出了描述,例如:開門、關門延時、超載報警、故障報警以及電梯內(nèi)的請求信號處理,具體說明如下::process(clk)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; elsif q=1 then q=0;alarm=39。039。; if q2=3 then wahaha=39。139。; 故障報警 elseif opendoor=39。139。 then door=10;q1=0;q2=0;up=39。039。;down=39。039。; 開門操作elsif en_up=39。139。 then 上升預操作 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。139。;up=39。139。; 關門完畢,電梯進入上升狀態(tài)elsif q1=3 then door=01;q1=q1+1; 電梯進入關門狀態(tài)else q1=q1+1;door=00; 電梯進入等待狀態(tài)end if;elsif en_dw=39。139。 then 下降預操作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; 對電梯外人上升請求信號進行檢測和寄存elsif c_u2=39。139。 then c_u22=c_u2; end if; if c_d2=39。139。 then c_d22=c_d2; 對電梯外人下降請求信號進行檢測和寄存elsif c_d3=39。139。 then c_d33=c_d3; end if; dd=d33amp。d22amp。d11; 電梯內(nèi)人請求信號并置 cc_u=39。039。amp。c_u22amp。c_u11; 電梯外人上升請求信號并置