腑に落ちる。
JA
命令ではなく、ハードウェア。
同じ入力が、独立した論理セルへ届く様子をたどります。
3D表示にフォーカス中 · A–Dで入力 · スペースでクロック · Rでリセット · Lでラベル · 1–6で章 · Escで解除
3D表示を利用できません
論理の操作、真理値表、波形エンジンは引き続き利用できます。
5分間の実験から始めよう
全加算器でA、B、Cを切り替えてみましょう。SUMはそれらのパリティで、CARRYは2つ以上が1のときに1になります。クロックは必要ありません。LUTの内部を開くと、入力がどの記憶ビットを選ぶかがわかります。メモリのビットを変えてみてください。それはデータ入力の変更ではなく、回路の再構成です。
次に2段パイプラインを読み込み、1ビットを記憶を開いて、クロックパルスを送ります。2つのレジスタは同じエッジでそれぞれのDをサンプリングします。2段目のレジスタが取り込むのは1段目のレジスタの直前の出力であり、そのエッジで生まれたばかりの値ではありません。CEをオフにすると状態を保持します。SRSTは同期式で、CEより優先されます。
LUTが本当に意味すること
4入力LUTのアドレスはI0 + 2·I1 + 4·I2 + 8·I3です。記憶ビットは16個あります。INIT[address]が組み合わせ回路としての結果です。表示される16→8→4→2→1のツリーは、2入力マルチプレクサ15個からなる論理的に等価なネットワークです。I0は2つ1組の中から選び、I1、I2、I3は順に大きなグループを選びます。この説明は、特定のトランジスタレイアウトを示すものではありません。ツリーは到着したLUT入力が意味する選択を表示しますが、内部のゲートを1つずつ遅延シミュレーションしているわけではありません。Fは、まとめて620 psのLUT遅延の後に更新されます。
たとえば、0x6666はI0 XOR I1を、0x9696は3入力のパリティを、0xE8E8は3入力の多数決関数を実装します。関数がI3を使わない場合、上位8エントリは下位8エントリの繰り返しになります。データ入力が変わっても、LUTのメモリ内容は変わりません。
構成できるもの、できないもの
構成が決めるのは、LUTのビット、入力の信号源、そしてセルが外に出す出力をFにするかレジスタのQにするかです。マルチプレクサと金属配線は製造されたチップにすでに存在し、構成はその振る舞いを選ぶだけです。配線の顕微鏡表示では、これを接続先ごとに選ばれた1つの信号源として抽象化しています。実際のデバイスにあるのは万能のクロスバーではなく、ファミリーごとに異なる有限のトラック、スイッチの接続性、配線の制約です。
このラボの16個のセルは、それぞれLUT4を1個と、オプションの立ち上がりエッジ型DFFを1個持ちます。実際の構成可能論理ブロックは通常、複数の論理エレメントをまとめたもので、その名称、LUTのサイズ、パッキングや共有の規則はファミリーごとに異なります。より大きなLUTや、分割して使えるLUTを採用するFPGAもあります。FPGAの構成技術もさまざまで、すべてのFPGAが揮発性のSRAMで構成を保持すると考えてはいけません。
デジタルエンジン
エンジンは、整数のピコ秒、キューに入れた信号イベント、配線上のトランスポート遅延、LUTの慣性遅延を使います。定数以外の配線遅延は260 ps + 140 ps × Manhattan hops + added route delay、つまり260 psに、マンハッタン距離でのホップ数1つにつき140 psと、追加の配線遅延を加えた値です。定数に固定した入力の配線遅延は、モデル上ゼロです。LUT遅延は620 ps、クロック→Qは220 ps、セットアップとホールドはそれぞれ200 psと120 psです。これらは説明用の数値であり、特定のチップの仕様ではありません。
共通の理想的な立ち上がりエッジでは、どのQが変化するよりも前に、すべてのD入力がサンプリングされます。そのため、カウンターのフィードバックは同期的に動作します。組み合わせ回路だけのフィードバックループは拒否されます。Xは、デジタル値が保証されないことを意味します。LUT入力が不定でも、該当する表のエントリがすべて一致する場合に限り、結果は確定します。セットアップ/ホールド違反は、保守的に不定状態を生じさせます。エンジンは、アナログのメタスタビリティ電圧や、その確率的な解消を予測しません。
クロックパルスは、現在の状態がセットアップ時間を確保した後の、12 ns刻みのクロックグリッドの境界に、完全なパルスを1つ予約します。ユーザー操作の合間の何も起きない境界は、省略されることがあります。これは連続して動く発振器ではなく、対話的なテストベンチです。クロック実行は、そうしたパルスを繰り返し予約します。次のイベントは自動伝搬を一時停止し、シミュレーションのタイムスタンプを1つ進めます。波形計器とVCDの書き出しに含まれるのは実際に記録されたモデルの状態であり、例示用の正弦波ではありません。表示には、イベント時刻のスナップショットが最大4,000個まで、古いものから順に入れ替わる履歴として保持されます。
タイミングは、明示的で独立したワークシート
タイミングの章は、動作中の回路やその波形を変更しません。仮想的なレジスタ間パスを、例示的な最小/最大コーナーで検査します。セットアップには最も遅い到着時刻を使います:tCQ(max) + route(max) + N·tLUT(max)。その期限はT + capture−launch skew − uncertainty − setup、つまり周期に取り込み側と送り出し側のスキューを加え、不確かさとセットアップ時間を引いた値です。ホールドには最も早い到着時刻を使い、それがcapture−launch skew + uncertainty + holdを上回ることを求めます。取り込み側の正のスキューは、セットアップには有利に、ホールドには不利に働きます。クロック周波数を下げるだけでは、同一エッジのホールド違反は解消しません。
ワークシートでは、tCQの最大/最小 = 0.22/0.10 ns、tLUTの最大/最小 = 0.62/0.18 nsを使います。保守的な0.10 nsの不確かさのマージンを、各検査に個別に適用します。表示されるセットアップのみで見た周波数上限は、設計全体のタイミングを保証するものではありません。ワークシートは、クロックの再収束、タイミング例外、マルチサイクルパス、複数クロックの解析、ベンダーのタイミングコーナーを扱いません。
構成と小さなコンパイラー
論理式マッパーが受け付けるのは、最大4つの変数と、NOT、AND、XOR、OR、括弧です。式を解析し、16通りすべてを評価して、その関数をLUT4 1個に厳密にマッピングします。割り当て先は、教育用に固定したセルと4つの入力接続です。任意のVerilogの論理合成、実際の配線混雑の解決、タイミング駆動の配置、ベンダーのビットストリーム生成は行いません。生成されるRTLは、同期リセットとノンブロッキング代入によるレジスタ記述を含め、現在構成されているラボのネットリストを記述します。FPGAでレジスタの初期値がサポートされるかどうかは、ターゲットとツールによって異なります。
ワードの書き込み、配線の変更、レジスタ出力/バイパス出力の選択は、モデル全体の再構成として扱われます。クロックは停止し、実行状態と波形の履歴は初期化され、Qは0になり、選んだ外部入力のレベルは保持されます。これは動作中の部分再構成のシミュレーションではありません。JSONのプロジェクトファイルに保存されるのは回路と外部入力であり、アナログな状態や過渡的な実行時の状態は保存されません。
専用ハードウェアとモデルの限界
BRAMとDSPの列は、アーキテクチャを示すための背景です。調べることはできますが、用意された論理ネットリストではインスタンス化されていません。実際の多くのアーキテクチャでは、専用のキャリーチェーンが算術演算を高速化します。ここでの加算器とカウンターは、論理の仕組みを見せるために意図的にLUTの論理を使っており、最適化されたキャリーチェーンへのマッピングを主張するものではありません。
トランジスタの振る舞い、電力、発熱、シグナルインテグリティ、アナログのメタスタビリティ、電気的なI/O規格、クロックツリーの詳細なスキュー、SRAMのビット反転(アップセット)の確率、デバイスのスピードグレード、メーカーのピン配置は、いずれもモデル化していません。層の間隔、パッケージ風のパッド、寸法は例示です。このJavaScriptシミュレーターを動かすことは、FPGAを動かすことではありません。記載したデジタルの意味論を、ソフトウェアで再現しているのです。
操作とアクセシビリティ
ドラッグで回転、Shift+ドラッグまたは右ドラッグでパン、ピンチでズームします。上面を選ぶと、正投影の平面図になります。論理セル、LUTのビット、配線の交点をクリックできます。編集できる回路パラメーターは、すべて通常のフォーム操作でも変更できます。3D表示にフォーカスがある間は、スクロールでズーム、矢印キーで回転、A–Dで外部入力の切り替え、スペースでクロックパルスの予約、Rで実行状態のリセット、1–6で章の切り替え、Lでラベルの切り替え、?でこのガイドの表示、Escで表示の解除ができます。このラボはネイティブのWebGL 2を使い、すべての信号をこのブラウザー内で計算します。
主要な技術資料
アーキテクチャの概念とタイミングの式は、以下の資料で確認しています。外部リンクは新しいタブで開きます。
専用メモリがある理由
LUTは小さな真理値表を記憶し、FPGAによってはLUTを分散メモリとして構成することもできます。より大きなバッファ、FIFO、テーブルは、専用のブロックRAMを使うほうが効率よく実装できます。実際のブロックには、それぞれ決まった容量、データ幅、ポートモード、書き込みイネーブル、読み出しタイミング、書き込み中の読み出し動作があります。
ビットの別の役割
このラボでは、LUTのINITビットが論理関数を定義します。動作中のメモリ設計では、アドレス、データ、書き込みイネーブルがユーザーデータにアクセスします。これら2つの使い方を、RAMの動作モードを選んだりポートを配線したりする構成ビットと混同してはいけません。
琥珀色のLUTセルを選ぶと、シミュレーションされたデータパスに戻ります。この視覚モデルが、BRAMのレイテンシ、デュアルポートでの衝突時の動作、記憶されたユーザーデータを架空に作り出すことはありません。
乗算器が多くのLUTを消費するとは限らない
多くのFPGAファミリーは、乗算や積和演算などのための専用演算ブロックを備えています。そこには、パイプラインレジスタ、加算器、オペランド選択用のマルチプレクサ、カスケード接続が含まれることがあります。データ幅、符号の有無、対応する演算、タイミングはデバイスごとに異なります。
HDLから適切なリソースへ
ターゲット、オペランドの幅、合成設定が許せば、論理合成ツールは算術演算のRTLからDSPブロックを推論することがあります。一方で、小さな関数はLUTで実装することもあります。ハードウェアリソースが多いほど多くの処理を同時に動かせますが、そのスループットとレイテンシは、クロック、パイプライン化、データの移動に左右されます。
この学習ラボは、LUTによる小さな関数を意図的に見せています。模式的なDSPの列が、ベンダーの演算プリミティブをシミュレーションしたものだと主張するものではありません。
構成したLUTのワード、配線、レジスタの選択、外部入力のレベルを保存します。波形と一時的なレジスタの状態は、構成ファイルには含まれません。
持ち運べる構成
FABRIC形式の、読みやすく検証済みのJSONファイルです。ベンダーのビットストリームではありません。
ブラウザー内のチェックポイント
このブラウザーにのみ保存されます。利用できるかどうかは、ブラウザーのストレージポリシーによります。
記録された信号の動き
現在のイベント時刻のトレースを、標準のValue Change Dump形式(タイムスケール1 ps)で書き出します。
読めるハードウェア記述
書き込み前の論理式の下書きではなく、実際に書き込まれたネットリストから生成します。
今号の展示
購読者は新しい展示を公開日に開けます。無料のDigiSimアカウントでは{memberDate}から、アカウントなしの場合は{anonymousDate}に公開されます。
サインインまたは登録プランを見る展示を利用できません。再生を一時停止しました。再読み込みしてお試しください。