Tanuki_Bayashin’s diary

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

【自作CPU】TD4を作ってみた(プリント基板ver.)

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

【目次】

1.はじめに

知る人ぞ知る4bit自作CPUであるTD4をプリント基板上に実装しました。(写真1)

写真1 自作した4bitCPU、TD4

筆者が参考とした本はこちらです。(読みごたえがありました)

図1 良本、自作CPUの創りかた

この回路に関しては1月にブレッドボードを使用して自作しています。(1部部品を代替品に置き替えています)

tanuki-bayashin.hatenablog.com

ブレッドボードで試作(?)したものを今度はプリント基板で組み、製作してみました。

2.製作記

a. PCBの設計に関して

全体の構成として、回路図にもあるとおり、5つほどの部分に分けて構成しました。

全般的に気を付けたこととして、多くの信号をLEDで表示しました。

他は抵抗やダイオードなどはまとめられるものは集合アレイなどを使いました。回路がすっきりしてはんだ付け作業もある程度楽になったかと思います。

1つ工夫した点としては、入力と出力及び電源5VとGNDの信号線を、2×5のピンヘッダにて外部と接続できるようにしました。ちょっと便利かもしれません。
(CLK信号とRST信号も取り出してもよかったのではないかと、後になって気づきました)

付け加えると、後の方になるほど配線がうまく取れなくなり、ビアを開けて表へ行ったり裏を回ったり美しくない様相を呈してしまいました。
4層にするともうちょっと楽に配線できたのかもしれないです。(その分高くなるのでしょうが)

電源部

電池(18650という代物を2本使用。リチウムイオン電池なので充電可能。専用の充電器が必要ですが)と電源用ICを用いて5Vを作る回路と、USB端子(TypeC)から5Vを取る回路の2電源(どちらかを選択)としました。

しかし、USBの方は設計ミスで端子の取り付ける向きを間違えてしまい、USBのコードを接続できませんでした。(笑)修正版を作らないといけないです(泣き)
実際に作らないと遭遇しない出来事ってあるものです。

また電源の消費電流を調べてみたところ、高々100mAも流れなかったです。なので電源用ICにはヒートシンクは取り付ける必要はないようです。
自分はICをはんだ付けする際、脚の長さを間違えてしまいヒートシンクを取り付けると斜めになってしまいました。まあ取り付けなければいいだけの話ですが。。

CLK/RST部

74HC14を用いて全体のクロックとリセット信号を発生する部分です。
回路としては1月の記事にあるとおりですが、手動と自動および自動のときのクロック周波数を切り替えるスイッチをトグルswにするつもりだったのですが、スイッチの脚の径を間違えてしまい、基板に刺さらない始末となってしまいました。

仕方なく脚の細いスライドswで補いました。察しのいい方はお気づきでしょうが、トグルとスライドではスイッチのオンとオフになるスイッチの位置が逆になります。(多くの場合)
その結果、スイッチの機能とシルクの表示が逆になってしまいました。

こんなのの連続です。

ROM部

基板の面積をなるべく小さくしたいという思いがあり、検討した結果、ROMはディップswを4×4に配列しました。配線の間隔をきれいにするために、寸法の単位を0.125mmぐらいにしたと思います。

また、ディップswの左上にLEDを配置しました。どのディップswが選択されているかがLEDの表示ですぐ分かるという仕組みです。
Youtubeでほかの方のTD4の基板を見つけ、その方のお知恵を拝借しました。(パクリです。恥)

はじめはよく分からないままPythonを使って配線していましたが、ビアを開けるときに「もうめんどい」となって、マウスを使って配線していきました。
そしたら、インチを単位として配線すると自然と等間隔にきれいな感じで配線出来ました。

ROMに付随するICとして、出力用のバッファ74HC04とラインデコーダである74HC138、それとPC(プログラムカウンタ)のための74HC161があります。74HC161はメイン部の加算器の出力が必要なことから、そのラインの近くに置きました。

74HC138×2は74HC154を上位と下位に分けたものですが、上位8バイト分と下位8バイト分の2つに分けて配置しました。(左右に分かれています)

また74HC04もデータ1バイトを上位4bitと下位4bitに分け、それぞれ別のICを使用しました。それぞれ4回路ずつ使っています。(下位4bitのほうのICでは、デコーダ部でNOT回路1ゲート分を使っています)

やはりこちらもROMのスイッチの右と左に分けて配置しています。上位と下位に分けることで、配線がしやすくなったように感じました。

メイン部

残りのメイン部です。

この部分は回路図のICのレイアウトとだいたい一致しています。PC用の74HC161以外は基板中央の下部(Aレジスタ、Bレジスタ、出力および入力)、その上がセレクタ(A、B)用の74HC153×2、その上にALUである全加算器74HC283となっています。

上部にはそれ以外にラッチである74HC74、デコーダ部を構成する74HC00と74HC32からなります。

また説明が前後しますが、全加算器の出力であるS0~3のラインは上部から下部に渡ってバスを構成しました。

またアドレスバスとデータバスを基板中央に配置しました。
なにを置いても、やはりこの2つは初めの方で配置を決めておくと配線が楽になりました。
それに気づくまで2回ほど配線のやり直しをしました。まあ初めの方だったのでまだましだったかと思います。

組立時に気付いた点

注意すべき点として、

  • LEDなど部品の極性~スルーホールなので、間違えると外しにくいです
  • ディップswやICソケットは奥までしっかり止める(見た目の問題でしょうか?)
  • ICソケットではんだ付けが甘いピンがあると、ICを抜くときにピンごと抜けてしまう   ~はんだ付けのやり直しが極めて難しいです(自分基準ですが)。筆者は電源ピンで一か所やってしまい、仕方なくバイパスコンデンサの脚から、電線を用いて延長してつなげました。(5Vのピンだったので運が良かった方だと思います)
  • シルク印刷は抵抗値やICの型番、極性などまで記述しておくと作業しやすい

と言ったところでしょうか。場合によっては基板一枚がおジャンとなりかねないミスもあるので結構怖いです。

あとは筆者の苦手な分野ですが、お絵かき基板というんですかね、お楽しみ要素もあるといいんじゃないかなと思いました。
こんな感じです。

(文章がひたすら長く続いてしまいました。汗)

3. 動作のようす

完成した基板にて、図1の参考図書に載っていたサンプルプログラムを動かしてみました。
(1月と同じ内容で芸がないですが‥)

ⅰ) ナイトライダー
出力(中央、やや下)のLEDが右→左→右と移動するように点滅します

youtu.be


ⅱ)ラーメンタイマー
1分ごとに点灯するLEDの数が減っていき、残り1分からは点滅し始め、3分経つと1このみ点灯となります。
(最後に点灯する出力ピンにブザーをつなげると、アラームになります)
※10倍速なので20秒ほどで終わります

youtu.be

4.まとめ

プリント基板を自分で設計して製作し、自作CPUであるTD4を再度作り上げました。
実際に手を動かして作ってみることで、いろいろと気づかされました。
(改良版に取り組まないと、です)

プリント基板を使用したのだから製作は行いやすくなったはずなのですが、数えてみたらスルーホールの数は800近くありました。
はんだ付けの際、軽いトランス状態になった気がしました。(笑)


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