📄 l_cu.v
字号:
`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// Company: // Engineer://// Create Date: 08:51:20 01/09/07// Design Name: // Module Name: l_cu// Project Name: // Target Device: // Tool versions: // Description://// Dependencies:// // Revision:// Revision 0.01 - File Created// Additional Comments:// ////////////////////////////////////////////////////////////////////////////////module l_cu(clk_i,rst_i,re_in,open,close,floor,stop,oopen,cclose,clear,move,FLE,request,call,pv_in,pv_out,le); input clk_i; input rst_i; input re_in; // 重新输入数据 //input set; //set 为1时可以直接置数。 input open; //手动open信号 input close; //手动close信号 input [2:0] floor; //电梯在哪一层。 input stop; //要不要停。。。 input pv_in; output oopen; //给电梯的open信号 output cclose; //给电梯的close信号 output clear; //电梯目的寄存器清零信号 output move; //电梯继续动使能信号//引出灯开显示电梯在运行(上,下楼中) output FLE; //楼层变化使能信号 output request; //请求调度信号 output call; output pv_out,le; reg oopen; reg cclose; reg clear; reg move; reg FLE; reg request; reg call; reg pv_out,le; reg [3:0] state; reg [3:0] temp; // wire sstop_out; // regis #(1) sstop(.register_in(stop),.register_out(sstop_out), .reset(rst_i), .clk(stop), .clr(FLE)); always @ (posedge clk_i or negedge rst_i) begin if(!rst_i) begin state <= 4'b0000; //state = 111 时,idle temp <= 4'b0000; end else begin case (state) 4'b0000: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else if(pv_in) begin temp <= state+ 1; state <= 'b1111; end else begin state <= 4'b0001; end end 4'b0001: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else state <= 4'b0010; end 4'b0010: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else state <= 4'b0011; end 4'b0011: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else if(!stop) begin state <= 4'b0000; end else if(close) state <= 4'b0101; else state <= 4'b0100; end 4'b0100: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else if(close) state <= 4'b0101; else state <= 4'b0101; end 4'b0101: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else begin if(open) state <= 4'b0011; else state <= 4'b0110; end end 4'b0110: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else state <= 4'b0111; end 4'b1110: begin if(re_in) begin temp <= state + 1; state <= 'b1111; end else state <= 4'b0000; end 4'b1111: begin if(re_in) state <= 4'b1111; else if(!pv_in) begin state <= temp; end else state <= 'b1111; end default: begin if(re_in ) begin temp <= state + 1; state <= 'b1111; end else state <= state + 1; end endcase end end always @ (state or pv_in or rst_i) begin FLE = 'b0; oopen = 'b0; cclose = 'b0; clear = 'b0; move = 'b0; request = 'b0; call = 'b0; pv_out = 0; le = 0; state = state; case (state) 4'b0000: begin if(!rst_i) FLE = 'b0; ///??????? else begin FLE = 'b1; if(pv_in) pv_out = 0; else begin pv_out = 1; le = 1; end end end 4'b0001: request = 'b1; 4'b0010:// if(sstop_out) //在该层停留才开门 call = 'b1; 4'b0011: begin if(stop) begin oopen = 'b1; end else begin oopen = 'b0; end pv_out = 0; le = 1; end // begin end 4'b0100: begin if(open) begin oopen = 'b1; end else begin oopen = 'b0; end if (close) begin cclose = 'b1; end else begin cclose = 'b0; end end 4'b0101: begin if(!open) cclose = 'b1; else cclose = 'b0; if(open) oopen = 'b1; else oopen = 'b0; end 4'b0110: begin move = 'b1; end //请求调度信号 4'b1111: begin if(temp == 4'b0001 && !pv_in) begin pv_out = 1; le = 1; end else pv_out = 0; end default: begin FLE = 'b0; request = 'b0; call = 'b0; oopen = 'b0; cclose = 'b0; end endcase endendmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -