RiscVの内部動作モニタに、Python cmdライブラリを使ってみました話
最近、RISCVとuartが使えるようになったので、RiscVの内部挙動を確認できるように、モニタを作ってみることにしました。
ひとまず、以下をモニタ可能にしてみました。
- PCとして命令アドレス
- 内部レジスタダンプ
で、ハード的にモニタ可能にしたあとは、ターミナルコンソールが欲しくなります。 そんなわけで、最初はwhile loop内にinputと条件分岐で自作ターミナルを作成していました。 あぁ懐かしいなー、z80で自作したコンソールを思い出しながら、楽しく書いていました。
で、ふと最先端言語のpythonならライブラリあるんじゃないかと思いました。 で調べてみると、あっさりありました笑
Create your own interactive shell with cmd in Python
試しに↑のサンプルを使ってみると、 以下のようにコンソール便利機能が入っていて感動しました。 こんなものが一瞬でしかもフリーで書けるとはさすが、Pythonです。
- 簡単にコマンド追加できます。
- Tabで補完してくれる
- 空白Enterで前のコマンドを実行してくれる
- カーソルでコマンド履歴をみれて、実行してくれます
- helpができます。
というわけで、以下のようにハードで作ったモニタ回路を動かすライブラリを作って、 cmdライブラリから呼び出すと、いい感じで使えるようになりました!!
chisel_top/test_riscv.py at master · moamoai/chisel_top · GitHub
from cmd import Cmd class MyPrompt(Cmd): def do_exit(self, inp): print("Bye") return True def do_mem_write(self, inp): mem_write() def do_reg_dump(self, inp): reg_dump() MyPrompt().cmdloop()
あとがき
デフォルトでcmd入っていて、やっぱりPythonはすごいと思いました。 これで、あっさり便利なコンソールが作れたので、デバッグやハードを動かしていけます。