iizukakの作業ログ

忘れる前にメモしよう

FB08 CPU 製作記 [02 - 大雑把な設計]

前回に引き続き、FB08 CPU の設計について。

設計の進んだ分をメモしておきます。

  • データバス幅を 8bit とした
    • 前回までは 4bit 幅にしようと思っていましたが、8bit にしたところで言うほど回路の複雑度が増さない & IC 数も増ええない & 8bit にすると実装できるプログラムの幅が大幅に広がるため、8bit 幅とすることとしました
  • ALU に 74HC181 を使用することにした
    • eBay で 74HC181 のデッドストックが 出品されていた ため、購入しました。もともとは EEPROM を使ったルックアップテーブル方式で ALU を構成しようと思っていましたが、変更になります
  • プログラム ROM として、29F1615 を使用することとにした
    • 若松通商MX29F1615PC-10 という EEPROM があるようで、これが 1word 16 bit なのでプログラム ROM を収める ROM としてちょうどよい(最長の命令フォーマットを 16 bit にしようと思っていたため)
  • 命令デコーダにも 29F1615 を使うこととした
    • 命令デコーダ論理回路で組むのが本筋なのでしょう。しかしこれが面倒なので、 EEPROM で作ってしまうことにしました
  • 1オペランド方式の CPU とすることにした
    • 最近の CPU ではなかなか無いとおもいますが、 1 オペランド方式とします。ひとつに CPU の簡素化のため、もうひとつにデバッグの容易さのためです。 自作アーキテクチャ CPU 一号機ですし、バグがふんだんに盛り込まれていることは確実です。ですから、CPU そのものも、CPU の上で動くプログラムもどちらもデバッグしやすくなければいけません。ロジック IC で作る CPU では、デバッグというと LED を光らせるとか電圧を測定することになります。1 オペランド方式の CPU の場合、様々な値がアキュムレータを経由することになるため、アキュムレータの値を LED に表示しておけば、デバッグが楽であろうという目論見です

命令フォーマット

命令のフォーマットを、以下の 3 つとします。

1: Addressed
[OPCODE 4bit][ADDRESS 12bit]

2: immediate
[OPCODE 4bit][IMMEDIATE 8bit]

3: Opcode Only
[OPCODE 4bit]

命令セット

OPCODE を 4bit としたため、命令の種類は 16 種類です。現在のところ、以下の命令セットでどうかな、とおもっていますが、恐らく変更すると思います。

転送

1. LDI (2)
イミディエイトデータをアキュムレータに転送

2. IN (3)
IN ポートからアキュムレータに転送

3. LD (1)
アキュムレータから RAM に転送

4. LDR (1)
RAM からアキュムレータに転送

5. OUT (3)
アキュムレータから OUT ポートに転送


ジャンプ

6. JMP (1)
無条件ジャンプ

7. JC (1)
キャリーフラグ有効でジャンプ

8. JNC (1)
キャリーフラグ無効でジャンプ

9. JZ (1)
ゼロフラグ有効でジャンプ

10. JNZ (1)
ゼロフラグ無効でジャンプ


演算

11. ADD (1)
アキュムレータ = アキュムレータ + RAM

12. SUB (1)
アキュムレータ = アキュムレータ - RAM

13. SHIFTR (3)
アキュムレータを右シフト

14. SHIFTL (3)
アキュムレータを左シフト


デバッグ
15. CLK_AUTO (3)
システムクロックを有効にする

16. CLK_MANUAL (3)
システムクロックを無効にする(マニュアルクロックを使用する)

アキュムレータ <--> RAM 間のデータ転送命令のネーミングが決心がついていません。CLK_AUTO と CLK_MANUAL はステップ実行のデバッグ用です。CKL_MANUAL でブレークポイントをはってマニュアルクロックでデバッグしたあと、CLK_AUTO でシステムクロックを有効にして処理を継続します。ステップ実行、絶対必要。

お正月休みの進捗はこんなところ。。