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

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

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

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

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

//FSM1

localparam IDLE = 0,

           S1   = 1,

           S2   = 2;

[email protected](posedge clk, negedge rst_n)

begin

    if(!rst_n)

        cs <= IDLE;

    else
if(reset)

        cs <= IDLE;

    else

        cs <= ns;

end

[email protected]*

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;

[email protected](posedge clk, negedge rst_n)

begin

    if(!rst_n)

        cs <= IDLE;

    else

        cs <= ns;

end

[email protected]*

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

  

关于有限状态机FSM同步复位的问题,布布扣,bubuko.com

时间: 2024-12-15 10:59:24

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

cocos2d-x 游戏开发之有限状态机(FSM) (四)

cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge.net/)就是这样的工具.下载地址: http://sourceforge.net/projects/smc/files/latest/download 在bin下面的Smc.jar是用于生成状态类的命令行工具.使用如下命令: $ java -jar Smc.jar Monkey.sm 1 真实世

FPGA中的同步复位与异步复位

1.异步复位 always @ ( posedge sclk or negedge s_rst_n ) if ( !s_rst_n ) d_out <= 1'b0; else d_out <= a; 综合出来的RTL视图如下所示: 从图中可以看到寄存器d_out有一个低电平有效的复位信号s_rst_n端口,即使设计是高电平复位,实际综合后也会把异步复位信号反向后接到这个CLRN端: 2.同步复位 always @ ( posedge sclk ) if ( !s_rst_n ) d_out &

cocos2d-x 游戏开发之有限状态机(FSM) (三)

cocos2d-x 游戏开发之有限状态机(FSM) (三) 有限状态机简称FSM,现在我们创建一个专门的FSM类,负责管理对象(Monkey)的状态.然后Monkey类就实现了行为与状态分离.Monkey类只负责自己的行为,MonkeyFSM作为Monkey的成员,负责状态调度.MonkeyFSM调用状态模式类的方法,状态模式类调用真实对象Monkey的方法.注意本文例子代码只是为了说明问题,并不能真正用于实际当中.其中Monkey与MonkeyFSM互相保存对方的指针,存在循环引用问题. 代码

Atitit. 有限状态机 fsm 状态模式

Atitit. 有限状态机 fsm 状态模式 1. 有限状态机 1 2. "状态表"和"状态轮换表" 1 3. 有限状态机概念(状态(State)事件(Event)转换(Transition) 动作(Action) 2 4. 状态机的应用场景 2 4.1. ,"有限状态机"在游戏的人工智能方面是很有用处的. 2 4.2. 用状态机模式消除复杂的 if else 逻辑 2 4.3. 源码文本处理状态机 2 4.4. 正则表达式(regexp),判断

算法学习笔记(九)有限状态机 FSM 的应用

一个问题:Beautiful String 这是2014微软校招的编程题,题意大致如下: 如果一个字符串包括三组或者更多组的连续升序字母,每组长度相等,那么我们就称这个字符串是Beautiful String 符合Beautiful String举例:abc, cde, aabbcc, aaabbbccc 不符Beautiful String举例:abd,cba,aabbc,zab 输入一个只含有小写字母的字符串,如果它含有一个Beautiful的子串,就输出YES,否则输出NO 输入: 第一行

FPGA基础之同步复位与异步复位

1.异步复位 //异步复位 always @ (posedge clk or negedge i_rst) if (!i_rst) begin a <= 1'b0; end else begin a <= 1'b1; end 2.同步复位 //同步复位 always @ (posedge clk ) if (!i_rst) begin b <= 1'b0; end else begin b <= 1'b1; end RTL视图 总结: 同步复位  缺点:占用了更多的逻辑资源,优点:

cocos2d-x 游戏开发之有限状态机(FSM) (二)

cocos2d-x 游戏开发之有限状态机(FSM)  (二) 1 状态模式 State是状态基类.它其实是一个接口,它有3个实现类,分别对应每个状态.Monkey类只需要维护State类,而具体的行为通过3个实现类完成.这就是多态.下面是完整的代码: 2 状态基类 // State.h // #ifndef STATE_H_ #define STATE_H_ class Monkey; struct State { virtual void execute(Monkey *mk) = 0; };

cocos2d-x 游戏开发之有限状态机(FSM) (一)

cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游戏开发之旅>(钟迪龙) 基本上所有的软件都是有限状态机(finite-state machine,FSM).它是一个有向图,由一组节点和一组相应的转移函数组成.通俗点讲,它是一个事件驱动系统的模型,这个模型由有限数目的状态,若干输入和状态与状态之间转换的规则组成.在某一时刻,有一个或一组状态是FSM的当

同步复位和异步复位二者各自的优缺点是什么呢?

同步复位:当时钟上升沿检测到复位信号,执行复位操作(有效的时钟沿是前提).always @ ( posedge clk ); 优点: a.有利于仿真器的仿真:b.可以使所设计的系统成为 100% 的同步时序电路,有利于时序分析,而且可综合出较高的 Fmax:c.由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺. 缺点: a.复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务.同时还要考虑诸如 clk skew .组合逻辑路径延时 .复位延时等因素(所以复位信