集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3245|回复: 1

三段式状态机书写

[复制链接]
cgq081616 发表于 2015-7-28 09:15:04 | 显示全部楼层 |阅读模式
常用的状态机分为一段式、二段式、三段式。
大家对于一段式的写法并不陌生,初学fpga的人都经常用一段式去写程序,
三段式状态机的原理和源码,大家都可以在网上找到。网上的程序都是完整的程序,
看起来比较啰嗦和麻烦,我这里只是简单的把三段式用代码的形式概括一下。
1.把下一状态给当前状态
always@(posedge clk, posedge rst)
     begin
          if(rst)
               state <= S_IDLE;
          else
               state <= next_state;
     end
2.根据条件给下一状态赋值
     always @(*)
     begin
          case(state)
               S_IDLE: begin
                    if(a)
                         next_state = S_A;
                    else if(b&valid_r)
                       next_state = S_B;
                    else
                         next_state = S_IDLE;                  
               end
               S_A: begin
                    if(c)
                         next_state = S_IDLE;
                    else
                         next_state = S_A;
               end
               default: begin
                    next_state = 'bx;
               end
          endcase
     end
  3.根据下一状态做处理
     always@(posedge clk, posedge rst)
     begin
          if(rst) begin
                    b <= 'bx;
                         c <= 0;
          end
          else begin
               case(next_state)
                    S_IDLE: begin
                        
                         c <= 0;
                    end
                    S_A,S_B: begin
                         b <= 1;
                         c <= 1;
                         valid_r <= 1;
                    end
                    S_C: begin
                         if(nnn)
                        
                         else
                    end
               endcase
          end
     end

如果有不合理或者有想法的朋友请留言,大家一起去学习fpga,共同成长。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

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

GMT+8, 2024-5-29 17:49 , Processed in 0.066853 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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