• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

四層電梯控制DE1-SoC開發(fā)板verilog 4層電梯

05/21 10:43
416
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1-231101154029232.doc

共1個文件

名稱:四層電梯控制DE1-SoC開發(fā)板verilog(代碼在文末下載)

軟件:Quartus II

語言:Verilog

代碼功能:

4層電梯

設計一個4層樓高的電梯自動控制系統(tǒng),要求實現(xiàn):

(1)電梯運行規(guī)則:當電梯處于上升模式時,只響應比電梯所在位置高的上樓請求信號,由下而上逐個執(zhí)行,直到最后一個上樓請求執(zhí)行完畢;如果高層有下樓請求,則直接升到由下樓請求的最高層,然后進入下降模式。當電梯處于下降模式時則與上升模式相反;

(2)電梯初始狀態(tài)為一層狀態(tài)。

(3)每層電梯入口處設有上下請求開關,電梯內設有顧客到達層次的停站請求開關;

(4)設有電梯入口處設有位置指示裝置及電梯運行模式(上升或下降)指示裝置;

(5)電梯到達有停站請求的樓層,電梯門打開,開門指示燈亮,開門4秒后,電梯門關閉(開門指示燈滅)。若按下電梯內開門按鈕,則電梯一直處于開門狀態(tài),若按下電梯內關門按鈕,則電梯立即關門。電梯繼續(xù)進行,直至執(zhí)行完最后一個請求信號后停留在當前層;

(6)能記憶電梯內外所有請求,并按照電梯運行規(guī)則按順序響應,每個請求信號保留至執(zhí)行后消除。

本代碼已在DE1-SoC開發(fā)板驗證,其他開發(fā)板可以修改管腳適配,開發(fā)板如下:

電梯.png

演示視頻:

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

部分代碼展示:

`timescale?1ns?/?1ps
//控制樓層
module?floorControl(clk,reset,openDoor,closeDoor,C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4,MoveCountDone,MoveCountEn,door,dir,state,resetButtons);?
????input?clk,reset,openDoor,closeDoor,C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4,MoveCountDone;
????output?reg?MoveCountEn,door,dir;
????output?reg?[2:0]?state;
????output?reg?[9:0]?resetButtons;?//{C1U,C2D,C2U,C3D,C3U,C4D,G1,G2,G3,G4}
????
?
????//for?dir?(direction)
????parameter?DOWN?=?1'b0;
????parameter?UP?=?1'b1;
????
????//for?state
????parameter?FLOOR1?=?3'b000;
????parameter?FLOOR1to2?=?3'b001;
????parameter?FLOOR2?=?3'b010;
????parameter?FLOOR2to3?=?3'b011;
????parameter?FLOOR3?=?3'b100;
????parameter?FLOOR3to4?=?3'b101;
????parameter?FLOOR4?=?3'b110;
????
????//timing?is?a?bit?of?an?issue?so?maybe?have?a?slowclock?module?to?control?the?always?block?
????//wire?slowishclk;
//slowishClock?sc1(clk,reset,slowishclk);
????always?@(posedge?clk)?begin
????if?(reset)begin
????????MoveCountEn?<=?0;
????????door?<=?0;
????????dir?<=?UP;
????????state?<=?FLOOR1;
????????resetButtons?<=?0;
????end
????
????if?(~reset?&?openDoor?&?((state==FLOOR1)?|?(state==FLOOR2)?|?(state==FLOOR3)?|?(state==FLOOR4)))begin?//we?are?stopped?and?there?is?a?door?open?command?(sensor?or?timer?not?done)
????????MoveCountEn?<=?0;
????????door?<=?1;
????end
????
????if?(~reset?&?~openDoor?&?closeDoor?&?((state==FLOOR1)?|?(state==FLOOR2)?|?(state==FLOOR3)?|?(state==FLOOR4)))begin?//someone?wants?to?close?the?door,?or?the?timer?has?finished
????????MoveCountEn?<=?0;
????????door?<=?0;
????end
????
????//UP?logic?when?stopped
????//floor1
????if?(~reset?&?~openDoor?&?~door?&?dir==UP?&?state==FLOOR1?&?(C1U|G1))begin
????????MoveCountEn?<=?0;
????????door?<=?1;
????????dir?<=?UP;
????????state?<=?FLOOR1;
????end?
????if?(~reset?&?~openDoor?&?~door?&?dir==UP?&?state==FLOOR1?&?~C1U?&?~G1?&?(C2D|C2U|C3D|C3U|C4D|G2|G3|G4))begin
????????MoveCountEn?<=?1;
????????door?<=?0;
????????dir?<=?UP;
????????state?<=?FLOOR1to2;
????end
????
????//floor2?
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?~C2D?&?(C2U|G2))begin
????????MoveCountEn?<=?0;
????????door?<=?1;
????????dir?<=?UP;
????????state?<=?FLOOR2;
????end?
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?~C2U?&?~G2?&?(C3D|C3U|C4D|G3|G4))begin
????????MoveCountEn?<=?1;
????????door?<=?0;
????????dir?<=?UP;
????????state?<=?FLOOR2to3;
????end????
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?C2D?&?~C2U?&?~C3D?&?~C3U?&?~C4D?&?~G2?&?~G3?&?~G4?)begin
????????MoveCountEn?<=?0;
????????door?<=?1;
????????dir?<=?DOWN;
????????state?<=?FLOOR2;
????end?
????if?(~reset?&?~openDoor?&?~door?&?(dir==UP)?&?state==FLOOR2?&?~C2D?&?~C2U?&?~C3D?&?~C3U?&??~C4D?&?~G2?&?~G3?&?~G4?&?(C1U|G1))begin
????????MoveCountEn?<=?1;
????????door?<=?0;
????????dir?<=?DOWN;
????????state?<=?FLOOR1to2;
????end

設計文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. 管腳分配

5. RTL圖

6. Testbench

7. 仿真圖

圖1

圖2

圖3

點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=237

  • 1-231101154029232.doc
    下載

相關推薦