Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RTL talk #17 dalance

RTL talk #17 dalance

dalance

June 24, 2023
Tweet

More Decks by dalance

Other Decks in Programming

Transcript

  1. 自己紹介  名前:初田 直也  dalance @ GitHub  所属:PEZY

    Computing  スーパーコンピュータ向けのプロセッサLSIの設計  SystemVerilogを全面的に使用中  OSS活動  SystemVerilog向けツール  sv-parser/svlint/svls  Google Open Source Peer Bonus貰った  SystemVerilog Test Suiteへの貢献に対して
  2. 本題の前に  svlintの宣伝  https://github.com/dalance/svlint  SystemVerilog用のlinter  もともとは社内CIで回すためのlinterとして開発 

    語る会(16)で紹介したSystemVerilogパーサの成果物  最近は某欧州のチップベンダーの中の人が積極的に開発中  ドキュメントなど大量に書いていただいた  language serverでエディタ編集中にリアルタイムでチェックできる  https://github.com/dalance/svls
  3. SystemVerilogへの不満  構文が複雑であいまい  SystemVerilogパーサ実装がとても大変  sv-parser では45000行くらい書いた  意味解析までしないと確定しない部分がある

     有償のEDAツールですら完全な実装はできていない  各ツールのバグ回避のための記述を探索する羽目に  言語機能の不足  それほど困ってはいない  「あると便利なのに」程度のものはいくつか  parameterized function
  4. Alt-HDLへの不満  既存のプログラミング言語の内部DSL  Chisel(Scala)やMyHDL(Python)など  HDLとして自然な構文にできない  ビット幅指定の数値リテラル 

    信号の方向  Verilogへのトランスパイラ  高度なデータ構造がフラットな変数群に分解されてしまう  生成されたVerilogの可読性が悪い  RTL-Simでの波形デバッグが煩雑  元ソースとVerilogソースの対応付けが困難  ECOに伴う等価性検証などのフローに対応できない
  5. 新言語を作ろう  いい感じのパーサジェネレータを見つけたので実装してみることに  「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さんと  最近は仕事が忙しいのであまり触れていない…
  6. 新言語の方針(1/3)  シンプルな構文  LL(k)で構文解析可能にする  k個(現時点で3)のトークン先読みで構文確定  パーサジェネレータの制約だが、シンプルさを保つために結果的には良かった 

    プリプロセッサマクロなし  マクロはエディタの表示と実際の構文木が一致しなくなる  language serverの実装が困難に  SystemVerilog/Rustベースの構文  キーワードなどはSystemVerilogをベースにする  構文はRustなど最近の言語での知見を活かす
  7. 新言語の方針(3/3)  言語組み込みの開発ツール  linter  formatter  SystemVerilogで実装できなかったものの1つ 

    特に縦方向のalignをうまくやりたい  HDLの並列性は縦方向に現れることが多い気がする  language server  補完や定義ジャンプなど高機能なもの  パッケージマネージャ  ドキュメント自動生成
  8. 現在の状況  出来ているもの  基本的な構文  とりあえず合成可能記述はだいたいカバーできている  linter/formatter/language server

     パッケージマネージャ  gitからの依存関係解決  SemVerによるバージョン解決  ドキュメント自動生成  言語リファレンス(一部)  検討中のもの  組み込みテスト  (プリプロセッサでない)マクロ  Generics