このプロジェクトの目標は、FPGAの設計を普及させることです。
FPGAのテーマは徐々に人気を集めていますが、当然のことです。 実際、今では実際に、独自のデジタルマイクロ回路を作成する簡単な機会を得ました。 ナノファブと100万ドルは必要ありません。開発者のボード上のコンピューターとFPGAチップですべてを実行できます。 世界のチップメーカーの90%が独自の工場を持っていないことをご存知ですか? 彼らはFPGAで設計とテストを行い、サードパーティの製造業者に生産を発注します。
むかしむかし、マイクロコントローラのプログラミングはほとんど奇跡と見なされていました。 これで、Arduinoスカーフを購入し、高校生に「LEDの点滅」を教えることができます。
FPGAも手頃な技術であることを示したいと思います。

Marsローバーボードは、FPGA Alter EPM240T100C5 FPGAチップで最も簡単で安価な開発者キットです。 プロジェクト-オープンソース- 回路基板は当社のウェブサイトにあります。 さらに、当社の取締役会に基づいて完了した50以上のプロジェクトがすでに公開されています 。
次に、FPGAのプログラマーについて説明します。 FPGAの設計の学習は、マイクロコントローラーの学習よりもはるかに費用がかかると考えられています。 この意見の一部は、FPGAベンダーのプログラマーが非常に高価であるという事実によるものです。
現在、代替手段があります。 自分で簡単なUSBプログラマーを作成できます!
非常にシンプルなFTDI FT2232HLプログラマーを開発しました。 以下がその1つです。

これは、JTAGインターフェースを備えたUSBプログラマーです。 彼のスキームもサイトにありますので、あなたが望むならあなたはそれを自分で行うことができます:

私たち自身が書いたソフトウェアはSVF Playerです。 仕組みを簡単に説明します。
アルテラのQuartus II FPGAデザイン環境を使用すると、プロジェクトのコンパイル中に、POF、SOF、JAM、SVFなどのさまざまな形式でプログラマ向けのファイルを作成できます。 ザイリンクスISEデザイン環境では、SVFファイルを作成することもできます。
SVF形式のファイルは、プログラミングのためにJTAGインターフェイスを介してFPGAチップに転送する必要があるコマンドの説明を含む単純なテキストファイルです。 SVF(Serial Vector Format)ファイルは次のようになります。
!
FREQUENCY 10000000.00 HZ;
!
TRST ABSENT;
ENDDR IDLE;
ENDIR IRPAUSE;
STATE IDLE;
SIR 10 TDI (2CC);
RUNTEST IDLE 10003 TCK ENDSTATE IDLE;
!
!CHECKING SILICON ID
!
SIR 10 TDI (203);
RUNTEST 53 TCK;
SDR 13 TDI (0089);
SIR 10 TDI (205);
RUNTEST 53 TCK;
SDR 16 TDI (FFFF) TDO (8232) MASK (FFFF);
SDR 16 TDI (FFFF) TDO (2AA2);
SDR 16 TDI (FFFF) TDO (4A82);
SDR 16 TDI (FFFF) TDO (0C2C);
SDR 16 TDI (FFFF) TDO (0000);
!
!BULK ERASE
!
SIR 10 TDI (203);
RUNTEST 53 TCK;
SDR 13 TDI (0011);
SIR 10 TDI (2F2);
JTAGインターフェースの背後にあるチップには、FPGAチップのテストとプログラミングを制御する、いわゆるTAPコントローラーがあります。 TAPコントローラには、IR命令レジスタとDRデータレジスタの2つのレジスタがあります。
SVFファイルの主なコマンドは、命令レジスタへのデータ転送(SIRコマンド)とデータレジスタへの転送(SDRコマンド)です。
たとえば、 SIR 10 TDIコマンド(203)。 10ビットの数値0x203をIRレジスタに転送する必要があるとしています。 別の例: SDR 16 TDI(FFFF)TDO(2AA2); 16ビットの数値0xFFFFをDRレジスタに転送する必要があるが、それに応じて、マイクロサーキットは数値0x2aa2を送信する必要があると述べています。 もう1つの重要なチームはRUNTESTです。 これにより、プログラミング中の一定期間の一時停止に耐えることができます。 通常、一時停止は、IDLE、IRPAUSE、またはDRPAUSEコントローラーのTAP状態で維持されます。
SVFファイルからコマンドを正しく実行すると、FPGAチップを「縫い合わせる」ことができます。 これが、MBFDI SVFプレーヤープログラムの機能です。
JTAGチッププログラミングおよびテストインターフェイスには、データ転送用の4つの主要な信号のみがあります。TCK-クロック信号、TMS-送信制御信号、TDI信号-チップに送信されるデータ、TDO-チップから読み取られるデータ。 IRおよびDRコントローラーのTAPレジスターにデータを転送するには、このコントローラーの状態を制御する方法を理解する必要があります。 これを理解してみましょう。
実際、すべてが非常に簡単です。 TAPコントローラーの状態は、このようなステートマシンによって記述されます。

TAPコントローラは、TCK信号のパルス中に、TMS信号の値に応じて状態を変更します。
たとえば、TAPコントローラーを他の状態からRESET状態にリセットするには、少なくとも6 TCKパルスの間、TMSをユニット内に保持するだけで十分であることがわかります。 RESET状態からIDLEに切り替える場合は、TMSをゼロにして、少なくとも1つのTCKパルスを送信する必要があります。 IDLEから命令レジスタへのデータ転送の状態まで、TMSが1-1-0-0だけ変化するとき、SHIFT_IRはわずか4 TCKパルスです。
MBFTDIプログラマーでは、これらすべてのJTAGラインの管理が既に実装されているFTDI FT2232HLチップを使用します。 MBFTDI SVFプレーヤープログラムは、SVFファイルを読み取り、解釈し、JTAGラインを制御するFTDIチップにコマンドを送信します。 JTAG FTDIチップコマンドの説明はこちらです。
アルテラのMAX II、Cyclone II、Cyclone III、およびいくつかのザイリンクスチップを使用してプログラマをテスト済みです。
もちろん、プログラマはWindowsとLinuxの両方で動作します。
もちろん、 ソースコードは 、当社のWebサイトのダウンロードセクションまたはGITHUBで入手できます 。
私たちのプロジェクトhttp://marsohod.orgがFPGAの設計を素早く学ぶのに役立つことを願っています。