はじめに
やあみんな……今日もゆっくりコード書いてる?
深呼吸して……落ち着いて……
マウスの音、キーボードの音……いいよね……
ところで……ちょっとだけ聞いてもいい?
「Verilogのコーディングスタイル、STARCのRTL設計ガイド以外は異端だと思ってる?」
はい、起きて。ここから戦場です。
2スペース派、4スペース派、タブ原理主義者、
ハンガリアン狂信者のP_、P__、i_/o_、r_/w_接頭辞、
誰もが譲らず地獄の無限ループ。
毎回レビューのたびに火花が散る、その壮絶な戦場を眺めながら、
今日は理想のVerilog Style Linterを求めて、わたしとともに旅に出ましょう1。
Verible
まずはこちら。Google発で、現在はCHIPS Allianceという団体が管理している、有名どころのSystemVerilog Style Linterです。特にこだわりがないなら、とりあえず最初の選択肢としてこれを使うのが安定な気がします。長いものには巻かれろの精神ですね。
個人的には、lowRISC Style Guidesに対応したルールが一通り揃っている点がありがたいです。LinterだけじゃなくてFormatterも一緒に用意されている点もめっちゃよき。
かなしみぽいんと
SystemVerilog-2017の構文には基本的にほぼ対応しているのですが、ポート定義におけるinterconnectについては未対応で、Linterが何かよくわからない文句を言ってきます。SystemVerilog-2023で追加されたtaskのref static引数についても現状は未対応で、まだ若干不便な点があったりなかったりします2。
あと、C/C++を書かないといけないのはまあ仕方がないとして、新しいルールを追加するときにVerible本体の再ビルドが必要……というのがちょっと微妙かも。あとから気軽にオレオレルールを書いて追加するような使い方には向かないかなあ、という印象。
svlint
dalance氏によって開発されたLinterです。同氏が開発したParserライブラリを内部で使っており、先ほどのVeribleでダメだったinterconnectを含むコードも問題なく処理できます。規模が比較的小さいので、何か問題があっても修正のプルリクエストが気軽に送りやすい、という点もとってもよきです。
ぱっと見た感じ、Veribleのように特定のスタイルガイドラインに合わせてルールを整備しているというわけじゃなくて、経験的に必要なものを適宜個別に追加していってる感じっぽいです。ちなみに、とんでもない量のルールがすでに実装されています。ものすごい分量で、それにともなってマニュアルがとんでもないことになってます。人間卒業してる3。
かなしみぽいんと
違反箇所の行と列が正確に表示されないような、実装がやや粗削りな状態のルールがわりと混ざってたりなかったりします。よく使うルールに関しては、追加で少しお手入れが必要かもしれなくなくもないです。
新しいLintルールを追加する方法については、Veribleのような本体の再ビルドが必要ない代わりに、Rustでプラグインを書いてそっちを別途コンパイルする必要がある……ので、やっぱりまだ結構ハードルが高い気がします。あと、dalance氏が最近Verylのほうの開発で忙しそうなので、svlintやsv-parserの大規模なアップデートや改善はしばらく期待できないかも4。
sv-mint
dalance氏のsvlintをパク……じゃなくて、リスペクトして作られた小さなLinterです。svlintと同じParserライブラリを使っている都合上、svlintで読めるものはsv-mintでも読めるし、読めないものは読めないです。
LintルールをPythonスクリプトで書いて追加していく設計なので、オレオレルールを後から追加しやすいというのが他にはない強みです。既存ルールの修正も、Pythonスクリプトを雑に数行書き換えるだけで済みます。お気軽お手軽超カジュアルです。
致命的な問題
このソフトウェアはCodexを使って、ノリと勢いと雰囲気でなんとなく開発されています。自分では一行もRustを書いてません。全部AIに丸投げです。つまりもし仮に何か問題が起こったとしても、開発者本人が自力で対応できません。もっと言うと全部AI任せなのでそれらサブスクリプションへの課金を止めた瞬間に開発が止まります。あなおそろしや。
slang
sv-mintの開発が一段落してから、この五条悟、もといslangの存在を知りました。なんかこいつ現時点で最強レベルでSystemVerilogの言語仕様の森羅万象に対応しているらしいです。しかもElaborationまで完璧らしいです。Pythonからも使えるよとか書いてあります。まじかよ笹食ってる場合じゃねえ!ってことで、あとでちょっと試してみます5。
おわりに
lowRISC Style Guides ← 完璧で究極のSystemVerilogスタイルガイド
(※メモ:ここで過激派同士の殴り合いが始まる)
