
██████╗ ██╗██████╗ ███████╗██╗ ██╗███╗ ██╗███████╗ ██████╗
██╔══██╗██║██╔══██╗██╔════╝██║ ██║████╗ ██║██╔════╝██╔════╝
██████╔╝██║██████╔╝█████╗ ██║ ██║██╔██╗ ██║█████╗ ██║
██╔═══╝ ██║██╔═══╝ ██╔══╝ ██║ ██║██║╚██╗██║██╔══╝ ██║
██║ ██║██║ ███████╗███████╗██║██║ ╚████║███████╗╚██████╗
╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═════╝
気軽にメッセージを送ってください - Pipelinecをあなたのために機能させてとても幸せです!常に助けを探しています。 - ジュリアン
はじめる
Wikiを読んで始めましょう。
Pipelinecとは何ですか?
C-like(1)ハードウェア説明言語(HDL)(2)言語構成/コンパイラ機能として高レベル合成(HLS)様自動パイプライン(3)を追加します。
- 実際には通常のCではありませんが、基本的な機能検証/「シミュレーション」を行うためにGCC/LLVMによって部分的にコンパイルできます。より複雑な言語構文の開発に興味がある場合は、手を差し伸べてください!
- Verilog/vhdlを合理的に置き換えることができます。コンパイラは、Synthesizesable and Human Readable+Debuggable VHDLを生成します。生のVHDL /既存のIP /ブラックボックスを挿入するためのフックが存在します。
- 計算を副作用のない純粋な関数として記述できる場合(つまり、グローバル/静的変数はありません)、自動操縦されます。概念的には、Intelの可変レイテンシハイパーパイプラインやXilinxのretimingオプションなどのテクノロジーに似ています。 GoogleのXLSプロジェクト、DFIANTHDL言語、特定のCIRCT方言のコンパイラ駆動型パイプラインデザイン目標の一部を共有します。
Pipelinecとは何ですか?
- グローバルメモリモデル /スレッド /などを使用した任意のCコードの高レベル合成:
- あなたのために「メモリアーキテクチャにネストされたループ」を行うことはできません。
- コンパイルされたCベースのハードウェアシミュレーター:
- Pipelinecコードの一部のみがCコンパイラによってコンパイルされ、実行されます(推奨されます)。
- しかし、マルチモジュール、マルチクロックドメインなど、デザイン全体を単純にコンパイルして通常のCプログラムのように実行することはできません。
- メタプログラミングハードウェア生成器(例:Cタイプシステムとプリプロセッサを使用)。
- コード/モジュールからビットストリームへのビルドフローを自動化するステッチツール:
- ツールは合成の実行を部分的に自動化しますが、最終的なビットストリームへの自動化はユーザーに任されています。
コア機能/利点
強力なオートパイプ化コンパイラと成長している実生活のハードウェアデザインのインスピレーションを受けた機能を備えた、簡単に理解しやすいハードウェア説明言語。
- 初心者(および専門家)が犠牲になる可能性のある多くのHDL癖を排除する馴染みのあるC構文(例:ブロッキング/非ブロッキングの割り当て、組み合わせロジックの連続的な順序についての推論)。
- すべてのHDLシミュレーターと互換性があります。元。 ModelSimを数秒で開始し、人間の読み取り可能+デバッグ可能なVHDLをインポートすることができます。また、カスタム超高速Cベースの「シミュレーション」を作成することもできます。 Verilogへの変換も必要に応じて含まれています。つまり、Verilatorの場合。
- 合成ツールレポートから導き出された有用なタイミングフィードバックは、自動的にパイプ化できない重要なパスロジックを特定するのに役立ちます。
- ソフトウェアサイドCと簡単に統合します。コード生成に組み込まれているのに役立ちます。 (ex。Host<-> FPGAからデータを移動する際のDE/シリアル化されたバイト配列からのUN/パッキング構造体の場合)。
- フルハードウェア説明言語の交換。既存のVHDL/Verilogデザインをクローニングしたり、生のVHDLを含むことから始めることができます - 常に言語全体を使用することを余儀なくされていません。
- グローバルに目に見えるポイントツーポイントワイヤ、マルチレート/幅クロックドメイン交差点、および複雑な導出されたFSMは、実生活のハードウェア設計要件/タスクに触発された複合性機能の成長リストのほんの一部です。
- コンパイラの機能としての自動パイプライン。ツールの基本的な使用は、単一のパイプラインを生成して、他の場所に既存のデザインにドロップすることです。手でパイプライニングロジックの慣行を排除する=ポータブルではない(動作周波数とパーツに依存しています)。
基本的な設計要素は、状態マシン/ステートフル要素(レジスタ、ラムなど)、自動指定されたステートレスの純粋な機能、および相互接続(ワイヤ、CDC、非同期FIFOSなど)です。デザインは、必要に応じて「シーケンシャルプロセス/スレッドの通信」のように構成することができます。
複雑なロジックをオートピペライン可能な関数に分離し、絶対に必要な場合はクロックハードウェアの説明による文字通りの時計のみを書き込むことにより、Pipelinecデザインは、新しいターゲットデバイス /動作周波数ごとに書き換える必要はありません。希望は、馴染みのある強力な構成可能なC言語の外観で説明されている共有、高性能、デバイス不可欠な、ハードウェアデザインを構築することです。
Pipelinecを書いているソフトウェアの人にとっては、Cでプログラミングパズルを解決するように感じるはずです - パズルのルールは非表示/ハードウェアの概念を暗示しています。ハードウェアの人にとって、Pipelinecは、従来のRTLとHLSの間の中間地面を見つけようとするより良いハードウェア説明言語です。それはFPGAエンジニアとしての私の言語です:)。