在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2560|回复: 0

[原创] 状态机的跑马灯设计

[复制链接]
发表于 2011-5-3 20:50:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-3 22:23 , Processed in 0.018553 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表