Slide 1

Slide 1 text

Veryl 新しいハードウェア記述言語 PEZY Computing 初田 直也

Slide 2

Slide 2 text

自己紹介  名前:初田 直也  dalance @ GitHub  所属:PEZY Computing  スーパーコンピュータ向けのプロセッサLSIの設計  SystemVerilogを全面的に使用中  OSS活動  SystemVerilog向けツール  sv-parser/svlint/svls  Google Open Source Peer Bonus貰った  SystemVerilog Test Suiteへの貢献に対して

Slide 3

Slide 3 text

本題の前に  svlintの宣伝  https://github.com/dalance/svlint  SystemVerilog用のlinter  もともとは社内CIで回すためのlinterとして開発  語る会(16)で紹介したSystemVerilogパーサの成果物  最近は某欧州のチップベンダーの中の人が積極的に開発中  ドキュメントなど大量に書いていただいた  language serverでエディタ編集中にリアルタイムでチェックできる  https://github.com/dalance/svls

Slide 4

Slide 4 text

Veryl  SystemVerilogの代替となる新しいHDLを開発中  https://github.com/dalance/veryl

Slide 5

Slide 5 text

なぜ新しくHDLを作るのか?  SystemVerilogへの不満  既存のAlt-HDLへの不満

Slide 6

Slide 6 text

SystemVerilogへの不満  構文が複雑であいまい  SystemVerilogパーサ実装がとても大変  sv-parser では45000行くらい書いた  意味解析までしないと確定しない部分がある  有償のEDAツールですら完全な実装はできていない  各ツールのバグ回避のための記述を探索する羽目に  言語機能の不足  それほど困ってはいない  「あると便利なのに」程度のものはいくつか  parameterized function

Slide 7

Slide 7 text

Alt-HDLへの不満  既存のプログラミング言語の内部DSL  Chisel(Scala)やMyHDL(Python)など  HDLとして自然な構文にできない  ビット幅指定の数値リテラル  信号の方向  Verilogへのトランスパイラ  高度なデータ構造がフラットな変数群に分解されてしまう  生成されたVerilogの可読性が悪い  RTL-Simでの波形デバッグが煩雑  元ソースとVerilogソースの対応付けが困難  ECOに伴う等価性検証などのフローに対応できない

Slide 8

Slide 8 text

新言語を作ろう  いい感じのパーサジェネレータを見つけたので実装してみることに  「Parolというパーサ生成ツールがすごい」  https://zenn.dev/ryo33/articles/26f87f776b4bfa  HDL Advent Calendar 2022の記事でネタ出し  「新しいHDL(ハードウェア記述言語)を考える」  https://zenn.dev/dalance/articles/17017b7b95b2ca  2022年末実装開始  1週間ほどでプロトタイプ実装  Rustエコシステムの恩恵  年明けからGitHub上で構文の検討など  @taichi-ishitaniさん、@ryuzさんと  最近は仕事が忙しいのであまり触れていない…

Slide 9

Slide 9 text

新言語の方針(1/3)  シンプルな構文  LL(k)で構文解析可能にする  k個(現時点で3)のトークン先読みで構文確定  パーサジェネレータの制約だが、シンプルさを保つために結果的には良かった  プリプロセッサマクロなし  マクロはエディタの表示と実際の構文木が一致しなくなる  language serverの実装が困難に  SystemVerilog/Rustベースの構文  キーワードなどはSystemVerilogをベースにする  構文はRustなど最近の言語での知見を活かす

Slide 10

Slide 10 text

新言語の方針(2/3)  SystemVerilogと(ほぼ)同じセマンティクス  module/interface/packageなど意味的には同じ  単に構文を変えただけ  以下のようなことができるようになる  可読性の高いSystemVerilogを生成する  既存のSystemVerilogソースコードとの相互運用  将来的には一部拡張するかも

Slide 11

Slide 11 text

新言語の方針(3/3)  言語組み込みの開発ツール  linter  formatter  SystemVerilogで実装できなかったものの1つ  特に縦方向のalignをうまくやりたい  HDLの並列性は縦方向に現れることが多い気がする  language server  補完や定義ジャンプなど高機能なもの  パッケージマネージャ  ドキュメント自動生成

Slide 12

Slide 12 text

現在の状況  出来ているもの  基本的な構文  とりあえず合成可能記述はだいたいカバーできている  linter/formatter/language server  パッケージマネージャ  gitからの依存関係解決  SemVerによるバージョン解決  ドキュメント自動生成  言語リファレンス(一部)  検討中のもの  組み込みテスト  (プリプロセッサでない)マクロ  Generics

Slide 13

Slide 13 text

構文の紹介  https://dalance.github.io/veryl/book