はじめに
この記事はSystemVerilog Advent Calendar 2020の7日目です。
sv-parserは自作のSystemVerilogパーサライブラリです。2019年9月ごろにリリースしたのですが、よく考えると日本語で紹介記事を書いたことがなかったので、ここで紹介しようと思います。
sv-parser
sv-parserは以下のような特徴を持つSystemVerilogパーサライブラリです。
- Rust製
- IEEE Std 1800-2017準拠
SystemVerilogは言語仕様が膨大(BNF定義が44ページあります)で、ちょっとしたツールを作るのも簡単ではありません。OSSでSystemVerilogのパーサはいくつかありましたが、規格を完全に満たしたものはなかったので自分で作ることにしました。
sv-parser と sv-tests
sv-testsはOSSのツールに対してSystemVerilogのコンプライアンステストをするプロジェクトです。
言語仕様書に載っているような構文単体のテストケースからRISC-Vコアのような実プロジェクトまで、様々なテストケースを各OSSに対して実行し、結果を公開しています。
この1年間でsv-testsのFailから見つかったパーサのバグもいくつかあり、大変助かっています。
2020/12/6時点でのsv-parserの結果は 4416/4532(97%) がPassということで、全ツール中トップのPass率となっています。Failしている3%についてもテストケース側の問題であることは確認済みなので、正規の構文でFailするケースは(現時点では)見つかっていない状態です。
sv-parserを使ったツール
sv-parserを使ったツールとしては現時点で以下のものが確認できています。
- morty: A SystemVerilog source file pickler
- svinst: Determines the modules declared and instantiated in a SystemVerilog file
- svlint: SystemVerilog linter
- svls: SystemVerilog language server
このうちsvlintとsvlsは自作なので、sv-parserをライブラリとして使ってくれているユーザは2名ということになります。
これ以外にもメールで直接問い合わせて来る方も何人かいました。
公開当初は「SystemVerilogとRustという組み合わせで開発者は存在するのか?」という疑問がありましたが、意外といるようですね。
この調子でSystemVerilog向けのOSSが増えていくと嬉しいです。