趣味で半導体集積回路設計できる時代来てるぜ
この記事はTCU-CTRL場外乱闘 Advent Calender(2023)の12月18日のぶんです。
昨日はりゅーの君の「性癖を書いてたら大学生活が終わってた件について」でした。シナリオが描けるってすごいなぁ。
ちなみにりゅーの君の被保護者であるCTRLマスコットキャラクターアンナちゃんですが、前に作った集積回路の空きスペースに仕込んでおいたんですよね。もう出来てるので、まだ見ていないけど顕微鏡で見たら見える・・・はず。
ちなみに明日はまる君の「今年描いた絵を振り返ってみて思ったことについて」の予定です。予定です。絵が描けるってすごいなぁ。
ロリ、いいよね。でもセロリは嫌いなんだよね。野菜の。違いはセがあるかないか。してみると、ロリってのはセがなくて、背もないというわけ。はは、どういうわけ?
申し遅れましたわたくし、なんかそういう感じの研究室に所属しているりあく徒です。そろそろ卒論の季節ですね。ヤバいね。
といっても研究室の勧誘をしに来たわけじゃありません。
同じ学科の2年生以下って該当者がほぼおらんし。
大学とか研究とか関係なく、個人で、趣味で、集積回路を設計できるんだよというメッセージを、体験に基づいて皆さんにお伝えしたいと思います。
つまりあなたもちゃんとこの記事の射程範囲です。
集積回路設計とは
以下かなりいい加減なことを書くので、本格的に気になった人はちゃんと調べてくださいね。
集積回路(Integrated Circuit, IC)は、現代文明の要です。「この世界は黒い体躯に銀の足をジャラジャラ生やしたゲジゲジの上に成り立っている」という神話的世界観を今考えました。お好きな神話に組み込んでおいてください。これであなたは組み込み系エンジニア。
チップの中にはたいていトランジスタがたくさん詰め込まれていて、いろんな機能を実現しています。インテルのCPUとかNVIDIAのGPUなんかは集積回路の華ともいえる存在でしょう。そういうデジタル回路だけでなく、音声信号を増幅するアンプみたいなアナログのICもたくさん存在しています。
当今、電子工作といえばこういうICを買ってきてよしなに組み合わせることを云う。
云うんだけどそればかりじゃなくて、この文字通りの”ブラックボックス”の中身も作ってみようじゃないかというワケですね。
オープンなツールとPDK
C言語ソフトウェアの開発にはエディタとコンパイラが必要になりますね。同様に、集積回路の設計には専用のCADツールとPDKというのが要ります。
Cならエディタもコンパイラも、イマドキはネット環境さえあればVimとgccをサクッと拝借して使えちゃうわけですが、集積回路はどうか。
集積回路用のCADツールは、プロプライエタリでバカ高いどころか個人じゃ買えないソフトがヘゲモニーを握っているのですが、オープンソースの代替ツールが整備されています。
PDKとはプロセス・デザイン・キットの略で、工場が受け付ける回路設計の規格みたいなものです。こちらも、工場(TSMCとか)と機密保持契約を結んだりなんだりしてからでないと手に入れられないのが普通ですが、気前よくPDKをオープンにしている工場が北米らへんの合衆国にあるのでそこのを使います。
機能を考える
ではお試しに、みんな大好き、NAND回路を作ってみます。
(いろいろ端折るのでこれ見ながらマネするのは無謀だとおもいます)
NANDがあればnandeも出来る、というのは周知のとおり。
回路を描く
回路エディタはxschem(旧twitterschem)を使います。勝手にエックス・スケムと読んでましたがエックス・スキームらしいです。
$xschem nandemo.sch
で起動します。
ちょちょいとNAND回路を書きました。応用情報にギリギリ出ないぐらいの、難度。
(MOSトランジスタの記号とNANDの挙動は出たハズ)
シミュレーション機能も付いてます。とてもNANDですね。
レイアウトする
レイアウトツールはklayoutです。
$klayout
そもそもレイアウトというのは言葉の通り、シリコンのどこにどうトランジスタを置いて、どう配線するかを決定するという、凄まじく泥臭いお絵描きです。
トランジスタを直接お絵描きしてもいいですが、テンプレートがあります。
NMOSトランジスタはこんな感じ。
トランジスタ4つを並べたら・・・
金属線で配線します。ペイントソフトで四角形をペタペタ塗ったり線描いたりするイメージ。
端子に名前を付けたら、ハイ完成!
だいたい30ミクロン四方に収まるNAND回路が描けました。
デバッグ
レイアウトをダーっと描いて一発でOKということはまずないと思った方がいいです。
ソフトウェアでもそうですが、この世の摂理でしょうか。
以下のふたつのチェックをクリアする必要があります。
- DRC(デザイン・ルール・チェック)
- 許容できない要素が無いか(配線が細すぎるとか、配線同士が近すぎるとか)
- LVS(レイアウト vs. スケマティック)
- 回路図とレイアウトが食い違ってないか
このふたつのチェックを、エラーが出なくなるまで回しまくります。
オールグリーン。おめでとう、集積回路の設計が完了したぞ!
(他にもこまごまとした仕上げ作業があるんですが・・・そして往々にしてそこに一番時間がかかったりする。これもまた世の摂理か。)
Open MPW
klayoutでレイアウトを保存すると、この例では”nandemo.gds”というGDS形式のファイルになります。基本的な考え方でいうと、このGDSファイルを工場に提出するとICになります。
さて、普通はオリジナルICの製造にはン百万円、ン千万というお金がかかります。まあ、「実物にならなくても設計しただけで満足~」という楽しみ方もあるでしょうが、なるべくなら作りたい。
でもそんな金はない。
そんなあなたにOpen MPW。
Open MPWというのは、簡単に言うとGoogleの金でICを製造してもらえるやつです。神。
ただしいろいろ条件付きで、抽選です。
条件のひとつとして、設計をオープンソースにしなければなりません。これまでOSSなツールで設計してきたわけですが、その成果物もオープンでないといけないわけです。
また抽選ですが、落ちると次回の抽選で優先順位が上がるらしいので、根気強く応募し続ければいつか当たるらしいです。
というわけで実際に作るところはGoogle様頼みなところはありますが、とにかくフリー&オープンな感じで集積回路を作れちゃうんですよ。
界隈が盛り上がってインフラがもっと整備されていったら、将来的には少額(数万円ぐらい)で確実に作れるようになったりしねぇかなぁ、と夢想して、とりあえずこんな記事を書いた次第。
おわりに
いかがでしたでしょうか?趣味で集積回路を設計する雰囲気が伝わったでしょうか。
本当は体験談という体で書こうとしたんですが、紆余曲折がありすぎてうまく文章に纏める自信がなかったのでこんな形式にしました。
実際に僕が何をしたのかというと、12/11が最終締め切りだったGFMPW-1というシャトルに、NOT回路を提出しました。当選を待つのみです。
はい、NANDですらありませんNOTです。時間が無かった・・・。
それも、単独ではなくてISHI会という国内のIC自作コミュニティの相乗りプロジェクトに参加してのことです。やりかたもISHI会の人たちにいろいろ教えていただきました。もし自作ICに興味が湧いたら、こういうコミュニティを覗いて戸を叩くのが一番の近道であると思います。
個人でできる!と大見栄張って結局集団やないかいというツッコミはご遠慮ください。
おわりに2(ツー)
18日のアドカレの予定でしたが、まるまる一週間遅れました。
時間がなかったわけではないんです。しかし超ド級のスランプに陥っていたのでCities:Skylines2を遊んだりアニメ版スクールデイズを周回したりして"充電"してました。
メリークリスマス
マイクロ・コンピュータの世界
この記事は TCU-CTRL場外乱闘 Advent Calendar 2021 - Adventar 11日目の記事です 。
前回の記事はこちら。
「マイコン」と聞いて何を思い浮かべるでしょうか?
PICやAVRといったマイコンチップでしょうか。
それとも、ArduinoやRaspberryPiのようなマイコンボードでしょうか。
上のような意味でマイコンと言ったとき、それはどちらかといえば「マイクロ・コントローラ」の略称です。サイズ・機能・消費電力などがパソコンに対してマイクロで、機器の制御に向いています。
私がこの記事で語るマイコンは「マイクロ・コンピュータ」です。CPUにマイクロプロセッサを使用していて、そうでないコンピュータよりマイクロなコンピュータを指します。
今の時代、マイクロでないプロセッサの方がレアです。PICもCore iもマイクロプロセッサですし、富岳のようなスパコンも大量のマイクロプロセッサを(効率よく)纏め上げて出来ています。つまり、だいたいのコンピュータは「マイクロ・コンピュータ」に該当する可能性があります。
ただし、個人が独占的に使用するコンピュータをパソコンとする呼び方がたいへん普及した現代では、(コントローラでなしに)マイコンというともう少し特別な意味合いを帯びてきます。
8bitマイクロプロセッサを搭載した、70年代~80年代スタイルのコンピュータです。
マイコンの構成
マイコンの世界に入るためにここでひとつ、最強のマイコンを妄想で作ってみましょう。
欠かせない部品はマイクロプロセッサです。
実のところ、これだけでほぼコンピュータとしての機能が完成しています。ただ残念ながら人類は長い進化の過程で5Vの信号を読んだり出力したりする機能を退化させてしまったため、LEDとスイッチを付けてみましょう。
今は細かいことを考えないことにしますが、あえて言えば、8bitのプロセッサだから、LEDとスイッチが8つづつあればよいです。
これでもう、スイッチを通して機械語で話しかけてやれば、加算や減算、排他的論理和などの演算を華麗にこなし、LEDに結果を表示することができます。
…本当です。やってるひとがいます。
6502あそび[1] メモリごっこ | ポン酢の備忘録
これは私ではないですが、リアルタイムでの機械語コミュニケーションは面白いという一言では言い表せないほどの体験でしょうね。
あ、本当にやるときはショートとかに気を付けてくださいね。
しかしまあ、最強のマイコンというにはまだ何か少し足りない気もします。
RAMを付けました。揮発性メモリです。
プロセッサからはデータとは別に、アドレス信号がまろび出ています。これを繋ぐことでメモリはなんと、人間の代わりに機械語命令とデータをプロセッサに渡してくれます。逆に、結果をRAMに格納することもできます。自動で演算するとか最強ですね。
ならもうスイッチは要らないじゃないかと思うかもしれませんが、起動時点ではRAMの中身はめちゃくちゃです。電源を入れてもまだプロセッサには止まってもらっておいて、その間にスイッチでRAMに機械語とデータのリスト…いわゆるプログラムを書き込んでおく必要があります。プロセッサを走らせて演算結果をRAMに格納したら、また止まってもらって、RAMの中身をLEDで除くことができます。
なんて立派なコンピュータ・システムに成長したのでしょう。
ただし、人間はあくまでも貪欲で、まだ満足しません。起動するたびにプログラムを打ち込むのがつらいだの、電源を入れっぱなしにしておくのはSDGs的ではないなどと不満を次々と発明します。
機能過多になる恐れを抱きつつ、UARTを繋げました。
UARTを知らない人がいるかもしれませんが、風体はプロセッサやメモリと変わりません。接続方法も特に変わらないので、工作はまだ簡単です。
UARTがあると、テレ・タイプライタやターミナルに接続することができます。
これらの機器は、キーボードで打った文字をASCIIコードでコンピュータに読み込ませたり、反対にコンピュータからASCIIコードで受け取った文字を印刷あるいは表示することができます。
画面にコンピュータが文字を表示し、ユーザはそれに応じてキーボードで入力する。応じてコンピュータが次の文字を返す。いわゆるCLI環境が出来上がりました。
CLIでどんなことがしたいですか?
いいですね。キーボードと文字表示があればなんでもできます。
「ゲームなんて、プログラムをスイッチで打ち込むのがあまりに大変じゃないか」と思われるかもしれませんが、すでにUARTを実装したことを思い出してください。「ターミナルから送られてくる情報をひたすらRAMに書き込む」という簡単なプログラムをスイッチで書き込んでやれば、あとは使い慣れたキーボードから好きなだけプログラムを入力できます。
この小さなプログラムをブートローダと言ったりします。
さらに、テレタイプライタやターミナルには、紙テープの読み書き装置がついていることがあります。
テープに穴をあけて一度プログラムを書き込んでおけば、これを読み込ませるだけでタイピングの手間まで省いてプログラムをロードできます。
ところで、CLIでできる素敵なアプリケーションの代表としてゲームを挙げましたが、もっと素敵なものがあるかもしれないことに気が付きましたか?
そう、高級言語のインタプリタというのはどうでしょうか。機械語から解放されて、英語に近い言葉でプログラムを書いて実行することができます。本を開くなどすれば、機械語よりも多くのソフトウェア資産(特にゲーム!)が無尽蔵に見つかります。これこそがマイコンの華、BASICです。
起動してブートローダを打ち込み、BASICインタプリタをテープからロードする。BASICが起動したら、今月の最新刊に載っている面白そうなゲームをそのまま打ち込んでみる。用心のために、ターミナルの表示先をパンチマシンに切り替えて、打ち込んだプログラム・リストをLISTコマンドで出力させ、テープに保存しておき、遊ぶ。
…
…発想はいいけどゲームバランスがおかしいんじゃないか?
もっといえば、ひとつ機能を追加するだけで劇的に面白くなるぞ。
でも今日はもう遅いから電源を切って寝る。あした同じプログラムをテープから読み込んでから、思いついた機能を追加してみよう…。
最強のマイコンは、こんなビジョンとともにあなたの脳内に完成しました。
あとはもう、蛇足です。なぜか隠し通してしまいましたが、ROMにブートローダを焼いて取り付ければスイッチを全く取っ払ってしまうこともできます。BASICでゲームをするなら、グラフィックもあった方がいいですね。じゃあCRTコントローラを付けましょう。
これでテレビにグラフィックが表示できるようになりました。
シューティングゲームが遊べます。
音を出したり、キーボードでなくコントローラを繋いでみたり。パンチカードとほぼ同じ理屈で、カセットテープやフロッピーディスクを副記憶にすることも可能です。
歴史的なマシン
ここまでは妄想でした。実際に存在したマイコンを見てみましょう。
Altair 8800 [MITS社 1974年]
アルテアと読むことが多いですが、アルタイルと読む場合もあります。
この、電源とスイッチとLEDの付いたデカい箱のキットの使い方はというと、先ほどの妄想をほぼそのままなぞることになります。
つまり、キットを買ってきて組み上げただけの最小構成では、マイクロプロセッサ(Intelの8080)を止めてスイッチを操作し、256B(バイト。1Byteは8bitなので、256*8=2064bit。)のRAMにプログラムを打ち込んでから走らせ、適宜LEDで状態を監視します。
特筆すべきは、その貧弱な最小構成に対して強力な拡張性を秘めていたことです。マイクロプロセッサのピン数よりめっぽう多い100本のピンを持つ拡張スロットが大量に用意されていて、追加のメモリボードやUARTボード、プリンタやフロッピーディスク
へのインタフェースボードを差し込んで機能を拡張していくことができました。本体を作ったMITS社だけでなく、他の会社も拡張ボード市場に参入し始め、後にIEEE696として標準化までされる100ピンのバスはたいそう賑わったそうです。
ボードだけでなく、バスの規格が同じでボードを流用できる互換機も現れました。
コンピュータの互換機市場が発達するというとIBM PC/ATが思い浮かびますが、IBMと同じく、MITS社もこのことを意図していたわけではなく、厳しい競争に曝されて脱落することになります。
ソフトウェアでは、BASICが供給されました。このアルタイルBASICは、マイクロソフトの製品第一号として有名です。
Apple][ [Apple社 1977年]
アップルツーのツーはローマ数字の2、Ⅱですが、本体の印字が四角い括弧を逆に並べた][のようにみえるのでそう表記することがあります。
1977年は、コモドールPET2001、タンディラジオシャックTRS-80、Apple][の三機が発売され、初期のマイコン御三家と呼ばれます。
外観から共通して言えるのは、キーボード入力・ビデオ出力が標準で可能になっていることです。TRS-80の画面は別売りの外付けですがセット販売が基本だったようです。
御三家からはもうマイコンではなくパソコンだとみる向きもあります。
入出力の備わった外観だけでなく、回路やプログラムも個人用コンピュータとして使いやすいように非常によく作られてはいますが、中身をよく見ればアルタイルと何から何まで別物というわけではありません。
マイクロプロセッサにはモステクノロジー社の6502が採用されており、後述しますが私がApple][に注目している(推しと言ってもいい)理由はこれにあります。
色数の少ない高解像度モードでは、280*192ドットのグラフィックが表示できて、3D表現のあるゲームも動きます。
ソフトウェアでは、表計算ソフトのVisiCalcが事務用途で使えるということでキラーソフトになったようです。また、整数を扱える6KB版のBASICをスティーブ・ウォズニアックが作って標準装備していますが、そもそもハードウェアの設計もほぼすべて彼によるものです。
ちなみに、Apple][プラスに搭載された、浮動小数点計算のできる10KB版のBASICはマイクロソフトが供給しました。
個人的には、標準で逆アセンブラが搭載されていることが衝撃的で、一番の魅力だとも思っています。今のAppleでは考えられないことです。
なんて、ごめんなさい。そもそもApple][以外のApple製品を全然知らないので現在がどうなのか何もわかりません。
さらなるマイコンワールドへ:書籍編
ひいひい、疲れました。
頑張って分かったように蘊蓄を述べてみましたが、上は全部これから紹介する本の受け売りです。いちいち「本にこう書かれてました」なんて付言していたらテンポが悪くなりますからね。私はレトロPCの類を一切持っていませんし触ったこともありません。
ひい、楽し…いや疲れました。
現代の本
過去のマシンを振り返る内容で比較的最近に書かれた本は、導入には最適です。もし興味を持ってマイコンについてさらに知りたいと思った方がいれば、これらの本から読み漁ることを強くお勧めします。
古典電脳物語
鈴木哲也という人の書いた古のマイコンについての本は全て、あるマイクロプロセッサを取り上げて、それにまつわる歴史をかなり深ーく掘り下げてから、そのマイクロプロセッサを実際に入手してマイコンを作る過程を紹介してくれます。
歴史背景もハードもソフトもわかる、そういう本です。
他の本よりは古くに出版されたこの本は、内容が盛りだくさんです。8085とZ80のマイコンを組んでいますが、後の本では省略されているような周辺回路の一般的な知識ノウハウも詳しく書かれていて、さらにはスタイリッシュなケースに収める工作までしています。2006年の本なので普通に書店で買うことはできないかもしれませんが、図書館にはあるかもしれません。始めの一冊におすすめします。
モトローラ6800伝説
鈴木氏が書いた、その名の通り6800についての本です。2017年と最近の本で、鈴木氏はシングルボードコンピュータ(SBC)というスタイルを固めています。6800につきものなMIKBUGというモニタプログラムや、VTL-02というBASICを圧縮したようなコンパクト(768バイト!)なインタプリタの存在はこの本で知りました。
ザイログZ80伝説
www.rutles.net同じく、今度は国産のマイコン/パソコンには採用例の多いZ80についての本です。それぞれ特定のプロセッサに着目しているとはいえマイクロプロセッサについて語れる歴史が三冊分もあるのかというと、たしかに記述が被ってはいるのですが、情報の更新があるらしく飽きるようなことはありません。
8080についての本もあるようですがまだ読んでいません。
6502とAppleⅡシステムROMの秘密
www.rutles.net鈴木氏の本ではありませんが、同じ出版社の本なので装丁の雰囲気などは似ています。6502とAppleⅡをひたすら詳しく語る本で制作記事はありませんが、これを読めば6502とAppleⅡの魅力に目覚めることは間違いなしです。6502のプログラムを書く時のハンドブックとしても大変優れていて、データシートよりもこっちをめくっていますが、ひとつだけ。
CMP命令の説明がたぶん間違ってるので気を付けてください。
当時の本
70年代80年代の、8bitマイクロプロセッサが登場して現役だったころの解説書も読んでみると面白いです。当時の意欲ある学生向けに書かれており、内容の充実度と平易さが共存しています。
日本語で書かれている資料だと当然、日本でよく使われたインテルやザイログのプロセッサを題材にしていることが多いですが、つい先日、6502について詳しく書かれた本を発見いたしました。
6502チップの開発元が開発した簡素な6502マイコンボードKIM-1について、回路図付きで詳しく説明しています。6502や、ましてKIM-1についてこんなに詳しく書ける日本人は多分いなかったのでこんな本もないと思っていましたが、海外で出版されたものの邦訳があるとは盲点でした。
さてこれらの本を今現在手に入れることは非常に困難ですが、多少の歴史がある工業系の大学の図書館であれば山のように眠っている場合があるようです。というか、そういうところでなければもうマニアの家とか国会図書館にしかないような気もします。
インターネット編
なによりもまずは本をすすめますが、インターネットもまた情報の宝庫であることは間違いありません。前述の鈴木氏のようなホビイスト、マニアが書いているブログなどのWebサイトがいくつもあります。一種のコミュニティーにもなっているようです。
TTLでCPUを作る組立てキット・トランジスタでCPUを作る組立てキット・TK−80互換マイコン組立キット・Z80マイコンボード・BASIC制御マイコンボード
FrontPage - neko Java Home Page
また、Youtubeには実機が稼働している様子や分解・修理する過程などの貴重な動画が沢山上がっています。
www.youtube.comエミュレータで遊ぶのも面白いです。ほかにも沢山あるでしょうが、Apple][のものを紹介します。
ブラウザ上で動くエミュレータです。ブラウザ上ではありますが動作速度は遅くなるどころか、制限を掛けないと実機よりずっと速く動いてしまいます。
マイクロプロセッサのエミュレータもあります。
www.visual6502.orgこの6502エミュレータは極めつけのもので、リバースエンジニアリングによってトランジスタレベルで動作がエミュレートされ、各状態で内部のどの信号線がオンになっているかを見ながらプログラムを実行できます。狂気です。
自作編
古い既製品を手に入れることは難しくても、パーツをかき集めて自分で組み立てれば実際にマイコンを使うことができます。むしろ、マイコンの世界のメイン・コンテンツでしょう。
前述の鈴木氏の本で組み立てられたマイコンは、回路図やガーバーデータ、ソフトウェアが公開されています。それをそのまま深圳の工場に発注したり頑張ってユニバーサル基板に配線してもいいですし、基板だけの販売もいくつかの電子部品ショップで行われているのでそれを利用するのも手です。他にも、インターネットを探せばオープンハードウェアとして公開されているマイコンボードはいくらでもあります。
ところで、マイコンを作るとなったら、どのマイクロプロセッサを選ぶかが一番重要な悩みどころになるかもしれません。これはもちろん好みの問題ですが、敢えて6502をおすすめしておきます。
6502
・Apple][やファミコン等、十分な実績やソフトウェア資産がある
・シンプルなアーキテクチャで、プログラミングしやすい
・狂信者愛好家が多く、コミュニティがしっかりしている
・静的設計のCMOS版がある
・手に入りやすい
これらの理由から6502がおすすめです。一番重要なのは手に入りやすいというところかもしれません。オリジナルの権利を引き継いでいるウェスタンデザインセンター(WDC)という会社が、6502を売り続けるマンとして頑張っているらしく、秋月電子で750円で買えます。
コミュニティーやソフトウェア資産があることも重要です。とりあえず6502.orgを訪れてみてください。6502に関するハード・ソフトの情報やアイデアがひしめいています。
ところで、今手に入る6502はWDCが開発したCMOS版で、オリジナルより高速で低消費電力、いくつかのバグが解消して命令も追加され、そして静的な設計になっています。
静的というのはクロックがじっと動かないでいてもデータが失われないということで、これによってボタンでシステムクロックを入力してステップずつ動作を確認するという究極の完全理解メソッドが簡単に実現できます。
www.youtube.comBenEaterという人が、Youtubeでこの方法を使って6502の動作を解説しつつ、液晶画面にHello,Worldを表示するところまでを実践する動画を公開しており、これを一通りなぞってから独自の拡張をするのがゼロからのスタートではもっとも良いやり方かもしれません。
6502あそび[2] Ben式の拡張とFxT-65 | ポン酢の備忘録
そういうやりかたで6502マシンを開発している日本人を一人だけ見つけました。参考になるかもしれません。
最後に
妄想と受け売りと押し付けの長い文章にお付き合いいただき本当にありがとうございました。ぜひあなたなりのマイコンの楽しみ方を見つけてください。