HN 日本語サマリー

← 一覧へ戻る
プログラミング

ASICのリバースエンジニアリング

Reverse Engineering an ASIC (kjartanvandriel.github.io)

23 pointsby burekqueen5 コメント

要約

この記事は、グラフィックデータシステム(GDS)ファイルとバリューチェンジダンプ(VCD)ファイルを使用して、ASIC(特定用途向け集積回路)のレイアウトと機能のリバースエンジニアリングを行うプロセスを解説しています。SkyWater 130nmプロセスを例に、レイヤー構造、トランジスタ、ロジックゲート、フリップフロップなどの要素を解析し、最終的に回路の動作をシミュレートする方法を示しています。

全文翻訳

2つのファイルウォームアップパズルを除く――これはぜひ試すべきです――パズルは2つのファイルのみで構成されています。puzzle.gdsとexample_inputs.vcdです。パズルはグラフィックデータシステム、またはGDSファイルを中心に展開します。例の入力は単純なテストケースとして用意されています。1つの入力と、チップがそれに対して生成すべき出力です。 レイヤーKLayoutのような専用プログラムでGDSファイルを開くと、その構造をすぐに確認できます。これはレイアウトを記述したもので、レイヤーによって示されるさまざまな種類のポリゴンが含まれています。また、注釈も含まれており、これらがファイル全体を最初に開いたときに混乱させる原因となります。 セルGDSファイル形式では、ポリゴンをセルにグループ化できます。このようなセルは一度定義すれば、何度も配置できます。通常、これらはレジスタ、計算ユニットなどを構成するロジックゲートを定義します。このような階層構造により、チップの設計がより管理しやすくなります。ただし、この階層構造は通常、Verilogでの高レベル記述の結果であり、最終的にこのレイアウトに変換されます。セルの境界線は、私たちが利用できる構造の一部を提供しますが、元のVerilogはありません。レイアウトのみGDSはレイアウトを定義しますが、それ自体ではそのレイアウトが実際に何を意味するのかについてはほとんど語りません。右側の図でさえ、レイヤーに色と厚みを既に付けたため、ある程度示唆的です。ファイルだけを見ても、どのレイヤーが金属で、どれがシリコンなのか、あるいは製造業者がそれをどのように動作するチップに変えるのかはわかりません。それらを理解するには、チップが設計された製造プロセスを知る必要があります。各プロセスには、レイヤー番号が何を意味するかの独自の規則があります。これらは、プロセスデザインキット(PDK)に、さまざまな材料の使用方法に関する規則とともに文書化されています。したがって、回路の多くを読む前に、どのプロセスを扱っているのかを見つける必要があります。 プロセスを見つける幸いなことに、ロジックセルの名前がかなり直接的な手がかりを与えてくれます。それらはsky130_fd_sc_hd__で始まっており、これはSkyWater 130nmプロセスの標準セルライブラリを識別します。標準セルライブラリとは、チップ設計者が各トランジスタを描画することなく使用できる、ロジックゲートやフリップフロップなどの既製のコンポーネントのコレクションです。このプロセスとライブラリのドキュメントは公開されているため、レイヤーの意味とセルの機能の両方を調べることができます。これは、ポリゴンからすべてを自分で把握するよりもはるかに便利です。 レイヤーそのドキュメントがあれば、レイヤーに名前を付け始めることができます。下の方にあるnwell、diff、polyはトランジスタの部品を定義します。これについては後ほど詳しく見ていきます。そのすぐ上にあるのはli1で、ローカルインターコネクトの略で、セル内のトランジスタを接続します。その上には、セルを配線し、チップ全体に信号を伝達するための5つの金属レイヤー、met1からmet5があります。複数のレイヤーがあるため、ワイヤーが接触せずに交差できます。あるレイヤーのワイヤーを次のレイヤーのワイヤーに接続するには、その間にある絶縁材料、ビアを介した接続が必要です。cutレイヤー、/44で終わるものは、これらの接続がどこに行くかを指定します。この区別は、ワイヤーをたどろうとするときに重要になります。2つのポリゴンは、電気的に接続されていないトップダウンビューで重なる可能性があるため、形状だけでなくレイヤーも追跡する必要があります。レイヤーを横断した断面図。構造をわかりやすくするために、厚みと間隔が調整されています。スケールは正確ではありません。 入出力ファイルには、一部のレイヤーにテキストラベルも含まれています。トップレベルでは、これらはチップの入力と出力を名付けているため、どのように対話するべきかについてのアイデアをすでに得ることができます。左側にはクロックのclk、それに加えてrst_n、enable、Iがあります。右側には8ビットのOと個別のsuccess出力があります。パズルは、successをハイにする入力を見つけるように求めています。その入力が何であるかはまだわかりませんが、どこに送信し、どこで結果を確認するかは少なくともわかっています。 セルのピンセルにズームインすると、別のラベルセットが見つかります。これらは、セルの独自の入出力が周囲の配線にどこで接続されているかを示します。見ているセルはXORゲートで、2つの入力AとB、および1つの出力Xがあります。また、VPWRとVGND、つまり電源とグラウンド接続もあります。これらはセルの上部と下部を走り、隣接するセルが共有できるようにします。ラベル自体は単なる注釈です。接続を形成するのは、各ラベルの下にある導電性材料です。後で、これらの位置を使用して、ゲートがどのように配線されているかを把握できます。 トランジスタ私たちが調べてきたロジックゲートはトランジスタから作られています。私たちの目的のために、トランジスタを電気的に制御されるスイッチと考えることができます。1つの端子(ゲートと呼ばれる)の電圧が、他の2つ(ソースとドレイン)間の電流の流れを決定します。レイアウトでは、シリコン領域を横切るポリシリコンのストリップとして認識できます。ポリシリコンはゲートを形成し、その下のシリコンとは薄い絶縁層で隔てられています。その両側の拡散領域がソースとドレインを形成します。したがって、これらの形状は描画で重なっていても、ゲートはそれ自体が下の材料に直接接続されていません。 p基板n+ソースn+ドレイン枯渇領域ポリゲート酸化膜ソースドレインチャネルゲートの電圧は酸化膜の下にチャネルを引き寄せ、電流がソースからドレインに流れます。トランジスタの断面図:ゲートは薄い絶縁層の上にあり、ソースとドレインはその両側にあります。これらのセルには2種類のトランジスタがあります。nMOSとpMOSです。大まかに言えば、nMOSはゲートが高いときに導通し、pMOSはゲートが低いときに導通します。これもまた単純化ですが、ここでどのように使用されているかを追跡するには十分です。この2つを組み合わせることで、入力に応じて出力が電源またはグラウンドに接続される回路を作成できます。 ゲートソースドレインnMOS:ゲートが高いときに導通するゲートソースドレインpMOS:ゲートが低いときに導通するnMOSとpMOSトランジスタのシンボル。pMOSゲートの小さな円は、ゲートが低いときに導通することを示しています。右側の例は、セルから1つのトランジスタを抜き出しています。これは、GDSの形状が何を表しているかを理解するのに役立ちます。ただし、分析のために、それらを形成するロジックゲートで作業できます。 XORゲートXORゲートは単純な例です。2つの入力AとB、および1つの出力Xがあります。入力が異なれば、出力は1です。同じであれば、出力は0です。内部でどのように実装されているかに関わらず、セル全体をこの1つの操作として扱うことができます。レイアウトでは、ラベルA、B、Xがli1上の入出力接続を示しています。したがって、ゲートが何をするか、そしてどこに接続されるかを知っています。2つの入力ワイヤの値が与えられれば、出力ワイヤの値を計算し、それが接続されているどのゲートにも渡すことができます。これらのセルを使用してチップをシミュレートする方法です。XOR回路図、右側のワイヤの色と一致する薄いレイアウトコピーの上に表示されています。 フリップフロップほとんどのセルは多かれ少なかれ直接的です。その出力は、現在入力にあるものすべてのある関数です。フリップフロップは少し異なり、回路が値を記憶できるようにします。データ入力D、出力Q、そして重要なことにクロック入力CLKがあります。クロックがローからハイに変わるエッジで、Dにある値がQの新しい値になり、それ以降は次の立ち上がりエッジまで、その間にDに何が起こってもそこに保持されます。クロック、データ、および保存されたビット。Qは、CLKの立ち上がりエッジでのみDの値を取り、次のエッジまで保持します。これは多くのニュアンスを無視しています。実際のフリップフロップにはセットアップ時間とホールド時間があり、クロックはすべての場所に正確に同時に到着するわけではなく、これらの遷移のいずれも...