集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3619|回复: 9

课程设计--电梯控制器

[复制链接]
老怪甲 该用户已被删除
老怪甲 发表于 2010-5-15 14:11:11 | 显示全部楼层 |阅读模式
课程设计--电梯控制器

希望大家喜欢。附部分代码:
/************************************StateShift.v******************************************
*Module Name:StateShift
*
*Function:实时接受各楼层的上下请求信号及电梯内部的停靠请求,然后根据这些请求实现对电梯正确的控制:
*1、除了顶层和底层外,各楼层均设有上下请求开关,顶层和底层分别设有下降和上升请求开关;
*电梯内设有乘客到达层次的请求开关。
*2、电梯每1s上升或下降一层
*3、电梯到达有停站请求的楼层后,经过1s后电梯门打开,开门指示灯亮,开门4s后电梯指示灯灭,电梯继续
*运行,直至运行完最后一个请求后停靠在当前层。
*4、能记忆点个体内外的所有请求信号,并按运行规则顺序相应各个请求,每个请求信号
*保持至被执行完成后才被清除,这将与display模块配合实现
*5、电梯运行规则:与一般的电梯的运行规则一致,请参见后面的关于状态转移的说明
*
*Input Port:F1Up, F2Up, F3Up分别为1-3楼的上行请求信号,F2Dn, F3Dn, F4Dn则分别为2-4楼的下行请求信号
*F1Stop, F2Stop, F3Stop, F4Stop则分别为电梯内部的停靠1-4楼的请求
*上述各端口均为有请求时,输入为高电平,否则为低电平;
*clk分别为状态转移时钟,reset为复位信号
*
*Output PortosOut输出当前电梯所在的楼层,DoorFlag为开门标志,UpDnFlag为电梯上下标志
*LiftState输出当前电梯的状态.
*PosOut取值可为4'b0001,4'b0010,4'b0100,4'1000,分别代表电梯处在1,2,3,4楼。这样编码的话,有利于后面的比较判断。
*DoorFlag取值可为1'b0,1'b1,分别代表当前门是关闭和当前门是打开的。
*UpDnFlag取值可为2'b00,2'b01,2'b10,分别代表当前电梯是上升的,下降的和静止的。
*LiftState取值可为7'b0000001,7'b0000010,7'b0000100,7'b0001000,7'b0010000,7'b0100000,7'b1000000,
*分别电梯处于等待模式、上升模式、下降模式、上升停止,下降停止、开门和关门等7个状态。
*
*Detailed Illustration:电梯在上述七个状态间的转移是通过三段式状态机来实现的,各状态间的转移
*大体与生活中的电梯运转一致,有如下的基本原则:
*1、方向为第一优先准则,这就是说电梯在运转时先响应同方向上的请求,只有当同方向上的请求
*响应完后,才能转而响应不同方向上的请求。
*2、电梯处于等待模式时,其同时受到多个请求激发时,进入哪个模式,依次由内部请求、向上请求和向下请求
*决定,请参考源程序理解这一点。
*3、电梯的初始化状态为1楼等待门是关闭的
*
*Author:EI HUST bripengandre
*Email:bripengandre@126.com (or bripengandre@smail.hust.edu.cn)
*
*bug:No bug has been found up to now.
***************************************************************************************/
module StateShift(PosOut, DoorFlag, UpDnFlag, LiftState, clk, reset, F1Up, F2Up, F3Up
         ,F2Dn, F3Dn, F4Dn, F1Stop, F2Stop, F3Stop, F4Stop);
//各端口的意义,请参见最前面的模块简介中的相关说明
  output [3:0] PosOut;
  output DoorFlag;
  output [1:0]UpDnFlag;
  output [6:0] LiftState;
  input clk,reset,F1Up,F2Up,F3Up,F2Dn,F3Dn,F4Dn,F1Stop,F2Stop,F3Stop,F4Stop;
//pos与Posout的关系:当前状态一改变,pos立即作相应改变,而PosOut则是当前状态在要变到下一状态的瞬间
//,将PosOut作相应改变。如从WAIT切换到第一个UP时,pos立即加一,而PosOut则要等到第一个UP
//即将切换到第二个UP时,才加一。
  reg [3:0]pos,PosOut;
  reg[2:0] count;//门开后要持续4个时钟周期,用count来计数
  reg DoorFlag;
  reg [1:0] UpDnFlag;
  reg [6:0] LiftState,NextState;//分别表示电梯的当前状态和下一状态
//UpReq,DownReq,StopReq分别用来合并向上请求的各信号,向下请求的各信号和停靠请求的各信号
//以便判断电梯在状态间如何转移时更简洁
  reg [3:0] UpReq,DownReq,StopReq;
//定义电梯7种状态的符号常量
  parameter WAIT=7'b0000001, UP=7'b0000010, DOWN=7'b0000100, UPSTOP=7'b0001000
  , DOWNSTOP=7'b0010000, OPENDOOR=7'b0100000, CLOSEDOOR=7'b1000000;
//定义楼层的符号常量
  parameter FLOOR1=4'b0001, FLOOR2=4'b0010, FLOOR3=4'b0100, FLOOR4=4'b1000;
  parameter TRUE=1'b1, FALSE=1'b0;
//定义门打开和门关闭的符号常量
  parameter OPEN=1'b1, CLOSED=1'b0;
//定义电梯上升,下降和静止的符号常量
  parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;
  
//将各上升请求信号实时地合并(4楼为顶层,无上升请求,考虑到通用性,将第4位填零)
  always @(F1Up or F2Up or F3Up )
    UpReq={1'b0,F3Up,F2Up,F1Up};     
//将各下降请求信号实时地合并(1楼为底层,无下降请求,考虑到通用性,将第1位填零)
  always @(F2Dn or F3Dn or F4Dn)
    DownReq={F4Dn, F3Dn, F2Dn,1'b0};
//将各停靠请求信号实时地合并  
  always @(F1Stop or F2Stop or F3Stop or F4Stop)
     StopReq={F4Stop, F3Stop, F2Stop, F1Stop};
//1st StateShift always block,sequential state transition
  always @(posedge clk or posedge reset)
    if(reset)
      begin
        LiftState<=WAIT;
      end
    else
      LiftState<=NextState;

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
心念西南 发表于 2011-5-17 16:05:10 | 显示全部楼层
好东西啊!
mylove1122 发表于 2011-12-21 19:38:43 | 显示全部楼层
灰常谢谢楼主的分享
zhonglinlynn 发表于 2012-8-28 09:32:05 | 显示全部楼层
感谢楼主无私分享!!!
爱你小瑕仔 发表于 2013-1-31 23:24:02 | 显示全部楼层
很好的学习平台
NHR 发表于 2017-7-3 10:57:48 | 显示全部楼层
谢谢楼主 能不能分享下管脚配置

fpga_wuhan 发表于 2017-7-3 17:16:01 | 显示全部楼层
课程设计--电梯控制器
d643189658 发表于 2017-8-11 19:09:08 | 显示全部楼层
谢谢楼主的分享
雷磊 发表于 2022-12-7 17:13:47 | 显示全部楼层
常用模块的Verilog_HDL设计
http://www.fpgaw.com/forum.php?m ... 3&fromuid=54563
(出处: fpga论坛|fpga设计论坛)
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-18 21:53 , Processed in 0.087510 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表