FPGAが「プログラム」されるとどうなりますか?


13

私が理解していることから、FPGAのプログラミングプロセスは2つの部分に分かれています。

  1. ハードウェア記述をFPGAが理解できるビットにエンコードします(つまり、HDLを記述してコンパイルします)
  2. コンパイルされたHDLをFPGAにロードします。

私の質問は、「コンパイルされたHDLでFPGAは何をしますか?」です。現時点では、FPGAは「成形可能なハードウェア」であり、ワイヤとロジックゲートを任意の形状に成形できます。良い点の1つは、成形性が永続的であることです。FPGAを再プログラムできます。

FPGAはコンパイルされたHDLをどのように解釈しますか?永久成形性はどのように達成されますか?


4
実際には永続的ではありません-電源が投入されるたびにFPGAビットストリームをEEPROMからリロードする必要があります。CPLDにはこの問題はありません。また、一部のFPGAには、パワーアップごとにビットストリームをロードするEEPROMが組み込まれています。
AngryEE

2
彼は「成形性は永続的」、つまりプログラム自体が永続的ではないことを意味すると思います。
ajs410

回答:


23

他の質問から判断すると、あなたはザイリンクスの男です。したがって、ザイリンクスチップのデータシートを入手して、機能説明の章に進むことを強くお勧めします。私が使用しているSpartan 3チップについては、42ページの楽しい読書です。IOB、CLB、スライス、LUT、ブロックRAM、乗算器、デジタルクロックマネージャー、クロックネットワーク、インターコネクト、およびいくつかの非常に基本的な構成情報など、FPGA内のコンポーネントを正確に詳述します。「コンパイルされたHDL」がどのようなものかを知りたい場合は、この情報を理解する必要があります。

FPGAのアーキテクチャに慣れたら、このプロセスを理解できます。まず、HDLデザインが合成エンジンを介して実行され、HDLが基本的にRTLになります。次に、マッパーは合成の結果を処理し、FPGAアーキテクチャの利用可能な部分に「マッピング」します。次に、ルーターは配置配線(PAR)を実行し、これらの部品がどこに行き、どのように接続するかを計算します。最後に、PARからの結果がBITファイルに変換されます。通常、このBITファイルは何らかの方法で変換され、フラッシュチップにロードできるため、電源投入時にFPGAを自動的にプログラムできます。

このビットファイルには、FPGAプログラム全体が記述されています。たとえば、Spartan 3のCLBはスライスで構成されており、スライスはLUTで構成されています。LUTは16アドレス1ビットSRAMのみです。したがって、BITファイルには、SRAMの各アドレスに送られるデータが正確に含まれます。BITファイルに含まれるもう1つのことは、LUTの各入力が接続マトリックスにどのように配線されるかです。BITファイルには、ブロックRAM内の初期値も含まれます。各スライスの各フリップフロップのセットピンとリセットピンに接続されているものについて説明します。キャリーチェーンの接続方法について説明します。各IOB(LVTTL、LVCMOS、LVDSなど)のロジックインターフェイスについて説明します。統合されたプルアップ抵抗またはプルダウン抵抗について説明します。基本的に、すべて。

ザイリンクスの場合、コンフィギュレーションが開始されると(つまり、PROG_Bがアサートされると)FPGAのメモリがクリアされます。メモリがクリアされると、INIT_BがHighになり、フェーズが完了したことを示します。次に、JTAGまたはフラッシュチップインターフェイスを介して、BITファイルがロードされます。プログラムがロードされると、グローバルセット/リセット(GSR)がパルス化され、すべてのフリップフロップが初期状態にリセットされます。次に、DONEピンがHighになり、構成が完了したことを示します。ちょうど1クロックサイクル後、グローバルトライステート信号(GTS)がリリースされ、出力を駆動できるようになります。ちょうど1クロックサイクル後、グローバルライトイネーブル(GWE)がリリースされ、フリップフロップが入力に応じて状態の変化を開始できるようになります。この最終構成プロセスでも、BITファイルで設定されているフラグに応じて、わずかに並べ替えることができます。

編集:

また、FPGAプログラムが永続的ではない理由は、ロジックファブリックが揮発性メモリ(SRAMなど)で構成されているためであることも付け加える必要があります。そのため、FPGAの電源が切れると、プログラムは忘れられます。FPGAプログラムの不揮発性ストレージとして、たとえばフラッシュチップが必要な理由は、デバイスの電源を入れるたびにロードできるようにするためです。


6

HDLをコンパイルすると、FPGA内のどの接続をアクティブにする必要があるかを示すビットパターンが生成されます。FPGAはもはやHDLを解釈する必要がありません。ビットパターンはシリアルローダーフラッシュ/ EEPROMにプログラムされ、このパターンは起動時にFPGAにシフトされ、必要な接続を行います。


1
合成とは、3つのフレーズを意味します。1.ネットリスト生成2.ゲートレベルの最適化3.テクノロジーマッピング。
標準Sandun

4

コンパイルの結果は、電源投入後に読み込まれるビットストリーム(文字通りビットのストリーム)です。これは、一部のメモリセル(ラッチ)に格納されているFPGAをシフトします。これらのセルは、さまざまな論理エンティティ、マルチプレクサ、ルックアップテーブル、RAMブロック、ルーティングマトリックスに接続され、「構成」と呼ばれるものを構成します。ビットストリームがロードされると、FPGAが動作を開始します-コンフィギュレーションラッチ内のビットは、FPGAの各小片の動作方法を「伝えます」。

編集2012年4月24日:私が言及したフリップフロップは、ルックアップテーブルまたはそれらの構成用ではありません。@ ajs410が言ったように、それらはRAMにあり、トランジスタはさらに少ないです。フリップフロップは、そのストレージが有効になっている場合、LUTからのデータを保存するためのものです。


典型的なFPGAの回路のどのくらいが実際のロジックとルーティングであり、プログラミングサポートはどのくらいですか?
-supercat

技術的には、「メモリセル」はフリップフロップであり、ラッチではありません。つまり、エッジトリガーです。
ブライアンカールトン

@BrianCarlton:フリップフロップはすべてのプログラムストレージセルに本当に使用されていますか?私の理解では、フリップフロップにはビットごとに12〜16個のMOSFETが必要です。対照的に、データをラッチするための他の完全に静的な手法では、5〜8のみが必要です。
-supercat

1
LUTは通常、SRAMで作成されます。フリップフロップはSRAMの出力に接続されています。
ajs410

1
@supercat:FPGAの90%がルーティングされていると聞きました...残りはロジックと構成です-すぐに参照を見つけることができません:(
マーティントンプソン

1

標準用語は、FPGAの「プログラミング」ではなく「構成」です。FPGAは通常、SRAMベースのデバイスです。SRAMは、デバイスの「ロジックファブリック」内でどの接続が形成および切断されたかを示すビットを格納します。コンフィギュレーションが発生すると、ビットストリームがFPGAに送信され、FPGAがこのSRAMに書き込みます。SRAMベースのFPGAが切り替えられると、オフのSRAMデータが消去され、FPGAがオンになると、再度設定する必要があります。

これを知って、それらは「構成」するためのさまざまな方法とFPGAであるため、この「ビットストリーム」を含むファイルのさまざまな形式が存在します。結局のところ、これらのファイルの構造とFPGAがどのように正確に構成されているかの詳細は、製造業者に独占されており、この情報は決して共有されません。ただし、一般的な原則はFPGA全体で同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.