名稱:ISE四層電梯控制Basys2開發(fā)板verilog4層電梯(代碼在文末下載)
軟件:ISE
語言:Verilog
代碼功能:
4層電梯
設(shè)計一個4層樓高的電梯自動控制系統(tǒng),要求實現(xiàn):
(1)電梯運行規(guī)則:當(dāng)電梯處于上升模式時,只響應(yīng)比電梯所在位置高的上樓請求信號,由下而上逐個執(zhí)行,直到最后一個上樓請求執(zhí)行完畢;如果高層有下樓請求,則直接升到由下樓請求的最高層,然后進(jìn)入下降模式。當(dāng)電梯處于下降模式時則與上升模式相反;
(2)電梯初始狀態(tài)為一層狀態(tài)。
(3)每層電梯入口處設(shè)有上下請求開關(guān),電梯內(nèi)設(shè)有顧客到達(dá)層次的停站請求開關(guān);
(4)設(shè)有電梯入口處設(shè)有位置指示裝置及電梯運行模式(上升或下降)指示裝置;
(5)電梯到達(dá)有停站請求的樓層,電梯門打開,開門指示燈亮,開門4秒后,電梯門關(guān)閉(開門指示燈滅)。若按下電梯內(nèi)開門按鈕,則電梯一直處于開門狀態(tài),若按下電梯內(nèi)關(guān)門按鈕,則電梯立即關(guān)門。電梯繼續(xù)進(jìn)行,直至執(zhí)行完最后一個請求信號后停留在當(dāng)前層;
(6)能記憶電梯內(nèi)外所有請求,并按照電梯運行規(guī)則按順序響應(yīng),每個請求信號保留至執(zhí)行后消除。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在Basys2開發(fā)板驗證,開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. 管腳分配
5. RTL圖
6. Testbench
7. 仿真圖
1. 自帶仿真圖
2. Modelsim仿真圖
部分代碼展示:
`timescale?1ns?/?1ps //4層電梯 module?elevatorTop(clk,reset,open_btn,close_btn,B1U,B2D,B2U,B3D,B3U,B4D,BF1,BF2,BF3,BF4,door_led,up_led,down_led,HEX0,AN0,AN1,AN2,AN3); ???? ?input?clk,reset; ?input?open_btn,close_btn;//開關(guān)門 ?input?B1U,B2D,B2U,B3D,B3U,B4D,BF1,BF2,BF3,BF4;//電梯控制按鍵 ????output?door_led;//門 ?output?up_led;//上 ?output?down_led;//下 ?output?[7:0]HEX0;//數(shù)碼管顯示 ?output?AN0;//數(shù)碼管位選 ?output?AN1;//數(shù)碼管位選 ?output?AN2;//數(shù)碼管位選 ?output?AN3;//數(shù)碼管位選 ? ?reg?[7:0]display; ?wire?door,?dir; ????wire?[2:0]?state; ? ????wire?[9:0]?resetButtons; ????wire?openDoor,?closeDoor,?MoveCountDone,?MoveCountEn; ????wire?C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4; ????wire?[7:0]?seconds; ????assign?seconds?=?2; ?assign?AN0=0;//數(shù)碼管低電平選選通 ?assign?AN1=1;//數(shù)碼管低電平選選通 ?assign?AN2=1;//數(shù)碼管低電平選選通 ?assign?AN3=1;//數(shù)碼管低電平選選通 ? ?assign?door_led=door; ?assign?up_led=(state[0]==1)??dir:0;//運行時候才亮 ?assign?down_led=(state[0]==1)??~dir:0;//運行時候才亮 ???? ?//電梯控制模塊 ?floorControl?fc( ?clk, ?reset, ?openDoor, ?closeDoor, ?C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4, ?MoveCountDone,MoveCountEn, ?door,dir, ?state, ?resetButtons ?); ???? ?//按鍵控制模塊 ?buttonControl?bc( ?{B1U,B2D,B2U,B3D,B3U,B4D,BF1,BF2,BF3,BF4}, ?reset,resetButtons, ?{C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4} ?); ???? ?//電梯門控制 ?doorControl?dc( ?reset, ?clk, ?open_btn, ?open_btn, ?close_btn, ?door, ?openDoor, ?closeDoor ?); ???? ?//秒計時 ?counter?moveCount( ?reset, ?clk, ?MoveCountEn,MoveCountDone, ?seconds ?); ? always?@(posedge?clk) begin case?(state)??//數(shù)字顯示碼 3'd0:?display<=?8'b1111_1001;//1 3'd2:?display<=?8'b1010_0100;//2 3'd4:?display<=?8'b1011_0000;//3 3'd6:?display<=?8'b1001_1001;//4 default:; endcase end assign?HEX0=display; ? endmodule
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=264