VerilogHDL电梯程序文件.docx

上传人:b****2 文档编号:2162861 上传时间:2023-05-02 格式:DOCX 页数:14 大小:16.10KB
下载 相关 举报
VerilogHDL电梯程序文件.docx_第1页
第1页 / 共14页
VerilogHDL电梯程序文件.docx_第2页
第2页 / 共14页
VerilogHDL电梯程序文件.docx_第3页
第3页 / 共14页
VerilogHDL电梯程序文件.docx_第4页
第4页 / 共14页
VerilogHDL电梯程序文件.docx_第5页
第5页 / 共14页
VerilogHDL电梯程序文件.docx_第6页
第6页 / 共14页
VerilogHDL电梯程序文件.docx_第7页
第7页 / 共14页
VerilogHDL电梯程序文件.docx_第8页
第8页 / 共14页
VerilogHDL电梯程序文件.docx_第9页
第9页 / 共14页
VerilogHDL电梯程序文件.docx_第10页
第10页 / 共14页
VerilogHDL电梯程序文件.docx_第11页
第11页 / 共14页
VerilogHDL电梯程序文件.docx_第12页
第12页 / 共14页
VerilogHDL电梯程序文件.docx_第13页
第13页 / 共14页
VerilogHDL电梯程序文件.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VerilogHDL电梯程序文件.docx

《VerilogHDL电梯程序文件.docx》由会员分享,可在线阅读,更多相关《VerilogHDL电梯程序文件.docx(14页珍藏版)》请在冰点文库上搜索。

VerilogHDL电梯程序文件.docx

VerilogHDL电梯程序文件

这个程序不需要你再添加任何的程序,你只需要添加楼层数就可以成功控制6层以上电梯,另外你必须得读懂每一块程序的作用,才能对这个程序有更好的应用

moduledtsj(clk,reset,up1,up2,up3,up4,up5,dn2,dn3,

dn4,dn5,dn6,d1,d2,d3,d4,d5,d6,overw,pro,led,hex,Buzzer1,lig);

inputclk,reset;//reset键使用key

inputoverw,pro,up1,up2,up3,up4,up5,dn2,dn3,dn4,dn5,dn6,d1,d2,d3,d4,d5,d6;//故障警报键

output[6:

0]hex,lig;//light和led用数码管

output[5:

0]led;

outputBuzzer1;

regBuzzer1,door;

reg[6:

0]hex,lig;

reg[2:

0]state,next_state,count;

reg[5:

0]d,up,dn,now_f,curr,led;//d是内部按键,up外部上升按键,dn是外部下降按键,

//now_f是当前楼层,curr是当前楼层的另外一个变量

reg[1:

0]ud_f;//上升下降标志位

reglight;

//reg[29:

0]counter;

//regclkout;

parameter

idle_state=3'b001,open_state=3'b010,close_state=3'b011,

up_state=3'b100,down_state=3'b101,sleep_state=3'b110,

alarm_state=3'b111,f1=6'b000001,f2=6'b000010,f3=6'b000100,f4=6'b001000

f5=6'b010000,f6=6'b100000,up_f=2'b01,dn_f=2'b10,idle=2'b00;

//jiuzhongzhuangtaiheshangshengzhuangtai'shangshengzhuangtaihexiajiazhuangtai

initial

begin

state<=idle_state;

end

always@(posedgeclkorposedgereset)

if(reset)

state<=idle_state;

else

state<=next_state;

always@(stateorupordnordornow_forcountorud_f)

case(state)

open_state:

begin

if(count<5)

next_state=open_state;

else

next_state=close_state;

end

sleep_state:

begin

if((up||dn||d||ud_f)==0)

begin

next_state=close_state;

end

else

next_state=idle_state;

end

idle_state:

//初始状态

begin

if((up||dn||d||ud_f)==0)

next_state=sleep_state;

if(!

overw||pro==1)

next_state=alarm_state;

elseif(d>0)

begin

if((d&now_f)>0)

next_state=open_state;

elseif(d>now_f)

next_state=up_state;

else

next_state=down_state;

end

elseif((up&now_f)||(dn&now_f))

next_state=open_state;

elseif((up>now_f)||(dn>now_f))

next_state=up_state;

elseif(up||dn)

next_state=down_state;

else

next_state=idle_state;

end

up_state:

begin

if((up||dn||d||ud_f)==0)

next_state=sleep_state;

if(!

overw||pro==1)

next_state=alarm_state;

elseif((d&now_f)||(up&now_f))

next_state=open_state;

elseif((d>now_f)||(up>now_f))

next_state=up_state;

elseif((d

next_state=down_state;

elseif(dn>0)

begin

if(dn>now_f)

next_state=up_state;

elseif((dn&now_f)||(now_f

next_state=open_state;

elseif((dn&now_f)&&(now_f==f6))

next_state=open_state;

else

next_state=down_state;

end

else

next_state=idle_state;

end

down_state:

begin

if((up||dn||d||ud_f)==0)

next_state=sleep_state;

elseif(!

overw||pro==1)

next_state=alarm_state;

elseif((d&now_f)||(dn&now_f))

next_state=open_state;

elseif(((d

=6'b000001))||((dn

=6'b000001)))

next_state=down_state;

elseif((d>now_f)||(dn>now_f))

next_state=up_state;

elseif(up>0)

begin

if(up

next_state=down_state;

elseif((up&now_f)&&(now_f>f1))

next_state=down_state;

elseif((up&now_f)&&(now_f==f1))

next_state=open_state;

else

next_state=up_state;

end

else

next_state=idle_state;

end

close_state:

begin

if((up||dn||d||ud_f)==0)

next_state=sleep_state;

elseif(!

overw||pro==1)

next_state=alarm_state;

elseif(ud_f==up_f)

begin

if((d&now_f)||(up&now_f))

next_state=open_state;

elseif((d>now_f)||(up>now_f))

next_state=up_state;

elseif(d||up)

next_state=down_state;

elseif(dn>0)

begin

if(dn>now_f)

next_state=up_state;

elseif((dn&now_f)>0)

next_state=open_state;

else

next_state=down_state;

end

else

next_state=idle_state;

end

elseif(ud_f==dn_f)

begin

if((d&now_f)||(dn&now_f))

next_state=open_state;

elseif(((d

=6'b000000))||((dn

=6'b000000)))

next_state=down_state;

elseif(d||dn)

next_state=up_state;

elseif(up>0)

begin

if(up

next_state=down_state;

elseif((up&now_f)>0)

next_state=open_state;

else

next_state=up_state;

end

else

next_state=idle_state;

end

else

begin

if(d>0)

begin

if((d&now_f)>0)

next_state=open_state;

elseif(d>now_f)

next_state=up_state;

else

next_state=down_state;

end

elseif((up&now_f)&&(dn&now_f))

next_state=open_state;

elseif((up>now_f)&&(dn>now_f))

next_state=up_state;

elseif(up||dn)

next_state=down_state;

else

next_state=idle_state;

end

end

alarm_state:

begin

if(!

overw||pro==1)

begin

//Buzzer1<=1'b1;

next_state=open_state;

end

else

begin

//Buzzer1<=1'b0;

if(d>0)

begin

if((d&now_f)>0)

next_state=open_state;

elseif(d>now_f)

next_state<=up_state;

else

next_state=down_state;

end

elseif((up&now_f)||(dn&now_f))

next_state=open_state;

elseif((up>now_f)||(dn>now_f))

next_state=up_state;

elseif(up||dn)

next_state=down_state;

else

next_state=idle_state;

end

end

default:

next_state<=idle_state;

endcase

always@(up1orup2orup3orup4orup5)

up={1'b0,up5,up4,up3,up2,up1};

always@(dn2ordn3ordn4ordn5ordn6)

dn={dn6,dn5,dn4,dn3,dn2,1'b0};

always@(d1ord2ord3ord4ord5ord6)

d={d6,d5,d4,d3,d2,d1};

always@(posedgeclkorposedgereset)

begin

if(reset)

count<=0;

elseif((next_state==open_state)&&(count<5))

count<=count+1;

else

count<=0;

end

always@(posedgeclkorposedgereset)

//always@(resetornext_state)

if(reset)

begin

now_f<=f1;

ud_f<=idle;

led<=6'b000001;

light<=1'b0;

end

else

begin

now_f<=now_f;

curr=now_f;

case(next_state)

idle_state:

begin

now_f<=now_f;

ud_f<=idle;

led<=led;

curr<=now_f;

Buzzer1<=1'b0;

end

up_state:

begin

now_f<=now_f<<1;

ud_f<=up_f;

led<=led+1;

curr<=now_f;

end

down_state:

begin

now_f<=now_f>>1;

ud_f<=dn_f;

led<=led+1;

curr<=now_f;

end

open_state:

begin

now_f<=now_f;

ud_f<=ud_f;

led<=led;

door<=1'b1;

light<=door;

curr<=now_f;

end

close_state:

begin

now_f<=now_f;

ud_f<=ud_f;

led<=led;

curr<=now_f;

door<=1'b0;

light<=door;

end

alarm_state:

begin

now_f<=now_f;

ud_f<=ud_f;

led<=led;

Buzzer1<=1'b1;

curr<=now_f;

door<=1'b1;

light<=door;

end

sleep_state:

begin

now_f<=now_f;

ud_f<=ud_f;

led<=6'b000000;

curr<=now_f;

end

default:

begin

now_f<=f1;

ud_f<=idle;

led<=led;

end

endcase

end

always@(curr)

begin

case(curr)

6'b000001:

hex=7'b1111001;//数码管共阴共阳

6'b000010:

hex=7'b1000100;

6'b000100:

hex=7'b0110000;

6'b001000:

hex=7'b0011001;

6'b010000:

hex=7'b1101101;

6'b100000:

hex=7'b1111101;

default:

hex=7'b0000000;

endcase

end

always@(light)

begin

case(light)

1'b0:

lig=7'b1000000;//1'b1:

lig=7'b1000000;

1'b1:

lig=7'b1111001;

default:

light=7'b0000000;

endcase

end

//分频程序

/*always@(posedgeclk)

begin

if(counter[29:

0]==24999999)

begin//每计到4个(0~3)上升沿,输出信号翻转一次

counter<=0;

clkout<=~clkout;

end

else

counter[29:

0]<=counter[29:

0]+1'b1;

end*/

endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2