2017-12-14 3 views
2

Queueと他の標準ライブラリ・インタフェース・オブ・チゼル(​​、Validなど)の簡潔な定義は、Cheat-Sheetに、さらに詳細はChisel Manualにあります。私はまたStackOverflow - herehereでこれらの2つの答えを見つけました。Chisel 3のQueue Standard Library Interfaceはどのように合成されますか?

しかし、これらのリソースのどちらもプラスチックで説明されていません。これらのインターフェイスの目的を理解するのに役立ちます。実際のハードウェアではどうなっていますか?

例えば、ここではパッケージHardFloatからFPUコードの抜粋です:

次のように DivRecFN_ioがクラスである

val input = Decoupled(new DivRecFN_io(expWidth, sigWidth)).flip

class DivRecFN_io(expWidth: Int, sigWidth: Int) extends Bundle { val a = ... val b = ... val ... ... }

達成され、正確にどのようなDecoupleを含む行はありますか?

ありがとうございます。

答えて

2

次のようになります。

デフォルトはチゼルutilのキューは、標準circular buffer実装です。つまり、エンキューおよびデキューポインタを持つ一連のレジスタがあり、キューの操作の結果として移動し、充満度と空の有無がチェックされます。

+0

@コリンズ、ありがとう、これは私の質問に答える、私はちょうど表現のために素晴らしい[アニメーション](https://en.wikipedia.org/wiki/Circular_buffer#/media/File:Circular_Buffer_Animation.gif)をWikipediaから追加すると思った完全。 – apaj

2

デカップリングされたワイヤーDivRecFNフィールド名付きビットにバンドルし、通常は単一サイクル内で結果を戻さないモジュールのフロー制御を管理するために使用される準備完了の有効な信号を追加します。デフォルトではDecoupledIOのデータフィールドはOutputになります。ラインの最後のフリップは、それをInputに変換するでしょう。モジュールval inputおよびモジュールのインスタンスを使用してモジュールPが含まCを考慮(C)、Cバンドルにデータ、このモジュールの親を消費するであろうモジュールPは、バンドルに配置されたデータを生成します。 Cは、readyをアサートしてデータの準備ができたことを示し、validがアサートされたときにそのデータを読み書きします。デカップリングバンドル内 フィールドは、それが実際のハードウェアでどのように見えるかについては

input.ready 
input.valid 
input.bits.a 
input.bits.b 
... 
+0

こんにちは、ありがとう、偉大な解釈のために。あなたは "モジュール宣言"を書いたときに具体的にしてください - あなたは 'val input'を含むものを意味しますか?なぜなら、 'val input 'は、別の' Module'(ValExec_DivSqrtRecFN_small_divと呼ばれます)で使われている 'Bundle'(' io'と呼ばれる)の一部です。また、「ビット」というタイトルのフィールドはどこにありましたか?つまり、「a」と「b」は「ビット」タイプのフィールドから来ていますか? – apaj

+0

ステートメントval input = Decoupled(新しいDivRecFN_io(expWidth、sigWidth))。flip、inputは、ready、validおよびbitsフィールドを含むバンドルです。 bitsフィールドには、Decoupled()に渡されたバンドル、この場合は新しいDivRecFNが含まれます。私は答えを編集して、どのモジュールについて話しているかを明確にしました。 –

関連する問題