verilog三段式状态机伸手就拿凑合用版

最近在做fpga逻辑实现数据帧头拼接分包时刚接触状态机,随便记一点目前的入门理解。
一段二段不用就没管了,直接无脑三段式。
首先,三段式状态机是因为代码从外部看上去分成三块,分别描述状态机的切换状态时间,切换状态条件,不同状态下的操作。直接上模板,管你听没听懂,套就完了!

step1:变量定义
如下面例子中,仅使用三个状态,则定义一个两位状态寄存器即可,更多状态可根据需求拓展。

reg [1:0] current_state,next_state
parameter ini_state = 2'b00;
parameter state1 = 2'b01;
parameter state2 = 2'b10;

step2:
三段式状态机其一,时序迁移模块

always @(posedge clk or reset)
begin
    if(!M00_AXI_aresetn)
        current_state <= ini_state;
    else
        current_state <= next_state;
end

step3:
三段式状态机其二,状态迁移模块

always @ (/填入状态跳转条件下的所有信号名称/)
begin
    if(!reset) 
        next_state = ini_state;  //复位了,回初始状态
    else
        current_state <= next_state //进入下一状态
    case(current_state)
    ini_state: begin
    		   if(/判断条件/)next_state = state1; //例:在xx条件下,从ini切到state1状态
    		   else next_state = ini_state;
    		   //想切别的状态各个儿加
    	       end	   
    state1; begin
               if(/判断条件/)next_state = state2; //例:在xx条件下,从state1切到state2状态
               else next_state = ini_state;
               //想切别的状态各个儿加
            end    
    		
    state2: begin
               if(/判断条件/)next_state = state1; //例:在xx条件下,从state2切回state1状态
               else next_state = ini_state;
               //想切别的状态各个儿加
            end    

step4:
三段式状态机其三,功能模块

就是每个状态下你想干啥。

always @ (*) begin
    case(current_state)
    inni_state:		begin
    			//ini状态下干的事儿//
    			end
    state1;		begin
    			//state1状态下干的事儿//
    			end
    state2;		begin
    			//state1状态下干的事儿//
    			end
   default:		begin
   			//默认//
   			end
   endcase
 end


Fin

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值