关于有限状态机FSM同步复位的问题

本文探讨了有限状态机(FSM)中同步复位的设计方法,提供了两种不同的实现方案,并讨论了它们的应用场景。一种是在状态机的主要逻辑中直接处理复位信号,另一种则在每个状态内部单独检查复位条件。

FSM通常情况下使用异步信号进行复位,如FSM1中的rst_n信号。当rst_n信号为低时,FSM进入空闲状态IDLE。

在某些特殊情况下有可能需要跟随某个外部信号强制切换到空闲状态,也即同步复位。下面给出了两种同步复位的写法,请各位指教。

如果有什么更好的实现方法,还望不吝赐教。

//FSM1
localparam IDLE = 0,
           S1   = 1,
           S2   = 2;
always@(posedge clk, negedge rst_n)
begin
    if(!rst_n)
        cs <= IDLE;
    else if(reset)
        cs <= IDLE;
    else 
        cs <= ns;
end
always@*
begin
    ns = IDLE;
    case(cs)
    IDLE: if(a) ns = S1 else ns = IDLE;
    S1: if(b) ns = S2 else ns = S1;
    S2: ns = IDLE;  
    default: ns = IDLE;
    endcase
end

//FSM2
localparam IDLE = 0,
           S1   = 1,
           S2   = 2;
always@(posedge clk, negedge rst_n)
begin
    if(!rst_n)
        cs <= IDLE;
    else 
        cs <= ns;
end
always@*
begin
    ns = IDLE;
    case(cs)
    IDLE: if(reset) ns = IDLE; else if(a) ns = S1 else ns = IDLE;
    S1: if(reset) ns = IDLE; if(b) ns = S2 else ns = S1;
    S2:if(reset) ns = IDLE; ns = IDLE;    
    default: ns = IDLE;
    endcase
end

  

转载于:https://www.cnblogs.com/hujianhua/p/3735272.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值