名称:ISE四层电梯控制Basys2开发板verilog4层电梯(代码在文末下载)
软件:ISE
语言:Verilog
代码功能:
4层电梯
设计一个4层楼高的电梯自动控制系统,要求实现:
(1)电梯运行规则:当电梯处于上升模式时,只响应比电梯所在位置高的上楼请求信号,由下而上逐个执行,直到最后一个上楼请求执行完毕;如果高层有下楼请求,则直接升到由下楼请求的最高层,然后进入下降模式。当电梯处于下降模式时则与上升模式相反;
(2)电梯初始状态为一层状态。
(3)每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关;
(4)设有电梯入口处设有位置指示装置及电梯运行模式(上升或下降)指示装置;
(5)电梯到达有停站请求的楼层,电梯门打开,开门指示灯亮,开门4秒后,电梯门关闭(开门指示灯灭)。若按下电梯内开门按钮,则电梯一直处于开门状态,若按下电梯内关门按钮,则电梯立即关门。电梯继续进行,直至执行完最后一个请求信号后停留在当前层;
(6)能记忆电梯内外所有请求,并按照电梯运行规则按顺序响应,每个请求信号保留至执行后消除。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在Basys2开发板验证,开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
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;//开关门 input B1U,B2D,B2U,B3D,B3U,B4D,BF1,BF2,BF3,BF4;//电梯控制按键 output door_led;//门 output up_led;//上 output down_led;//下 output [7:0]HEX0;//数码管显示 output AN0;//数码管位选 output AN1;//数码管位选 output AN2;//数码管位选 output AN3;//数码管位选 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;//数码管低电平选选通 assign AN1=1;//数码管低电平选选通 assign AN2=1;//数码管低电平选选通 assign AN3=1;//数码管低电平选选通 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) //数字显示码 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
836