要約: 『CPUの創りかた』読んだら良かった。

要約: 『CPUの創りかた』読んだら良かった。

CPUの創りかた 渡波 郁 ISBN: 9784839909864 https://amzn.to/3fVu507

この記事はKMC Advent Calendar 2020の9日目の記事です。昨日はさんおぺさんの 5年間総振り返り+聖地巡礼記2020でした。
普段はKMCでYouTubeとTwitterを見る活動をしているnona7です。
今回は既にタイトルで要約している通りの話をします。CPU実験した人とかには自明でごめんね……。

あらすじ 〜 数年前 〜
部室の本棚が溢れ、廃棄されることとなっていた本の山の中に、CPUの創りかたがあったことに気付いた私。
「いやこの本を捨てるのは無いでしょ……(読んだこと無いけど)」と思って家に持って帰り、積む。そのまま数年経過……。

最近
それ以降すっかり積んだままであったところ、KMCのSlackでCPUの創りかたが読まれているのを見かけ、「そういえば読んでなかったな」と思い出し、読みはじめる。
とりあえず部品を https://www.webcyou.com/?p=9218 などを見ながら発注して、後戻りできなくする。読みたいとは思ってたので、こういう時は勢いが肝心だからです。
部品が届くのを待ちながら、とりあえず手は動かさずに読んでいきます。

私は工学部ではなく理学部だったので、授業の実験でCPUを作ったりしたりしたことがなく、CPUの動作は今までは中で魔法による動作であるという理解でした。
NANDが完全であることは理解しているので、任意の入力に対してNANDゲートを組み合わせて任意の出力を出せることは知っていたが、ゲートの組み合わせだけでは「状態」を持つことができず、入力に対して出力を返すことはできても、過去の入力に基づいて何かをすることはできなかった……。
この本のクロックに関するところあたり(4章)までを読んでから、電子部品によるゲートの実装とかを見ることで、魔法にて動作していたこれらが、簡単な法則にて動作していたことがわかります。

おもしろくなってくるのは7章からです。
4章のクロックあたりからでてきた時間という概念により、ブール関数でしかなかった – と私は理解していた – ゲートの出力をまわりまわって自分の入力に戻すことに意味が表れます。
これは単にのように今まで認識していた私には驚きでした。以下のような図に意味を持たせるのは、単なるbool2値を取ってboolを返す関数だという認識では困難なためです。極限操作的なにおいがしてくる……してきませんか?? より正確にはゲートの並びに半順序が入らないとヤバい感じがする ということです。ブール関数の合成で話が済まなくなるので……。
時間、クロックのようなものを得たため、それはつまり「状態」を得ます。あんまり動作の意味がわかってなかったフリップフロップについても魔法が解けてくるというわけです。概念としてはこのへんがブレイクスルーだったかもしれない。
これと、その続きにある説明の「フリップフロップの出力を入力に戻すことにより、クロックを跨いでデータを保持する」「ロードとフィードバックを切り替えることで新たな値を保持するか固定するかを切り替える」、これの見方を変えてのP171、
そろそろCPUの正体がわかってきましたか? 要するにCPUというのは
転送命令を繰り返すだけのロジック
なわけです。
あたりが本質であるということを理解して、CPUの動作をさせていた魔法がだいたい解けることとなります。これより後は、「なんかうまいこといい感じにデータを転送させるだけのことをやっているだけ」という感じ – もちろんそれが単純ということではなく、単にそこにはもう魔法はないということ – であるということもすぐにわかります。

第一部完
これにて部品は注文したものの、それが届く前にCPUについては完全に理解してしまった……めでたしめでたし……。となると話が速くてよかったんですが……
ロジックの上での話はたしかにそうかもしれない。
まぁこれはそうかもしれない。
再現の漢字が間違っている。
これなんで? GNDが私の身体より相対的にまだ高いところにいるから?
これが12/6。
https://youtu.be/aP4jlM2B3o4 で下位ビットが不安定だったのはLEDを光らせるための降圧後のクロックを利用していたため、上位bitは下位のキャリーをクロックとしていたためだった。東芝のデータシート https://toshiba.semicon-storage.com/info/docget.jsp?did=10806&prodName=TC74HC161AP の11Pを見ると、同じクロックを用いてキャリーとENT/ENPを接続する図が載っていたので、それに合わせた。
これは意図的に降圧したところから取ってしまっていたけど、途中の値を見るためにLEDを繋いだら、他のところの電流変わって結果的にICへの入力の電圧がHかLか微妙なところになってしまい、おかしな動作をした回もあった。
可変抵抗が端っこでほぼ0Rになるの、構造を考えたらそうかなという感じはするものの、気をつけないとそのうち何か焼きそう。

俺達の冒険はまだまだこれからだ!
実際手を動かさないとわからないものばっかりな上、気をつけないとロジック(デジタル)の世界から変な操作をしてしまうだけでアナログの世界に堕ちてしまい、ソースコード(結線)を睨むデバック地獄に堕ちてしまう……。
1限だから起きれないからと言ってエレクトロニクスの授業切らなければよかった…… って言っています。
少しづつ手を動かして理解しつつとりあえずこの本のCPUは完成させましょう というのが現在の状況です。
それ以外のものもおもしろそうな動画がYouTubeにあったりするので、ぼちぼちやっていきましょう みたいなきもちになっています。魔法は解けたので、自分でも実装できるのでやってみるとおもしろいね……。車輪の再実装をして理解を得ていくことだけをやって生きていきたい。

最後に
読む前から人々の言及とかで良い本なんだろうな とは思っていたけれども、実際に読んでみたところやっぱり個人的にはかなり良かった(多くの魔法が解けた)ので、気になったりした人はぜひ読んでみてください。
KMC Advent Calendar 2020は明日はうたがわききさんによる「GitHub Actionsのプロファイラの話」となります。
また、KMCはコンピュータを使ったあらゆる活動をしており、コンピュータを使っていないこういう活動をしている人もたまにいます。
京大生である必要もなく、学生である必要もありません。最近の事情により主な活動はオンラインで実施しております。つまり、気になった人はぜひ https://www.kmc.gr.jp/guidance/ からメールを送るなり、お近くの部員に声をかけるなどしてください!
それでは良いクリスマスを!

Powered by Helpfeel