RISC-V Day Tokyo 2021 Autumnで配布されたChisel本、「Chiselで始めるデジタル回路設計」を献本いただきました。 RISC-V Day Tokyo幹事団の皆様、ありがとうございます。
本書の翻訳の進捗については私は全く関わっていないのですが、Slack上で議論が行われているのは見ていたし、RISC-V勉強会でのレビューも参加したので最終成果物まで進んでよかったなと思っています。
Chiselは本当に普及するか
RISC-V Day Tokyo で配布となったChisel、当日の発表などを見ていると、大学の先生などはChiselに期待しているところもあるようだ。 Chiselはデジタル回路設計用のハードウェア記述言語だ。Scalaをベースにしており、SiFiveなどが実プロダクト向けに使用している。
私もChiselはある程度使った。Scalaの良いところとを使えば、ある程度上手くハードウェアを記述できることは間違いない。
例えば、Queueを実装しているとどうしてもmapやReduceに相当する機能が欲しくなる。SystemVerilogのlogic
やstruct
にそのような機能が欲しくなる時があるが、Scalaはこれらをカバーできる。
しかし、実際問題「言語として優れている」という問題と、「その言語が普及するか」というのは全くの別問題だ。 例えば、Scalaはそもそもハードウェア屋さんが基本的に学んでいるであろう共通プログラミング言語には入らないと思う(Chiselが登場する前、どれだけのハードウェアエンジニアが"Scala"というプログラミング言語を熟知していたか想像してほしい)。その人たちにいきなりScalaを渡してこの上でハードウェアを記述しろというのは結構非現実的だ。 さらにIntelliJがないとChiselの実装はかなり苦しい。補完が効いてくれないとScalaをベースとした実装はかなり苦痛な作業となる。
学生にウケるか?というのは分からない。学生がScalaを使いこなせるかどうかは私は良く知らないし、Verilogに対して一枚皮を被せるという概念はすこしややこしい。 Chiselは最終的にVerilogに変換してASICなりFPGAに起こすし、最終的にはVerilogを読めないと設計にならないし、現在のChiselの記述は「Verilogの気持ちを考えながらScalaを書く」というものになっている。だったらまずVerilog勉強しなよ、となる。 教育のことを考えるなら、Scalaなんて皮を被せないでVerilogを通したテープアウトまでの一連のフローを体験するほうが有益なのでは?
正直な感想を言うと、昨今流行りの「ChiselでCPUを実装する」というのはナンセンスすぎて意味が分からない。
どうしてChiselを使うのか?その理由はScalaの強力な柔軟性を使いたいからだ。 CPUのたった一つのコンフィグレーションを実装するためにChiselを使うのは全くの宝の無駄遣いで、Chiselを使うならば一つの実装から10~100くらいのコンフィグレーションを作り上げられるようにしないと(これがRocketに相当する)、Verilogで作った方がまだマシ、ということになる。 Diplomacyなどのバス結合部分の頻繁に接続が変わりそうなところにこそChiselを適用しなければ、本来の力が発揮できないというものだ。
またテスト環境もイマイチだ。数年前に使ってバグが多すぎて諦めてしまったのだが、多少は改善されたのだろうか。 ポートしか触れないデバッグ環境、UVMに全くかなわないひどいアサーション機能、それなら生成したVerilogに対してUVMを当てまくった方がまだマシだろう(実際過去のプロジェクトではそうした)。
あまり文句を書くと怒られそうなのだが、つまりはせせこましいパイプラインを書くのにChiselを使うのはまだまだ効率が悪く、もっと柔軟に構成を変える必要がある場所にChiselを適用するのは筋が通っていそう、というが現在の私の意見。
と、ここまで書いて、なんかそういう系の話昔も書いたな、って思い出した。「ハードウェア記述言語」の問題なんて半導体設計のほんの一部分の話でしかなくて、設計フロー全体をみたらこんな問題小さすぎる、っていう話。
# あと、コミュニティを眺めていても「変人が自分に箔をつけるためにあえて触って自慢している」くらいにしか見えないのが本音だったりする...