【FSM状态机绘制小工具】


对于工程师写代码来说,经常避免不了要使用状态机的方法来指导编程;
并且尤其对于我这样的使用画图软件来画状态机,比较丑陋,比较拿不出来对外面交流;
------->需求:比如使用类似使用JSON格式来描述状态机,然后进行转化成状态机工具<--------------

1 描述版状态机小工具

1.1 Mermaid

https://mermaid.js.org/syntax/stateDiagram.html
这个打开方便,并且提供了一个很好的demo示例,方便快速上手;
在这里我提供一个我改写状态机的例子:

---
title: TLP_DESC_FSM
---
%%test for diagram draw
%%  stateDiagram-v2
    %%[*] --> IDLE
    %%IDLE --> [*]

    %%IDLE   --> Moving
    %%Moving --> IDLE
    %%Moving --> Crash
    %%Crash --> [*]

stateDiagram-v2
    %%======================================================================
    %%===========================State Declare==============================
    %%======================================================================
    State1: IDLE
    State2: DESC_ERR_CHK
    State3: DESC_CALU_TLP_DESC
    State4: DESC_CACHE_UPDATE
    State5: DESC_TLP_GEN

    %%======================================================================
    %%===========================State Transition Jumb======================
    %%======================================================================
    [*]     --> State1
    State1  --> State2: packet_ready && cache_ready
    State2  --> State3: 
    State3  --> State4: 
    State4  --> State5: 

    State5  --> Self: if not desc_eop
    Self    --> State5: If not desc_eop

    Self    --> [*]

    %%======================================================================
    %%===========================State Action Output========================
    %%======================================================================
    %% IDLE: do nothing, wait for the preparation
    %% DESC_ERR_CHECK: Do the mrlg error check; Just as talked before,Mainly the length check
    %%%%%%% 1.to get the reg: mrlg_err_code;
    %% 

生成状态机图如下图所示:

在这里一个不好的是,无法状态进行自己循环指自己,在这里我借助一个Self状态来中转表达一下;

1.2 Graphviz绘制状态机–Dot语言

https://liutos.github.io/2020/05/07/%E7%A8%8B%E5%BA%8F%E5%91%98%E7%89%B9%E6%9C%89%E7%9A%84%E7%94%BB%E5%9B%BE%E6%96%B9%E5%BC%8F%E2%80%94%E2%80%94%E8%AF%AD%E7%BB%98%E5%B7%A5%E5%85%B7%E5%B0%8F%E5%85%A5%E9%97%A8/

-------> https://www.cnblogs.com/chunk998/p/16814606.html
-------> https://graphviz.gitlab.io/Gallery/directed/fsm.html
-------> 直接更方便安装在VS code的插件上;十分的方便; https://marketplace.visualstudio.com/items?itemName=Stephanvs.dot
这个也是提供非常好的demo来使用

# https://hifpga.com/fsm/
#状态机示例
digraph fsm {
"a" -> "a" [label= "0/0"]
"a" -> "b" [label= "1/0"]
"b" -> "c" [label= "0/0"]
"b" -> "d" [label= "1/0"]
"c" -> "a" [label= "0/0"]
"c" -> "d" [label= "1/0"]
"d" -> "e" [label= "0/0"]
"d" -> "f" [label= "1/1"]
"e" -> "a" [label= "0/0"]
"e" -> "f" [label= "1/1"]
"f" -> "f" [label= "1/1"]
"f" -> "g" [label= "0/0"]
"g" -> "a" [label= "0/0"]
"g" -> "f" [label= "1/1"]
}

使用命令:dot eg.dot -T svg -o eg.svg

在这里插入图片描述

可以换成另一种风格的状态机风格:

命令:dot eg.dot -K circo -T png -o eg.png

在这里插入图片描述

1.3 安装软件使用

https://github.com/pytransitions/transitions?tab=readme-ov-file 不推荐相信上手入门还是有点时间成本的;

目前我用的是在线版的,但后续指定要转移到VScode插件上来更加方便使用;这也是最方便的;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值