$30 off During Our Annual Pro Sale. View Details »

RTL talk #17 dalance

RTL talk #17 dalance

dalance

June 24, 2023
Tweet

More Decks by dalance

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 新言語を作ろう
     いい感じのパーサジェネレータを見つけたので実装してみることに
     「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さんと
     最近は仕事が忙しいのであまり触れていない…

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide