FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Chiselの拡張言語であるTwineの論文を読む

DATE2022に上がっていたChiselの拡張言語Twineというものについて、論文を読んでみることにした。

しかしこれ系の拡張言語はふわっとしている印象が多くて嫌な予感がする。大丈夫か?(DATEにAcceptしているのだから大丈夫なのかなあ)

web.eecs.umich.edu


TwineはChiselの拡張。ここでいうヘテロジニアスデザインとは何なのか?

  • ヘテロジニアスデザインを効率的に生成するための高レベルなセマンティクスを提供するChiselの拡張機能
  • インタフェースを標準化
  • 柔軟なデータ型変換によるコントロールフリーな仕様をサポート

イントロダクション

現在のハードウェアシステムにおいて、ブラックボックスコンポーネントを再利用するためには、ポートのピン仕様、タイミングなどのブラックボックスの中身を詳細に理解する必要があり、ハードウェアの複雑性が増加しコストが増大する。またエラー発生の可能性が増える。

SystemVerilogやVHDLに代表されるHDLは、コンポーネントのポートに対してデータと制御を区別しないところに問題がある、としている。HLSでもHDLと同様の性能を達成できるが、今回はHDLの亜種であるChiselを使用した。

Chiselは近年注目されているScalaベースのハードウェア記述言語であるが、Chisel自体は抽象レベルを十分に引き上げていない。そのため、設計者は手作業で制御信号を調整する必要があり、従来のHDLと同様の課題が存在している。

そこで、Twineを開発し、以下の機能を導入した。

  • パラメータ化、バッファリング、並べ替えをサポートする標準的なコンポーネントレベルの制御インターフェース。
  • コンポーネントレベルのプロデューサ/コンサマーの関係やデータフローを高水準で指定可能
  • システムレベルの制御信号の調整と柔軟なデータフォーマット変換の自動化