CPUのオペコードを効率的に設計する方法は?


12

Logisimで単純な16ビットCPUを構築しており、ALUを用意し、必要なオペコードを用意しています。今では、コマンドの正しいコーディングを見つけるのが非常に難しいので、異なるサブ回路(ロジック、算術など)が入力としてすべての制御ワイヤ(コーディングを構築する)を必要とせず、可能な限り少なくする必要があります。効率的なオペコード設計に役立つ戦略や方法はありますか?

事前にt​​hx


1
最初にALUを構築し、必要な制御線を確認します。次に、それらを「現在の命令」レジスタに直接配線します。メモリアクセス制御ロジック、およびその他の主要なオペコードクラスについても同様です。次に、残りのビットを使用して、アクティブにするサブサーキットを選択します。
user253751

1
8ビットのプログラム可能なステートマシンKCPSM、別名PicoBlazeのKen Chapmanによるオリジナルの論文もあります。彼がどのように指示を選択し、ISAを設計したかを説明しています。dc.uba.ar/materias/disfpga/2010/c2/descargas/...
Paebbels

回答:


9

他のいくつかの命令セットを勉強するのは良いアプローチだと思います。

小さなものはTIのMSP430で、約22命令の16ビットプロセッサです。

http://www.physics.mcmaster.ca/phys3b06/MSP430/MSP430_Instruction_Set_Summary.pdf

また、非常に小さな命令セットを備えたAtmel AVRを調べることもできます。

私の小さなプロジェクトでは、小さな命令セット(14命令)でVHDLの単純な32ビットプロセッサを開発しようとしました。

http://www.blog-tm.de/?p=80

私の現在の空き時間のため、完全には終了していません。命令は実装されていますが、2つはテストされておらず、おそらくいくつかのステータスフラグが欠落しています。


しかし、実際のエンコードとは何か、なぜこのように選ばれたのかを知ることができるものは見つかりませんでした。
Benjoyo

リポジトリで実際のエンコーディングを見つけることができます:github.com/TM90/MISC_Processor/raw/master/Documentation/…。命令デコーダーのロジックが最小限になるようにこれらのエンコードを選択する理由。
TM90

7

命令コーディングのARMアプローチを研究します(ただし、複製はしません)。接頭辞指向であり(Dzardaが推奨するハフマンツリーアプローチのように)、命令のレジスタ選択部分がどこにあるかという点で非常に統一されています。

想像力に欠けるが信頼できるアプローチは、おそらく16ビットを超えるすべての制御信号を列挙し、それらに対してカルノーマップスタイルのロジック最小化を試みることです。


制御信号があなたの言うことを本当に理解していません。
Benjoyo

ARMで見つけて気に入ったのは条件フィールドです。これも含めます。
-Benjoyo

制御信号は、さまざまなマルチプレクサへの入力であり、CPUの各部の間でデータを直接送信できるようにします。
pjc50

16ビットアーキテクチャの場合、ARMの命令エンコーディングは適切ではないと思います。Mayby thumb2の方が優れています。しかし、私はMIPS方式のエンコードが好きで、シンプルでわかりやすいですが、少し無駄があります
-phuclv

4

Logisimで8ビット命令長のコアを備えた4ビットCPUを試したことがあります。実際には、CPUよりも単純なステートマシンになりました。

ランダムに探すもの

  • ハフマンの木
  • 固定長または可変エンコード?
  • それは、単一のアドレス空間を備えたフォン・ノイマン設計ですか、それとも独立したデータ/プログラムを備えたハーバード型ですか?

ハフマンの木についてのコンピューター愛好家に関する優れたビデオ:

https://www.youtube.com/watch?v=umTbivyJoiI


ハフマンコーディングは固定長エンコーディングでは機能しませんか?
ベンジョヨ

@Benjoyo最も使用頻度の高い命令のバリエーションにスペアビットが使用され、より多くの機能を提供するシナリオを想像できます。
ジャルダ

しかし、これがどのような最適化をもたらすかはわかりません。回路設計の助けにはなりません。オペコードにハフマンコーディングを使用するときの目標は何ですか?
ベンジョヨ

4

私がクラス用に書いたISAには、次のような4ビットのオペレーションコードがありました。 1XXX ALU instructions 01XX jump, jump register, call etc 001X branch not equal, branch equal zero 000X 0 - load, 1 - store

これは、最適なものではなく、単一ビットの入力信号でどのロジックパスを使用するかを完全に制御できるため、ゲートの構築/設計が容易なスタイルの1つです。あるいは、最もよく使用されるシンボルをハフマンコード化し、ゼロパディングして固定長のopコードを取得することもできます。


この種の最適化は、現在私が探しているものです。しかし、私は5ビットのオペコードを持っているので、コマンドをグループ化して、回路で意味をなさないようにしています。
ベンジョヨ

@Benjoyoでは、上位ビットが設定されたALU命令をさらにたくさん持つことができます。また、私のジャンプ条件のカバレッジはかなり弱く、ほとんどの通常のブランチには2つの命令が必要です。一般的に、私はカテゴリを次のように考えました:数学/制御/メモリ

3

考慮する必要があることの1つは、任意の形式のマルチワード命令を許可するか、マルチワード命令のように「動作する」ことができるものを許可するかです。その場合、メイン命令の後に追加の命令語を使用するか、その前に単語をプレフィックスするかを検討する必要があります。プレフィックスと後続の単語を許可すると、割り込み処理の複雑さが増す可能性がありますが、ほとんど使用されない命令を、一般的に使用されるものと同じオペコードスペースに収める必要がなくなります。

命令が実行前のサイクルでフェッチされる場合、次の命令ワードをスキップさせるか、その内容をプログラムカウンターに直接転送する「条件分岐」命令を使用できます。このような設計により、シーケンスの割り込みがさらに複雑になる可能性がありますが、「分岐」、「ジャンプ」、および「呼び出し」命令にオペコードスペースの大部分を使用する必要性を緩和し、より広い範囲の分岐条件を許可しますそうでなければ可能であるよりも。分岐は、アドレスがどこから来たかに関係なく、命令自体の実行後に一般にデッドサイクルを必要とするため、フェッチされたが実行されない次のワードからアドレスを取得しても、余分なコストはかかりません時間。

分岐命令からターゲットアドレスを移動すると、それらがゴブリングするオペコードスペースの量が減りますが、16ビットオペコードフォーマットはまだかなりタイトです。接頭辞の指示を使用すると、それで役立ちます。たとえば、32個のレジスタが必要な場合、レジスタをsource1、source2、destinationとして個別に指定するには、オペコードに15ビットが必要であり、合計で2つの命令が必要になります。あまり役に立たない。一方、3つのオペランドのそれぞれに32個のレジスタのいずれかを使用できると便利です。プレフィックスの前にないALU操作で8ビットを使用して16分の1のレジスタを2つ選択することで、2つの目標のバランスをとることができますが、プレフィックスのすぐ後に続くALU操作ではプレフィックスの一部のビットを使用します次の指示から8 上位レジスタを使用する命令は、1つではなく2ワード/サイクルかかりますが、場合によっては、このようなトレードオフが十分に価値がある可能性があります。プレフィックスを使用する場合の最大の難点は、プレフィックスと次の命令の間で割り込みが発生しないようにするか、割り込みが発生した場合にプレフィックスの後の命令が正しいレジスタを使用するようにする必要があることです。 -counter save logicは、最後に実行された非プレフィックス命令のアドレスを保存します。しかし、場合によっては、そのようなトレードオフは十分に価値があるかもしれません。プレフィックスを使用する場合の最大の難点は、プレフィックスと次の命令の間で割り込みが発生しないようにするか、割り込みが発生した場合にプレフィックスの後の命令が正しいレジスタを使用するようにする必要があることです。 -counter save logicは、最後に実行された非プレフィックス命令のアドレスを保存します。しかし、場合によっては、そのようなトレードオフは十分に価値があるかもしれません。プレフィックスを使用する場合の最大の難点は、プレフィックスと次の命令の間で割り込みが発生しないようにするか、割り込みが発生した場合にプレフィックスの後の命令が正しいレジスタを使用するようにする必要があることです。 -counter save logicは、最後に実行された非プレフィックス命令のアドレスを保存します。

複数ワードの命令を使用すると、設計のいくつかの側面がより難しくなりますが、他の難しい決定を行う必要性が減る場合があります。


0

この男は、Decoderのハードコーディングされた部分のハードワイヤリングを理解するための最良の詳細を持ってい ますハードコーディングされたCPUの制御ラインについて説明し ます。オペコードでの選択は、デコードロジックの複雑さに大きく影響します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.