RISC-V SoC: ブロックからチップへ では、RISC-V コアを中心に本物のチップを作りました。lowRISC の Ibex demo system を 58 個のパッドがリング状に囲み、シリーズ 1 のコアがハードマクロとして入っています。そのチップはワイヤーボンドで、端に並んだパッドでパッケージとつながります。このシリーズでは、同じチップとボードのつなぎ方を変えます。端のパッドから、チップ表面のバンプへ。
パッドリングをなくし、IO セルをチップの中、それぞれのバンプの下に移し(エリア IO)、電源はコア全体に並ぶバンプから入れます。そしてフリップチップとワイヤーボンドチップを、面積、電源グリッド、IR ドロップ、IO タイミング、コアタイミングで比べます。その中の 1 つの数値は、見た目ほど確かではありませんでした。
この記事は 8 本の動画の記事版です。すべてのファイルは G2_demo_sky130 プロジェクトにあります。
| 出発点 | RISC-V SoC: ブロックからチップへ のワイヤーボンドチップ:1.8 mm のダイ、58 パッド、sky130 |
| 変更 | パッドリングなし:58 個のエリア IO セルをそれぞれのバンプの下に配置、コア上に 7 × 7 の電源バンプ |
| ツール | G2 上の OpenROAD、OpenRCX、OpenSTA と、代用の再配線層 |
| 面積 | 1 辺 1.8 → 1.5 mm:−31 % |
| タイミング | ホールドは満足。コア境界のセットアップは −1.61 ns(ワイヤーボンドは −1.45 ns)で、同じコアの予算 |
第 1 部:なぜ、何が必要か
#1なぜフリップチップか?
1:39YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
シリーズ 2 のチップは 1.8 mm 角で、1.3 mm のコアを 58 個のパッドが囲んでいます。パッドリングがダイの約半分を占めています。サイズを決めているのはロジックではなくパッドで、このチップはパッドリミットです。しかもコアの電流はすべて 2 つの電源パッドから入り、リングを回って届きます。

ワイヤーボンドのチップは、端のワイヤーでパッケージとつながります。フリップチップはチップを裏返して正面を下にし、はんだバンプの上に載せます。バンプと回路は再配線層(RDL)がつなぎます。やり方は 2 つあります。古いパッドリングの上にバンプを置く方法は、リングも面積もそのままです。もう 1 つは IO セルをチップの中、バンプの下に移す方法です。これがエリア IO で、今回作るものです。
#2メタル 5 の上の層
1:13YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
バンプはどこに置くのでしょうか。メタル 5 はチップの電源グリッドが使っています。メタル 4 はハードコアのものです。シリーズ 2 では、チップが最上層を持てるようにコアにメタル 5 を使わせませんでした。そのためバンプには、メタル 5 の上に専用の層が必要です。

小さなスクリプト gen_rdl_tech.py が、sky130 テクノロジー LEF のコピーにそれを追加します。メタル 5 から上へ向かう via5、rdl という厚さ 10 µm の層、その間のビアセル M5RDL です。元の sky130 ファイルには手を加えません。バンプは rdl 上の 60 µm の八角形で、ピンは 1 本です。新しい層には RC ファイルでの抵抗値も必要です。IR 解析は LEF ではなくここから抵抗を読むため、これがないと失敗します。OpenROAD が読み込むと 15 層になります。
#3エリア IO セル
1:03YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
シリーズ 2 の IO セルは 80 × 198 µm で、電源は両側の辺にある細いピンです。ほかの IO セルと並べてリングにしないと使えません。
そこで同じセルに 2 つ目の物理ビューを作ります。名前も信号ピンも同じなので、ネットリストとタイミングライブラリは変わりません。ただし、どこにでも置ける小さなブロックになります。50 × 40 µm で、バンプピンは rdl 上、コア電源はメタル 4 のレールで、チップの電源グリッドがほかのマクロと同じようにつなげます。

モデル化していないのは、3.3 V の IO 電源とパッドのアナログ部分です。本物のエリア IO ライブラリにはそれがありますが、これは代用品です。サインオフの抽出用に、バンプピンをメタル 2 のスタブに置いた版も生成します。
第 2 部:フリップチップのフロアプラン
#4パッドリングのないビルド
1:04YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
フリップチップは新しいビルド v02 で、ワイヤーボンドチップの隣に作ります。ネットリストも制約も同じです。設計変数が変わります。ダイは 1.8 mm から 1.5 mm に、代用のテクノロジー、バンプ、そしてリングセルの代わりにエリア IO セルです。すべてのステージがこれらの変数を読むようになったので、どのステージにも新しい層が見えます。
フロアプランには 2 つのフックが加わります。マクロ配置の前にエリア IO、電源グリッドの後にバンプです。パッドリングのスクリプトはなくなり、コアリングもパッドを探さなくなりました。init は数秒で終わり、ログには 15 層と新しい IO ビューが表示されます。
#5バンプの下の IO
1:33YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
各 IO セルをチップの中の端近くに、古いリングと同じ順番で置きます。バンプが収まるように、1 辺あたり 2 列を互い違いに並べます。そして各 IO セルのバンプピンの真上にバンプを置きます。重なっているのでつながっており、信号の配線は不要です。バンプは同じ列で 140 µm 間隔、列の間は 92 µm 以上です。
フロアプランは約 2 分です。ログでは 58 個の IO セルと 58 個の IO バンプが配置され、マクロプレーサーは 58 個の IO セルを固定マクロとして認識して避けて配置します。チップのマクロは 64 個で、そのうち 58 個が IO セル、ダイの幅は 1,500 µm です。


第 3 部:電源と IR ドロップ
#6電源バンプと IR ドロップ
2:05YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
電源バンプはコアの上に 7 × 7 の格子で並び、電源とグランドが交互です。それぞれの下にはビアアレイがあり、同じネットのメタル 5 ストラップへ下りています。電源バンプ 25 個、グランドバンプ 24 個、ビアは約 450 個です。
電源とグランドが本当のチップポートになったので、電源グリッドのチェックを両方で実行できます。どちらも完全につながっています。ワイヤーボンドチップには電源ポートがなかったため、このチェックすらできませんでした。
配置の時点で、25 個の電源バンプから解析した IR ドロップは平均で約 0.5 mV(0.475 mV)、最悪点で 3.13 mV です。ではワイヤーボンドチップは?ログには 64 µV とあります。その上の行が理由を示しています。電源ポートがないため、ツールがバンプパターンを勝手に作ったのです。この数値は最初から本物ではありませんでした。
そこで、ワイヤーボンドチップの電源が本当はどこから入るかをツールに伝えます。2 つのコア電源パッドです。パッドごとに 1 行で、コアリング上の位置、サイズ、電圧を指定します。同じ 2 か所を 2 通りにモデル化しました。
| ワイヤーボンドの電源入口 | 平均 | 最悪 |
|---|---|---|
| 各電源パッドに 10 µm の点 | 4.19 mV | 9.29 mV |
| パッドの辺全体(75 µm) | 0.45 mV | 2.18 mV |
| フリップチップ、電源バンプ 25 個 | 0.475 mV | 3.13 mV |
10 µm の点ならフリップチップは 9 倍良く見えます。パッドの辺全体にすると、その差は消えます。

つまりワイヤーボンドの数値は、主に電流の入口をどうモデル化したかを表しているだけです。パッド、リング、ボンディングワイヤーを通る本当の経路は、どちらのモデルにも入っていません。このチップの電力では、どちらでも 1.6 V のうち数 mV です。フリップチップが確実にもたらすのは、電源がダイ全体の 25 か所から入ることです。これは電力が増えても有効で、電源とグランドの両方をチェックできます。
第 4 部:配置、配線、サインオフ
#7配置、CTS、配線
1:21YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
クロックツリーと最初のホールド修正はシリーズ 2 と同じで、各ステージ 1 分以内です。練習ではこれでは足りませんでした。配線後、実際の配線によってデバッグモジュールのホールドが約 3 分の 1 ns 失われました(39 エンドポイントで −0.330 ns)。
そこで配線ステージにフックを加えます。グローバル配線の直後に、配線済みのワイヤーでタイミングを見積もってホールドを修正し、その後で詳細配線を行います。修正するのはホールドだけです。練習では、この時点でセットアップを修正すると出力パッドの誤った見積もりを追いかけ、詳細配線を壊してしまいました。
配線は約 13 分です。ログにはホールドのエンドポイント 97 個、バッファ 31 個とあり、最悪のホールドは −0.539 ns から +0.101 ns になりました。ポストルートは約 30 分、フィニッシュは 3 分で、DRC 違反が 8 個残ります。デモであってテープアウトではありません。フィニッシュで赤く表示される出力パッドの数値は、この段階のワイヤーボンドチップと同じで、サインオフでこれらの経路を正しく確認します。

#8サインオフと結論
2:17YouTube で見る(英語) ↗Bilibili で見る(中国語) ↗
サインオフは抽出から始まりますが、OpenRCX は代用の層でクラッシュしました。さらに悪いことに、ステージはエラー 0 と表示していました。これは G2 のバグリストに入っています。この設計では信号は RDL 層を一切通らないので、ダイだけを抽出します。メモリ上でバンプと RDL の図形を取り除き、元の sky130 のファイルで抽出します。バンプはパッケージモデルの範囲です。これで 4 コーナーの抽出は 1 分もかかりません。
OpenSTA はワイヤーボンドチップと同じスクリプトで、低速と高速のコーナーをそれぞれ約 15 秒で解析します。ホールドは満足。セットアップは 226 エンドポイントで 1.61 ns 足りず、デバッグモジュールのメモリへの経路です。シリーズ 2 と同じコア境界の経路です。
同じ IO パスのスクリプトを両方のチップで実行し、各ポートのスラックと、経路のうちコア内部の部分を出力します。入力はフリップチップのほうが約 2 ns 良くなりました。出力は 2〜2.5 ns 悪く、そのすべてがコアの内部、パッドセルの手前、つまりクロックとロジックの部分で、パッドではありません。原因はまだ切り分けていません。すべての IO パスには 10 ns 以上のスラックが残っています。

結論と、残っているもの
- 面積: 31 % 減、1 辺 1.8 mm から 1.5 mm へ。
- 電源グリッド: 電源とグランドの両方をチェックでき、電源はダイ全体の 25 か所から入る。
- IR ドロップ: この電力ではどちらでも数 mV。ワイヤーボンドの数値はモデル化の仕方で変わる。
- IO タイミング: すべての IO パスに 10 ns 以上のスラック。出力はコア内部で約 2 ns 遅い。
- コアタイミング: 以前と同じ予算。
このシリーズでやっていないこと:ビューは代用品で、DRC、LVS、GDS はありません。3.3 V の IO 電源はモデル化していません。バンプと RDL の寄生成分は抽出していません。コアのセットアップの課題は残ったままで、DRC 違反も 8 個残っています。
動画を見る、試してみる
- 動画: YouTube プレイリスト(英語)と Bilibili コレクション(中国語)。
- このシリーズの出発点となるワイヤーボンドチップ: RISC-V SoC: ブロックからチップへ。
- プロジェクト: G2_demo_sky130。G2 は無料の Community Edition で使えます。
- G2 や独自フローの実行に関するご質問: support@deepdataflow.com。ライセンスや協業について:sales@deepdataflow.com。
