|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
请问哪位大侠那有利用状态机的跑马灯设计啊?四个状态:从左到右依次亮,从右到左依次亮,亮灭交替,全灭;四个状态之间的转换利用一个按键来实现!谢谢各位大侠指点啊!下面是我设计的代码,用了两个模块,不过是在按键的情况下,只在状态0和状态2之间来回转换,不知道是怎么回事,希望各位给指正修改修改,能实现预期的效果!再次感谢!
module paomadeng(clk,q,dataout,rst);
input clk,dataout,rst;
output [7:0] q;
reg [7:0] q;
reg[1:0] state,next_state;
parameter state0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;
always @(posedge clk)
begin
if (rst)
begin
state=state0;
q=8'b00000000;
end
else
state=next_state;
case(state)
state0:
begin
if(dataout)
begin
q='b00000001;
next_state=state1;
end
else
begin
if(q==8'b00000000)
begin
q='b10000000;
end
else
begin
q=q>>1;
next_state=state0;
end
end
end
state1:
begin
if(dataout)
begin
q='b11111111;
next_state=state2;
end
else
if(q==8'b00000000)
q=8'b000000001;
else
begin
q=q<<1;
next_state=state1;
end
end
state2:
begin
if(dataout)
begin
q='b00000000;
next_state=state3;
end
else
begin
q=~q;
next_state=state2;
end
end
state3:
begin
if(dataout)
begin
q='b10000000;
next_state=state0;
end
else
begin
q='b00000000;
next_state=state3;
end
end
endcase
end
endmodule
module key(clk,key,dataout);
input clk,key;
output dataout;
reg dataout;
always @(posedge clk or posedge key)
begin
if(key)
dataout<=1;
else
dataout<=0;
end
endmodule |
|