RiscVの内部動作モニタに、Python cmdライブラリを使ってみました話

最近、RISCVとuartが使えるようになったので、RiscVの内部挙動を確認できるように、モニタを作ってみることにしました。

ひとまず、以下をモニタ可能にしてみました。

で、ハード的にモニタ可能にしたあとは、ターミナルコンソールが欲しくなります。 そんなわけで、最初は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はすごいと思いました。 これで、あっさり便利なコンソールが作れたので、デバッグやハードを動かしていけます。