FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

MarkdownエディタTyporaでMarkdownテキストを用いて図を書く方法

f:id:msyksphinz:20210801001845p:plain

最近は回路図やブロックダイアグラムを除いて、シーケンス図やステートマシンなどを図形エディタで書くのが面倒くさくなってしまっており、MarkdownエディタであるTyporaの図形描画機能を使っている。

ここのページに上手くまとめられている。

qiita.com

最近便利で重宝しているのはステートマシンを書く方法。テキストで、ノードからノード、条件を羅列すれば自動的にステートマシンのブロックを構成してくれる。とても便利。

こんな感じで書けばステートマシンを構成できる。

 ```mermaid
graph TB

STQ_INIT --> |dispatch load| STQ_ISSUE_WAIT
STQ_ISSUE_WAIT --> |flush| STQ_DEAD
STQ_ISSUE_WAIT --> |ready to pick| STQ_ISSUED

STQ_ISSUED --> |flush| STQ_DEAD
STQ_ISSUED --> |ex1_update & TLB hazard| STQ_TLB_HAZ
STQ_ISSUED --> |ex1_update & TLB get PA & !rs2ready| STQ_WAIT_ST_DATA
STQ_ISSUED --> |ex1_update & TLB get PA & rs2ready| STQ_DONE_EX2
STQ_ISSUED --> |ex1_update & source mispredicted| STQ_ISSUE_WAIT

STQ_TLB_HAZ --> |flush| STQ_DEAD
STQ_TLB_HAZ --> |!flush| STQ_DONE_EX3

STQ_DONE_EX3 --> |flush| STQ_DEAD
STQ_DONE_EX3 --> |!flush| STQ_WAIT_COMMIT

STQ_WAIT_COMMIT --> |flush| STQ_DEAD
STQ_WAIT_COMMIT --> |commit & match| STQ_COMMIT

STQ_COMMIT --> |sq_op_accept| STQ_COMMIT_L1D_CHECK

STQ_COMMIT_L1D_CHECK --> |L1D read miss| STQ_WAIT_LRQ_REFILL
STQ_COMMIT_L1D_CHECK --> |L1D read conflict| STQ_COMMIT
STQ_COMMIT_L1D_CHECK --> |found evict merge| STQ_INIT
STQ_COMMIT_L1D_CHECK --> |L1D read hit| STQ_L1D_UPDATE

STQ_L1D_UPDATE --> |L1D write conflict| STQ_COMMIT
STQ_L1D_UPDATE --> |!L1D write conflict| STQ_INIT

STQ_DEAD --> |STQ commit update| STQ_INIT
 ```
f:id:msyksphinz:20210801001334p:plain

もう一つはシーケンス図。こんな感じでブロック間の関係図を書くのが便利。これもテキストで書いている。

 ```sequence
participant LDQ_entry[*] as ldq
participant LSU Pipeline as lspipe
participant L1D as l1d
participant STQ as stq
participant Store Requester as streq

ldq -> lspipe: LSU Issue

lspipe -> l1d: Hit / Read check
l1d --> lspipe: Hit / read resp

lspipe -> stq: Forwarding check
stq --> lspipe: Forwarding resp

lspipe -> streq: Forwarding check
streq --> lspipe: Forwarding resp

Note over lspipe: Read Data write into register
 ```
f:id:msyksphinz:20210801001641p:plain