なぜ最初add
に転送が必要なのですか?
# stage:
add $1, $2, $3 # WB
add $4, $5, $6 # MEM
nop # EX
beq $1, $4, target # ID
beq
が必要なので$1
、最初にadd
WBステージを実行しようとしている場合beq
、レジスタファイルを読み取ろうとしているIDステージ以降、転送は必要ありませんか?私の本には、beq
データの危険を回避するために転送が必要になる前の2番目と3番目の命令が記載されています。
編集:私はこのリンクスライドページ11で私が意味したことを正確に見つけました; 最初のものadd
が必要ないという私の別の混乱を解決する別のスライドは、別の技術の 特別なハードウェア、スライドページ58によるものです。
同期デジタルシステムでは、サイクル中に2つの異なるフェーズがあります。最初のフェーズでは、オペランドが読み取られ、演算子によって変換されます。第2フェーズでは、結果のデータがレジスタに書き込まれます。実装に応じて、これらのフェーズは、前半と後半の期間、または完全な期間とクロックの立ち上がりエッジに対応します。
いずれの場合も、重要な側面は、同じレジスタを(最初のフェーズで)読み取り、(最後に)変更できることです。これが、次のようなアクションを実行できる理由です。
pc <= pc+4
単一のサイクルで。
あなたが提起する問題では、まさにそれが起こります。
アクション
add $1, $2, $3 # WB
パイプラインレジスタを最初のフェーズで結果とともに読み取り、サイクルの最後に$ 1に書き込みます。一方
beq $1, $4, target # ID
最初のフェーズで$ 1と$ 4を読み取り、サイクルの最後にpplineが登録した結果を書き込みます。したがって、転送しない場合、書き込まれるのは$ 1の以前の値になります。
(以下のコメントに従って編集)
これらの説明はすべて真実です。ブランチは標準のハードウェアで処理されます。その場合、比較は「EX」段階でALUによって行われ、PCはこの段階の終わりに更新されます。
しかし、これは2サイクルの分岐ペナルティにつながります。このペナルティを減らすために、HWを追加してIDステージで比較を実行できます。その場合、比較で値を計算する必要がある場合(この例では$ 1として)、ストールが必要になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加