現代社会を駆動する半導体 (2)
昨日は半導体の役割と実際の動作原理(簡易版)を紹介し、最後にこの画像を貼った:

このトランジスタはバイポーラトランジスタと呼ばれ、よくBJTと呼ばれる。しかし実際の応用では、もう一つのトランジスタの方が一般的によく使われている。それは電界効果トランジスタ、英語の略称でMOSFETと呼ばれるものだ。
電界効果トランジスタ(MOSFET)
電界効果トランジスタはバイポーラトランジスタと同様に3つの端子を持ち、それぞれゲート(gate)、ドレイン(drain)、ソース(source)、そして基板(body)がある。
ゲートに電圧を印加すると、ソースとゲートの間に電子チャネルが形成され、回路を導通させることができる。電圧を印加するかどうかによって回路を導通させるかを決められるため、スイッチとしての役割を果たすことができる。
MOSFETがBJTトランジスタよりもよく使われる理由にはいくつかある:
- ゲートとP型基板の間にSi酸化膜があるため、電圧を印加しても電流が流れない(高インピーダンス)。そのため消費電力はBJTに比べて相対的に小さい
- MOSFETのスイッチング速度(周波数)はBJTよりはるかに速い
- 構造上の理由から、MOSFETは通常BJTよりも小型である
上記のような利点があるため、半導体プロセスにおいては通常MOSFETが用いられている。
製造方法
CPUやその他の回路にとって、最も基本的な素子はトランジスタだが、トランジスタの配置と接続方法が重要になる。これを実現し、かつサイズを十分に小さくするための、現在最も鍵となる工法がフォトリソグラフィ(光露光法)だ。主な原理は、回路パターンをマスク(原版)にし、その回路パターンをウェハー上に露光することだ。
半導体プロセスはすでに数nmのレベルまで進化しているため、極めて精密な操作が求められる。最近よく耳にするEUVは光の波長がさらに短く、露光装置はまさに半導体製造の鍵と言える。露光装置は1台だけで数十億台湾ドルもする。
パッケージング
ウェハー上にエッチングされた回路は、パッケージングを経て初めて実際に使えるようになる。内部の回路は比較的脆弱で、保護するための外装が必要だからだ。また、ウェハー上の回路の接点は小さすぎるため、パッケージング工場で接点を引き出してもらって初めて使用可能になる。同じチップでもDIP、PGA、SMDなど、異なるパッケージング方式が存在する場合がある。
記述方法
1つのCPUには数億から数十億個ものトランジスタが搭載されており、この規模は数人の手作業で配線を描いて完成させられるものではないため、通常はコンピュータの補助を必要とする。現在では主にRTL(Register Transfer Level)を用いて論理回路を設計しており、有名なものとしてVerilogなどがある。
module half_adder(A, B, sum, c);
input A, B;
output sum, c;
xor (sum, A, B);
and (c, A, B);
endmodule
普段僕たちが書いているプログラムコードにとてもよく似ているが、背後での動作は物理的な回路に直接変換されるため、通常のプログラムとは少し異なる。物理回路においては、これらは同時に実行される。つまり、ここの半加算器は先にsumを求めてからcarryを求めるのではなく、1クロックサイクルで同時に完了する。論理回路を記述した後は、まずシミュレーションとテストを行い、期待通りに動作することを確認してから配置配線を開始する。
様々な応用
トランジスタの応用は非常に多岐にわたり、すべてを列挙することはできないが、ここではよくある応用例を2つ紹介する。
CPU / MCU
CPUやMCUは無数のトランジスタから構成されている。しかし、なぜトランジスタが集まるだけでCPUやMCUを構成できるのだろうか?
CPU内部の回路をごく大まかに単純化すると、制御ユニット、演算ユニット、記憶ユニットの数種類に分けられる。制御ユニットは命令に基づいてどの分岐を実行するかを判断し、演算ユニットはデータの計算を担当し、記憶ユニットはデータを保存できる。
各ユニットを実際にどのように回路で模倣するかについては、[Day8] 與程式有關的遊戲三選 (2) – TIS-100 與 Turing Complete を参考にしてほしい。基本的にはすべての機能を論理ゲートで作ることができ、その論理ゲートはトランジスタで表現できる。
**「でもコンピュータは0と1だけじゃないはずでは?」**たとえばディスプレイはなぜあんなに色鮮やかで、たくさんの色を表示できるのか。確かに、これらの技術に関わるものは電気信号だけにとどまらない。しかしディスプレイを、非常にたくさんの微小なLEDであり、電圧の大きさによって異なる明るさと色を組み合わせられるものだと考えてみよう。そうすれば、ディスプレイの表示は「その色に必要な電圧と、どこに表示するかを計算すること」へと抽象化できる。
ディスプレイの裏側でもチップが制御を行っており、ディスプレイのメモリアドレスの値を書き換えるだけで、色を変更してくれる。したがって、プロセス全体はさらに「どのメモリアドレスの値を変更するかを計算する」ことへと単純化できる。このように、多くの問題は突き詰めていくと計算可能な問題になり、計算できるものならCPUを利用できるということがわかる。
昇圧コンバータ
たとえば今、あるICが5Vや12Vの電源を必要としているが、乾電池は1本で1.5V、2本でも3Vしかない場合、僕たちはどうすればよいだろうか? 前述の通り、トランジスタには「スイッチ」としての機能がある。昇圧コンバータの原理はインダクタ(コイル)によって実現されており、インダクタには非常に不思議な特性がある。電流に変化が生じると、インダクタはその変化を打ち消すように起電力を生じさせるのだ。
僕たちが絶え間なくスイッチのオン・オフを繰り返し、インダクタにエネルギーを蓄積させてはコンデンサに放電・充電させることで、入力電圧よりも高い電圧を得ることができる。これによって昇圧効果を達成するのだ。僕が初めてこの回路を知ったときは、昇圧とは単にひたすらオン・オフを繰り返すことだったのかと、とても不思議に思った!
もちろんこれは魔法ではない。理論上は無限大まで昇圧できるとしても、それではMOSFETとインダクタが耐えなければならない電力が極めて大きくなり、ほぼショートしているのと同じになってしまう。たとえ可能だとしても、1.5Vの乾電池2本に蓄えられたエネルギーは有限なので、昇圧しすぎればあっという間に使い果たしてしまう。
関連記事
- 測定が目標になるとき:窓税からPull Request数まで かつて僕は小さなツールを自作し、四半期で自分がどれだけPRに貢献したか、レビューコメントをどれだけ残したか、チケットをどれだけ消化したかを集計して、上司にアウトプットを証明しようとしたことがある。上司は淡々と、評価はアウトプットだけで見るものではないと言った。数年後、僕はようやく理解した――測定が目標になるとき、それはもはや良い測定ではなくなるのだ。英国の窓税、ハノイのネズミ駆除の報奨金から、現代のPR数による開発者評価に至るまで、そのメカニズムはまったく同じだ。
- Cloudflare Images を画像ストレージ・変換ソリューションとして使う ウェブページに画像を1枚置くのはフロントエンドにとって最も簡単なことだが、リサイズや各種フォーマットの生成、さらにはトラフィックの負荷に耐えることまで完璧にやろうとすると、実際には一つの包括的なソリューションが必要になる。僕はその後、すべて Cloudflare Images に任せるようになり、オリジナル画像1枚だけを渡すようにしている。
- もう AWS Access Key を使うのはやめよう Access Key は AWS において見落とされがちなセキュリティリスクだ。OIDC と IAM Role を組み合わせることで、GitHub Actions にシークレットを一切保持させることなく、安全に AWS リソースを操作できるようにする。
- データベース主キー:AUTO_INCREMENT、UUID、そしてUUIDv7 バックエンド開発で度々直面する主キーの決定。auto incrementを使うべきか、それともUUIDか?衝突への懸念は?UUIDv7とcreated_at + インデックスの性能差はどれほどか?実際に2,000万件のデータで検証したベンチマークと設計上の意思決定を解説する。