【正文】
制程序仿真圖圖18電梯控制程序仿真局部放大圖1從上面兩個(gè)仿真圖可以看出:1. 電梯停在一樓時(shí),接受到請(qǐng)求信號(hào)c_dc_dc_u4和d6,并把請(qǐng)求信號(hào)寫入相應(yīng)的寄存器。仿真結(jié)果如下圖17和圖18。(2)啟動(dòng)仿真器。 仿真步驟(1)仿真器參數(shù)設(shè)置。如對(duì)時(shí)鐘信賦于周期如下圖14所示。(5)創(chuàng)立輸入波形。(3)將工程dianti的端口信號(hào)名選入波形編輯器中。(2)設(shè)置仿真時(shí)間區(qū)域,在“Edit”菜單中選擇“End Time”項(xiàng),在彈出窗口中設(shè)置,設(shè)置完后對(duì)文件進(jìn)行保存。5 程序仿真(1)編譯完成后,新建波形編輯器進(jìn)行設(shè)計(jì)仿真。當(dāng)程序被確認(rèn)無誤后會(huì)出現(xiàn)如下界面,如圖11所示。選擇菜單“Project”中的“Set as TopLevel Entity”。(5) 保存以后,對(duì)程序進(jìn)行編譯。(4) 輸入完畢后,需要對(duì)程序進(jìn)行保存。選擇“VHDL File”,如圖9所示。 程序調(diào)試(1)建立好工作目錄,以便設(shè)計(jì)工程項(xiàng)目的存儲(chǔ),打開QuartusII軟件,其初始界面如圖8所示。 電梯外人上升請(qǐng)求信號(hào)顯示 led_c_d=cc_d。 電梯運(yùn)動(dòng)狀態(tài)顯示 led_d=dd。 電梯內(nèi)、外人請(qǐng)求信號(hào)進(jìn)行綜合 end if。039。c_d22amp。c_d44amp。 電梯外人上升請(qǐng)求信號(hào)并置 cc_d=c_d66amp。c_u22amp。c_u44amp。amp。 電梯內(nèi)人請(qǐng)求信號(hào)并置 cc_u=39。d22amp。d44amp。 dd=d66amp。 then c_d66=c_d6。 elsif c_d6=39。139。 then c_d44=c_d4。 elsif c_d4=39。139。 then c_d22=c_d2。 if c_d2=39。 then c_u55=c_u5。 elsif c_u5=39。139。 then c_u33=c_u3。 elsif c_u3=39。139。 then c_u11=c_u1。 if c_u1=39。 then d66=d6。 elsif d6=39。139。 then d44=d4。 elsif d4=39。139。 then d22=d2。 對(duì)電梯內(nèi)人請(qǐng)求信號(hào)進(jìn)行檢測和寄存 elsif d2=39。139。039。else q=1。 end if。door=00。q1=q1+1。139。039。 elsif q1=6 then door=00。139。q2=q2+1。 then door=10。 then 下降預(yù)操作 if deng=39。 elsif en_dw=39。door=00。q1=q1+1。139。139。提前關(guān)門 elsif q1=6 then door=00。139。q2=q2+1。 then door=10。 then 上升預(yù)操作 if deng=39。開門操作 elsif en_up=39。down=39。up=39。q1=0。139。139。039。 elsif q=1 then q=0。 else door=00。 q1=0。 then alarm=39。清除故障報(bào)警 elsif full=39。wahaha=39。 then q1=0。 then if clr=39。event and clk=39??砂l(fā)光段a、b、c、e、g形成一個(gè)2字。 有上升請(qǐng)求,則電梯進(jìn)入預(yù)備上升狀態(tài) end if。 opendoor=39。en_dw=39。 有下降請(qǐng)求,則電梯進(jìn)入預(yù)備下降狀態(tài) elsif dd_cc00000011 thenen_up=39。 opendoor=39。en_up=39。 有當(dāng)前層的請(qǐng)求,則電梯進(jìn)入開門狀態(tài)elsif dd_cc00000010 then en_dw=39。opendoor=39。 c_d22=39。 thend22=39。 or c_d22=39。 電梯前一運(yùn)動(dòng)狀態(tài)為下降 elsif d22=39。039。039。139。039。039。139。139。039。039。139。139。139。 then led=0010010。elsif g2=39。這是VHDL中的順序語句,與我們常見的C語言中的if作為條件語句不同。 else door=00。 q1=0。 then alarm=39。elsif full=39。wahaha=39。 then q1=0。 then if clr=39。event and clk=39。在這些語句里,賦值語句占了相當(dāng)一部分。(進(jìn)程語句具體看附錄)end behav。電梯運(yùn)動(dòng)方向信號(hào)寄存器signal en_up,en_dw:std_logic。電梯內(nèi)外請(qǐng)求信號(hào)寄存器signal opendoor:std_logic。關(guān)門延時(shí)計(jì)數(shù)器 signal q2:integer range 0 to 9。電梯外人下降請(qǐng)求信號(hào)寄存信號(hào)signal q:integer range 0 to 1。 電梯內(nèi)人請(qǐng)求信號(hào)寄存信號(hào)signal c_u11,c_u22,c_u33,c_u44,c_u55:std_logic。電機(jī)控制信號(hào)和電梯運(yùn)動(dòng)end dianti??撮T狗報(bào)警信號(hào) ud,alarm : out std_logic。電梯外人下降請(qǐng)求信號(hào)顯示 led_d : out std_logic_vector(5 downto 0)。電梯所在樓層顯示(數(shù)碼管顯示) led_c_u:out std_logic_vector(5 downto 0)。到達(dá)樓層信號(hào) door : out std_logic_vector(1 downto 0)。 電梯外人的下降請(qǐng)求信號(hào) d1,d2,d3,d4,d5,d6 : in std_logic。 超載、關(guān)門中斷、提前關(guān)門、清除報(bào)警信號(hào) c_u1,c_u2,c_u3,c_u4,c_u5: in std_logic。(2) entity實(shí)體設(shè)計(jì)模塊entity dianti is port ( clk : in std_logic。use 。library ieee。而在結(jié)構(gòu)體模塊中又內(nèi)嵌有進(jìn)程執(zhí)行單元。(2)程序要求的寄存器(中間信號(hào))包括:電梯內(nèi)人請(qǐng)求信號(hào)寄存信號(hào)(d11,d22,d33,d44,d55,d66)、電梯外人上升請(qǐng)求信號(hào)寄存信號(hào)(c_u11,c_u22,c_u33,c_u44,c_u55)、電梯外人下降請(qǐng)求信號(hào)寄存信號(hào)(c_d22,c_d33,c_d44,c_d55,c_d66)、分頻信號(hào)(q)、關(guān)門延時(shí)計(jì)數(shù)器(q1)、看門狗計(jì)數(shù)器(q2)、電梯內(nèi)外請(qǐng)求信號(hào)寄存器(dd,cc_u,cc_d,dd_cc)、開門使能信號(hào)(opendoor)、電梯運(yùn)動(dòng)方向信號(hào)寄存器(updown)、預(yù)備上升、預(yù)備下降預(yù)操作使能信號(hào)(en_up,en_dw)。輸出端口:電梯門控制信號(hào)(door)、電梯所在樓層顯示(led)電梯外人上升請(qǐng)求信號(hào)顯示(led_c_u)、電梯外人下降請(qǐng)求信號(hào)顯示(led_c_d)、電梯內(nèi)請(qǐng)求信號(hào)顯示(led_d)、看門狗報(bào)警信號(hào)(wahaha)、電梯運(yùn)動(dòng)方向顯示(ud)、超載警告信號(hào)(alarm)、電機(jī)控制信號(hào)(up,down)。具體流程圖如圖5所示。實(shí)體對(duì)控制器的端口進(jìn)行定義,結(jié)構(gòu)體對(duì)各端口的行為進(jìn)行描述。對(duì)程序進(jìn)行模塊化構(gòu)思。電梯控制器的原理圖如圖4所示。如果此前出現(xiàn)提前關(guān)門信號(hào)而且電梯也已經(jīng)進(jìn)行完超重排除和故障排除,電梯同樣關(guān)門進(jìn)入預(yù)操作狀態(tài)。開門使能信號(hào)促使電梯開門載客,同時(shí)驅(qū)動(dòng)關(guān)門延時(shí)信號(hào)、超重檢測以及故障檢測。其流程圖如圖3所示。本設(shè)計(jì)采用以下規(guī)則:電梯以前一狀態(tài)為基準(zhǔn),即前一狀態(tài)為上升,則操作完所以上升請(qǐng)求再操作下降請(qǐng)求;前一狀態(tài)為下降,則反之。電梯實(shí)際上是一個(gè)人機(jī)交互式的控制系統(tǒng),單純用順序優(yōu)先或邏輯優(yōu)先是不能滿足控制要求的,因此,控制系統(tǒng)采用隨機(jī)邏輯方式控制去解決信號(hào)優(yōu)先的問題。對(duì)上述電梯的運(yùn)行情況進(jìn)行匯總,可以得到如圖2的電梯運(yùn)行狀態(tài)圖。此時(shí),電梯就進(jìn)入預(yù)下降狀態(tài),準(zhǔn)備作下降運(yùn)行。處于二樓到五樓時(shí),電梯可能出現(xiàn)三種情況:1電梯沒有接收到請(qǐng)求信號(hào),電梯返回一樓待機(jī);2電梯收到上升請(qǐng)求信號(hào),進(jìn)入預(yù)上升狀態(tài);3電梯受到下降請(qǐng)求信號(hào),進(jìn)入預(yù)下降狀態(tài)。此時(shí),電梯就進(jìn)入預(yù)上升狀態(tài),準(zhǔn)備作上升運(yùn)行。反之,則是下降請(qǐng)求信號(hào)。使電梯進(jìn)入預(yù)上升狀態(tài)的請(qǐng)求信號(hào)就是上升請(qǐng)求信號(hào)。出于這方面的考慮,本設(shè)計(jì)把電梯的請(qǐng)求信號(hào)劃分為上升請(qǐng)求和下降請(qǐng)求。而MATLAB具有強(qiáng)大的運(yùn)算功能,可以容易的實(shí)現(xiàn)A/D、D/A轉(zhuǎn)換等外圍電路功能,并能以波形形式將結(jié)果直觀地呈現(xiàn),極大地方便了程序設(shè)計(jì)人員設(shè)計(jì)應(yīng)用系統(tǒng)4程序設(shè)計(jì)及調(diào)試 電梯運(yùn)行規(guī)則(1)請(qǐng)求信號(hào)分析:電梯的請(qǐng)求信號(hào)分為梯內(nèi)請(qǐng)求和梯外請(qǐng)求,如果從這個(gè)角度就很難去進(jìn)行對(duì)電梯運(yùn)行可能情況的分析,因?yàn)殡娞莸倪\(yùn)行是根據(jù)梯內(nèi)和梯外的請(qǐng)求信號(hào)、行程信號(hào)進(jìn)行控制的,而梯內(nèi)和梯外的請(qǐng)求是隨機(jī)且不能以有限的規(guī)則去對(duì)其進(jìn)行說明的。而QuartusII 設(shè)計(jì)只是針對(duì)數(shù)字信號(hào),并不支持模擬量的輸入。在實(shí)際應(yīng)用設(shè)計(jì)中,對(duì)程序原理性及可執(zhí)行性的驗(yàn)證主要集中在程序修改階段,尤其在處理的數(shù)據(jù)復(fù)雜、繁多時(shí),Quartus II自帶的波形輸入仿真就很難實(shí)現(xiàn)程序的驗(yàn)證,而且輸出的數(shù)據(jù)不能方便的以波形圖示直觀的呈現(xiàn),給程序設(shè)計(jì)者在校驗(yàn)程序階段帶來了很多的不便。QuartusII軟件可以將設(shè)計(jì)、綜合、布局和布線以及系統(tǒng)的驗(yàn)證全部都整合到一個(gè)無縫的環(huán)境之中,其中也包括和第三方EDA工具的接口。Quartus II 開發(fā)工具人機(jī)界面友好、易于使用、性能優(yōu)良,并自帶編譯、仿真功能。其中,修改邏輯設(shè)計(jì)能從根本上消除毛刺,但該方法要求使用者掌握電路的工作狀態(tài)及其轉(zhuǎn)換,有時(shí)需要多路輸出,使用起來有一定的復(fù)雜性。但在現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)時(shí),通過EDA軟件,完全可以找出毛刺產(chǎn)生的原因及產(chǎn)生的位置,并且非常準(zhǔn)確和接近實(shí)際情況。由于毛刺的存在,使的系統(tǒng)存在許多不穩(wěn)定因素,經(jīng)常會(huì)造成對(duì)脈沖上下沿敏感的電路產(chǎn)生誤動(dòng)作。結(jié)構(gòu)體名; 用VHDL語言對(duì)FPGA和CPLD器件進(jìn)行開發(fā)時(shí)出現(xiàn)的毛刺問題的處理 在EDA環(huán)境中,毛刺是系統(tǒng)設(shè)計(jì)是否成功的關(guān)鍵。實(shí)體名結(jié)構(gòu)體名實(shí)體名;(3)結(jié)構(gòu)體所有能被仿真的實(shí)體都由結(jié)構(gòu)體(ARCHITECTURE)描述,即結(jié)構(gòu)體描述實(shí)體的結(jié)構(gòu)或行為,一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體分別代表該實(shí)體功能的不同實(shí)現(xiàn)方案。實(shí)體語句類型);TYPE語句或常量定義類型;端口信號(hào)名4:類型;端口信號(hào)名3:類型;端口信號(hào)名2:端口說明(端口信號(hào)名1:類屬說明IS[GENERIC(常數(shù)名:數(shù)據(jù)類型[:設(shè)定值])]實(shí)體格式如下:ENTITY(2)實(shí)體實(shí)體(ENTITY)是VHDL設(shè)計(jì)中最其本的組成部分之一(另一個(gè)是結(jié)構(gòu)體),VHDL表達(dá)的所有設(shè)計(jì)均與實(shí)體有關(guān)。構(gòu)造體(ARCHITECTUR):定義實(shí)體的實(shí)現(xiàn)。程序包(PACKAGE):聲明在設(shè)計(jì)中將用到的常數(shù)、數(shù)據(jù)類型、元件及子程序。1)要求的功能模塊劃分;2)VHDL的設(shè)計(jì)描述(設(shè)計(jì)輸入);3)代碼仿真模擬(前仿真);4)計(jì)綜合、優(yōu)化和布局布線;5)布局布線后的仿真模擬(后仿真);6)設(shè)計(jì)的實(shí)現(xiàn)(下載到目標(biāo)器件)。所以,即使在遠(yuǎn)離門級(jí)的高層次(即使設(shè)計(jì)尚未完成時(shí)),設(shè)計(jì)者就能夠?qū)φ麄€(gè)工程設(shè)計(jì)的結(jié)構(gòu)和功能的可行性進(jìn)行查驗(yàn),并做出決策。(五)靈活性:VHDL最初是作為一種仿真標(biāo)準(zhǔn)格式出現(xiàn)的,有著豐富的仿真語句和庫函數(shù)。程序設(shè)計(jì)的硬件目標(biāo)器件有廣闊的選擇范圍,可以是各系列的CPLD、FPGA及各種門陣列器件。(三)獨(dú)立性:VHDL的硬件描述與具體的工藝技術(shù)和硬件結(jié)構(gòu)無關(guān)。它可以從一個(gè)仿真工具移植到另一個(gè)仿真工具,從一個(gè)綜合工具移植到另一個(gè)綜合工具,從一個(gè)工作平臺(tái)移植到另一個(gè)工作平臺(tái)。VHDL是一種設(shè)計(jì)、仿真和綜合的標(biāo)準(zhǔn)硬件描述語言。它可以用明確的代碼描述復(fù)雜的控制邏輯設(shè)計(jì)。VHDL具有與具體硬件電路無關(guān)和設(shè)計(jì)平臺(tái)無關(guān)的特性,并且具有良好的電路行為描述和系統(tǒng)描述的能力,并在語言易讀性和層次化結(jié)構(gòu)化設(shè)計(jì)方面,表現(xiàn)了強(qiáng)大的生命力和應(yīng)用潛力。從此,VHDL成為硬件描述語言的業(yè)界標(biāo)準(zhǔn)之一。例如在飛機(jī)制造過程中,從設(shè)計(jì)、性能測試及特性分析直到飛行模擬,都可能涉及到EDA技術(shù)。包括在機(jī)械、電子、通信、航空航天、化工、礦產(chǎn)、生物、醫(yī)學(xué)、軍事、等各