← 講義ポータルへ戻る 第2回講義:理論・フロー解説

第1章:デジタルIC設計の全体フロー

本章では、デジタル半導体(LSI)がどのような工程を経て設計・製造されるのか、その全体像(フロー)を徹底的に分解して学びます。半導体の設計は、抽象的なアイデアを、最終的にシリコンウェハ上の「微細なトランジスタの集まりと配線パターンの物理形状」へと変換する壮大な翻訳プロセスです。ただし、その工程の話に入る前に、そもそも「半導体設計とは何をやることなのか」を、身近な電子工作と対比して整理しておきます。

1.0 半導体設計とは何か ― 電子工作との違い

フローの中身に入る前に、まず「半導体設計とは、そもそも何をやることなのか」をはっきりさせておきます。ここが曖昧なまま手順だけ進めると、自分が何を作っているのか分からなくなりがちです。鍵は「どの粒度の"部品"を、誰が作るのか」という一点にあります。

1.0.1 「部品を使う」電子工作と、「部品の中身を作る」半導体設計

電子工作の回路設計は、抵抗・コンデンサ・LED・IC(集積回路)といった既製の部品を、配線でつないでいく作業です。ここで使うIC ― インバータ、CMOSロジック、マイコンなど ― は、中身がブラックボックス化された「完成した黒い箱」で、データシート通りに振る舞う部品として扱います。つまり電子工作とは「すでにある部品を、どうつなぐか」を設計することです。

半導体設計は、その「黒い箱(IC)の中身そのものを作る」ことです。電子工作では当たり前に使っていたインバータやフリップフロップなどの内部を、トランジスタの配置・配線として設計します。半導体設計の教科書がインバータや論理ゲート、順序回路の話ばかりなのは、まさに電子工作で「黒い箱」だった部品の中身こそが、半導体設計の対象だからです。

電子工作(部品を「使う」)

抵抗・LED・既製IC(マイコン等)を配線でつなぐ。ICの中身は黒い箱のまま扱う。完成物は基板。道具は回路図CADとはんだごて。

半導体設計(部品を「作る」)

その黒い箱(IC)の中身 ― 論理ゲート・フリップフロップ・CPU ― を設計する。完成物はチップ(GDSデータ→製造)。道具はHDL(Verilog)+合成ツール+ファウンドリ。

   電子工作の世界                │   半導体設計の世界
  (部品を「使う」)             │  (部品を「作る」)
 ───────────────────────────────┼────────────────────────────────
  抵抗 ・ LED ・ 基板 ・ 電源     │   トランジスタ
  既製IC(中身は黒い箱)          │   ↑ その黒い箱の「中身」:
    ・ マイコン       ←─── 境界 ───→     ・ インバータ / 論理ゲート
    ・ 74シリーズ                 │     ・ フリップフロップ
    ・ 555タイマー 等             │     ・ カウンタ / CPU
  「どうつなぐか」を設計           │   「黒い箱の中身」を設計

だから半導体設計の解説では抵抗やアノード・カソードが出てこない: 実際にLEDを光らせる電流・抵抗・LEDの向き(アノード/カソード)は、できあがったチップを載せるデモボード側の担当です。半導体設計者の仕事は「出力ピンに点灯用の信号を出す」ところまで。電子工作の終点(IC=部品)が、半導体設計の始点(作る対象)になっている、と捉えると境界がすっきりします。

1.0.2 半導体設計の中の2つの層 ― 本講座はどこを扱うか

「黒い箱の中身を作る」と言っても、半導体設計はさらに2つの層に分かれます。ここを区別しておかないと、教科書の話と本講座の作業がつながりません。

① デジタル論理設計(=本講座)

インバータやフリップフロップを「論理の部品」として組み合わせ、カウンタやCPUを作る層。トランジスタ1個1個には立ち入らず、論理ゲートより上を扱います。Verilogで regalways と書くと、それが論理回路へ変換される ― この世界が本講座の主戦場です。

② アナログ/トランジスタレベル設計

インバータ1個を「PMOSとNMOSをこう配置する」とトランジスタで設計する層。半導体の教科書の前半に出てくる、ゲートの中身そのものです。本講座では第8章のカスタムセルで、ようやくこの層に片足を踏み入れます。

1.0.3 この講座のゴール ― Lチカで言うと何を作るのか

以上をふまえると、本講座で最初に作る「Lチカ(LED点滅)」の正体は、こう言い表せます。

本講座のLチカ= 電子工作なら既製マイコンに任せていた点滅を、その中身のデジタル回路(カウンタ=フリップフロップの集まり)から自分で設計し、最終的に本物のIC(チップ)として焼くこと。「黒い箱を使う」のではなく「黒い箱を作る」へ ― これがこの講座のゴールです。

この「自分は黒い箱の中身を作ろうとしている」という立ち位置が腹に落ちると、設計フローの一つ一つが「何のための工程なのか」まで含めて見えてきます。その前に次の節で、いま自分が"作りたい物"の具体像として、実在するRISC-Vマイコンを一つ分解してみましょう。

1.0.4 実在するチップを分解してみる ― RISC-Vマイコン CH32V003 を例に

序章で名前だけ登場した CH32V003 を、ここで中身まで開けてみます。「自分はこういう物を作りたい」というゴールの具体像を持っておくと、このあとの学習が一本の道としてつながります。

(1) どんなチップで、いつ生まれたのか

CH32V003は、中国のWCH(南京沁恒微電子)が近年発表した、超低価格のRISC-Vマイコンです。量産時には1個あたり0.1ドル(十数円)を切る価格で、8ビットマイコンの定番だったArduino(ATmega系)の低価格な代替として注目を集めているとされます。用途は、コストが最優先される大量生産の制御機器、メインのマイコンから一部の仕事を肩代わりさせるI/O拡張、安価なIoT端末などです。登場からまだ数年という、比較的新しいチップです。

(2) 中身の構成 ― ブロック図で分解する

「マイコン」と一口に言っても、中身は複数の部品(IP)がバスでつながった集合体です。CH32V003を分解すると、おおむね次の構成になっています。

        ┌─────────────────────────────────┐
        │   CPUコア                       │
        │   QingKe RV32EC / 最大 48MHz   │
        └────────────────┬────────────────┘
                         │
        ┌────────────────┴────────────────┐
        │   内部バス + DMAコントローラ     │
        └────────────────┬────────────────┘
              ┌──────────┼───────────┐
              ▼          ▼           ▼
        ┌──────────┐ ┌─────────┐ ┌───────────────┐
        │ メモリ   │  │ 入出力  │ │ 通信・計測     │
        │ SRAM 2KB │ │ GPIO×18 │ │ USART/I2C/SPI │
        │ Flash16KB│ │ タイマ   │ │ 10bit ADC    │
        └──────────┘ └─────────┘ └───────────────┘

中心にあるCPUコア(QingKe RV32EC)が命令を実行し、内部バスとDMAが各部品の間でデータを運びます。そこにメモリ(プログラムを置くFlash 16KBと、計算用のSRAM 2KB)、外の世界とつなぐGPIO(最大18本)やタイマ通信(USART/I2C/SPI)や計測(10ビットADC)といった周辺機能がぶら下がっています。これら一つ一つが「IP(回路の部品)」で、マイコンとはこれらの組み合わせなのだ、という見方が大事です。

(3) なぜRISC-Vが使われているのか ― 民主化との接続

CH32V003がここまで安い理由は2つあります。ひとつは、CPUの命令セット(動かし方のルール)にオープンで無償のRISC-Vを採用していること。ARMのようなライセンス料が一切かからないため、その分が価格に乗りません。もうひとつは、WCHがCPUコアも周辺機能もすべて自社で設計(内製)していること。オープンな土台の上で部品を自前で固めたから、極限までコストを下げられた、というわけです。「オープンなISA × 部品(IP)の組み合わせ」が、この安さの背景にあるとされます。これは序章で述べた半導体の民主化の一例と言えるでしょう。

(4) RISC-Vの仲間たち ― 最小から最高峰まで地続き

ここで誤解しないでほしいのは、RISC-Vは「安いから使われている」のではないということです。RISC-Vは自由に拡張できるため、10セントの極小マイコンから、AIデータセンターの巨大プロセッサまで、同じ命令セットで地続きに作れる点に、大きな特徴があるとされます。同じRISC-Vでも、用途によって構成と規模はまるで違います。

超小型・最安:CH32V003

RV32EC・48MHz・SRAM 2KB/Flash 16KB・$0.1未満。大量生産の制御やI/O拡張向け。コアも周辺もWCHの内製(中身は非公開)で、オープンなのは命令セットだけ。

WiFi/BLE付き・IoT:ESP32-C3

Espressif製。160MHz・SRAM 400KB に、2.4GHz Wi-Fiと Bluetooth 5 (LE) を内蔵したシングルコアRISC-V。ネット接続デバイス向けで、ESP8266の後継・低コスト版として普及。

完全オープンIPコア:PicoRV32

RV32IMC等に構成可能な、回路の中身まで完全公開のCPUコア(ISCライセンス)。サイズ最適化型で、FPGAやASICに組み込みやすい。本講座が第5章で自作SoCに統合するのがこれ。

ハイエンド・データセンター/AI:SiFive Performance

RISC-V発祥のSiFiveによる高性能コアIP。例えばP870-D級は最大256コアまでスケールし、CXLやチップレットで巨大SoCを構成。NVIDIAとも協業するなど、採用が大きく広がっている。

このように、同じRISC-Vという土台の上に、用途に応じた大小さまざまなチップが載っています。「安いから」ではなく「自由で、最小から最高峰まで青天井だから」選ばれている、という見方が多いようです。ここにRISC-Vを学ぶ価値があると、本講座は考えています。本講座のLチカや、第5章で作るPicoRV32 SoCも、この壮大なスペクトルの入口に立っています。

命令セット(ISA)の詳しい使い方は、いつ学ぶ?add 命令はこう書く」「レジスタは32本」といったRISC-V命令セットの具体的な使い方は、CPUコア(PicoRV32)を実際に組み込む第5章以降で扱います。それは「できあがったCPUの動かし方」であり、その手前でまず必要なのは「CPUやLチカ回路という"物"を作る」ことだと、本講座は考えているからです。次章ではその最小部品 ― フリップフロップ ― から手を動かしていきます。

(5) 自分で作るなら ― IPの組み合わせという発想

では、CH32V003のようなマイコンを自分で設計するには? 答えは(2)のブロック図そのものです。CPUコア(=PicoRV32などのオープンIP)+ メモリ + バス + 周辺IP(GPIO/タイマ/通信) を組み合わせていけば、市販マイコンと同種のSoC(System on Chip)に近づきます。QingKeのような中身が非公開のコアは使えませんが、中身まで開かれたPicoRV32なら、自分の手で組み込める。これが「IPを組み合わせて、自分のチップを作る」という、この講座が目指す姿です。実際の統合は第5章で行います。

(6) まず最小の一歩から ― フリップフロップでLチカ専用チップを

とはいえ、いきなりCPU入りのSoC設計は厄介です。そこで本講座は、チップを構成する最小の部品の一つ「フリップフロップ(1ビットを記憶する基本素子)」から始めます。フリップフロップを24個並べれば「カウンタ」になり、その一番ゆっくり変化する桁をLEDにつなげば、点滅する ― つまりLチカ専用の小さなチップができます。

これからの道のり: フリップフロップ → カウンタ → Lチカ専用チップ(第3〜4章で設計・製造)→ そこにCPU(PicoRV32)と周辺を足して RISC-V SoC(第5章)→ CH32V003のような「自分のマイコン」へ。壮大なゴールへの第一歩が、次章のフリップフロップです。

正直な注意: 本講座で作れるのは、あくまでデジタル論理の部分を、オープンIPの組み合わせで設計する範囲です。QingKeコアを命令まで完全に再現(クローン)するわけではなく、またアナログ部分(ADCやオペアンプ)やFlashメモリの製造は、1.0.2で触れた「アナログ/トランジスタ設計」という別の専門領域になります。「マイコンの全部を一人で完全再現」ではなく、「デジタルの骨格を自分で組めるようになる」が現実的なゴールです。

では準備運動はここまで。「自分は黒い箱(IC)の中身を、オープンIPの組み合わせで作ろうとしている」という地図を手に、次の節から設計フロー(RTL記述 → 論理合成 → 物理設計 → 検証 → GDSII)の全体像を順に見ていきましょう。

1.1 フロントエンド(論理設計)とバックエンド(物理設計)

半導体設計フローは、大きく分けるとフロントエンド(論理設計・検証)と、バックエンド(物理設計・検証)の2つに大別されます。ソフトウェアで例えるなら、フロントエンドが「ソースコードの記述と単体テスト」、バックエンドが「コンパイル、最適化、および物理的なバイナリ生成」に相当します。

フロントエンド(論理設計・検証)

「何を計算する回路か」という人間の意図を記述し、それが正しく動くかを検証する工程です。ソフトウェアでいうソースコードの記述と単体テストに相当し、まだ「時間の遅延」や「物理的な大きさ」の概念はありません。
 → RTL記述・機能シミュレーション・論理合成が含まれます。

バックエンド(物理設計・検証)

論理をシリコン上の物理形状(セルの配置と金属配線)へ落とし込む工程です。ソフトウェアでいうコンパイル・最適化・バイナリ生成に相当し、ここで初めて遅延・面積・製造ルールが問題になります。
 → 物理設計(P&R)・物理検証・GDSII出力が含まれます。

1.2 各工程の完全ブレイクダウン

初学者がラボでの演習中に「今、ツールが何の処理をしているのか」と迷子にならないよう、すべての工程をここに整理しておきます。

  1. RTL記述(Register Transfer Level):
    半導体の機能を、レジスタ間のデータの流れと論理演算の組み合わせとして記述するフロントエンドの最初の工程です。主にVerilog HDLというハードウェア記述言語を使用します。見た目はC言語に似ていますが、すべての処理が「同時に、並列に動く物理回路」を表現している点が根本的に異なります。
  2. 機能シミュレーション(Functional Simulation):
    記述したRTLコードが、仕様通りに正しく論理動作するかを、時間を追って検証する工程です。オープンソースの高速シミュレータであるIcarus VerilogVerilatorを使用し、テストベンチ(入力信号を与えるコード)を組み合わせて動作を検証します。この段階ではまだ「時間の遅延(ディレイ)」や「物理的な大きさ・配置」の概念はありません。
  3. 論理合成(Logic Synthesis):
    RTLで書かれた抽象的な記述(例:Y = A + B)を、実際に製造工場(ファウンドリ)で用意されている具体的な基本部品の集まり(標準セル。ANDゲート、ORゲート、フリップフロップなど)の接続リスト(ネットリスト)へと自動変換する工程です。オープンソース界の標準合成ツールであるYosysがこの役割を担います。
  4. 物理設計(Place & Route:P&R):
    論理合成されたネットリストを受け取り、シリコン上の有限な四角い領域の中に配置し、それらを金属配線でつなぐバックエンドの中心工程です。OpenROADというツールが起動し、床配置(Floorplan)➔ セル配置(Placement)➔ クロックツリー合成(CTS)➔ 詳細配線(Routing)というサブステップを自律的に実行します。
  5. 物理検証(Physical Verification):
    配線が完了したレイアウトデータが、製造工場の物理的な限界ルールを破っていないかを厳格にチェックする最終防衛線です。配線の太さや間隔を調べる DRC(デザインルールチェック) と、レイアウトから逆抽出した回路図が元のネットリストと一致するかを調べる LVS の2つを、MagicNetgenというツールで実行します。
  6. GDSII出力 & Tapeout(テープアウト):
    すべての検証を完全にパスすると、最終的な物理レイアウトを表す2次元のバイナリデータ形式であるGDSII(ジーディーエスツー)ファイルが出力されます。このデータを工場に提出することをTapeout(テープアウト)と呼び、設計が「完成」したことを意味します。
🔍 詳しく知りたい方向け:各工程は「何を担当するツール」が動いているのか(早見表)

本章で登場するツール群が、フローのどの工程を担当しているのかを一覧にまとめます。LibreLaneは、これらを1本のスクリプトから順番に呼び出して束ねる「指揮者」の役割を担います。

 工程                          主な担当ツール          フロント / バックエンド
 ───────────────────────────────────────────────────────────────────
 RTL記述                        人間(Verilog HDL)      フロントエンド
 機能シミュレーション           Icarus Verilog / Verilator  フロントエンド
 論理合成(Synthesis)          Yosys                    フロントエンド
 物理設計(P&R)                OpenROAD                 バックエンド
 タイミング解析(STA)          OpenSTA                  バックエンド
 物理検証(DRC)                Magic                    バックエンド
 物理検証(LVS)                Netgen                   バックエンド
 ───────────────────────────────────────────────────────────────────
 全工程の統合・自動実行         LibreLane(Python基盤)  ── 全体を束ねる指揮者

つまり、私たちが普段意識するのは「LibreLaneにRTLと設定ファイルを渡す」ことだけで、内部では上表の各ツールが自動的にバトンを渡しながら最終データ(GDSII)まで仕上げてくれる、というのがこのフローの本質です。

1.3 LibreLane Classic Flow 制御・データフロー図

LibreLaneは、これら複雑な個別ツール(Yosys, OpenROAD, Magic, Netgen等)を手動で個別に動かすストレスを完全に無くし、ひとつのPython構成スクリプトからシーケンシャルに自動実行する統合オーケストレーターです。その制御構造を以下に示します。

   [ ユーザー入力 ]
    - Verilog RTL (.v)
    - 構成設定ファイル (info.yaml / config.json)
          │
          ▼
┌────────────────────────────────────────────────────────┐
│               LibreLane Framework                      │
│                                                        │
│  1. 論理合成 (Synthesis)                                │
│     [Input] RTL  ───( Yosys )───> [Output] Netlist     │
│                                                        │
│  2. 物理設計 (OpenROAD Physical Design)                 │
│     ├── Floorplan (ダイサイズ・I/Oピン固定)              │
│     ├── Placement (標準セルの自動最適化配置)             │
│     ├── CTS (クロックツリーバッファ挿入・スキュー最小化)   │
│     └── Routing (グローバル/ディテール自動配線)           │
│                                                        │
│  3. 物理検証 & サインオフ (Verification & Signoff)      │
│     ├── STA (OpenSTAによるタイミング・Slack検証)        │
│     ├── DRC (Magicによる製造規則ルールチェック)          │
│     └── LVS (Netgenによるネットリスト一致比較)           │
└────────────────────────────────────────────────────────┘
          │
          ▼
   [ 最終生成出力成果物 ]
    - GDSII (最終チップ製造用レイアウトデータ)
    - 各種ログ・レポート (runs/ フォルダ内への自動格納)