1

私は現在、シングル サイクル MIPS プロセッサを実装しており、SB および SH 命令の実装に取り​​組んでいます。このスレッドのアイデアを使用して、LB/LBU および LH/LHU 命令を正常に実装しました:単一サイクル データパスでハーフ ワードをロードし、バイトをロードする

SB/SH 命令を実装する方法を概念化するのに苦労しています。私の現在の考えは、各入力がバイトが書き込まれる現在のワードのマスクである 4:1 MUX を持つことです。たとえば、バイト 0x2E をアドレス 0x10010002 に書き込むとします。これには、たとえば、現在 [0x10010000] 0xABCD1234 という値が含まれています。したがって、書き込み後のメモリは [0x10010000] 0xAB2E1234 になります。(バイトアラインアドレッシング)

したがって、0xFFFFFF00、0xFFFF00FF、0xFF00FFFF、0x00FFFFFF の値を持つ 4 つの AND を使用して、アドレス 0x10010000 の単語をマスクします。MUX の選択ビットは、アドレスの下位 2 ビットから取得されます。

これと同時に、バイトを取得してゼロ拡張し、いくつかの異なるシフトを実行して、マスクの正しい位置に配置します。これらの異なるシフトされた値は、同じ対応する選択ビットで再び MUX に送られます。たとえば、アドレスの下位 2 ビットが 0 の場合、シフトは必要ありません。01 の場合、1 バイト左シフトします。10 の場合、2 バイト左シフトします。11 の場合、左 3 バイト (または循環右シフト 1 バイト)

次に、MUX と OR の両方から値を取得して、保存する最終的な値を取得します。上記の例では、次のようになります。

下位 2 ビットは 10 であるため、MUX は 0xABCD1234 と AND 演算された 0xFF00FFFF を選択して、0xAB001234 の出力値を提供します。バイトは左に 4 シフトされて 0x002E0000 になり、0xAB001234 と OR 演算されて 0xAB2E1234 になり、格納されます。

もちろん、これは同じ考え方で SH 命令にまで拡張されます。私の例が理にかなっていることを願っています。私が見ていないより簡単な方法がない限り、おそらくこの方法で実装するつもりです。私は長い間ハードウェア設計を見つめてきましたが、より単純な実装を見落としている可能性があります。

ありがとう。

4

0 に答える 0