3

(非常に遅く原始的な) プロセッサのシミュレーションを書いています。

例: クロック速度が一定の 1 Hz であるとしましょう。これは、1秒ごとに1つの命令を処理できる/処理することを意味すると思います。一部の命令は、他の命令よりも時間がかかります。1 + 0 の追加は、1 + 7 よりも時間がかかりません (後者は、ゼロ以外の時間がかかるキャリー ビットのリップルを引き起こします)。

他のすべての指示が終了した後でのみ、指示を実行できるようにする必要があります。

する必要がありますか:

  1. 最長の命令にかかる時間とクロック速度をそれよりも大きく設定しますか?
  2. 前の命令が完了するまで、将来の命令の実行を許可しないステートフル ウォッチャーを作成する
  3. 問題を完全に誤解していますか?

#1では、次の開始前に命令の競合状態が不完全になる危険を冒しているようです。#2では、後で問題を引き起こす可能性のある予測不可能/可変のクロック速度を危険にさらしているようです。

どうすればこれを解決できますか? 実際のプロセッサがこの問題を処理する方法に何かヒントはありますか?

4

4 に答える 4

3

まず、プロセッサはクロックサイクルごとに1セットのマイクロ命令を実行します。これらには通常、バスをレジスタまたはALU(算術論理演算装置)に切り替えるなどが含まれます。次のマイクロ命令は、レジスタまたはALUにクロックを供給してデータを処理します。バスで。ほとんどのアセンブリレベルの命令は、一連のマイクロ命令で構成されています。加算命令は数個のマイクロ命令しか必要としませんが、除算にはさらに多くの命令が必要になる場合があります。ほとんどのマイクロコントローラーは、各アセンブリレベルの命令にかかるサイクル数を記録します。

より洗練されたマイクロコントローラーには、命令パイプラインもあります(猫が言及しているように)。これは、前の命令が完了する前に、プロセッサーが次の命令の一部を実行し始めることができることを意味します。これは、予測分岐などの概念では非常に複雑になる可能性があります。

通常、デジタル電子機器をシミュレートする場合、電子システムは同時であるため、イベントベースのモデルを使用しますが、モデル化する必要のある伝搬遅延もあります。私はこれを非常にうまく行ったUniでPSpiceやMicroSimのようなツールを使用したことを覚えています。

于 2009-03-21T06:00:14.707 に答える
3

命令パイプラインに精通していますか?

于 2009-03-21T05:44:05.947 に答える
2

実際のプロセッサがタイミングを処理する方法と、プロセッサのシミュレーションがタイミングを処理する方法には、多くの違いがあります。そして、実際のプロセッサがタイミングを処理する方法は1つではありません。

シンプルでプリミティブなプロセッサであると言うので、キャッシュ、パイプライン、アウトオブオーダー実行、分岐予測などについて心配する必要はありません(これらについて学ぶのは良いことですが)。

クロック間隔を最長の命令の間隔と等しく設定するだけです。または、1つのグループですべての短い命令をまとめ、そのグループで最も長い命令を見つけて、クロック間隔をその値に設定することもできます。これで、残りの長い命令に、クロック間隔の倍数に等しい間隔を割り当てることができます。

繰り返しますが、これを実行する方法は1つではありません。

于 2009-03-21T06:03:05.930 に答える
1

(1)は時計です。競合状態になるべきではありません。追加を実行するにはxnsかかります。時計はynsです。x<y。そのため、追加は常に最初に終了します(たとえば、温度の変化によってタイミングが変化してもx <yがfalseにならないように、yが十分に大きい場合)。

確かに、yを小さくしすぎると、悪いことが起こります。しかし、それは非常に現実的です。チップをオーバークロックすると発生します。クロックレートが上がると不安定になります。

于 2009-03-21T06:01:22.643 に答える