4.3K Views
January 02, 24
スライド概要
高専生 低レイヤーやります
Making CPU by electric working beginner 電子工作初心者が CPU自作した話 知識ゼロから始めるコンピュータアーキテクチャ O’CREILLY お蔵入り・ジャパン Basyo-Engineer 著 hogehoge 訳
自己紹介 • 芭蕉梶木です.バショウカジキって読みます. • 矢田山まるごと奈良高専に隔離中.一応情報科 生(二年).合氣道と電研にいる • 低レイヤー,特にコンピュータアーキテクチャ に ↓今のアイコン ↓前のアイコン 興味がある • Twitter: Basyo__Engineer
もくじ • CPUについて知ろう • 自作したCPU「PEC-1」 • CPUを自作する方法 • CPU創った後の話とか
そのまえに • 自作CPU Advent Calendar 2023に「技術的な」 記事を同じ内容で挙げてます • 今回の登壇では,記事に載せなかった 内容についても話します 全人類読んで→
CPU創ったことある?
CPUについて知ろう
What is CPU ? • 最近流行りの「半導体」を使いまくった 製品.Central Processing Unit • あらゆるプログラムを実行できる ↑Turing完全 • トランジスタというスイッチが 数十億くらい詰まっている. ムーアの法則えぐい よくわからん魔法の石 • CPU自体を計算機とかと言ったりする
Turing完全の説明 • Turing完全 • 万能Turing Machineと一緒の性能であること • 万能Turing Machine…あらゆる単機能のプログラムを読み 込んで実行できる機械 • とりあえず,「万能な計算機である状態」がTuring完全 • Alan Turingが数学の問題(Hilbertの完全問題)を証明するため に考案 • 計算可能=アルゴリズムが構築できるなら,問題が解ける
ムーアの法則の説明 • ムーアの法則 • プロセッサに含まれるトランジスタの集積度合が 前年の二倍ずつ増える. 指数関数的に増えるので,十数年で限界を迎えるのが早い. • 逆に,集積技術が向上したり,新しい技術が構築されやすい • トランジスタ数 • Intel 4004(世界初のマイクロプロセッサ)…2300個 • Intel Coreシリーズ12世代…数十億個 • 50年で100万倍近く
CPUは究極の基盤技術 • あらゆるプログラムを動かすためのコンパイラなど 言語処理系 • ソフトウェアを動かすためにPC全体を管理するOS • ネットワークとか • こういうレイヤーの低い情報技術から,ソフトウェ ア・WEBの最前線の技術すべて支えるのがCPU • しかしアーキテクチャ分野に進む人は少ない (地味でおもんないと思われてるらしい)
CPU自作は敷居高い • ほとんどの人は作ったことがない →「ブラックボックス」が故難しい • イマドキはFPGAとかシミュレータ ↑実機実装する人が少ない • 仕組み知ってても技術的にムリ 敷居を低くし,アウトリーチに繋げる
まず始める前に • そもそも何からしたらいいかわからん →古くからのいい本に出会いましょう. やり方が大体書いてる ←電子工作からする. CPU自作の登竜門 実機じゃないけど→ 低レイヤ全体カバー Nand2Tetris
自作したCPUの話
PEC-1 • Prototype Experimetal Computer No.1 • 命令長:2オペランド命令,8bit • データ長:6bit ←ASCII入らんやん • 汎用レジスタ:4つ • ROM:幅8+6bit(即値) サイズ32 • 動作クロック:1Hz
ALU • 6bitデータの演算 • 加減算,NAND演算可能 • ゼロフラグ,サインフラグ, オーバーフローフラグ • 74HC283で基本実装 • データ選択とか減算部分は 基本論理ゲート
Data Selector & Register • Data Slector • 汎用レジスタと即値データの選択 • 74HC138を使った ↑8-1のセレクタ • Register • 74HC161を使った • プログラムカウンタに合わせて6bit.後悔した • 非同期クリアだし,読み込み/カウンタ選択できる • Lチカきれい
Instruction Decoder • 今回は実装間に合わないのでRasberry Pi Pico W を使った. • Pythonなんも知らんから, 超冗長なコード • GPIOから電圧レベル取得 →配列でIf文処理 →GPIO出力を決める
ROM • 原型になった「TD4」はROMをDIP SWで実装 • スイッチをプルアップで繋げる←永久的に記憶 • 8bitと6bitのスイッチをそれぞれ32個, スイッチングダイオード400本くらいのはんだ付け • これのためにプリント基板で実装 えぐ過ぎる→
発狂実装 • 高専祭三日前に基板が届く • 間に合わないので総動員ではんだ付け • ROMとかえぐかった • ICは便利 • いいはんだごてを使おう • 高専祭前日に完成
閑話休題
推しの話をしよう
推しの話 • 『ブルーアーカイブ』の各務チヒロ • ハッカー集団「ヴェリタス」副団長 • サーバーセキュリティメインらしい • 性癖しかない
ビジュ良すぎ • 職業人?(高3です) • 新ビジュで無量空処食らった • スカジャン発売らしい.金消える
CPUを自作する方法
何から始めるか • 基本的にISA設計,アセンブラ設計,ユニット設計,基 板実装の順番 • 今回アセンブラは飛ばした. • 良いISAから良いCPUは生まれるし,良いALUを作るこ とも大事(?) • シミュレータ使えばほぼ6割は完成している
ISA設計 • ISA,もしくは命令セットと呼ばれる命令群 • CPUが実行可能な命令の一覧 • CISCとRISCの設計思想(今回はRISCもどき) • どういうマシン語(二進数)の割り当てをするかが大事 • 後々回路設計にも影響する • オペコード4bit(16命令) + 2オペランド命令4bit
ユニット実装 • どういう部品をCPUに載せるか • ALU,レジスタ,セレクター,ROMとか… • これらは全部論理ゲートで実装可能 • 必要最低限で実装 • 『CPUの創りかた』のTD4を原型として設計 • 既存のロジックICをうまく利用する • たまにNANDとかリレーだけで実装する変態がいる
何で設計 • シミューレータでいったん設計 • Logisimを使ってCPUを作る • 瀬長おぢさんに影響を受ける • 回路設計 • Logisimで作った論理回路をもとに 74HCシリーズをあさって設計 • KiCADを使った • 結構つらかった Logisim
実装 • 届いた基板と購入した部品をはんだ付け • 部品名や容量・値がわかるように基板設計段階で シルクをつけておく • 良いはんだごてを使おう ありえんくらい効率が良くなるので
CPU完成 • 自作CPU「PEC-1」ができた • Twitterに上げたらちょっとバズった • 界隈に認知された • 400いいね近く • 90RT • 3.9万人に見られたCPU
CPU自作後日談
やばいやつ現る • TwitterにISAを公開したら次の日FPGAで実装してきた 人が出る • 「データを2Byte,ROMを増やしました」 • 勝手に増やすな.こっちはDIP SWだぞ • 「乗除算・素数表示プログラム作ってみました」 • 大容量のROMで殴るな • 「ぼくのPEC-1」 • 俺が設計したPEC-1やぞ • ↑いじめ?
思ったこと • 素人の自分の開発期間1カ月は玄人の数時間 • FPGAで全部解決できるからIC実装の メリットない →FPGA買ってVerilogで遊ぼう • ISAは公開しない(OSS文化の否定) • 殴られそう • 俺より良いの創ってリプしないでほしい(涙目)
高専祭展示 • PEC-1を奈良高専祭に展示 • 結構人は来た • しかし,CPUだけなぜか避けられる • 「これって何?」「これは何ができるの?」 • この質問結構つらい • 説明が難しい.サイエンスコミュニケーションの力要 る • エンジニアの人は凄さがわかる.食いついた.
開発動機 • そもそもコンピュータアーキテクチャに興味あった • 小学生の時「FACOM」というリレー計算機に出会う • MakerFaireとか行く • 空白の中学時代 • 高専入って,「CPUの創りかた」に出会う • 実装は置いといてすべて読む • 高専祭に向けて,拡張したCPUを作りたくなる • やっぱりCPUとか低レイヤーやる人かっこいい
技術活動はまず踏み出すところから • 技術活動に踏み出すのはかなり難しい • イカれた環境にいたり,運が良かったりする人はいる • そうでなくても始める敷居は低くなった • いったんデカい目標を短期でやってみたり? • 与沢翼もそう言っている • 知らないことが多いから,必要な知識を一度に大量に取り込 む • 自分はこれでかなり成長できた(と思っている)
技術創作は あなたを待っている