Tanuki_Bayashin’s diary

電子工作を趣味としています。最近はラズベリーパイPicoというマイコンを使って楽しんでいます

『CPUの創りかた』を読んでCPUを自作した

※なにか気になる点がありましたらコメント欄にご記入ください。また、工作や回路を製作する場合には、細かい作業などに対して、細心の注意を払われるようお願いいたします。

【目次】

1.はじめに

 昨年『CPUの創りかた』(渡波郁 著)という本を読みました。CPUを自作するための本なのですが、回路などの説明だけでなく、随所にちりばめられたユーモアあふれる文章に、300ページもある内容も半月ばかりで読み終えてしまいました。
(筆者にとっては異例です)

写真1 『CPUの創りかた

この本を読み、「自分もCPUを作るぞ」と意気込み、作ることにしました。
手間を惜しんで(笑)ブレッドボードで、ジャンパワイヤでつなぎながら製作しました。

覚書として残したいと思います。

2.回路構成

CPUの創りかた』という本(以下「参考図書」と記します)は、古くから知られている本で、2023年1月で34刷されています。
この本をもとに製作記を書かれている方は他いもいらして(以下参照)、自分はこちらのサイトも参考にしました。
fumimaker.net

2-1 回路図

回路図を図1~図5に示します。

図1 メイン部
図2 ROM(A)部
図3 ROM(B)部
図4 電源、RST、CLK回路部
図5 デコーダ

2-2 74HCシリーズの代替品について

一部、入手が困難かと思い、代替品に置き替えたICがあります。
まず、参考図書に載っていたICのリストを示します。

リスト1 参考図書で使用された74HCシリーズ

No. 名称 個数 主な取扱店 おおよその価格 ピン数 機能
74HC10 1 千石、共立、樫木 50円 14 3入力NAND
74HC14 1 秋月電子 40円 14 NOT シュミットトリガ
74HC32 1 秋月電子 30円 14 2入力OR
74HC74 1 秋月電子 30円 14 D-フリップフロップ
74HC153 2 千石、共立、樫木 100円 16 4入力データセレクタ
74HC154 1 樫木 1000円強 24 4to16ラインデコーダ
74HC161 4 秋月電子 80円 16 4bit 同期カウンタ
74HC283 1 共立、樫木 200円 16 4bit全加算器
74HC540 1 千石、共立、樫木 150円 14 NOT回路8個

合計13個
※取扱店は他にも存在します。(上記は筆者が主に利用した店舗です)

取扱店の呼称:正式な呼称は以下の通りとなります。
秋月電子  株式会社 秋月電子通商
千石    株式会社 千石電商
共立    共立電子産業株式会社 (ネット店舗通称:共立エレショップ)
樫木    樫木総業株式会社

入手が困難だと思い、以下の3種を代替品に置き替えました。

スト2 代替品のリスト

名称 代替品 個数 主な取扱店 おおよその価格 機能
74HC10 74HC00 (1部NOT回路) 1 秋月電子 30円 2入力NAND
74HC154 74HC138 2 秋月電子 30円 3to8 ラインデコーダ
74HC540 74HC04 2 秋月電子 30円 NOT回路

※結果ICの個数は2個増えました。

代替品と置き換えたところ、74HC10以外は価格を抑えることができました。(状況により変動すると思います)

2-3 代替品を用いたときの回路

今回の作品内で代替品に置き替えたときの回路について説明します。
(デジタル回路に詳しい人からすると、笑われるかもしれないです)

(a)74HC10の代替回路

74HC10は実際の回路内で、デコーダ部にて使われています。

74HC10内には3入力のNAND回路が3つ入っていますが、そのうちの1つは、入力をすべてつないでNOT回路1ゲート、2つ目は入力の内の1つを5Vにつないで2入力のNAND回路1ゲートとして使用しています。最後の1つはそのまま3入力のNAND回路として使われています。

これらを74HC00の2入力NAND回路(4回路)に置き替えました。

まず、下で説明している(c)で使用した74HC04の1ゲートをNOT回路(4個余ったので)、74HC00の1ゲートをそのまま2入力のNAND回路1ゲートとして使用しました。

最後の3入力のNAND回路1ゲートですが、74HC00の1つをNOT回路とし、別の74HC00のNANDの出力につなぎ、それらをもう1つ別の74HC00の入力につなぐことで実現しました。
(図5 デコーダ部参照。回路図を見ればひと目ですね)

(b)74HC154の代替回路

74HC154は図2,3のROM部の回路(A,B)で使用されていました。

74HC154は4入力のラインデコーダですが、代替品の74HC138は3入力のラインデコーダです。

4本のアドレスから、16個のROMのセル(DIPスイッチ)を選択するために使用されていますが、筆者の回路では、ROM(A)のほうでは74HC138をイネーブルにする端子のうち、4番ピンをA3につなぎ、0~7番地に対して(A3がLOWレベルのとき)有効になるようにしています。

一方ROM(B)のほうでは6番ピンをA3につなぎ、8~15番地に対して(A3がHIGHレベルのとき)有効となるようにしています。

(c)74HC540の代替回路

74HC540はNOT回路が8個入っています。さらにイネーブルピンがHIGH側のときNOT回路の出力はハイインピーダンス状態となります。

ここでは74HC04を代替品としました。同じNOT回路なので説明はいらないと思いますが、6回路入りのICを2個使用しているので、4回路あまります。ただし(a)でも見たとおり、デコーダ部で1個使用しているので、実際に余ったのは3個です。

また74HC04ではハイインピーダンス状態にはできないようです。(実用上問題はないです)

2-4 それ以外の変更箇所

2-3で見た以外の部分で、実際に作ってみて、いくつか変更したところがありました。

(a)リセット回路

参考図書の通りに作るとリセット回路の動作は、タクトSWを押してからリセットがかかるまでの時間が少し長く感じました。
なので、タクトSWにつながる抵抗の値を100KΩから10KΩに変更しました。

(b)クロック回路

クロック部では、Manual動作時、タクトSWを押すのが1回だけでも、クロック信号の出力が複数回出力されているようでした。
(Normal側のときも1回分のクロック時にも、アドレスが飛び飛びの値を取っていました)

これに対しては、74HC14のゲートが1つあまっていたので、クロックの出力をさらに1段増やしました。その結果、SWを1回押すごとに、CLKの発生は1回になりました。シュミットトリガ入力なのでチャタリングが抑えられたようです。


さらに変更したところを言うと、

と言ったところです。(個人の好みのレベルですね)

2-5 部品表

使用した部品を一覧に示します。

表1 部品表

価格は参考値です。
※ジャンパワイヤの本数は、種類によって過不足があるかと思います。適宜調節してください。

3.動作について

実際に回路が動いている様子をお見せしたいと思います。

・右下の赤いLEDにパターンを出力しています。
youtu.be
※参考図書に載っていたサンプルコードです

・ラーメンタイマー 3分(動画では10倍速なので約20秒)でアラームが鳴ります。
(同時にLEDの表示も3個から2個、1個と変化しています)
youtu.be
※同じく参考図書に載っていたサンプルコードです

4.まとめ

4bitのCPUを製作しました。
自分でもCPUを作ることができたというのは、とてもうれしい出来事でした。

付録

製作した回路図と部品表(PDF)をGithub上にアップしておきます。
※KiCADのファイルをアップロードしましたが、うまく再現できませんでした。

GitHub - Myuu1967/TD4_tanukiVer


以上です。
お付き合い下さり、ありがとうございました。