3進CPUを自作する!!!

5.6K Views

June 03, 24

スライド概要

2024/6/2に自作CPUを語る会で発表した資料です。

平衡3進数の紹介と3進論理回路、3進加算器などの解説をしています。

profile-image

低レイヤー好きの大学生です。 ハードウェア的に面白い計算装置を電子工作で自作するのが好きです。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

3進CPUを自作する!!! きっちー@rikeden_net 2024/6/2 自作CPUを語る会

2.

Index • はじめに • 平衡3進数を布教したい • 3進NANDは実は簡単 • 3進加算器の工夫を語りたい • フリップフラップフロップ! • 1trit手動制御CPUを作りました

3.

はじめに • 現在の進捗: 3進回路の各種コンポーネントを製作中 • 3trit手動制御CPU基板を1週間前に発注(明日到着予定) • 1trit版をユニバーサル基板で作ったので後で見てください

4.

なぜ3進? どんな自作CPUがあるか? FPGA、ロジックIC、NAND、リレー etc. →材料に違いはあれど全部2進(一部4進?) じゃあ3進のCPUを作ろう!

5.

Index • はじめに • 平衡3進数を布教したい • 3進NANDは実は簡単 • 3進加算器の工夫を語りたい • フリップフラップフロップ! • 1trit手動制御CPUを作りました

6.

3進数にも種類がある • 普通の3進数 (0, 1, 2 の3文字を使用) 201(3) = 2×9 + 0×3 + 1×1 = 19 9の位─┘││ 3の位──┘│ 1の位───┘

7.

3進数にも種類がある • 平衡3進数 (0, 1, -1 の3文字を使用) -1を#と表記(1� が一般的) 1#0(3) = 1×9 + (-1)×3 + 0×1 = 6 9の位─┘││ 3の位──┘│ 1の位───┘

8.

各記数法の比較 10進数 3進数 平衡3進数 0 0 0 1 1 1 2 2 1# 3 10 10 4 11 11 5 12 1## 6 20 1#0 7 21 1#1 8 22 10# 9 100 100

9.

各記数法の比較(負数) 10進数 符号付き絶対値 3進数 3の補数(4桁) 平衡3進数 -0 0000 0 -1 2222 # -2 2221 #1 -3 2220 #0 -4 2212 ## -5 2211 #11 -6 2210 #10 -7 2202 #1# -8 2201 #01 -9 2200 #00

10.

平衡3進数のメリット • 負数を”自然に”表現できる • 表現できる数の範囲が対称 例. 3桁なら -13 ~ 13 の27種類 • 各桁の反転が符号反転になる • 最上位の値で符号(正負とゼロ)が分かる • 切り捨てが丸めになる

11.

Index • はじめに • 平衡3進数を布教したい • 3進NANDは実は簡単 • 3進加算器の工夫を語りたい • フリップフラップフロップ! • 1trit手動制御CPUを作りました

12.

NAND(バイナリ) • CMOS(nMOS + pMOS) でのNANDの構成図 • nMOS • 0を伝達 • 1でON • pMOS • 1を伝達 • 0でON NAND 0 1 0 1 1 1 1 0

13.

NANDを3進数に拡張 • AND を MIN に一般化 • NAND(A, B) = ~MIN(A, B) NAND -1 0 1 -1 1 1 1 0 1 0 0 1 1 0 -1

14.

NANDを3進数に拡張 • CMOSでどうやって実現するか? NAND -1 0 1 -1 1 1 1 0 1 0 0 1 1 0 -1

15.

NANDを3進数に拡張 • CMOSでどうやって実現するか? • 抵抗を2個追加すればOK!!! NAND -1 0 1 -1 1 1 1 0 1 0 0 1 1 0 -1

16.

NANDを3進数に拡張 • nMOS • pMOS • -1を伝達 • 1を伝達 • 0, 1でON • 0, -1でON • 1と-1の一方のみON → その値 • 両方ON → 抵抗で分圧され て0を出力 NAND -1 0 1 -1 1 1 1 0 1 0 0 1 1 0 -1

17.

CMOS + 抵抗の構成の特徴 NOT, NAND, NOR がバイナリと同じ構成で作れる 出力に抵抗(10k)を介するので出力インピーダンスが大きい 静的な電力消費がある NOT NOR NAND

18.

Index • はじめに • 平衡3進数を布教したい • 3進NANDは実は簡単 • 3進加算器の工夫を語りたい • フリップフラップフロップ! • 1trit手動制御CPUを作りました

19.

平衡3進数の加算 • 平衡3進数1桁(-1~1)同士の加算 → -2 ~ 2 10進 3進 2 1# 1 C -1 0 1 S -1 0 1 01 -1 -1 0 0 -1 1 -1 0 0 00 0 0 0 0 0 -1 0 1 -1 0# -2 #1 1 0 0 1 1 0 1 -1

20.

半加算器 • 試行錯誤、紆余曲折があって現時点で最もコンパクトな回路↓ • 16個のMOS

21.

• X1: A=B=1のときのみ0, それ以外は1 • X2: A=B=-1のときのみ0, それ以外は-1 • C: X1 = 0のとき1, X2 = 0のとき-1, それ以外は0 C -1 0 1 -1 -1 0 0 0 0 0 0 1 0 0 1

22.

~S NOT S -1 0 1 -1 1 -1 0 0 -1 0 1 1 0 1 -1 ~S -1 0 1 -1 -1 1 0 0 1 0 -1 1 0 -1 1

23.

• A=B=1, A=B=-1の部分はCと似てる • 他の出力が”弱い”なら、これらを”強く”出力する ことで上書きできる C -1 0 1 ~S -1 0 1 -1 -1 0 0 -1 -1 1 0 0 0 0 0 0 1 0 -1 1 0 0 1 1 0 -1 1

24.

• A=B=1, A=B=-1の部分はCと似てる • 他の出力が”弱い”なら、これらを”強く”出力する ことで上書きできる • 真理値表の左上を1, 右下を-1にすれば いい感じに1と-1をカバーできる • A=1, B=-1とA=-1, B=1の場合に両方の スイッチがOFFになるのでHi-Zとなってしまう ~S -1 0 1 -1 -1 1 0 0 1 0 -1 1 0 -1 1

25.

• Hi-Zを解決するために0にプルダウン(?) すると、1, -1を出力したいときに 0.5, -0.5になってしまう ~S -1 0 1 -1 -1 1 0 0 1 0 -1 1 0 -1 1

26.

• Hi-Zを解決するために0にプルダウン(?) すると、1, -1を出力したいときに 0.5, -0.5になってしまう • 謎の回路によってこの問題を解決 ~S -1 0 1 -1 -1 1 0 0 1 0 -1 1 0 -1 1

27.

• 謎の回路によってHi-Z問題を解決 • すべての場合でHi-Zにならず、抵抗を通して ”弱く”出力する

28.

半加算器(再掲) • 試行錯誤、紆余曲折があって現時点で最もコンパクトな回路↓ • 16個のMOS

29.

全加算器 • 1桁の値3つの 加算 • 半加算器2個 + S回路

30.

Index • はじめに • 平衡3進数を布教したい • 3進NANDは実は簡単 • 3進加算器の工夫を語りたい • フリップフラップフロップ! • 1trit手動制御CPUを作りました

31.

DFFF • 1bitの記憶回路をフリップフロップと言うが、1tritを記憶する 場合はフリップフラップフロップという名前がある • DFFFはクロックの立ち上がりで値を取り込み、保持する回路

32.

DFFF • NOTゲート, Transferゲートを用いてバイナリと全く同じ構成 で作ることができる • クロックは1/-1の2値から成る矩形波

33.

DFFF • 試作してみたところクロック切り替わり時に値が壊れてしまう • NOTゲートの出力の弱さが原因の可能性

34.

DFFF • 試作してみたところクロック切り替わり 時に値が壊れてしまう • NOTゲートの出力が弱く、入力容量に負け てしまう可能性がある ① ③ ②

35.

DFFF • 出力抵抗を小さく、スイッチ部に大きな 抵抗を入れると正しく動作 • アナログ回路的な影響を考えるのは大変な ので別の構成を試してみる ① ③ ②

36.

バッファ回路 • 抵抗を介さずに出力できる 回路が欲しい • 入力値をそのまま出力する バッファ回路なら実現可能

37.

DFFF(バッファ型) • 2つのバッファで自己ループを作り値を保持するDFFFを構成 • 試作品で動作テストに成功 • 今日のデモマシンではNOT型よりも動作不安定?

38.

Index • はじめに • 平衡3進数を布教したい • 3進NANDは実は簡単 • 3進加算器の工夫を語りたい • フリップフラップフロップ! • 1trit手動制御CPUを作りました

39.

1trit 手動制御CPU • 1trit レジスタ x2 • ALU (NAND, NOR, ADD) • ALU入出力選択MUX • クロック、制御信号はスイッチ で手動入力

40.

1trit 手動制御CPU

41.

3進CPUとは無関係ですが過去に作ったアナログライフゲームも 展示するので是非見てください

42.

ご清聴ありがとうございました